aboutsummaryrefslogtreecommitdiffstats
path: root/javaparser-core-generators/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'javaparser-core-generators/src/main')
-rw-r--r--javaparser-core-generators/src/main/java/com/github/javaparser/generator/Generator.java21
-rw-r--r--javaparser-core-generators/src/main/java/com/github/javaparser/generator/NodeGenerator.java39
-rw-r--r--javaparser-core-generators/src/main/java/com/github/javaparser/generator/VisitorGenerator.java5
-rw-r--r--javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/CloneGenerator.java2
-rw-r--r--javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/GetMetaModelGenerator.java5
-rw-r--r--javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/GetNodeListsGenerator.java2
-rw-r--r--javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/MainConstructorGenerator.java4
-rw-r--r--javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/PropertyGenerator.java33
8 files changed, 64 insertions, 47 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 60ebd3d13..321ae33b2 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,8 @@
package com.github.javaparser.generator;
import com.github.javaparser.ast.Node;
+import com.github.javaparser.ast.expr.Expression;
+import com.github.javaparser.ast.expr.StringLiteralExpr;
import com.github.javaparser.ast.nodeTypes.NodeWithAnnotations;
import com.github.javaparser.utils.SourceRoot;
@@ -21,12 +23,23 @@ public abstract class Generator {
public abstract void generate() throws Exception;
- protected <T extends Node & NodeWithAnnotations<T>> void markGenerated(T node) {
+ protected <T extends Node & NodeWithAnnotations<T>> void annotateGenerated(T node) {
+ annotate(node, Generated.class, new StringLiteralExpr(getClass().getName()));
+ }
+
+ protected <T extends Node & NodeWithAnnotations<T>> void annotateSuppressWarnings(T node) {
+ annotate(node, SuppressWarnings.class, new StringLiteralExpr("unchecked"));
+ }
+
+ private <T extends Node & NodeWithAnnotations<T>> void annotate(T node, Class<?> annotation, Expression content) {
node.setAnnotations(
node.getAnnotations().stream()
- .filter(a -> !a.getNameAsString().equals("Generated"))
+ .filter(a -> !a.getNameAsString().equals(annotation.getSimpleName()))
.collect(toNodeList()));
- node.addSingleMemberAnnotation(Generated.class, f("\"%s\"", getClass().getName()));
- node.tryAddImportToParentCompilationUnit(Generated.class);
+
+ node.addSingleMemberAnnotation(annotation.getSimpleName(), content);
+ node.tryAddImportToParentCompilationUnit(annotation);
}
+
+
}
diff --git a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/NodeGenerator.java b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/NodeGenerator.java
index eb4f38cef..d15928f5a 100644
--- a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/NodeGenerator.java
+++ b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/NodeGenerator.java
@@ -40,32 +40,37 @@ public abstract class NodeGenerator extends Generator {
/**
* Utility method that looks for a method or constructor with an identical signature as "callable" and replaces it
- * with callable. If not found, adds callable.
+ * with callable. If not found, adds callable. When the new callable has no javadoc, any old javadoc will be kept.
*/
- protected void addOrReplaceWhenSameSignature(ClassOrInterfaceDeclaration nodeCoid, CallableDeclaration callable) {
- List<CallableDeclaration> existingCallables = nodeCoid.getCallablesWithSignature(callable.getSignature());
- if (existingCallables.isEmpty()) {
- nodeCoid.addMember(callable);
- return;
- }
- if (existingCallables.size() > 1) {
- throw new AssertionError(f("Wanted to regenerate a method with signature %s in %s, but found more than one.", callable.getSignature(), nodeCoid.getNameAsString()));
- }
- nodeCoid.getMembers().replace(existingCallables.get(0), callable);
+ protected void addOrReplaceWhenSameSignature(ClassOrInterfaceDeclaration containingClassOrInterface, CallableDeclaration<?> callable) {
+ addMethod(containingClassOrInterface, callable, () -> containingClassOrInterface.addMember(callable));
}
/**
* Utility method that looks for a method or constructor with an identical signature as "callable" and replaces it
- * with callable. If not found, fails.
+ * with callable. If not found, fails. When the new callable has no javadoc, any old javadoc will be kept.
*/
- protected void replaceWhenSameSignature(ClassOrInterfaceDeclaration nodeCoid, CallableDeclaration callable) {
- List<CallableDeclaration> existingCallables = nodeCoid.getCallablesWithSignature(callable.getSignature());
+ protected void replaceWhenSameSignature(ClassOrInterfaceDeclaration containingClassOrInterface, CallableDeclaration<?> callable) {
+ addMethod(containingClassOrInterface, callable,
+ () -> {
+ throw new AssertionError(f("Wanted to regenerate a method with signature %s in %s, but it wasn't there.", callable.getSignature(), containingClassOrInterface.getNameAsString()));
+ });
+ }
+
+ private void addMethod(
+ ClassOrInterfaceDeclaration containingClassOrInterface,
+ CallableDeclaration<?> callable,
+ Runnable onNoExistingMethod) {
+ List<CallableDeclaration<?>> existingCallables = containingClassOrInterface.getCallablesWithSignature(callable.getSignature());
if (existingCallables.isEmpty()) {
- throw new AssertionError(f("Wanted to regenerate a method with signature %s in %s, but it wasn't there.", callable.getSignature(), nodeCoid.getNameAsString()));
+ onNoExistingMethod.run();
+ return;
}
if (existingCallables.size() > 1) {
- throw new AssertionError(f("Wanted to regenerate a method with signature %s in %s, but found more than one.", callable.getSignature(), nodeCoid.getNameAsString()));
+ throw new AssertionError(f("Wanted to regenerate a method with signature %s in %s, but found more than one.", callable.getSignature(), containingClassOrInterface.getNameAsString()));
}
- nodeCoid.getMembers().replace(existingCallables.get(0), callable);
+ final CallableDeclaration<?> existingCallable = existingCallables.get(0);
+ callable.setJavadocComment(callable.getJavadocComment().orElse(existingCallable.getJavadocComment().orElse(null)));
+ containingClassOrInterface.getMembers().replace(existingCallable, callable);
}
}
diff --git a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/VisitorGenerator.java b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/VisitorGenerator.java
index 999c737dd..8d4ab7cce 100644
--- a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/VisitorGenerator.java
+++ b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/VisitorGenerator.java
@@ -1,6 +1,5 @@
package com.github.javaparser.generator;
-import com.github.javaparser.JavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
@@ -65,7 +64,7 @@ public abstract class VisitorGenerator extends Generator {
if (existingVisitMethod.isPresent()) {
generateVisitMethodBody(node, existingVisitMethod.get(), compilationUnit);
- markGenerated(existingVisitMethod.get());
+ annotateGenerated(existingVisitMethod.get());
} else if (createMissingVisitMethods) {
MethodDeclaration newVisitMethod = visitorClass.addMethod("visit")
.addParameter(node.getTypeNameGenerified(), "n")
@@ -77,7 +76,7 @@ public abstract class VisitorGenerator extends Generator {
.addModifier(PUBLIC);
}
generateVisitMethodBody(node, newVisitMethod, compilationUnit);
- markGenerated(newVisitMethod);
+ annotateGenerated(newVisitMethod);
}
}
diff --git a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/CloneGenerator.java b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/CloneGenerator.java
index 505d70ed0..0cfe52947 100644
--- a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/CloneGenerator.java
+++ b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/CloneGenerator.java
@@ -25,6 +25,6 @@ public class CloneGenerator extends NodeGenerator {
nodeMetaModel.getTypeNameGenerified()
));
addOrReplaceWhenSameSignature(nodeCoid, cloneMethod);
- markGenerated(cloneMethod);
+ annotateGenerated(cloneMethod);
}
}
diff --git a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/GetMetaModelGenerator.java b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/GetMetaModelGenerator.java
index 48ab86b1a..8e16899b5 100644
--- a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/GetMetaModelGenerator.java
+++ b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/GetMetaModelGenerator.java
@@ -1,9 +1,6 @@
package com.github.javaparser.generator.core.node;
-import com.github.javaparser.JavaParser;
import com.github.javaparser.ast.CompilationUnit;
-import com.github.javaparser.ast.Node;
-import com.github.javaparser.ast.body.BodyDeclaration;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.generator.NodeGenerator;
@@ -29,6 +26,6 @@ public class GetMetaModelGenerator extends NodeGenerator {
addOrReplaceWhenSameSignature(nodeCoid, getMetaModelMethod);
nodeCu.addImport(nodeMetaModel.getClass().getName());
nodeCu.addImport(JavaParserMetaModel.class);
- markGenerated(getMetaModelMethod);
+ annotateGenerated(getMetaModelMethod);
}
}
diff --git a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/GetNodeListsGenerator.java b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/GetNodeListsGenerator.java
index 85550ce99..dad26234f 100644
--- a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/GetNodeListsGenerator.java
+++ b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/GetNodeListsGenerator.java
@@ -40,6 +40,6 @@ public class GetNodeListsGenerator extends NodeGenerator {
final MethodDeclaration getNodeListsMethod = (MethodDeclaration) parseClassBodyDeclaration(f("@Override public List<NodeList<?>> getNodeLists() {%s}", statement));
addOrReplaceWhenSameSignature(nodeCoid, getNodeListsMethod);
- markGenerated(getNodeListsMethod);
+ annotateGenerated(getNodeListsMethod);
}
}
diff --git a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/MainConstructorGenerator.java b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/MainConstructorGenerator.java
index 6292c1fdc..d8d4775b7 100644
--- a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/MainConstructorGenerator.java
+++ b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/MainConstructorGenerator.java
@@ -3,7 +3,6 @@ package com.github.javaparser.generator.core.node;
import com.github.javaparser.Range;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.Node;
-import com.github.javaparser.ast.body.CallableDeclaration;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.ConstructorDeclaration;
import com.github.javaparser.ast.stmt.BlockStmt;
@@ -14,7 +13,6 @@ import com.github.javaparser.utils.SeparatedItemStringBuilder;
import com.github.javaparser.utils.SourceRoot;
import static com.github.javaparser.JavaParser.parseExplicitConstructorInvocationStmt;
-import static com.github.javaparser.JavaParser.parseStatement;
import static com.github.javaparser.utils.CodeGenerationUtils.f;
public class MainConstructorGenerator extends NodeGenerator {
@@ -52,6 +50,6 @@ public class MainConstructorGenerator extends NodeGenerator {
replaceWhenSameSignature(nodeCoid, constructor);
nodeCu.addImport(Range.class);
- markGenerated(constructor);
+ annotateGenerated(constructor);
}
}
diff --git a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/PropertyGenerator.java b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/PropertyGenerator.java
index 08a24d3fd..1074228c5 100644
--- a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/PropertyGenerator.java
+++ b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/PropertyGenerator.java
@@ -1,6 +1,5 @@
package com.github.javaparser.generator.core.node;
-import com.github.javaparser.JavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
@@ -9,14 +8,16 @@ import com.github.javaparser.ast.body.EnumDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.stmt.BlockStmt;
import com.github.javaparser.generator.NodeGenerator;
-import com.github.javaparser.utils.SourceRoot;
import com.github.javaparser.metamodel.BaseNodeMetaModel;
import com.github.javaparser.metamodel.JavaParserMetaModel;
import com.github.javaparser.metamodel.PropertyMetaModel;
+import com.github.javaparser.utils.SourceRoot;
import java.util.*;
+import static com.github.javaparser.JavaParser.parseType;
import static com.github.javaparser.ast.Modifier.FINAL;
+import static com.github.javaparser.ast.Modifier.PUBLIC;
import static com.github.javaparser.utils.CodeGenerationUtils.f;
import static com.github.javaparser.utils.Utils.camelCaseToScreaming;
@@ -39,25 +40,24 @@ public class PropertyGenerator extends NodeGenerator {
}
private void generateSetter(BaseNodeMetaModel nodeMetaModel, ClassOrInterfaceDeclaration nodeCoid, PropertyMetaModel property) {
- final List<MethodDeclaration> setters = nodeCoid.getMethodsBySignature(property.getSetterMethodName(), property.getTypeNameForSetter());
final String name = property.getName();
- if (setters.size() != 1) {
- throw new AssertionError(f("Not exactly one setter exists: %s.%s = %s", nodeMetaModel.getTypeName(), name, setters.size()));
- }
- // Fix parameter name
- final MethodDeclaration setter = setters.get(0);
- setter.getParameters().clear();
- setter.addAndGetParameter(property.getTypeNameForSetter(), property.getName())
- .addModifier(FINAL);
-
// Fill body
final String observableName = camelCaseToScreaming(name.startsWith("is") ? name.substring(2) : name);
declaredProperties.put(observableName, property);
+
if (property == JavaParserMetaModel.nodeMetaModel.commentPropertyMetaModel) {
// Node.comment has a very specific setter that we shouldn't overwrite.
return;
}
+ final MethodDeclaration setter = new MethodDeclaration(EnumSet.of(PUBLIC), parseType(property.getContainingNodeMetaModel().getTypeNameGenerified()), property.getSetterMethodName());
+ if (property.getContainingNodeMetaModel().hasWildcard()) {
+ setter.setType(parseType("T"));
+ }
+ setter.getParameters().clear();
+ setter.addAndGetParameter(property.getTypeNameForSetter(), property.getName())
+ .addModifier(FINAL);
+
final BlockStmt body = setter.getBody().get();
body.getStatements().clear();
@@ -84,6 +84,11 @@ public class PropertyGenerator extends NodeGenerator {
} else {
body.addStatement(f("return this;"));
}
+ replaceWhenSameSignature(nodeCoid, setter);
+ if (property.getContainingNodeMetaModel().hasWildcard()) {
+ annotateSuppressWarnings(setter);
+ }
+ annotateGenerated(setter);
}
private void generateGetter(BaseNodeMetaModel nodeMetaModel, ClassOrInterfaceDeclaration nodeCoid, PropertyMetaModel property) {
@@ -100,7 +105,7 @@ public class PropertyGenerator extends NodeGenerator {
}
}
- private void generateObservableProperty(EnumDeclaration observablePropertyEnum, PropertyMetaModel property, boolean derived){
+ private void generateObservableProperty(EnumDeclaration observablePropertyEnum, PropertyMetaModel property, boolean derived) {
boolean isAttribute = !Node.class.isAssignableFrom(property.getType());
String name = property.getName();
String constantName = camelCaseToScreaming(name.startsWith("is") ? name.substring(2) : name);
@@ -140,6 +145,6 @@ public class PropertyGenerator extends NodeGenerator {
}
observablePropertyEnum.addEnumConstant("RANGE");
observablePropertyEnum.addEnumConstant("COMMENTED_NODE");
- markGenerated(observablePropertyEnum);
+ annotateGenerated(observablePropertyEnum);
}
}