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

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

Introduction

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

Prototype

ITypeParameter getTypeParameter(String name);

Source Link

Document

Returns the type parameter declared in this method with the given name.

Usage

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

License:Open Source License

private void enterAbstractMethod(MethodInfo methodInfo) {
    if (this.typeDepth >= 0) {
        this.memberName[this.typeDepth] = new String(methodInfo.name);
        this.memberNameRange[this.typeDepth] = new SourceRange(methodInfo.nameSourceStart,
                methodInfo.nameSourceEnd - methodInfo.nameSourceStart + 1);
        this.memberDeclarationStart[this.typeDepth] = methodInfo.declarationStart;
        IType currentType = this.types[this.typeDepth];
        int currenTypeModifiers = this.typeModifiers[this.typeDepth];
        char[][] parameterTypes = methodInfo.parameterTypes;
        if (methodInfo.isConstructor && currentType.getDeclaringType() != null
                && !Flags.isStatic(currenTypeModifiers)) {
            IType declaringType = currentType.getDeclaringType();
            String declaringTypeName = declaringType.getElementName();
            if (declaringTypeName.length() == 0) {
                IClassFile classFile = declaringType.getClassFile();
                int length = parameterTypes != null ? parameterTypes.length : 0;
                char[][] newParameterTypes = new char[length + 1][];
                declaringTypeName = classFile.getElementName();
                declaringTypeName = declaringTypeName.substring(0, declaringTypeName.indexOf('.'));
                newParameterTypes[0] = declaringTypeName.toCharArray();
                if (length != 0) {
                    System.arraycopy(parameterTypes, 0, newParameterTypes, 1, length);
                }//  w  ww  .  java2s . c o m
                this.methodParameterTypes[this.typeDepth] = newParameterTypes;
            } else {
                int length = parameterTypes != null ? parameterTypes.length : 0;
                char[][] newParameterTypes = new char[length + 1][];
                newParameterTypes[0] = declaringTypeName.toCharArray();
                if (length != 0) {
                    System.arraycopy(parameterTypes, 0, newParameterTypes, 1, length);
                }
                this.methodParameterTypes[this.typeDepth] = newParameterTypes;
            }
        } else {
            this.methodParameterTypes[this.typeDepth] = parameterTypes;
        }
        this.methodParameterNames[this.typeDepth] = methodInfo.parameterNames;

        IMethod method = currentType.getMethod(this.memberName[this.typeDepth],
                convertTypeNamesToSigs(this.methodParameterTypes[this.typeDepth]));

        // type parameters
        if (methodInfo.typeParameters != null) {
            for (int i = 0, length = methodInfo.typeParameters.length; i < length; i++) {
                TypeParameterInfo typeParameterInfo = methodInfo.typeParameters[i];
                ITypeParameter typeParameter = method.getTypeParameter(new String(typeParameterInfo.name));
                setSourceRange(typeParameter,
                        new SourceRange(typeParameterInfo.declarationStart,
                                typeParameterInfo.declarationEnd - typeParameterInfo.declarationStart + 1),
                        new SourceRange(typeParameterInfo.nameSourceStart,
                                typeParameterInfo.nameSourceEnd - typeParameterInfo.nameSourceStart + 1));
            }
        }
        // parameters infos
        if (methodInfo.parameterInfos != null) {
            for (int i = 0, length = methodInfo.parameterInfos.length; i < length; i++) {
                ParameterInfo parameterInfo = methodInfo.parameterInfos[i];
                LocalVariableElementKey key = new LocalVariableElementKey(method,
                        new String(parameterInfo.name));
                SourceRange[] allRanges = new SourceRange[] {
                        new SourceRange(parameterInfo.declarationStart,
                                parameterInfo.declarationEnd - parameterInfo.declarationStart + 1),
                        new SourceRange(parameterInfo.nameSourceStart,
                                parameterInfo.nameSourceEnd - parameterInfo.nameSourceStart + 1) };
                this.parametersRanges.put(key, allRanges);
                if (parameterInfo.modifiers != 0) {
                    if (this.finalParameters == null) {
                        this.finalParameters = new HashSet();
                    }
                    this.finalParameters.add(key);
                }
            }
        }

        // categories
        addCategories(method, methodInfo.categories);
    }
}

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

License:Open Source License

