Example usage for org.eclipse.jdt.core Signature getTypeErasure

List of usage examples for org.eclipse.jdt.core Signature getTypeErasure

Introduction

In this page you can find the example usage for org.eclipse.jdt.core Signature getTypeErasure.

Prototype

public static String getTypeErasure(String parameterizedTypeSignature) throws IllegalArgumentException 

Source Link

Document

Extracts the type erasure signature from the given parameterized type signature.

Usage

From source file:at.bestsolution.efxclipse.tooling.fxgraph.ui.contentassist.FXGraphProposalProvider.java

License:Open Source License

private void collectStaticFields(List<IField> fields, IType type) throws JavaModelException {
    //FIXME Don't we have to check if the field is assignable???
    for (IField f : type.getFields()) {
        if (Flags.isStatic(f.getFlags())) {
            fields.add(f);// ww  w.  j  av  a2s. c  o m
        }
    }

    String s = type.getSuperclassName();

    if (s != null) {
        String fqn = at.bestsolution.efxclipse.tooling.model.internal.utils.Util.getFQNType(type,
                Signature.getTypeErasure(s));
        collectStaticFields(fields, type.getJavaProject().findType(fqn));
    }
}

From source file:at.bestsolution.efxclipse.tooling.jdt.ui.internal.FXBeanJavaCompletionProposalComputer.java

License:Open Source License

private IType toType(IType t, String typeSig) throws JavaModelException {
    String erasedType = Signature.getTypeErasure(Signature.toString(typeSig));
    String[][] types = t.resolveType(erasedType);
    if (types != null && types.length == 1) {
        StringBuilder b = new StringBuilder();
        for (String p : types[0]) {
            if (b.length() > 0) {
                b.append(".");
            }//from   w w  w. j a va2s  .  c om
            b.append(p);
        }
        return t.getJavaProject().findType(b.toString());
    }
    return null;
}

From source file:at.bestsolution.efxclipse.tooling.model.internal.FXClass.java

License:Open Source License

public FXClass(IJavaProject jp, IType type) {
    this.type = type;
    this.javaProject = jp;

    try {//from   w  ww  . j a  v  a 2  s. c  om
        String s = type.getSuperclassName();

        if (s != null) {
            s = getFQNType(type, Signature.getTypeErasure(s));
            superClass = FXPlugin.getClassmodel().findClass(jp, jp.findType(s));
        }
    } catch (JavaModelException e) {
        FXPlugin.getLogger().log(LogService.LOG_ERROR,
                "Unable to retrieve superclass name of '" + type.getFullyQualifiedName() + "'", e);
    }
}

From source file:at.bestsolution.efxclipse.tooling.model.internal.FXCollectionProperty.java

License:Open Source License

@Override
public IType getElementType() {
    if (elementType == null) {
        try {//ww  w  .  j  a va2  s. c  o m
            IMethod m = (IMethod) getJavaElement();
            String signature;

            if (isSetable()) {
                signature = m.getParameterTypes()[0];
            } else {
                signature = m.getReturnType();
            }

            //TODO if the value is a generic parameter we need to resolve it
            //using the class' generic parameter
            String genericType = Signature.toString(signature);

            String eType;
            if (genericType.contains("extends")) {
                eType = genericType.substring(genericType.indexOf("extends") + "extends".length(),
                        genericType.indexOf('>'));
            } else if (genericType.contains("super")) {
                eType = genericType.substring(genericType.indexOf("super") + "super".length(),
                        genericType.indexOf('>'));
            } else {
                eType = genericType.substring(genericType.indexOf('<') + 1, genericType.lastIndexOf('>'));
                eType = Signature.getTypeErasure(eType);
            }

            eType = eType.trim();

            IType t = (IType) m.getParent();
            String fqnType = Util.getFQNType(t, eType);
            if (fqnType == null) {
                return null;
            }
            elementType = getFXClass().getJavaProject().findType(fqnType);
        } catch (JavaModelException e) {
            // TODO Auto-generated method stub
            e.printStackTrace();
        }
    }

    return elementType;
}

From source file:at.bestsolution.efxclipse.tooling.model.internal.FXCtrlClass.java

License:Open Source License

