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

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

Introduction

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

Prototype

IJavaElement getParent();

Source Link

Document

Returns the element directly containing this element, or null if this element has no parent.

Usage

From source file:at.bestsolution.efxclipse.tooling.fxgraph.ui.util.JDTHelper.java

License:Open Source License

private TypeData createData(List<IMethod> allMethods, IJavaProject jproject) throws JavaModelException {
    TypeData d = new TypeData();
    for (IMethod m : allMethods) {
        if (!Flags.isPublic(m.getFlags())) {
            continue;
        }//from   w  w  w . j a  v  a2  s . c  o m

        if (m.getElementName().startsWith("impl_") || m.getElementName().startsWith("getImpl_")) {
            continue;
        }

        if (m.getElementName().startsWith("get") && m.getParameterNames().length == 0) {
            String returnSignature = Signature.toString(m.getReturnType());
            if (returnSignature.startsWith("javafx.event.EventHandler<? super ")
                    || returnSignature.startsWith("javafx.event.EventHandler<")) {
                String eventType;
                if (returnSignature.startsWith("javafx.event.EventHandler<? super ")) {
                    eventType = returnSignature.substring("javafx.event.EventHandler<? super ".length(),
                            returnSignature.length() - 1);
                } else {
                    eventType = returnSignature.substring("javafx.event.EventHandler<".length(),
                            returnSignature.length() - 1);
                }

                EventValueProperty p = new EventValueProperty(m, extractAttributename(m.getElementName()),
                        m.getParent().getElementName(), eventType);
                d.properties.add(p);

            } else {
                String propName = extractAttributename(m.getElementName());
                String ownerName = m.getParent().getElementName();
                boolean isReadonly = isReadonlySetter(propName, allMethods);

                if ("double".equals(returnSignature) || "float".equals(returnSignature)) {
                    if (!isReadonly) {
                        FloatingValueProperty p = new FloatingValueProperty(m, propName, ownerName,
                                returnSignature);
                        d.properties.add(p);
                    }
                } else if ("int".equals(returnSignature) || "long".equals(returnSignature)
                        || "short".equals(returnSignature) || "byte".equals(returnSignature)
                        || "char".equals(returnSignature)) {
                    if (!isReadonly) {
                        IntegerValueProperty p = new IntegerValueProperty(m, propName, ownerName,
                                returnSignature);
                        d.properties.add(p);
                    }
                } else {
                    IType type;
                    if (returnSignature.indexOf('<') == -1) {
                        type = jproject.findType(returnSignature);
                    } else {
                        type = jproject.findType(returnSignature.substring(0, returnSignature.indexOf('<')));
                    }

                    if (type == null) {
                        continue;
                    }

                    if (type.isEnum()) {
                        if (!isReadonly) {
                            EnumValueProperty p = new EnumValueProperty(m, propName, ownerName, returnSignature,
                                    type);
                            d.properties.add(p);
                        }
                    } else {
                        boolean isLists = false;
                        boolean isMap = false;
                        if ("java.util.List".equals(type.getFullyQualifiedName())) {
                            isLists = true;
                        } else {
                            for (String i : type.getSuperInterfaceNames()) {
                                if (i.equals("java.util.List")) {
                                    isLists = true;
                                }
                            }
                        }

                        if (!isLists) {
                            if ("java.util.Map".equals(type.getFullyQualifiedName())) {
                                isMap = true;
                            } else {
                                for (String i : type.getSuperInterfaceNames()) {
                                    if (i.equals("java.util.Map")) {
                                        isMap = true;
                                    }
                                }
                            }
                        }

                        if (isLists) {
                            String listType;
                            if (returnSignature.indexOf('<') != -1) {
                                listType = returnSignature.substring(returnSignature.indexOf('<') + 1,
                                        returnSignature.lastIndexOf('>'));
                            } else {
                                listType = "?";
                            }

                            if (!propName.endsWith("Unmodifiable")) {
                                ListValueProperty p = new ListValueProperty(m, propName, ownerName, listType,
                                        isReadonly);
                                d.properties.add(p);
                            }
                        } else if (isMap) {
                            MapValueProperty p = new MapValueProperty(m, propName, ownerName);
                            d.properties.add(p);
                        } else if (type.getFullyQualifiedName().equals("java.lang.String")) {
                            if (!isReadonly) {
                                StringValueProperty p = new StringValueProperty(m, propName, ownerName,
                                        returnSignature);
                                d.properties.add(p);
                            }
                        } else {
                            if (!isReadonly) {
                                List<Proposal> props = getProposals(type, jproject);
                                ElementValueProperty p = new ElementValueProperty(m, propName, ownerName,
                                        returnSignature, props);
                                d.properties.add(p);
                            }
                        }
                    }
                }
            }
        } else if (m.getElementName().startsWith("is") && m.getParameterNames().length == 0
                && "Z".equals(m.getReturnType())) {
            String propName = extractAttributename(m.getElementName());
            boolean isReadonly = isReadonlySetter(propName, allMethods);

            if (!isReadonly) {
                BooleanValueProperty p = new BooleanValueProperty(m, propName, m.getParent().getElementName(),
                        "boolean");
                d.properties.add(p);
            }
        }
    }
    return d;
}

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

License:Open Source License