/**
 * Returns the SourceRange for the name of the given element, or
 * {-1, -1} if no source range is known for the name of the element.
 */// ww  w  .jav  a2  s  .  c  o  m
public SourceRange getNameRange(IJavaElement element) {
    switch (element.getElementType()) {
    case IJavaElement.METHOD:
        if (((IMember) element).isBinary()) {
            IJavaElement[] el = getUnqualifiedMethodHandle((IMethod) element, false);
            if (el[1] != null && this.sourceRanges.get(el[0]) == null) {
                element = getUnqualifiedMethodHandle((IMethod) element, true)[0];
            } else {
                element = el[0];
            }
        }
        break;
    case IJavaElement.TYPE_PARAMETER:
        IJavaElement parent = element.getParent();
        if (parent.getElementType() == IJavaElement.METHOD) {
            IMethod method = (IMethod) parent;
            if (method.isBinary()) {
                IJavaElement[] el = getUnqualifiedMethodHandle(method, false);
                if (el[1] != null && this.sourceRanges.get(el[0]) == null) {
                    method = (IMethod) getUnqualifiedMethodHandle(method, true)[0];
                } else {
                    method = (IMethod) el[0];
                }
                element = method.getTypeParameter(element.getElementName());
            }
        }
        break;
    case IJavaElement.LOCAL_VARIABLE:
        LocalVariableElementKey key = new LocalVariableElementKey(element.getParent(),
                element.getElementName());
        SourceRange[] ranges = (SourceRange[]) this.parametersRanges.get(key);
        if (ranges == null) {
            return UNKNOWN_RANGE;
        } else {
            return ranges[1];
        }
    }
    SourceRange[] ranges = (SourceRange[]) this.sourceRanges.get(element);
    if (ranges == null) {
        return UNKNOWN_RANGE;
    } else {
        return ranges[1];
    }
}

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

License:Open Source License

/**
 * Returns the <code>SourceRange</code> for the given element, or
 * {-1, -1} if no source range is known for the element.
 *//*from   w  w w .j  ava 2  s.com*/
public SourceRange getSourceRange(IJavaElement element) {
    switch (element.getElementType()) {
    case IJavaElement.METHOD:
        if (((IMember) element).isBinary()) {
            IJavaElement[] el = getUnqualifiedMethodHandle((IMethod) element, false);
            if (el[1] != null && this.sourceRanges.get(el[0]) == null) {
                element = getUnqualifiedMethodHandle((IMethod) element, true)[0];
            } else {
                element = el[0];
            }
        }
        break;
    case IJavaElement.TYPE_PARAMETER:
        IJavaElement parent = element.getParent();
        if (parent.getElementType() == IJavaElement.METHOD) {
            IMethod method = (IMethod) parent;
            if (method.isBinary()) {
                IJavaElement[] el = getUnqualifiedMethodHandle(method, false);
                if (el[1] != null && this.sourceRanges.get(el[0]) == null) {
                    method = (IMethod) getUnqualifiedMethodHandle(method, true)[0];
                } else {
                    method = (IMethod) el[0];
                }
                element = method.getTypeParameter(element.getElementName());
            }
        }
        break;
    case IJavaElement.LOCAL_VARIABLE:
        LocalVariableElementKey key = new LocalVariableElementKey(element.getParent(),
                element.getElementName());
        SourceRange[] ranges = (SourceRange[]) this.parametersRanges.get(key);
        if (ranges == null) {
            return UNKNOWN_RANGE;
        } else {
            return ranges[0];
        }
    }
    SourceRange[] ranges = (SourceRange[]) this.sourceRanges.get(element);
    if (ranges == null) {
        return UNKNOWN_RANGE;
    } else {
        return ranges[0];
    }
}

From source file:de.loskutov.bco.ui.JdtUtils.java

License:Open Source License

