Example usage for org.eclipse.jdt.core IMethod getParameterTypes

List of usage examples for org.eclipse.jdt.core IMethod getParameterTypes

Introduction

In this page you can find the example usage for org.eclipse.jdt.core IMethod getParameterTypes.

Prototype

String[] getParameterTypes();

Source Link

Document

Returns the type signatures for the parameters of this method.

Usage

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

License:Open Source License

@Override
public IMethod getValueOf() {
    //      if( ! valueOfResolved ) {
    try {/*  www  .j  a v  a  2s. c  om*/
        for (IMethod m : type.getMethods()) {
            if (Flags.isStatic(m.getFlags()) && Flags.isPublic(m.getFlags())
                    && "valueOf".equals(m.getElementName())) {
                if (m.getParameterTypes().length == 1) {
                    //                     String fqnType = Util.toFQN((IType) m.getParent(),m.getParameterTypes()[0]);
                    //                     if("java.lang.String".equals( fqnType) ) {
                    valueOfMethod = m;
                    break;
                    //                     }
                }
            }
        }
        valueOfResolved = true;
    } catch (JavaModelException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    //      }
    return valueOfMethod;
}

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

License:Open Source License

@Override
public IType getElementType() {
    if (elementType == null) {
        try {//from  w ww.  j  av a 2  s .c  om
            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 {/*ww  w .j  av a 2s  .c  o  m*/
            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.FXEventHandlerProperty.java

License:Open Source License

public IType getEventType() {
    if (eventType == null) {
        try {//  w w w. ja v  a  2  s.c o m
            IMethod m = (IMethod) getJavaElement();
            String signature;

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

            IType t = (IType) m.getParent();
            String fqnType = Util.toFQN(t, signature);
            eventType = getFXClass().getJavaProject().findType(fqnType);
        } catch (JavaModelException e) {
            // TODO Auto-generated method stub
            e.printStackTrace();
        }
    }

    return eventType;
}

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

License:Open Source License

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

    if ("java.lang.Object".equals(fxClass.getFQN())) {
        return rv;
    }// ww w  .j  a  va 2 s .  c  o  m

    Map<String, IMethod> beanProperties = new HashMap<String, IMethod>();
    Map<String, IMethod> builderProperties = new HashMap<String, IMethod>();

    String builder = fxClass.getType().getFullyQualifiedName() + "Builder";
    IType builderType = fxClass.getJavaProject().findType(builder);
    if (builderType != null) {
        for (IMethod m : builderType.getMethods()) {
            // Only public and none static methods
            if (!Flags.isPublic(m.getFlags()) || Flags.isStatic(m.getFlags())) {
                continue;
            }

            String name = m.getElementName();

            // omit the build method
            if ("build".equals(name) || "applyTo".equals(name)) {
                continue;
            }

            if (m.getParameterNames().length == 1) {
                String param = m.getParameterTypes()[0];
                if (Signature.getArrayCount(param) == 0) {
                    builderProperties.put(name, m);
                }
            }
        }
    }

    for (IMethod m : fxClass.getType().getMethods()) {
        // Only public and none static methods
        if (!Flags.isPublic(m.getFlags()) || Flags.isStatic(m.getFlags())) {
            continue;
        }

        String name = m.getElementName();

        // do not use impl methods they are private
        if (name.startsWith("getImpl") || name.startsWith("isImpl") || name.startsWith("setImpl")
                || name.contains("Unmodifiable")) {
            continue;
        }

        if (name.startsWith("get") || name.startsWith("is")) {
            name = name.startsWith("get") ? name.substring(3) : name.substring(2);
            name = Character.toLowerCase(name.charAt(0)) + name.substring(1);

            // Only set if there's not already one stored
            if (!beanProperties.containsKey(name)) {
                beanProperties.put(name, m);
            }
        } else if (m.getElementName().startsWith("set") && m.getParameters().length == 1) {
            name = name.substring(3);
            name = Character.toLowerCase(name.charAt(0)) + name.substring(1);
            beanProperties.put(name, m);
        }
    }

    for (Entry<String, IMethod> e : beanProperties.entrySet()) {
        FXProperty p = getProperty(fxClass, e.getKey(), e.getValue());
        if (p != null) {
            rv.put(e.getKey(), p);
        }
    }

    for (Entry<String, IMethod> e : builderProperties.entrySet()) {
        IFXProperty p = rv.get(e.getKey());
        if (p == null) {
            continue;
        }

        if (!(p instanceof IFXCollectionProperty)) {
            if (!p.isSetable()) {
                p = getProperty(fxClass, e.getKey(), e.getValue());
                if (p != null) {
                    rv.put(e.getKey(), p);
                }
            }
        }
    }

    return rv;
}

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;//ww w  .j a  v a  2 s.c om

    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 ww  . j  av a 2  s  .co m

    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 boolean hasCompatibleParameterTypes(IMethod overriding, IMethod overridden) throws JavaModelException {
    String[] overriddenParamTypes = overridden.getParameterTypes();
    String[] overridingParamTypes = overriding.getParameterTypes();

    String[] substitutedOverriding = new String[overridingParamTypes.length];
    boolean testErasure = false;

    for (int i = 0; i < overridingParamTypes.length; i++) {
        String overriddenParamSig = overriddenParamTypes[i];
        String overriddenParamName = getSubstitutedTypeName(overriddenParamSig, overridden);
        String overridingParamName = getSubstitutedTypeName(overridingParamTypes[i], overriding);
        substitutedOverriding[i] = overridingParamName;
        if (!overriddenParamName.equals(overridingParamName)) {
            testErasure = true;/*from   ww  w  .  j av  a  2  s  .  co  m*/
            break;
        }
    }
    if (testErasure) {
        for (int i = 0; i < overridingParamTypes.length; i++) {
            String overriddenParamSig = overriddenParamTypes[i];
            String overriddenParamName = getErasedTypeName(overriddenParamSig, overridden);
            String overridingParamName = substitutedOverriding[i];
            if (overridingParamName == null)
                overridingParamName = getSubstitutedTypeName(overridingParamTypes[i], overriding);
            if (!overriddenParamName.equals(overridingParamName)) {
                return false;
            }
        }
    }
    return true;
}

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

License:Open Source License

/**
 * Tests if a method equals to the given signature. Parameter types are only
 * compared by the simple name, no resolving for the fully qualified type
 * name is done. Constructors are only compared by parameters, not the name.
 *
 * @param name Name of the method/*from w  ww . j ava2s.  com*/
 * @param paramTypes The type signatures of the parameters e.g.
 *        <code>{"QString;","I"}</code>
 * @param isConstructor Specifies if the method is a constructor
 * @param method the method to be compared with this info's method
 * @param typeVariables a map from type variables to types
 * @param type the given type that declares the method
 * @return Returns <code>true</code> if the method has the given name and
 *         parameter types and constructor state.
 * @throws JavaModelException if the method does not exist or if an exception occurs while accessing its corresponding resource
 */
private boolean isSameMethodSignature(String name, String[] paramTypes, boolean isConstructor, IMethod method,
        Map<String, char[]> typeVariables, IType type) throws JavaModelException {
    if (isConstructor || name.equals(method.getElementName())) {
        if (isConstructor == method.isConstructor()) {
            String[] otherParams = method.getParameterTypes(); // types may be type variables
            boolean isBinaryConstructorForNonStaticMemberClass = method.isBinary() && type.isMember()
                    && !Flags.isStatic(type.getFlags());
            int syntheticParameterCorrection = isBinaryConstructorForNonStaticMemberClass
                    && paramTypes.length == otherParams.length - 1 ? 1 : 0;
            if (paramTypes.length == otherParams.length - syntheticParameterCorrection) {
                fFallbackMatch = method;
                String signature = method.getSignature();
                String[] otherParamsFromSignature = Signature.getParameterTypes(signature); // types are resolved / upper-bounded
                // no need to check method type variables since these are
                // not yet bound when proposing a method
                for (int i = 0; i < paramTypes.length; i++) {
                    String ourParamName = computeSimpleTypeName(paramTypes[i], typeVariables);
                    String otherParamName1 = computeSimpleTypeName(
                            otherParams[i + syntheticParameterCorrection], typeVariables);
                    String otherParamName2 = computeSimpleTypeName(
                            otherParamsFromSignature[i + syntheticParameterCorrection], typeVariables);

                    if (!ourParamName.equals(otherParamName1) && !ourParamName.equals(otherParamName2)) {
                        return false;
                    }
                }
                return true;
            }
        }
    }
    return false;
}

From source file:at.bestsolution.fxide.jdt.text.viewersupport.JavaElementLabelComposer.java

License:Open Source License

/**
 * Appends the label for a method. Considers the M_* flags.
 *
 * @param method the element to render//from www .j  a v a  2s . co m
 * @param flags the rendering flags. Flags with names starting with 'M_' are considered.
 */
public void appendMethodLabel(IMethod method, long flags) {
    try {
        BindingKey resolvedKey = getFlag(flags, JavaElementLabels.USE_RESOLVED) && method.isResolved()
                ? new BindingKey(method.getKey())
                : null;
        String resolvedSig = (resolvedKey != null) ? resolvedKey.toSignature() : null;

        // type parameters
        if (getFlag(flags, JavaElementLabels.M_PRE_TYPE_PARAMETERS)) {
            if (resolvedKey != null) {
                if (resolvedKey.isParameterizedMethod()) {
                    String[] typeArgRefs = resolvedKey.getTypeArguments();
                    if (typeArgRefs.length > 0) {
                        appendTypeArgumentSignaturesLabel(method, typeArgRefs, flags);
                        fBuffer.append(' ');
                    }
                } else {
                    String[] typeParameterSigs = Signature.getTypeParameters(resolvedSig);
                    if (typeParameterSigs.length > 0) {
                        appendTypeParameterSignaturesLabel(typeParameterSigs, flags);
                        fBuffer.append(' ');
                    }
                }
            } else if (method.exists()) {
                ITypeParameter[] typeParameters = method.getTypeParameters();
                if (typeParameters.length > 0) {
                    appendTypeParametersLabels(typeParameters, flags);
                    fBuffer.append(' ');
                }
            }
        }

        // return type
        if (getFlag(flags, JavaElementLabels.M_PRE_RETURNTYPE) && method.exists() && !method.isConstructor()) {
            String returnTypeSig = resolvedSig != null ? Signature.getReturnType(resolvedSig)
                    : method.getReturnType();
            appendTypeSignatureLabel(method, returnTypeSig, flags);
            fBuffer.append(' ');
        }

        // qualification
        if (getFlag(flags, JavaElementLabels.M_FULLY_QUALIFIED)) {
            appendTypeLabel(method.getDeclaringType(),
                    JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS));
            fBuffer.append('.');
        }

        fBuffer.append(getElementName(method));

        // constructor type arguments
        if (getFlag(flags, JavaElementLabels.T_TYPE_PARAMETERS) && method.exists() && method.isConstructor()) {
            if (resolvedSig != null && resolvedKey.isParameterizedType()) {
                BindingKey declaringType = resolvedKey.getDeclaringType();
                if (declaringType != null) {
                    String[] declaringTypeArguments = declaringType.getTypeArguments();
                    appendTypeArgumentSignaturesLabel(method, declaringTypeArguments, flags);
                }
            }
        }

        // parameters
        fBuffer.append('(');
        String[] declaredParameterTypes = method.getParameterTypes();
        if (getFlag(flags, JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.M_PARAMETER_NAMES)) {
            String[] types = null;
            int nParams = 0;
            boolean renderVarargs = false;
            boolean isPolymorphic = false;
            if (getFlag(flags, JavaElementLabels.M_PARAMETER_TYPES)) {
                if (resolvedSig != null) {
                    types = Signature.getParameterTypes(resolvedSig);
                } else {
                    types = declaredParameterTypes;
                }
                nParams = types.length;
                renderVarargs = method.exists() && Flags.isVarargs(method.getFlags());
                if (renderVarargs && resolvedSig != null && declaredParameterTypes.length == 1
                        && JavaModelUtil.isPolymorphicSignature(method)) {
                    renderVarargs = false;
                    isPolymorphic = true;
                }
            }
            String[] names = null;
            if (getFlag(flags, JavaElementLabels.M_PARAMETER_NAMES) && method.exists()) {
                names = method.getParameterNames();
                if (isPolymorphic) {
                    // handled specially below
                } else if (types == null) {
                    nParams = names.length;
                } else { // types != null
                    if (nParams != names.length) {
                        if (resolvedSig != null && types.length > names.length) {
                            // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=99137
                            nParams = names.length;
                            String[] typesWithoutSyntheticParams = new String[nParams];
                            System.arraycopy(types, types.length - nParams, typesWithoutSyntheticParams, 0,
                                    nParams);
                            types = typesWithoutSyntheticParams;
                        } else {
                            // https://bugs.eclipse.org/bugs/show_bug.cgi?id=101029
                            // JavaPlugin.logErrorMessage("JavaElementLabels: Number of param types(" + nParams + ") != number of names(" + names.length + "): " + method.getElementName());   //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
                            names = null; // no names rendered
                        }
                    }
                }
            }

            ILocalVariable[] annotatedParameters = null;
            if (nParams > 0 && getFlag(flags, JavaElementLabels.M_PARAMETER_ANNOTATIONS)) {
                annotatedParameters = method.getParameters();
            }

            for (int i = 0; i < nParams; i++) {
                if (i > 0) {
                    fBuffer.append(JavaElementLabels.COMMA_STRING);
                }
                if (annotatedParameters != null && i < annotatedParameters.length) {
                    appendAnnotationLabels(annotatedParameters[i].getAnnotations(), flags);
                }

                if (types != null) {
                    String paramSig = types[i];
                    if (renderVarargs && (i == nParams - 1)) {
                        int newDim = Signature.getArrayCount(paramSig) - 1;
                        appendTypeSignatureLabel(method, Signature.getElementType(paramSig), flags);
                        for (int k = 0; k < newDim; k++) {
                            fBuffer.append('[').append(']');
                        }
                        fBuffer.append(JavaElementLabels.ELLIPSIS_STRING);
                    } else {
                        appendTypeSignatureLabel(method, paramSig, flags);
                    }
                }
                if (names != null) {
                    if (types != null) {
                        fBuffer.append(' ');
                    }
                    if (isPolymorphic) {
                        fBuffer.append(names[0] + i);
                    } else {
                        fBuffer.append(names[i]);
                    }
                }
            }
        } else {
            if (declaredParameterTypes.length > 0) {
                fBuffer.append(JavaElementLabels.ELLIPSIS_STRING);
            }
        }
        fBuffer.append(')');

        if (getFlag(flags, JavaElementLabels.M_EXCEPTIONS)) {
            String[] types;
            if (resolvedKey != null) {
                types = resolvedKey.getThrownExceptions();
            } else {
                types = method.exists() ? method.getExceptionTypes() : new String[0];
            }
            if (types.length > 0) {
                fBuffer.append(" throws "); //$NON-NLS-1$
                for (int i = 0; i < types.length; i++) {
                    if (i > 0) {
                        fBuffer.append(JavaElementLabels.COMMA_STRING);
                    }
                    appendTypeSignatureLabel(method, types[i], flags);
                }
            }
        }

        if (getFlag(flags, JavaElementLabels.M_APP_TYPE_PARAMETERS)) {
            int offset = fBuffer.length();
            if (resolvedKey != null) {
                if (resolvedKey.isParameterizedMethod()) {
                    String[] typeArgRefs = resolvedKey.getTypeArguments();
                    if (typeArgRefs.length > 0) {
                        fBuffer.append(' ');
                        appendTypeArgumentSignaturesLabel(method, typeArgRefs, flags);
                    }
                } else {
                    String[] typeParameterSigs = Signature.getTypeParameters(resolvedSig);
                    if (typeParameterSigs.length > 0) {
                        fBuffer.append(' ');
                        appendTypeParameterSignaturesLabel(typeParameterSigs, flags);
                    }
                }
            } else if (method.exists()) {
                ITypeParameter[] typeParameters = method.getTypeParameters();
                if (typeParameters.length > 0) {
                    fBuffer.append(' ');
                    appendTypeParametersLabels(typeParameters, flags);
                }
            }
            //            if (getFlag(flags, JavaElementLabels.COLORIZE) && offset != fBuffer.length()) {
            //               fBuffer.setStyle(offset, fBuffer.length() - offset, DECORATIONS_STYLE);
            //            }
        }

        if (getFlag(flags, JavaElementLabels.M_APP_RETURNTYPE) && method.exists() && !method.isConstructor()) {
            int offset = fBuffer.length();
            fBuffer.append(JavaElementLabels.DECL_STRING);
            String returnTypeSig = resolvedSig != null ? Signature.getReturnType(resolvedSig)
                    : method.getReturnType();
            appendTypeSignatureLabel(method, returnTypeSig, flags);
            //            if (getFlag(flags, JavaElementLabels.COLORIZE)) {
            //               fBuffer.setStyle(offset, fBuffer.length() - offset, DECORATIONS_STYLE);
            //            }
        }

        // category
        if (getFlag(flags, JavaElementLabels.M_CATEGORY) && method.exists())
            appendCategoryLabel(method, flags);

        // post qualification
        if (getFlag(flags, JavaElementLabels.M_POST_QUALIFIED)) {
            int offset = fBuffer.length();
            fBuffer.append(JavaElementLabels.CONCAT_STRING);
            appendTypeLabel(method.getDeclaringType(),
                    JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS));
            //            if (getFlag(flags, JavaElementLabels.COLORIZE)) {
            //               fBuffer.setStyle(offset, fBuffer.length() - offset, QUALIFIER_STYLE);
            //            }
        }

    } catch (JavaModelException e) {
        //TODO
        e.printStackTrace();
    }
}