@Override
public IType getElementType() {
    if (elementType == null) {
        try {//  w  ww . java 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 {//  w ww .  j  a  va  2 s. 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 {//from   w  ww.j  a va  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

private static FXProperty getProperty(FXClass fxClass, String name, IMethod m) throws JavaModelException {
    FXProperty p = null;//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 ww .j a v a2s.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:com.codenvy.ide.ext.java.server.internal.core.NamedMember.java

License:Open Source License

protected String getKey(IMethod method, boolean forceOpen) throws JavaModelException {
    StringBuffer key = new StringBuffer();

    // declaring class
    String declaringKey = getKey((IType) method.getParent(), forceOpen);
    key.append(declaringKey);//  w  w w.  j ava 2s  . c  o m

    // selector
    key.append('.');
    String selector = method.getElementName();
    key.append(selector);

    // type parameters
    if (forceOpen) {
        ITypeParameter[] typeParameters = method.getTypeParameters();
        int length = typeParameters.length;
        if (length > 0) {
            key.append('<');
            for (int i = 0; i < length; i++) {
                ITypeParameter typeParameter = typeParameters[i];
                String[] bounds = typeParameter.getBounds();
                int boundsLength = bounds.length;
                char[][] boundSignatures = new char[boundsLength][];
                for (int j = 0; j < boundsLength; j++) {
                    boundSignatures[j] = Signature.createCharArrayTypeSignature(bounds[j].toCharArray(),
                            method.isBinary());
                    CharOperation.replace(boundSignatures[j], '.', '/');
                }
                char[] sig = Signature.createTypeParameterSignature(
                        typeParameter.getElementName().toCharArray(), boundSignatures);
                key.append(sig);
            }
            key.append('>');
        }
    }

    // parameters
    key.append('(');
    String[] parameters = method.getParameterTypes();
    for (int i = 0, length = parameters.length; i < length; i++)
        key.append(parameters[i].replace('.', '/'));
    key.append(')');

    // return type
    if (forceOpen)
        key.append(method.getReturnType().replace('.', '/'));
    else
        key.append('V');

    return key.toString();
}

From source file:com.codenvy.ide.ext.java.server.internal.core.search.matching.TypeParameterPattern.java

License:Open Source License

/**
 * @param findDeclarations/* www .  ja  va  2 s.  c o m*/
 * @param findReferences
 * @param typeParameter
 * @param matchRule
 */
public TypeParameterPattern(boolean findDeclarations, boolean findReferences, ITypeParameter typeParameter,
        int matchRule) {
    super(TYPE_PARAM_PATTERN, matchRule);

    this.findDeclarations = findDeclarations; // set to find declarations & all occurences
    this.findReferences = findReferences; // set to find references & all occurences
    this.typeParameter = typeParameter;
    this.name = typeParameter.getElementName().toCharArray(); // store type parameter name
    IMember member = typeParameter.getDeclaringMember();
    this.declaringMemberName = member.getElementName().toCharArray(); // store type parameter declaring member name

    // For method type parameter, store also declaring class name and parameters type names
    if (member instanceof IMethod) {
        IMethod method = (IMethod) member;
        this.methodDeclaringClassName = method.getParent().getElementName().toCharArray();
        String[] parameters = method.getParameterTypes();
        int length = parameters.length;
        this.methodArgumentTypes = new char[length][];
        for (int i = 0; i < length; i++) {
            this.methodArgumentTypes[i] = Signature.toCharArray(parameters[i].toCharArray());
        }
    }
}

From source file:com.codenvy.ide.ext.java.server.internal.core.SourceMapper.java

License:Open Source License

/**
 * Creates a handle that has parameter types that are not
 * fully qualified so that the correct source is found.
 *///from w  w  w  .  j av a  2 s  . co m
protected IJavaElement[] getUnqualifiedMethodHandle(IMethod method, boolean noDollar) {
    boolean hasDollar = false;
    String[] qualifiedParameterTypes = method.getParameterTypes();
    String[] unqualifiedParameterTypes = new String[qualifiedParameterTypes.length];
    for (int i = 0; i < qualifiedParameterTypes.length; i++) {
        StringBuffer unqualifiedTypeSig = new StringBuffer();
        getUnqualifiedTypeSignature(qualifiedParameterTypes[i], 0/*start*/, qualifiedParameterTypes[i].length(),
                unqualifiedTypeSig, noDollar);
        unqualifiedParameterTypes[i] = unqualifiedTypeSig.toString();
        hasDollar |= unqualifiedParameterTypes[i].lastIndexOf('$') != -1;
    }

    IJavaElement[] result = new IJavaElement[2];
    result[0] = ((IType) method.getParent()).getMethod(method.getElementName(), unqualifiedParameterTypes);
    if (hasDollar) {
        result[1] = result[0];
    }
    return result;
}

From source file:com.codenvy.ide.ext.java.server.internal.core.util.ASTNodeFinder.java

License:Open Source License

public AbstractMethodDeclaration findMethod(IMethod methodHandle) {
    TypeDeclaration typeDecl = findType((IType) methodHandle.getParent());
    if (typeDecl == null)
        return null;
    AbstractMethodDeclaration[] methods = typeDecl.methods;
    if (methods != null) {
        char[] selector = methodHandle.getElementName().toCharArray();
        String[] parameterTypeSignatures = methodHandle.getParameterTypes();
        int parameterCount = parameterTypeSignatures.length;
        nextMethod: for (int i = 0, length = methods.length; i < length; i++) {
            AbstractMethodDeclaration method = methods[i];
            if (CharOperation.equals(selector, method.selector)) {
                Argument[] args = method.arguments;
                int argsLength = args == null ? 0 : args.length;
                if (argsLength == parameterCount) {
                    for (int j = 0; j < parameterCount; j++) {
                        TypeReference type = args[j].type;
                        String signature = Util.typeSignature(type);
                        if (!signature.equals(parameterTypeSignatures[j])) {
                            continue nextMethod;
                        }/*from w  w w. jav  a 2s.  c o m*/
                    }
                    return method;
                }
            }
        }
    }
    return null;
}