public Node createMethodDeclaration(Node modifiers, Node typeParameters, Node resultType, Node name, Node params, List<org.parboiled.Node<Node>> dims, Node throwsHead, List<Node> throwsTail, Node body) { MethodDeclaration decl = new MethodDeclaration(); decl.rawParameters().addToEnd(param); decl.astMethodName(createIdentifierIfNeeded(name, currentPos())).rawBody(body); if (modifiers != null) decl.astModifiers(createModifiersIfNeeded(modifiers, currentPos())); int extraDims = dims == null ? 0 : dims.size(); Node returnType = resultType; ((TypeReference)returnType).astArrayDimensions(((TypeReference)returnType).astArrayDimensions() + extraDims); decl.rawReturnTypeReference(returnType); if (typeParameters instanceof TemporaryNode.OrphanedTypeVariables) { TemporaryNode.OrphanedTypeVariables otv = (TemporaryNode.OrphanedTypeVariables)typeParameters; if (otv.variables != null) for (Node typeParameter : otv.variables) { if (typeParameter != null) decl.rawTypeVariables().addToEnd(typeParameter); if (throwsHead != null) decl.rawThrownTypeReferences().addToEnd(throwsHead); if (throwsTail != null) for (Node n : throwsTail) if (n != null) decl.rawThrownTypeReferences().addToEnd(n); return posify(decl);
decl.declarationSourceStart = jstart(node); decl.declarationSourceEnd = end(node); decl.sourceStart = start(node.astMethodName()); boolean setOriginalPosOnType = false; if (!node.rawThrownTypeReferences().isEmpty()) { decl.sourceEnd = end(node.rawThrownTypeReferences().last()); if (node.rawBody() == null) { decl.bodyStart = decl.sourceEnd + 1; decl.bodyEnd = end(node) - 1; } else { decl.bodyStart = start(node.rawBody()) + 1; decl.bodyEnd = end(node.rawBody()) - 1; decl.annotations = toArray(Annotation.class, node.astModifiers().astAnnotations()); decl.modifiers = toModifiers(node.astModifiers()); decl.returnType = (TypeReference) toTree(node.astReturnTypeReference()); if (setOriginalPosOnType) { if (decl.returnType instanceof ArrayTypeReference) { ((ArrayTypeReference)decl.returnType).originalSourceEnd = end(node.rawReturnTypeReference()); decl.typeParameters = toArray(TypeParameter.class, node.astTypeVariables()); decl.arguments = toArray(Argument.class, node.astParameters()); decl.selector = toName(node.astMethodName()); decl.thrownExceptions = toArray(TypeReference.class, node.astThrownTypeReferences()); if (node.astBody() == null) { decl.modifiers |= ExtraCompilerModifiers.AccSemicolonBody; } else {
public void checkAbstractMembersOnlyInAbstractTypes(MethodDeclaration md) { Modifiers modifiers = md.astModifiers(); if (modifiers == null) return; if (!modifiers.isAbstract()) return; TypeDeclaration parent = md.upUpToTypeDeclaration(); if (parent != null) { Modifiers modifiersOfParent = parent.astModifiers(); if (modifiersOfParent != null && modifiersOfParent.isAbstract()) return; md.addMessage(error(MODIFIERS_ABSTRACT_NOT_ALLOWED, "Abstract methods are only allowed in interfaces and abstract classes")); } }
@Override public void visitMethodDeclaration(MethodDeclaration node) { lombok.ast.MethodDeclaration decl = new lombok.ast.MethodDeclaration(); decl.astMethodName(toIdentifier(node.selector, node.sourceStart, node.sourceEnd)); decl.astJavadoc((lombok.ast.Comment) toTree(node.javadoc)); lombok.ast.Modifiers modifiers = toModifiers(node.modifiers, node.annotations, node.modifiersSourceStart, node.declarationSourceStart); decl.astModifiers(modifiers); decl.astReturnTypeReference((lombok.ast.TypeReference) toTree(node.returnType)); boolean semiColonBody = ((node.modifiers & ExtraCompilerModifiers.AccSemicolonBody) != 0); if (!modifiers.isAbstract() && !node.isNative() && !semiColonBody) { lombok.ast.Block block = toBlock(node.statements); block.setPosition(toPosition(node.bodyStart - 1, node.bodyEnd + 1)); decl.astBody(block); } fillList(node.arguments, decl.rawParameters(), FlagKey.AS_DEFINITION, FlagKey.NO_VARDECL_FOLDING); fillList(node.typeParameters, decl.rawTypeVariables()); fillList(node.thrownExceptions, decl.rawThrownTypeReferences()); setConversionPositionInfo(decl, "signature", toPosition(node.sourceStart, node.sourceEnd)); decl.setPosition(toPosition(node.declarationSourceStart, node.declarationSourceEnd)); set(node, decl); }
@Override public boolean visitMethodDeclaration(MethodDeclaration node) { JCMethodDecl methodDef = treeMaker.MethodDef( (JCModifiers)toTree(node.astModifiers()), toName(node.astMethodName()), toExpression(node.astReturnTypeReference()), toList(JCTypeParameter.class, node.astTypeVariables()), toList(JCVariableDecl.class, node.astParameters()), toList(JCExpression.class, node.astThrownTypeReferences()), (JCBlock)toTree(node.astBody()), null ); for (JCVariableDecl decl : methodDef.params) { decl.mods.flags |= Flags.PARAMETER; } int start = node.astMethodName().getPosition().getStart(); int end = node.getPosition().getEnd(); return set(node, setPos(start, end, methodDef)); }
@Override public boolean visitMethodDeclaration(MethodDeclaration node) { visit(node.rawJavadoc()); formatter.buildBlock(node); visit(node.astModifiers()); if (!node.astModifiers().rawKeywords().isEmpty()) formatter.space(); visitAll(node.rawTypeVariables(), ", ", "<", ">"); if (!node.rawTypeVariables().isEmpty()) formatter.space(); formatter.nameNextElement("returnType"); visit(node.rawReturnTypeReference()); formatter.space(); formatter.nameNextElement("methodName"); visit(node.astMethodName()); formatter.append("("); visitAll("parameter", node.rawParameters(), ", ", "", ""); formatter.append(")"); if (!node.rawThrownTypeReferences().isEmpty()) { formatter.space(); formatter.keyword("throws"); visitAll("throws", node.rawThrownTypeReferences(), ", ", " ", ""); if (node.rawBody() == null) { formatter.append(";"); } else { formatter.space(); formatter.startSuppressBlock(); visit(node.rawBody()); formatter.endSuppressBlock();
addToMap(((TypeDeclaration)node).astModifiers().astAnnotations(), node); } else if (node instanceof MethodDeclaration) { addToMap(((MethodDeclaration)node).astModifiers(), node); addToMap(((MethodDeclaration)node).astModifiers().astAnnotations(), node); addToMap(((MethodDeclaration)node).astTypeVariables().first(), node); addToMap(((MethodDeclaration)node).astReturnTypeReference(), node); addToMap(((MethodDeclaration)node).astMethodName(), node); } else if (node instanceof ConstructorDeclaration) { addToMap(((ConstructorDeclaration)node).astModifiers(), node);
/** * Returns true if this method looks like it's overriding android.view.View's * {@code public void layout(int l, int t, int r, int b)} */ private static boolean isLayoutMethod(MethodDeclaration node) { if (LAYOUT.equals(node.astMethodName().astValue())) { StrictListAccessor<VariableDefinition, MethodDeclaration> parameters = node.astParameters(); if (parameters != null && parameters.size() == 4) { Iterator<VariableDefinition> iterator = parameters.iterator(); for (int i = 0; i < 4; i++) { if (!iterator.hasNext()) { return false; } VariableDefinition next = iterator.next(); TypeReferencePart type = next.astTypeReference().astParts().last(); if (!TYPE_INT.equals(type.getTypeName())) { return false; } } return true; } } return false; }
@CopyMethod static String getDescription(MethodDeclaration self) { return self.astMethodName().astValue(); } }
public void methodModifiersCheck(MethodDeclaration md) { modifiersCheck(md.astModifiers(), METHOD_MODIFIERS_EXCLUSIVITY, METHOD_MODIFIERS_LEGAL, "method declarations"); checkStaticChain(md.astModifiers()); }
@Override public boolean visitMethodDeclaration(MethodDeclaration node) { if (ON_CREATE_OPTIONS_MENU.equals(node.astMethodName().astValue())) { // Gather any R.menu references found in this method node.accept(new MenuFinder()); } return super.visitMethodDeclaration(node); }
public void varargsOnlyLegalOnMethods(VariableDefinition node) { if (!node.astVarargs()) return; if (node.getParent() == null) return; MethodDeclaration md = node.upIfParameterToMethodDeclaration(); ConstructorDeclaration cd = node.upIfParameterToConstructorDeclaration(); Node last; if (md != null) last = md.astParameters().last(); else if (cd != null) last = cd.astParameters().last(); else last = null; if (node != last) { node.addMessage(error(VARIABLEDEFINITION_VARARGS_NOT_LEGAL_HERE, "Varargs are only legal on the last parameter of a constructor or method.")); } }
@Override public boolean visitModifiers(Modifiers node) { JCModifiers mods = treeMaker.Modifiers(node.getExplicitModifierFlags(), toList(JCAnnotation.class, node.astAnnotations())); Comment javadoc = null; if (node.getParent() instanceof JavadocContainer) { javadoc = ((JavadocContainer)node.getParent()).astJavadoc(); } else if (node.getParent() instanceof VariableDefinition && node.getParent().getParent() instanceof VariableDeclaration) { javadoc = ((VariableDeclaration)node.getParent().getParent()).astJavadoc(); } if (javadoc != null && javadoc.isMarkedDeprecated()) mods.flags |= Flags.DEPRECATED; if (node.isEmpty() && !hasConversionStructureInfo(node, "converted")) { //Workaround for a javac bug; start (but not end!) gets set of an empty modifiers object, //but only if these represent the modifiers of a constructor or method that has type variables. if ( (node.getParent() instanceof MethodDeclaration && ((MethodDeclaration)node.getParent()).astTypeVariables().size() > 0) || (node.getParent() instanceof ConstructorDeclaration && ((ConstructorDeclaration)node.getParent()).astTypeVariables().size() > 0)) { mods.pos = node.getParent().getPosition().getStart(); } return set(node, mods); } else { return posSet(node, mods); } }
MethodDeclaration declaration = getParentOfType(parent, MethodDeclaration.class); if (declaration != null) { for (TypeReference typeReference : declaration.astThrownTypeReferences()) { if (isSecurityException(context, typeReference)) { handlesMissingPermission = true;
@Override public void visitMethodDeclaration(MethodDeclaration node) { lombok.ast.MethodDeclaration decl = new lombok.ast.MethodDeclaration(); decl.astMethodName(toIdentifier(node.selector, node.sourceStart, node.sourceEnd)); decl.astJavadoc((lombok.ast.Comment) toTree(node.javadoc)); lombok.ast.Modifiers modifiers = toModifiers(node.modifiers, node.annotations, node.modifiersSourceStart, node.declarationSourceStart); decl.astModifiers(modifiers); decl.astReturnTypeReference((lombok.ast.TypeReference) toTree(node.returnType)); boolean semiColonBody = ((node.modifiers & ExtraCompilerModifiers.AccSemicolonBody) != 0); if (!modifiers.isAbstract() && !node.isNative() && !semiColonBody) { lombok.ast.Block block = toBlock(node.statements); block.setPosition(toPosition(node.bodyStart - 1, node.bodyEnd + 1)); decl.astBody(block); } fillList(node.arguments, decl.rawParameters(), FlagKey.AS_DEFINITION, FlagKey.NO_VARDECL_FOLDING); fillList(node.typeParameters, decl.rawTypeVariables()); fillList(node.thrownExceptions, decl.rawThrownTypeReferences()); setConversionPositionInfo(decl, "signature", toPosition(node.sourceStart, node.sourceEnd)); decl.setPosition(toPosition(node.declarationSourceStart, node.declarationSourceEnd)); set(node, decl); }
@Override public boolean visitMethodDeclaration(MethodDeclaration node) { JCMethodDecl methodDef = treeMaker.MethodDef( (JCModifiers)toTree(node.astModifiers()), toName(node.astMethodName()), toExpression(node.astReturnTypeReference()), toList(JCTypeParameter.class, node.astTypeVariables()), toList(JCVariableDecl.class, node.astParameters()), toList(JCExpression.class, node.astThrownTypeReferences()), (JCBlock)toTree(node.astBody()), null ); for (JCVariableDecl decl : methodDef.params) { decl.mods.flags |= Flags.PARAMETER; } int start = node.astMethodName().getPosition().getStart(); int end = node.getPosition().getEnd(); return set(node, setPos(start, end, methodDef)); }
@Override public boolean visitMethodDeclaration(MethodDeclaration node) { visit(node.rawJavadoc()); formatter.buildBlock(node); visit(node.astModifiers()); if (!node.astModifiers().rawKeywords().isEmpty()) formatter.space(); visitAll(node.rawTypeVariables(), ", ", "<", ">"); if (!node.rawTypeVariables().isEmpty()) formatter.space(); formatter.nameNextElement("returnType"); visit(node.rawReturnTypeReference()); formatter.space(); formatter.nameNextElement("methodName"); visit(node.astMethodName()); formatter.append("("); visitAll("parameter", node.rawParameters(), ", ", "", ""); formatter.append(")"); if (!node.rawThrownTypeReferences().isEmpty()) { formatter.space(); formatter.keyword("throws"); visitAll("throws", node.rawThrownTypeReferences(), ", ", " ", ""); if (node.rawBody() == null) { formatter.append(";"); } else { formatter.space(); formatter.startSuppressBlock(); visit(node.rawBody()); formatter.endSuppressBlock();
addToMap(((TypeDeclaration)node).astModifiers().astAnnotations(), node); } else if (node instanceof MethodDeclaration) { addToMap(((MethodDeclaration)node).astModifiers(), node); addToMap(((MethodDeclaration)node).astModifiers().astAnnotations(), node); addToMap(((MethodDeclaration)node).astTypeVariables().first(), node); addToMap(((MethodDeclaration)node).astReturnTypeReference(), node); addToMap(((MethodDeclaration)node).astMethodName(), node); } else if (node instanceof ConstructorDeclaration) { addToMap(((ConstructorDeclaration)node).astModifiers(), node);
/** * Returns true if this method looks like it's overriding android.view.View's * {@code protected void onDraw(Canvas canvas)} */ private static boolean isOnDrawMethod(MethodDeclaration node) { if (ON_DRAW.equals(node.astMethodName().astValue())) { StrictListAccessor<VariableDefinition, MethodDeclaration> parameters = node.astParameters(); if (parameters != null && parameters.size() == 1) { VariableDefinition arg0 = parameters.first(); TypeReferencePart type = arg0.astTypeReference().astParts().last(); String typeName = type.getTypeName(); if (typeName.equals(CANVAS)) { return true; } } } return false; }
@CopyMethod static String getDescription(MethodDeclaration self) { return self.astMethodName().astValue(); } }