/* * @see ASTVisitor#visit(AnnotationTypeMemberDeclaration) * @since 3.0 */ @Override public boolean visit(AnnotationTypeMemberDeclaration node) { if (node.getJavadoc() != null) { node.getJavadoc().accept(this); } printModifiers(node.modifiers()); node.getType().accept(this); this.fBuffer.append(" "); // $NON-NLS-1$ node.getName().accept(this); this.fBuffer.append("()"); // $NON-NLS-1$ if (node.getDefault() != null) { this.fBuffer.append(" default "); // $NON-NLS-1$ node.getDefault().accept(this); } this.fBuffer.append(";"); // $NON-NLS-1$ return false; }
private JavaElement getUnresolvedJavaElement() { IType declaringType = (IType) getDeclaringClass().getJavaElement(); if (declaringType == null) return null; if (!(this.resolver instanceof DefaultBindingResolver)) return null; ASTNode node = (ASTNode) ((DefaultBindingResolver) this.resolver).bindingsToAstNodes.get(this); if (node != null && declaringType.getParent().getElementType() != IJavaElement.CLASS_FILE) { if (node instanceof MethodDeclaration) { MethodDeclaration methodDeclaration = (MethodDeclaration) node; ArrayList parameterSignatures = new ArrayList(); Iterator iterator = methodDeclaration.parameters().iterator(); while (iterator.hasNext()) { SingleVariableDeclaration parameter = (SingleVariableDeclaration) iterator.next(); Type type = parameter.getType(); String typeSig = Util.getSignature(type); int arrayDim = parameter.getExtraDimensions(); if (parameter.getAST().apiLevel() >= AST.JLS3 && parameter.isVarargs()) { arrayDim++; } if (arrayDim > 0) { typeSig = Signature.createArraySignature(typeSig, arrayDim); } parameterSignatures.add(typeSig); } int parameterCount = parameterSignatures.size(); String[] parameters = new String[parameterCount]; parameterSignatures.toArray(parameters); return (JavaElement) declaringType.getMethod(getName(), parameters); } else { // annotation type member declaration AnnotationTypeMemberDeclaration typeMemberDeclaration = (AnnotationTypeMemberDeclaration) node; return (JavaElement) declaringType.getMethod( typeMemberDeclaration.getName().getIdentifier(), new String[0]); // annotation type members don't have parameters } } else { // case of method not in the created AST, or a binary method org.eclipse.jdt.internal.compiler.lookup.MethodBinding original = this.binding.original(); String selector = original.isConstructor() ? declaringType.getElementName() : new String(original.selector); TypeBinding[] parameters = original.parameters; int length = parameters == null ? 0 : parameters.length; String[] parameterSignatures = new String[length]; for (int i = 0; i < length; i++) { parameterSignatures[i] = new String(parameters[i].genericTypeSignature()).replace('/', '.'); } IMethod result = declaringType.getMethod(selector, parameterSignatures); if (declaringType.isBinary()) return (JavaElement) result; IMethod[] methods = null; try { methods = declaringType.getMethods(); } catch (JavaModelException e) { // declaring type doesn't exist return null; } IMethod[] candidates = Member.findMethods(result, methods); if (candidates == null || candidates.length == 0) return null; return (JavaElement) candidates[0]; } }