private Map<String, IFXCtrlEventMethod> getLocalEventMethods() {
    if (eventMethods == null) {
        eventMethods = new HashMap<String, IFXCtrlEventMethod>();
        try {//from  ww  w  .  ja  v  a  2 s .  com
            for (IMethod m : type.getMethods()) {
                boolean annotated = false;
                for (IAnnotation a : m.getAnnotations()) {
                    if (a.getElementName().endsWith("FXML")) {
                        annotated = true;
                        break;
                    }
                }

                if (annotated) {
                    String[] types = m.getParameterTypes();
                    if (types.length <= 1) {
                        if (types.length == 1) {
                            String erasedFQNType = Util.getFQNType((IType) m.getParent(),
                                    Signature.getTypeErasure(Signature.toString(types[0])));
                            if (FXCtrlEventMethod.isEventMethod(javaProject, erasedFQNType)) {
                                eventMethods.put(m.getElementName(),
                                        new FXCtrlEventMethod(this, m, erasedFQNType));
                            }
                        } else {
                            // Only if there's not already a method with the same id
                            if (!eventMethods.containsKey(m.getElementName())) {
                                eventMethods.put(m.getElementName(), new FXCtrlEventMethod(this, m, null));
                            }
                        }
                    }
                }

            }
        } catch (JavaModelException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    return eventMethods;
}

From source file:at.bestsolution.efxclipse.tooling.model.internal.FXCtrlClass.java

License:Open Source License

private Map<String, IFXCtrlField> getLocalFields() {
    if (fields == null) {
        fields = new HashMap<String, IFXCtrlField>();
        try {//from  w  ww.j  a  va  2  s.c o m
            for (IField f : type.getFields()) {
                boolean annotated = false;
                for (IAnnotation a : f.getAnnotations()) {
                    if (a.getElementName().endsWith("FXML")) {
                        annotated = true;
                        break;
                    }
                }

                if (annotated) {
                    String erasedFQNType = Util.getFQNType((IType) f.getParent(),
                            Signature.getTypeErasure(Signature.toString(f.getTypeSignature())));
                    FXCtrlField field = new FXCtrlField(this, f, erasedFQNType);
                    fields.put(f.getElementName(), field);
                }
            }
        } catch (JavaModelException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    return fields;
}

From source file:at.bestsolution.efxclipse.tooling.model.internal.utils.PropertiesUtil.java

License:Open Source License

private static FXProperty getProperty(FXClass fxClass, String name, IMethod m) throws JavaModelException {
    FXProperty p = null;/*from   w w  w . j a  v  a  2 s. c o  m*/

    String signature;

    if (m.getElementName().startsWith("get") || m.getElementName().startsWith("is")) {
        signature = m.getReturnType();
    } else {
        // setter or builder method
        signature = m.getParameterTypes()[0];
    }

    String genericType = Signature.toString(signature);

    if (FXPrimitiveProperty.isPrimitive(genericType)) {
        p = new FXPrimitiveProperty(fxClass, name, m, Type.parseType(genericType), false);
    } else {
        String erasedFQNType = Util.getFQNType((IType) m.getParent(), Signature.getTypeErasure(genericType));
        if (erasedFQNType != null) {
            if (FXEventHandlerProperty.isEventHandler(fxClass.getJavaProject(), erasedFQNType)) {
                p = new FXEventHandlerProperty(fxClass, name, m, false);
            } else if (FXCollectionProperty.isList(fxClass.getJavaProject(), erasedFQNType)) {
                p = new FXCollectionProperty(fxClass, name, m, erasedFQNType, genericType, false);
            } else if (FXMapProperty.isMap(fxClass.getJavaProject(), erasedFQNType)) {
                p = new FXMapProperty(fxClass, name, m, false);
            } else if (FXEnumProperty.isEnum(fxClass.getJavaProject(), erasedFQNType)) {
                p = new FXEnumProperty(fxClass, name, m, erasedFQNType, false);
            } else {
                p = new FXObjectPoperty(fxClass, name, m, erasedFQNType, false);
            }
        }
    }

    return p;
}

From source file:at.bestsolution.efxclipse.tooling.model.internal.utils.PropertiesUtil.java

License:Open Source License

public static Map<String, IFXProperty> resolveStaticProperties(FXClass fxClass) throws JavaModelException {
    Map<String, IFXProperty> rv = new HashMap<String, IFXProperty>();

    if ("java.lang.Object".equals(fxClass.getFQN())) {
        return rv;
    }//from w w  w  . j a v a 2 s.c  om

    for (IMethod m : fxClass.getType().getMethods()) {
        if (!Flags.isPublic(m.getFlags()) || !Flags.isStatic(m.getFlags())) {
            continue;
        }

        String name = m.getElementName();

        if (name.startsWith("setImpl")) {
            continue;
        }

        if (name.startsWith("set") && m.getParameterTypes().length == 2) {
            name = name.substring(3);
            name = Character.toLowerCase(name.charAt(0)) + name.substring(1);

            FXProperty p = null;

            String signature = m.getParameterTypes()[1];

            String genericType = Signature.toString(signature);

            if (FXPrimitiveProperty.isPrimitive(genericType)) {
                p = new FXPrimitiveProperty(fxClass, name, m, Type.parseType(genericType), true);
            } else {
                String erasedFQNType = Util.getFQNType((IType) m.getParent(),
                        Signature.getTypeErasure(genericType));
                if (erasedFQNType != null) {
                    if (FXEnumProperty.isEnum(fxClass.getJavaProject(), erasedFQNType)) {
                        p = new FXEnumProperty(fxClass, name, m, erasedFQNType, true);
                    } else {
                        p = new FXObjectPoperty(fxClass, name, m, erasedFQNType, true);
                    }
                }
            }

            if (p != null) {
                rv.put(p.getName(), p);
            }
        }
    }

    return rv;
}

From source file:at.bestsolution.fxide.jdt.corext.util.MethodOverrideTester.java

License:Open Source License

private StringBuffer internalGetSubstitutedTypeName(String typeSig, IMember context, boolean erasure,
        StringBuffer buf) throws JavaModelException {
    int sigKind = Signature.getTypeSignatureKind(typeSig);
    switch (sigKind) {
    case Signature.BASE_TYPE_SIGNATURE:
        return buf.append(Signature.toString(typeSig));
    case Signature.ARRAY_TYPE_SIGNATURE:
        internalGetSubstitutedTypeName(Signature.getElementType(typeSig), context, erasure, buf);
        for (int i = Signature.getArrayCount(typeSig); i > 0; i--) {
            buf.append('[').append(']');
        }/*from  w w w .  ja va 2  s  .c  o  m*/
        return buf;
    case Signature.CLASS_TYPE_SIGNATURE: {
        String erasureSig = Signature.getTypeErasure(typeSig);
        String erasureName = Signature.getSimpleName(Signature.toString(erasureSig));

        char ch = erasureSig.charAt(0);
        if (ch == Signature.C_RESOLVED) {
            buf.append(erasureName);
        } else if (ch == Signature.C_UNRESOLVED) { // could be a type variable
            if (erasure) {
                buf.append(getVariableErasure(context, erasureName));
            } else {
                buf.append(getVariableSubstitution(context, erasureName));
            }
        } else {
            Assert.isTrue(false, "Unknown class type signature"); //$NON-NLS-1$
        }
        if (!erasure) {
            String[] typeArguments = Signature.getTypeArguments(typeSig);
            if (typeArguments.length > 0) {
                buf.append('<');
                for (int i = 0; i < typeArguments.length; i++) {
                    if (i > 0) {
                        buf.append(',');
                    }
                    internalGetSubstitutedTypeName(typeArguments[i], context, erasure, buf);
                }
                buf.append('>');
            }
        }
        return buf;
    }
    case Signature.TYPE_VARIABLE_SIGNATURE:
        String varName = Signature.toString(typeSig);
        if (erasure) {
            return buf.append(getVariableErasure(context, varName));
        } else {
            return buf.append(getVariableSubstitution(context, varName));
        }
    case Signature.WILDCARD_TYPE_SIGNATURE: {
        buf.append('?');
        char ch = typeSig.charAt(0);
        if (ch == Signature.C_STAR) {
            return buf;
        } else if (ch == Signature.C_EXTENDS) {
            buf.append(" extends "); //$NON-NLS-1$
        } else {
            buf.append(" super "); //$NON-NLS-1$
        }
        return internalGetSubstitutedTypeName(typeSig.substring(1), context, erasure, buf);
    }
    case Signature.CAPTURE_TYPE_SIGNATURE:
        return internalGetSubstitutedTypeName(typeSig.substring(1), context, erasure, buf);
    default:
        Assert.isTrue(false, "Unhandled type signature kind"); //$NON-NLS-1$
        return buf;
    }
}

From source file:at.bestsolution.fxide.jdt.editor.internal.MethodUtil.java

License:Open Source License

/**
 * Returns the simple erased name for a given type signature, possibly replacing type variables.
 *
 * @param signature the type signature//from  ww w  .ja  v a2s. com
 * @param typeVariables the Map&lt;SimpleName, VariableName>
 * @return the simple erased name for signature
 */
private String computeSimpleTypeName(String signature, Map<String, char[]> typeVariables) {
    // method equality uses erased types
    String erasure = Signature.getTypeErasure(signature);
    erasure = erasure.replaceAll("/", "."); //$NON-NLS-1$//$NON-NLS-2$
    String simpleName = Signature.getSimpleName(Signature.toString(erasure));
    char[] typeVar = typeVariables.get(simpleName);
    if (typeVar != null)
        simpleName = String.valueOf(Signature.getSignatureSimpleName(typeVar));
    return simpleName;
}