private static void appendGenericType(StringBuffer sb, IMethod iMethod, String unresolvedType)
        throws JavaModelException {
    IType declaringType = iMethod.getDeclaringType();

    // unresolvedType is here like "QA;" => we remove "Q" and ";"
    if (unresolvedType.length() < 3) {
        // ???? something wrong here ....
        sb.append(unresolvedType);// w w  w .  j  a  v  a 2  s.c  o m
        return;
    }
    unresolvedType = unresolvedType.substring(1, unresolvedType.length() - 1);

    ITypeParameter typeParameter = iMethod.getTypeParameter(unresolvedType);
    if (typeParameter == null || !typeParameter.exists()) {
        typeParameter = declaringType.getTypeParameter(unresolvedType);
    }

    String[] bounds = typeParameter.getBounds();
    if (bounds.length == 0) {
        sb.append("Ljava/lang/Object;");
    } else {
        for (int i = 0; i < bounds.length; i++) {
            String simplyName = bounds[i];
            simplyName = Signature.C_UNRESOLVED + simplyName + Signature.C_NAME_END;
            String resolvedType = getResolvedType(simplyName, declaringType);
            sb.append(resolvedType);
        }
    }
}

From source file:org.eclipse.objectteams.otdt.debug.ui.internal.actions.OTToggleBreakpointAdapter.java

License:Open Source License

/**
 * Returns the resolved type signature for the given signature in the given
 * method, or <code>null</code> if unable to resolve.
 * //  ww  w  .j  av  a 2  s  . co m
 * @param method method containing the type signature
 * @param typeSignature the type signature to resolve
 * @return the resolved type signature
 * @throws JavaModelException
 */
private static String resolveTypeSignature(IMethod method, String typeSignature) throws JavaModelException {
    int count = Signature.getArrayCount(typeSignature);
    String elementTypeSignature = Signature.getElementType(typeSignature);
    if (elementTypeSignature.length() == 1) {
        // no need to resolve primitive types
        return typeSignature;
    }
    String elementTypeName = Signature.toString(elementTypeSignature);
    IType type = method.getDeclaringType();
    String[][] resolvedElementTypeNames = type.resolveType(elementTypeName);
    if (resolvedElementTypeNames == null || resolvedElementTypeNames.length != 1) {
        // check if type parameter
        ITypeParameter typeParameter = method.getTypeParameter(elementTypeName);
        if (!typeParameter.exists()) {
            typeParameter = type.getTypeParameter(elementTypeName);
        }
        if (typeParameter.exists()) {
            String[] bounds = typeParameter.getBounds();
            if (bounds.length == 0) {
                return "Ljava/lang/Object;"; //$NON-NLS-1$
            }
            String bound = Signature.createTypeSignature(bounds[0], false);
            return Signature.createArraySignature(resolveTypeSignature(method, bound), count);
        }
        // the type name cannot be resolved
        return null;
    }

    String[] types = resolvedElementTypeNames[0];
    types[1] = types[1].replace('.', '$');

    String resolvedElementTypeName = Signature.toQualifiedName(types);
    String resolvedElementTypeSignature = EMPTY_STRING;
    if (types[0].equals(EMPTY_STRING)) {
        resolvedElementTypeName = resolvedElementTypeName.substring(1);
        resolvedElementTypeSignature = Signature.createTypeSignature(resolvedElementTypeName, true);
    } else {
        resolvedElementTypeSignature = Signature.createTypeSignature(resolvedElementTypeName, true).replace('.',
                '/');
    }

    return Signature.createArraySignature(resolvedElementTypeSignature, count);
}

From source file:org.eclipse.recommenders.jdt.JavaElementsFinder.java

License:Open Source License

/**
 *
 * @param typeSignature//  w w  w .j  ava  2  s  . c  o  m
 *            e.g., QList;
 * @param enclosing
 * @return
 */
