List of usage examples for org.eclipse.jdt.core IMethod getTypeParameter
ITypeParameter getTypeParameter(String name);
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; }