diff options
author | Danny van Bruggen <hexagonaal@gmail.com> | 2017-04-22 21:53:53 +0200 |
---|---|---|
committer | Danny van Bruggen <hexagonaal@gmail.com> | 2017-04-22 21:59:00 +0200 |
commit | 14a86a28ac5207c3d0e913937d7ca3a42f3c2d07 (patch) | |
tree | 1c1bb337b91166c85514d39f7cc23b6779f1928c /javaparser-core-generators/src/main/java | |
parent | 0a4143a06b24d2b1997ebf27834b51c31e04f13a (diff) | |
parent | 25b4a1a76a2c5530266376e20b08a9775610240c (diff) | |
download | javaparser-14a86a28ac5207c3d0e913937d7ca3a42f3c2d07.tar.gz |
Import useful code from token-constructor branch
Diffstat (limited to 'javaparser-core-generators/src/main/java')
3 files changed, 80 insertions, 26 deletions
diff --git a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/CoreGenerator.java b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/CoreGenerator.java index cf0b15e12..ceec8fc45 100644 --- a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/CoreGenerator.java +++ b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/CoreGenerator.java @@ -1,6 +1,5 @@ package com.github.javaparser.generator.core; -import com.github.javaparser.JavaParser; import com.github.javaparser.generator.core.node.*; import com.github.javaparser.generator.core.visitor.*; import com.github.javaparser.utils.SourceRoot; @@ -25,21 +24,22 @@ public class CoreGenerator { } private void run(SourceRoot sourceRoot) throws Exception { - new GenericListVisitorAdapterGenerator(sourceRoot).generate(); - new GenericVisitorAdapterGenerator(sourceRoot).generate(); - new EqualsVisitorGenerator(sourceRoot).generate(); - new VoidVisitorAdapterGenerator(sourceRoot).generate(); - new VoidVisitorGenerator(sourceRoot).generate(); - new GenericVisitorGenerator(sourceRoot).generate(); - new HashCodeVisitorGenerator(sourceRoot).generate(); - new CloneVisitorGenerator(sourceRoot).generate(); - new TreeStructureVisitorGenerator(sourceRoot).generate(); - new ModifierVisitorGenerator(sourceRoot).generate(); - - new GetNodeListsGenerator(sourceRoot).generate(); - new PropertyGenerator(sourceRoot).generate(); - new RemoveMethodGenerator(sourceRoot).generate(); - new CloneGenerator(sourceRoot).generate(); - new GetMetaModelGenerator(sourceRoot).generate(); +// new GenericListVisitorAdapterGenerator(sourceRoot).generate(); +// new GenericVisitorAdapterGenerator(sourceRoot).generate(); +// new EqualsVisitorGenerator(sourceRoot).generate(); +// new VoidVisitorAdapterGenerator(sourceRoot).generate(); +// new VoidVisitorGenerator(sourceRoot).generate(); +// new GenericVisitorGenerator(sourceRoot).generate(); +// new HashCodeVisitorGenerator(sourceRoot).generate(); +// new CloneVisitorGenerator(sourceRoot).generate(); +// new TreeStructureVisitorGenerator(sourceRoot).generate(); +// new ModifierVisitorGenerator(sourceRoot).generate(); +// +// new GetNodeListsGenerator(sourceRoot).generate(); +// new PropertyGenerator(sourceRoot).generate(); +// new RemoveMethodGenerator(sourceRoot).generate(); +// new CloneGenerator(sourceRoot).generate(); +// new GetMetaModelGenerator(sourceRoot).generate(); + new MainConstructorGenerator(sourceRoot).generate(); } } 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 new file mode 100644 index 000000000..0c2f8c844 --- /dev/null +++ b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/MainConstructorGenerator.java @@ -0,0 +1,54 @@ +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.ClassOrInterfaceDeclaration; +import com.github.javaparser.ast.body.ConstructorDeclaration; +import com.github.javaparser.ast.stmt.BlockStmt; +import com.github.javaparser.generator.NodeGenerator; +import com.github.javaparser.metamodel.BaseNodeMetaModel; +import com.github.javaparser.metamodel.PropertyMetaModel; +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 { + public MainConstructorGenerator(SourceRoot sourceRoot) { + super(sourceRoot); + } + + @Override + protected void generateNode(BaseNodeMetaModel nodeMetaModel, CompilationUnit nodeCu, ClassOrInterfaceDeclaration nodeCoid) { + if (nodeMetaModel.is(Node.class)) { + return; + } + ConstructorDeclaration constructor = new ConstructorDeclaration() + .setPublic(true) + .setName(nodeCoid.getNameAsString()) + .addParameter(Range.class, "range"); + + + BlockStmt body = constructor.getBody(); + + SeparatedItemStringBuilder superCall = new SeparatedItemStringBuilder("super(", ", ", ");"); + superCall.append("range"); + for (PropertyMetaModel parameter : nodeMetaModel.getConstructorParameters()) { + constructor.addParameter(parameter.getTypeNameForSetter(), parameter.getName()); + if (nodeMetaModel.getDeclaredPropertyMetaModels().contains(parameter)) { + body.addStatement(parseStatement(f("%s(%s);", parameter.getSetterMethodName(), parameter.getName()))); + } else { + superCall.append(parameter.getName()); + } + } + + body.getStatements().add(0, parseExplicitConstructorInvocationStmt(superCall.toString())); + + ConstructorDeclaration existingConstructorDeclaration = nodeCoid.getConstructors().get(nodeCoid.getConstructors().size() - 1); + nodeCoid.getMembers().replace(existingConstructorDeclaration, constructor); + nodeCu.addImport(Range.class); + } +} 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 907428a2a..edc358b43 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 @@ -71,18 +71,18 @@ public class RemoveMethodGenerator extends NodeGenerator { private MethodDeclaration getOrCreateMethod(ClassOrInterfaceDeclaration nodeCoid, Supplier<MethodDeclaration> newMethodSupplier, - String methodName, String... methodParameterTypes) { - final List<MethodDeclaration> removeMethods = nodeCoid.getMethodsBySignature(methodName, methodParameterTypes); - final MethodDeclaration removeMethod; - if (removeMethods.isEmpty()) { - removeMethod = newMethodSupplier.get(); - nodeCoid.addMember(removeMethod); - } else if (removeMethods.size() == 1) { - removeMethod = removeMethods.get(0); + 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 removeMethod; + return method; } private String attributeCheck(PropertyMetaModel property, String removeAttributeMethodName) { |