public static Optional<ITypeName> resolveType(char[] typeSignature, @Nullable IJavaElement enclosing) {
    typeSignature = CharOperation.replaceOnCopy(typeSignature, '.', '/');
    VmTypeName res = null;
    try {
        int dimensions = Signature.getArrayCount(typeSignature);
        outer: switch (typeSignature[dimensions]) {

        case Signature.C_BOOLEAN:
        case Signature.C_BYTE:
        case Signature.C_CHAR:
        case Signature.C_DOUBLE:
        case Signature.C_FLOAT:
        case Signature.C_INT:
        case Signature.C_LONG:
        case Signature.C_SHORT:
        case Signature.C_VOID:
            // take the whole string including any arrays
            res = VmTypeName.get(new String(typeSignature, 0, typeSignature.length));
            break;
        case Signature.C_RESOLVED:
            // take the whole string including any arrays but remove the trailing ';'
            res = VmTypeName.get(new String(typeSignature, 0, typeSignature.length - 1 /* ';' */));
            break;
        case Signature.C_UNRESOLVED:
            if (enclosing == null) {
                break;
            }
            // take the whole string (e.g. QList; or [QList;)
            String unresolved = new String(typeSignature, dimensions + 1,
                    typeSignature.length - (dimensions + 2 /* 'Q' + ';' */));
            IType ancestor = (IType) enclosing.getAncestor(IJavaElement.TYPE);
            if (ancestor == null) {
                break;
            }
            final String[][] resolvedNames = ancestor.resolveType(unresolved);
            if (isEmpty(resolvedNames)) {
                break;
            }
            String array = repeat('[', dimensions);
            final String pkg = resolvedNames[0][0].replace('.', '/');
            final String name = resolvedNames[0][1].replace('.', '$');
            res = VmTypeName.get(array + 'L' + pkg + '/' + name);
            break;
        case Signature.C_TYPE_VARIABLE:
            String varName = new String(typeSignature, dimensions + 1,
                    typeSignature.length - (dimensions + 2 /* 'Q' + ';' */));
            array = repeat('[', dimensions);

            for (IJavaElement cur = enclosing; cur instanceof IType
                    || cur instanceof IMethod; cur = cur.getParent()) {
                switch (cur.getElementType()) {
                case TYPE: {
                    IType type = (IType) cur;
                    ITypeParameter param = type.getTypeParameter(varName);
                    if (param.exists()) {
                        String[] signatures = getBoundSignatures(param);
                        if (isEmpty(signatures)) {
                            res = VmTypeName.OBJECT;
                            break outer;
                        }
                        // XXX we only consider the first type.
                        char[] append = array.concat(signatures[0]).toCharArray();
                        return resolveType(append, type);
                    }
                }
                case METHOD: {
                    IMethod method = (IMethod) cur;
                    ITypeParameter param = method.getTypeParameter(varName);
                    if (param.exists()) {
                        String[] signatures = getBoundSignatures(param);
                        if (isEmpty(signatures)) {
                            res = dimensions == 0 ? OBJECT
                                    : VmTypeName.get(repeat('[', dimensions) + OBJECT.getIdentifier());
                            break outer;
                        }
                        // XXX we only consider the first type.
                        char[] append = array.concat(signatures[0]).toCharArray();
                        return resolveType(append, method);
                    }
                }
                }
            }

            break;
        default:
            break;
        }
    } catch (Exception e) {
        Logs.log(LogMessages.ERROR_FAILED_TO_CREATE_TYPENAME, e,
                charToString(typeSignature) + (enclosing != null ? " in " + enclosing.getElementName() : ""));
    }
    return Optional.<ITypeName>fromNullable(res);
}

From source file:spechelper.MethodSelector.java

License:Apache License

private String generateAnnotation(boolean shortOnly, IMethod method) {
    String[] ptypes = method.getParameterTypes();
    String param = "";
    for (int i = 0; i < ptypes.length; i++) {
        String ptype = ptypes[i];
        String sig = Signature.toString(ptype);
        // kind of a hack: convert all Generic Type args to Object, or to
        // its bound Type
        if (sig.length() == 1) {
            ITypeParameter tps = method.getTypeParameter(sig);
            sig = "Object";

            if (tps != null && tps.exists()) {
                try {
                    String[] bounds = tps.getBounds();
                    if (bounds.length > 0) {
                        sig = bounds[0];
                    }/* w w  w .ja  v  a 2  s  .c o  m*/
                } catch (JavaModelException e) {
                    e.printStackTrace();
                }

            }
        }
        // omit type signature
        sig = sig.replaceAll("<.*>", "");
        param += (i > 0 ? ", " : "") + sig + ".class";
    }
    String IND = "    ";

    String targ = "@TestTarget(\n" + IND + "      methodName = \"" + method.getElementName() + "\",\n" + IND
            + "      methodArgs = {" + param + "}\n" + IND + "    )\n";

    String s;
    if (shortOnly) {
        s = targ;
    } else {

        s = "@TestInfo(\n" + IND + "  status = TestStatus.TBR,\n" + IND + "  notes = \"\",\n" + IND
                + "  targets = {\n" + IND + "    " + targ + IND + "})";
    }
    return s;
}