List of usage examples for org.eclipse.jdt.core IMethod getDeclaringType
IType getDeclaringType();
null if this member is not declared in a type (for example, a top-level type). From source file:at.bestsolution.fxide.jdt.corext.util.MethodOverrideTester.java
License:Open Source License
/** * Finds the method that is overridden by the given method. * First the super class is examined and then the implemented interfaces. * @param overriding the overriding method * @param testVisibility If true the result is tested on visibility. Null is returned if the method is not visible. * @return a method that is directly overridden by the given method, or <code>null</code> * @throws JavaModelException if a problem occurs *//*from w w w . jav a 2 s. c o m*/ public IMethod findOverriddenMethod(IMethod overriding, boolean testVisibility) throws JavaModelException { int flags = overriding.getFlags(); if (Flags.isPrivate(flags) || Flags.isStatic(flags) || overriding.isConstructor()) { return null; } IType type = overriding.getDeclaringType(); IType superClass = fHierarchy.getSuperclass(type); if (superClass != null) { IMethod res = findOverriddenMethodInHierarchy(superClass, overriding); if (res != null) { if (!testVisibility || JavaModelUtil.isVisibleInHierarchy(res, type.getPackageFragment())) { return res; } } } IType[] interfaces = fHierarchy.getSuperInterfaces(type); for (int i = 0; i < interfaces.length; i++) { IMethod res = findOverriddenMethodInHierarchy(interfaces[i], overriding); if (res != null) { return res; // methods from interfaces are always public and therefore visible } } return null; }
From source file:at.bestsolution.fxide.jdt.corext.util.MethodOverrideTester.java
License:Open Source License
private Substitutions getMethodSubstitions(IMethod method) throws JavaModelException { if (fMethodSubstitutions == null) { fMethodSubstitutions = new LRUMap<>(3); }//from w ww . ja v a2 s . c o m Substitutions s = fMethodSubstitutions.get(method); if (s == null) { ITypeParameter[] typeParameters = method.getTypeParameters(); if (typeParameters.length == 0) { s = Substitutions.EMPTY_SUBST; } else { IType instantiatedType = method.getDeclaringType(); s = new Substitutions(); for (int i = 0; i < typeParameters.length; i++) { ITypeParameter curr = typeParameters[i]; s.addSubstitution(curr.getElementName(), '+' + String.valueOf(i), getTypeParameterErasure(curr, instantiatedType)); } } fMethodSubstitutions.put(method, s); } return s; }
From source file:at.bestsolution.fxide.jdt.text.javadoc.JavadocContentAccess.java
License:Open Source License
private static Reader findDocInHierarchy(IMethod method, boolean isHTML, boolean useAttachedJavadoc) throws JavaModelException { /*/* w w w . ja va 2 s. c o m*/ * Catch ExternalJavaProject in which case * no hierarchy can be built. */ if (!method.getJavaProject().exists()) return null; IType type = method.getDeclaringType(); ITypeHierarchy hierarchy = type.newSupertypeHierarchy(null); MethodOverrideTester tester = new MethodOverrideTester(type, hierarchy); IType[] superTypes = hierarchy.getAllSupertypes(type); for (int i = 0; i < superTypes.length; i++) { IType curr = superTypes[i]; IMethod overridden = tester.findOverriddenMethodInType(curr, method); if (overridden != null) { Reader reader; if (isHTML) reader = getHTMLContentReader(overridden, false, useAttachedJavadoc); else reader = getContentReader(overridden, false); if (reader != null) return reader; } } return null; }
From source file:at.bestsolution.fxide.jdt.text.javadoc.JavadocContentAccess2.java
License:Open Source License
private static StringBuffer createSuperMethodReferences(final IMethod method) throws JavaModelException { IType type = method.getDeclaringType(); ITypeHierarchy hierarchy = SuperTypeHierarchyCache.getTypeHierarchy(type); final MethodOverrideTester tester = SuperTypeHierarchyCache.getMethodOverrideTester(type); final ArrayList<IMethod> superInterfaceMethods = new ArrayList<>(); final IMethod[] superClassMethod = { null }; new InheritDocVisitor() { @Override//from w ww. j ava 2 s . co m public Object visit(IType currType) throws JavaModelException { IMethod overridden = tester.findOverriddenMethodInType(currType, method); if (overridden == null) return InheritDocVisitor.CONTINUE; if (currType.isInterface()) superInterfaceMethods.add(overridden); else superClassMethod[0] = overridden; return STOP_BRANCH; } }.visitInheritDoc(type, hierarchy); boolean hasSuperInterfaceMethods = superInterfaceMethods.size() != 0; if (!hasSuperInterfaceMethods && superClassMethod[0] == null) return null; StringBuffer buf = new StringBuffer(); buf.append("<div>"); //$NON-NLS-1$ if (hasSuperInterfaceMethods) { buf.append("<b>"); //$NON-NLS-1$ buf.append(JavaDocMessages.JavaDoc2HTMLTextReader_specified_by_section); buf.append("</b> "); //$NON-NLS-1$ for (Iterator<IMethod> iter = superInterfaceMethods.iterator(); iter.hasNext();) { IMethod overridden = iter.next(); buf.append(createMethodInTypeLinks(overridden)); if (iter.hasNext()) buf.append(JavaElementLabels.COMMA_STRING); } } if (superClassMethod[0] != null) { if (hasSuperInterfaceMethods) buf.append(JavaElementLabels.COMMA_STRING); buf.append("<b>"); //$NON-NLS-1$ buf.append(JavaDocMessages.JavaDoc2HTMLTextReader_overrides_section); buf.append("</b> "); //$NON-NLS-1$ buf.append(createMethodInTypeLinks(superClassMethod[0])); } buf.append("</div>"); //$NON-NLS-1$ return buf; }
From source file:at.bestsolution.fxide.jdt.text.javadoc.JavadocContentAccess2.java
License:Open Source License
private static String createMethodInTypeLinks(IMethod overridden) { CharSequence methodLink = createSimpleMemberLink(overridden); CharSequence typeLink = createSimpleMemberLink(overridden.getDeclaringType()); String methodInType = MessageFormat.format(JavaDocMessages.JavaDoc2HTMLTextReader_method_in_type, new Object[] { methodLink, typeLink }); return methodInType; }
From source file:at.bestsolution.fxide.jdt.text.javadoc.JavadocContentAccess2.java
License:Open Source License
private static String javadoc2HTML(IMember member, IJavaElement element, String rawJavadoc) { rawJavadoc = CodeSanatizer.sanatizeCodeContent(rawJavadoc); Javadoc javadoc = getJavadocNode(member, rawJavadoc); if (javadoc == null) { Reader contentReader = null; // fall back to JavadocContentAccess: try {/* ww w . j ava2 s . c o m*/ contentReader = JavadocContentAccess.getHTMLContentReader(member, false, false); if (contentReader != null) return getString(contentReader); } catch (JavaModelException e) { // TODO e.printStackTrace(); } finally { if (contentReader != null) { try { contentReader.close(); } catch (IOException e) { //ignore } } } return null; } if (canInheritJavadoc(member)) { IMethod method = (IMethod) member; return new JavadocContentAccess2(element, javadoc, rawJavadoc, new JavadocLookup(method.getDeclaringType())).toHTML(); } return new JavadocContentAccess2(element, javadoc, rawJavadoc).toHTML(); }
From source file:at.bestsolution.fxide.jdt.text.javadoc.JavadocContentAccess2.java
License:Open Source License
/** * Finds the first available attached Javadoc in the hierarchy of the given method. * * @param method the method//w w w. j a v a2 s .c o m * @return the inherited Javadoc from the Javadoc attachment, or <code>null</code> if none * @throws JavaModelException unexpected problem */ private static String findAttachedDocInHierarchy(final IMethod method) throws JavaModelException { IType type = method.getDeclaringType(); ITypeHierarchy hierarchy = SuperTypeHierarchyCache.getTypeHierarchy(type); final MethodOverrideTester tester = SuperTypeHierarchyCache.getMethodOverrideTester(type); return (String) new InheritDocVisitor() { @Override public Object visit(IType currType) throws JavaModelException { IMethod overridden = tester.findOverriddenMethodInType(currType, method); if (overridden == null) return InheritDocVisitor.CONTINUE; if (overridden.getOpenable().getBuffer() == null) { // only if no source available String attachedJavadoc = overridden.getAttachedJavadoc(null); if (attachedJavadoc != null) { // BaseURL for the original method can be wrong for attached Javadoc from overridden // (e.g. when overridden is from rt.jar). // Fix is to store the baseURL inside the doc content and later fetch it with #extractBaseURL(String). String baseURL = JavaDocLocations.getBaseURL(overridden, overridden.isBinary()); if (baseURL != null) { attachedJavadoc = BASE_URL_COMMENT_INTRO + baseURL + "\"--> " + attachedJavadoc; //$NON-NLS-1$ } return attachedJavadoc; } } return CONTINUE; } }.visitInheritDoc(type, hierarchy); }
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 w ww . j av a 2 s.c o 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(); } }
From source file:bndtools.editor.components.MethodProposalLabelProvider.java
License:Open Source License
private static StyledString getStyledString(Object element) { MethodContentProposal proposal = (MethodContentProposal) element; IMethod method = proposal.getMethod(); String methodName = method.getElementName(); IType type = method.getDeclaringType(); String typeName = type.getElementName(); StyledString styledString = new StyledString(methodName); styledString.append(": " + typeName, StyledString.QUALIFIER_STYLER); return styledString; }
From source file:ca.ecliptical.pde.ds.search.DescriptorQueryParticipant.java
License:Open Source License
private IMethod findActivateMethod(IType implClassType, String name, IProgressMonitor monitor) throws JavaModelException { IMethod candidate = null;/*from w w w . j av a2 s. c o m*/ int priority = Integer.MAX_VALUE; IType type = implClassType; while (type != null) { for (IMethod method : type.getMethods()) { if (!name.equals(method.getElementName())) continue; if (!VOID_SIG.equals(method.getReturnType())) continue; if (type != implClassType && (Flags.isPrivate(method.getFlags()) || (Flags.isPackageDefault(method.getFlags()) && !implClassType.getPackageFragment() .equals(method.getDeclaringType().getPackageFragment())))) continue; String[] paramSigs = resolveParameterTypes(method, Integer.MAX_VALUE); if (paramSigs.length == 1 && COMPONENT_CONTEXT_SIG.equals(paramSigs[0])) { // best match return method; } if (priority > 1 && paramSigs.length == 1 && COMPONENT_CONTEXT_SIG.equals(paramSigs[0])) { candidate = method; priority = 1; continue; } if (priority > 2 && paramSigs.length == 1 && MAP_SIG.equals(paramSigs[0])) { candidate = method; priority = 2; continue; } if (priority > 3 && paramSigs.length >= 2) { boolean valid = true; for (String paramSig : paramSigs) { if (!COMPONENT_CONTEXT_SIG.equals(paramSig) && !BUNDLE_CONTEXT_SIG.equals(paramSig) && !MAP_SIG.equals(paramSig)) { valid = false; break; } } if (valid) { candidate = method; priority = 3; } continue; } if (priority > 4 && paramSigs.length == 0) { candidate = method; priority = 4; continue; } } type = findSuperclassType(type, implClassType.getJavaProject(), monitor); } return candidate; }