diff options
author | Danny van Bruggen <hexagonaal@gmail.com> | 2017-04-23 03:02:06 +0200 |
---|---|---|
committer | Danny van Bruggen <hexagonaal@gmail.com> | 2017-04-23 03:02:06 +0200 |
commit | 3d837804b3a3786470940e4754d1e9fd42ed8ee0 (patch) | |
tree | 0e56f4a349cae289d928aaee455bffa48c2d6847 /javaparser-core-generators/src/main/java | |
parent | 21d256cd2a82ab8d23611d583c44c14b44b68311 (diff) | |
download | javaparser-3d837804b3a3786470940e4754d1e9fd42ed8ee0.tar.gz |
Mark remove methods generated
Diffstat (limited to 'javaparser-core-generators/src/main/java')
2 files changed, 25 insertions, 37 deletions
diff --git a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/Generator.java b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/Generator.java index 321ae33b2..c3c98f27d 100644 --- a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/Generator.java +++ b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/Generator.java @@ -1,6 +1,7 @@ package com.github.javaparser.generator; import com.github.javaparser.ast.Node; +import com.github.javaparser.ast.body.MethodDeclaration; import com.github.javaparser.ast.expr.Expression; import com.github.javaparser.ast.expr.StringLiteralExpr; import com.github.javaparser.ast.nodeTypes.NodeWithAnnotations; @@ -9,7 +10,6 @@ import com.github.javaparser.utils.SourceRoot; import javax.annotation.Generated; import static com.github.javaparser.ast.NodeList.toNodeList; -import static com.github.javaparser.utils.CodeGenerationUtils.f; /** * A general pattern that the generators in this module will follow. @@ -37,9 +37,16 @@ public abstract class Generator { .filter(a -> !a.getNameAsString().equals(annotation.getSimpleName())) .collect(toNodeList())); - node.addSingleMemberAnnotation(annotation.getSimpleName(), content); + if (content != null) { + node.addSingleMemberAnnotation(annotation.getSimpleName(), content); + } else { + node.addMarkerAnnotation(annotation.getSimpleName()); + } node.tryAddImportToParentCompilationUnit(annotation); } - - + + protected void annotateOverridden(MethodDeclaration method) { + annotate(method, Override.class, null); + } + } diff --git a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/RemoveMethodGenerator.java b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/RemoveMethodGenerator.java index edc358b43..ac31d9082 100644 --- a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/RemoveMethodGenerator.java +++ b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/RemoveMethodGenerator.java @@ -27,13 +27,11 @@ public class RemoveMethodGenerator extends NodeGenerator { @Override protected void generateNode(BaseNodeMetaModel nodeMetaModel, CompilationUnit nodeCu, ClassOrInterfaceDeclaration nodeCoid) { - final MethodDeclaration removeMethod = getOrCreateMethod(nodeCoid, () -> { - nodeCu.addImport(Node.class); - return (MethodDeclaration) parseClassBodyDeclaration("@Override public boolean remove(Node node) {}"); - }, - "remove", "Node"); + MethodDeclaration removeNodeMethod = (MethodDeclaration) parseClassBodyDeclaration("public boolean remove(Node node) {}"); + nodeCu.addImport(Node.class); + nodeMetaModel.getSuperNodeMetaModel().ifPresent(s -> annotateOverridden(removeNodeMethod)); - final BlockStmt body = emptyBodyFor(removeMethod); + final BlockStmt body = removeNodeMethod.getBody().get(); body.addStatement("if (node == null) return false;"); @@ -61,28 +59,9 @@ public class RemoveMethodGenerator extends NodeGenerator { } else { body.addStatement("return false;"); } - } - - private BlockStmt emptyBodyFor(NodeWithOptionalBlockStmt<?> removeMethod) { - final BlockStmt body = removeMethod.getBody().get(); - body.getStatements().clear(); - return body; - } - - private MethodDeclaration getOrCreateMethod(ClassOrInterfaceDeclaration nodeCoid, - Supplier<MethodDeclaration> newMethodSupplier, - String methodName, String... parameterTypes) { - final List<MethodDeclaration> methods = nodeCoid.getMethodsBySignature(methodName, parameterTypes); - final MethodDeclaration method; - if (methods.isEmpty()) { - method = newMethodSupplier.get(); - nodeCoid.addMember(method); - } else if (methods.size() == 1) { - method = methods.get(0); - } else { - throw new AssertionError(f("Found more than one method while expecting only one.")); - } - return method; + + addOrReplaceWhenSameSignature(nodeCoid, removeNodeMethod); + annotateGenerated(removeNodeMethod); } private String attributeCheck(PropertyMetaModel property, String removeAttributeMethodName) { @@ -102,12 +81,14 @@ public class RemoveMethodGenerator extends NodeGenerator { } private String generateRemoveMethodForAttribute(ClassOrInterfaceDeclaration nodeCoid, BaseNodeMetaModel nodeMetaModel, PropertyMetaModel property) { - String methodName = "remove" + capitalize(property.getName()); - MethodDeclaration removeMethod = getOrCreateMethod(nodeCoid, - () -> (MethodDeclaration) parseClassBodyDeclaration(f("public %s %s() {}", nodeMetaModel.getTypeName(), methodName)), - methodName); - BlockStmt block = emptyBodyFor(removeMethod); + final String methodName = "remove" + capitalize(property.getName()); + final MethodDeclaration removeMethod = (MethodDeclaration) parseClassBodyDeclaration(f("public %s %s() {}", nodeMetaModel.getTypeName(), methodName)); + + final BlockStmt block = removeMethod.getBody().get(); block.addStatement(f("return %s((%s) null);", property.getSetterMethodName(), property.getTypeNameForSetter())); + + addOrReplaceWhenSameSignature(nodeCoid, removeMethod); + annotateGenerated(removeMethod); return methodName; } } |