Skip to content

Commit

Permalink
Merge pull request #800 from matozoid/issue_554_part_1
Browse files Browse the repository at this point in the history
Support for Java 9 project Jigsaw module-info.java files
  • Loading branch information
matozoid committed Mar 2, 2017
2 parents 52814c7 + 1f8b0ba commit 20dbe9d
Show file tree
Hide file tree
Showing 78 changed files with 3,240 additions and 1,258 deletions.
Expand Up @@ -7,11 +7,9 @@
* A general pattern that the generators in this module will follow.
*/
public abstract class Generator {
protected final JavaParser javaParser;
protected final SourceRoot sourceRoot;

protected Generator(JavaParser javaParser, SourceRoot sourceRoot) {
this.javaParser = javaParser;
protected Generator(SourceRoot sourceRoot) {
this.sourceRoot = sourceRoot;
}

Expand Down
Expand Up @@ -17,14 +17,14 @@
* it, ready for modification.
*/
public abstract class NodeGenerator extends Generator {
protected NodeGenerator(JavaParser javaParser, SourceRoot sourceRoot) {
super(javaParser, sourceRoot);
protected NodeGenerator(SourceRoot sourceRoot) {
super(sourceRoot);
}

public final void generate() throws Exception {
Log.info("Running %s", getClass().getSimpleName());
for (BaseNodeMetaModel nodeMetaModel : JavaParserMetaModel.getNodeMetaModels()) {
CompilationUnit nodeCu = sourceRoot.parse(nodeMetaModel.getPackageName(), nodeMetaModel.getTypeName() + ".java", javaParser);
CompilationUnit nodeCu = sourceRoot.parse(nodeMetaModel.getPackageName(), nodeMetaModel.getTypeName() + ".java");
ClassOrInterfaceDeclaration nodeCoid = nodeCu.getClassByName(nodeMetaModel.getTypeName()).orElseThrow(() -> new IOException("Can't find class"));
generateNode(nodeMetaModel, nodeCu, nodeCoid);
}
Expand Down
Expand Up @@ -4,6 +4,8 @@
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.expr.MarkerAnnotationExpr;
import com.github.javaparser.ast.expr.Name;
import com.github.javaparser.metamodel.BaseNodeMetaModel;
import com.github.javaparser.metamodel.JavaParserMetaModel;
import com.github.javaparser.utils.Log;
Expand All @@ -25,8 +27,8 @@ public abstract class VisitorGenerator extends Generator {
private final String argumentType;
private final boolean createMissingVisitMethods;

protected VisitorGenerator(JavaParser javaParser, SourceRoot sourceRoot, String pkg, String visitorClassName, String returnType, String argumentType, boolean createMissingVisitMethods) {
super(javaParser, sourceRoot);
protected VisitorGenerator(SourceRoot sourceRoot, String pkg, String visitorClassName, String returnType, String argumentType, boolean createMissingVisitMethods) {
super(sourceRoot);
this.pkg = pkg;
this.visitorClassName = visitorClassName;
this.returnType = returnType;
Expand All @@ -37,7 +39,7 @@ protected VisitorGenerator(JavaParser javaParser, SourceRoot sourceRoot, String
public final void generate() throws Exception {
Log.info("Running %s", getClass().getSimpleName());

final CompilationUnit compilationUnit = sourceRoot.tryToParse(pkg, visitorClassName + ".java", javaParser).getResult().get();
final CompilationUnit compilationUnit = sourceRoot.tryToParse(pkg, visitorClassName + ".java").getResult().get();

Optional<ClassOrInterfaceDeclaration> visitorClassOptional = compilationUnit.getClassByName(visitorClassName);
if (!visitorClassOptional.isPresent()) {
Expand All @@ -64,10 +66,15 @@ private void generateVisitMethodForNode(BaseNodeMetaModel node, ClassOrInterface
if (visitMethod.isPresent()) {
generateVisitMethodBody(node, visitMethod.get(), compilationUnit);
} else if (createMissingVisitMethods) {
MethodDeclaration methodDeclaration = visitorClass.addMethod("visit", PUBLIC)
MethodDeclaration methodDeclaration = visitorClass.addMethod("visit")
.addParameter(node.getTypeNameGenerified(), "n")
.addParameter(argumentType, "arg")
.setType(returnType);
if (!visitorClass.isInterface()) {
methodDeclaration
.addAnnotation(new MarkerAnnotationExpr(new Name("Override")))
.addModifier(PUBLIC);
}
generateVisitMethodBody(node, methodDeclaration, compilationUnit);
}
}
Expand Down
Expand Up @@ -25,23 +25,21 @@ public static void main(String[] args) throws Exception {
}

private void run(SourceRoot sourceRoot) throws Exception {
final JavaParser javaParser = new JavaParser();

new GenericListVisitorAdapterGenerator(javaParser, sourceRoot).generate();
new GenericVisitorAdapterGenerator(javaParser, sourceRoot).generate();
new EqualsVisitorGenerator(javaParser, sourceRoot).generate();
new VoidVisitorAdapterGenerator(javaParser, sourceRoot).generate();
new VoidVisitorGenerator(javaParser, sourceRoot).generate();
new GenericVisitorGenerator(javaParser, sourceRoot).generate();
new HashCodeVisitorGenerator(javaParser, sourceRoot).generate();
new CloneVisitorGenerator(javaParser, sourceRoot).generate();
new TreeStructureVisitorGenerator(javaParser, sourceRoot).generate();
new ModifierVisitorGenerator(javaParser, sourceRoot).generate();

new GetNodeListsGenerator(javaParser, sourceRoot).generate();
new PropertyGenerator(javaParser, sourceRoot).generate();
new RemoveMethodGenerator(javaParser, sourceRoot).generate();
new CloneGenerator(javaParser, sourceRoot).generate();
new GetMetaModelGenerator(javaParser, 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();
}
}
Expand Up @@ -13,8 +13,8 @@
import static com.github.javaparser.utils.CodeGenerationUtils.f;

public class CloneGenerator extends NodeGenerator {
public CloneGenerator(JavaParser javaParser, SourceRoot sourceRoot) {
super(javaParser, sourceRoot);
public CloneGenerator(SourceRoot sourceRoot) {
super(sourceRoot);
}

@Override
Expand Down
Expand Up @@ -13,8 +13,8 @@
import static com.github.javaparser.utils.CodeGenerationUtils.f;

public class GetMetaModelGenerator extends NodeGenerator {
public GetMetaModelGenerator(JavaParser javaParser, SourceRoot sourceRoot) {
super(javaParser, sourceRoot);
public GetMetaModelGenerator(SourceRoot sourceRoot) {
super(sourceRoot);
}

@Override
Expand Down
Expand Up @@ -18,8 +18,8 @@
import static com.github.javaparser.utils.CodeGenerationUtils.f;

public class GetNodeListsGenerator extends NodeGenerator {
public GetNodeListsGenerator(JavaParser javaParser, SourceRoot sourceRoot) {
super(javaParser, sourceRoot);
public GetNodeListsGenerator(SourceRoot sourceRoot) {
super(sourceRoot);
}

@Override
Expand Down
Expand Up @@ -25,8 +25,8 @@ public class PropertyGenerator extends NodeGenerator {
private final Map<String, PropertyMetaModel> declaredProperties = new HashMap<>();
private final Map<String, PropertyMetaModel> derivedProperties = new HashMap<>();

public PropertyGenerator(JavaParser javaParser, SourceRoot sourceRoot) {
super(javaParser, sourceRoot);
public PropertyGenerator(SourceRoot sourceRoot) {
super(sourceRoot);
}

@Override
Expand Down Expand Up @@ -122,7 +122,7 @@ private void generateObservableProperty(EnumDeclaration observablePropertyEnum,

@Override
protected void after() throws Exception {
CompilationUnit observablePropertyCu = sourceRoot.tryToParse("com.github.javaparser.ast.observer", "ObservableProperty.java", javaParser).getResult().get();
CompilationUnit observablePropertyCu = sourceRoot.tryToParse("com.github.javaparser.ast.observer", "ObservableProperty.java").getResult().get();
EnumDeclaration observablePropertyEnum = observablePropertyCu.getEnumByName("ObservableProperty").get();
observablePropertyEnum.getEntries().clear();
List<String> observablePropertyNames = new LinkedList<>(declaredProperties.keySet());
Expand Down
Expand Up @@ -21,8 +21,8 @@


public class RemoveMethodGenerator extends NodeGenerator {
public RemoveMethodGenerator(JavaParser javaParser, SourceRoot sourceRoot) {
super(javaParser, sourceRoot);
public RemoveMethodGenerator(SourceRoot sourceRoot) {
super(sourceRoot);
}

@Override
Expand Down
Expand Up @@ -16,8 +16,8 @@
* Generates JavaParser's CloneVisitor.
*/
public class CloneVisitorGenerator extends VisitorGenerator {
public CloneVisitorGenerator(JavaParser javaParser, SourceRoot sourceRoot) {
super(javaParser, sourceRoot, "com.github.javaparser.ast.visitor", "CloneVisitor", "void", "A", true);
public CloneVisitorGenerator(SourceRoot sourceRoot) {
super(sourceRoot, "com.github.javaparser.ast.visitor", "CloneVisitor", "Visitable", "Object", true);
}

@Override
Expand All @@ -29,25 +29,25 @@ protected void generateVisitMethodBody(BaseNodeMetaModel node, MethodDeclaration
final String getter = field.getGetterMethodName() + "()";
if (field.getNodeReference().isPresent()) {
if (field.isOptional() && field.isNodeList()) {
body.addStatement(f("NodeList<%s> %s = cloneList(_n.%s.orElse(null), _arg);", field.getTypeNameGenerified(), field.getName(), getter));
body.addStatement(f("NodeList<%s> %s = cloneList(n.%s.orElse(null), arg);", field.getTypeNameGenerified(), field.getName(), getter));
} else if (field.isNodeList()) {
body.addStatement(f("NodeList<%s> %s = cloneList(_n.%s, _arg);", field.getTypeNameGenerified(), field.getName(), getter));
body.addStatement(f("NodeList<%s> %s = cloneList(n.%s, arg);", field.getTypeNameGenerified(), field.getName(), getter));
} else {
body.addStatement(f("%s %s = cloneNode(_n.%s, _arg);", field.getTypeNameGenerified(), field.getName(), getter));
body.addStatement(f("%s %s = cloneNode(n.%s, arg);", field.getTypeNameGenerified(), field.getName(), getter));
}
}
}

SeparatedItemStringBuilder builder = new SeparatedItemStringBuilder(f("%s r = new %s(", node.getTypeNameGenerified(), node.getTypeNameGenerified()), ",", ");");
builder.append("_n.getRange().orElse(null)");
builder.append("n.getRange().orElse(null)");
for (PropertyMetaModel field : node.getConstructorParameters()) {
if (field.getName().equals("comment")) {
continue;
}
if (field.getNodeReference().isPresent()) {
builder.append(field.getName());
} else {
builder.append(f("_n.%s()", field.getGetterMethodName()));
builder.append(f("n.%s()", field.getGetterMethodName()));
}
}

Expand Down
Expand Up @@ -15,8 +15,8 @@
* Generates JavaParser's EqualsVisitor.
*/
public class EqualsVisitorGenerator extends VisitorGenerator {
public EqualsVisitorGenerator(JavaParser javaParser, SourceRoot sourceRoot) {
super(javaParser, sourceRoot, "com.github.javaparser.ast.visitor", "EqualsVisitor", "Boolean", "Node", true);
public EqualsVisitorGenerator(SourceRoot sourceRoot) {
super(sourceRoot, "com.github.javaparser.ast.visitor", "EqualsVisitor", "Boolean", "Visitable", true);
}

@Override
Expand All @@ -30,12 +30,12 @@ protected void generateVisitMethodBody(BaseNodeMetaModel node, MethodDeclaration
final String getter = field.getGetterMethodName() + "()";
if (field.getNodeReference().isPresent()) {
if (field.isNodeList()) {
body.addStatement(f("if (!nodesEquals(n1.%s, n2.%s)) return false;", getter, getter));
body.addStatement(f("if (!nodesEquals(n.%s, n2.%s)) return false;", getter, getter));
} else {
body.addStatement(f("if (!nodeEquals(n1.%s, n2.%s)) return false;", getter, getter));
body.addStatement(f("if (!nodeEquals(n.%s, n2.%s)) return false;", getter, getter));
}
} else {
body.addStatement(f("if (!objEquals(n1.%s, n2.%s)) return false;", getter, getter));
body.addStatement(f("if (!objEquals(n.%s, n2.%s)) return false;", getter, getter));
}
}
if (body.getStatements().size() == 1) {
Expand Down
Expand Up @@ -19,8 +19,8 @@
* Generates JavaParser's GenericListVisitorAdapter.
*/
public class GenericListVisitorAdapterGenerator extends VisitorGenerator {
public GenericListVisitorAdapterGenerator(JavaParser javaParser, SourceRoot sourceRoot) {
super(javaParser, sourceRoot, "com.github.javaparser.ast.visitor", "GenericListVisitorAdapter", "List<R>", "A", true);
public GenericListVisitorAdapterGenerator(SourceRoot sourceRoot) {
super(sourceRoot, "com.github.javaparser.ast.visitor", "GenericListVisitorAdapter", "List<R>", "A", true);
}

@Override
Expand Down
Expand Up @@ -15,8 +15,8 @@
* Generates JavaParser's VoidVisitorAdapter.
*/
public class GenericVisitorAdapterGenerator extends VisitorGenerator {
public GenericVisitorAdapterGenerator(JavaParser javaParser, SourceRoot sourceRoot) {
super(javaParser, sourceRoot, "com.github.javaparser.ast.visitor", "GenericVisitorAdapter", "void", "A", true);
public GenericVisitorAdapterGenerator(SourceRoot sourceRoot) {
super(sourceRoot, "com.github.javaparser.ast.visitor", "GenericVisitorAdapter", "R", "A", true);
}

@Override
Expand Down
Expand Up @@ -11,8 +11,8 @@
* Generates JavaParser's GenericVisitor.
*/
public class GenericVisitorGenerator extends VisitorGenerator {
public GenericVisitorGenerator(JavaParser javaParser, SourceRoot sourceRoot) {
super(javaParser, sourceRoot, "com.github.javaparser.ast.visitor", "GenericVisitor", "R", "A", true);
public GenericVisitorGenerator(SourceRoot sourceRoot) {
super(sourceRoot, "com.github.javaparser.ast.visitor", "GenericVisitor", "R", "A", true);
}

@Override
Expand Down
Expand Up @@ -18,8 +18,8 @@
* Generates JavaParser's HashCodeVisitor.
*/
public class HashCodeVisitorGenerator extends VisitorGenerator {
public HashCodeVisitorGenerator(JavaParser javaParser, SourceRoot sourceRoot) {
super(javaParser, sourceRoot, "com.github.javaparser.ast.visitor", "HashCodeVisitor", "Integer", "Void", true);
public HashCodeVisitorGenerator(SourceRoot sourceRoot) {
super(sourceRoot, "com.github.javaparser.ast.visitor", "HashCodeVisitor", "Integer", "Void", true);
}

@Override
Expand Down
Expand Up @@ -14,8 +14,8 @@
import static com.github.javaparser.utils.CodeGenerationUtils.f;

public class ModifierVisitorGenerator extends VisitorGenerator {
public ModifierVisitorGenerator(JavaParser javaParser, SourceRoot sourceRoot) {
super(javaParser, sourceRoot, "com.github.javaparser.ast.visitor", "ModifierVisitor", "Visitable", "A", true);
public ModifierVisitorGenerator(SourceRoot sourceRoot) {
super(sourceRoot, "com.github.javaparser.ast.visitor", "ModifierVisitor", "Visitable", "A", true);
}

@Override
Expand Down
Expand Up @@ -14,8 +14,8 @@
import static com.github.javaparser.utils.CodeGenerationUtils.f;

public class TreeStructureVisitorGenerator extends VisitorGenerator {
public TreeStructureVisitorGenerator(JavaParser javaParser, SourceRoot sourceRoot) {
super(javaParser, sourceRoot, "com.github.javaparser.ast.visitor", "TreeStructureVisitor", "void", "Integer", true);
public TreeStructureVisitorGenerator(SourceRoot sourceRoot) {
super(sourceRoot, "com.github.javaparser.ast.visitor", "TreeStructureVisitor", "void", "Integer", true);
}

@Override
Expand Down
Expand Up @@ -15,8 +15,8 @@
* Generates JavaParser's VoidVisitorAdapter.
*/
public class VoidVisitorAdapterGenerator extends VisitorGenerator {
public VoidVisitorAdapterGenerator(JavaParser javaParser, SourceRoot sourceRoot) {
super(javaParser, sourceRoot, "com.github.javaparser.ast.visitor", "VoidVisitorAdapter", "void", "A", true);
public VoidVisitorAdapterGenerator(SourceRoot sourceRoot) {
super(sourceRoot, "com.github.javaparser.ast.visitor", "VoidVisitorAdapter", "void", "A", true);
}

@Override
Expand Down
@@ -1,18 +1,17 @@
package com.github.javaparser.generator.core.visitor;

import com.github.javaparser.JavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.generator.VisitorGenerator;
import com.github.javaparser.utils.SourceRoot;
import com.github.javaparser.metamodel.BaseNodeMetaModel;
import com.github.javaparser.utils.SourceRoot;

/**
* Generates JavaParser's VoidVisitor.
*/
public class VoidVisitorGenerator extends VisitorGenerator {
public VoidVisitorGenerator(JavaParser javaParser, SourceRoot sourceRoot) {
super(javaParser, sourceRoot, "com.github.javaparser.ast.visitor", "VoidVisitor", "void", "A", true);
public VoidVisitorGenerator(SourceRoot sourceRoot) {
super(sourceRoot, "com.github.javaparser.ast.visitor", "VoidVisitor", "void", "A", true);
}

@Override
Expand Down
3 changes: 3 additions & 0 deletions javaparser-core/bnd.bnd
Expand Up @@ -6,12 +6,15 @@ Bundle-SymbolicName: com.github.javaparser.javaparser-core
com.github.javaparser, \
com.github.javaparser.javadoc, \
com.github.javaparser.javadoc.description, \
com.github.javaparser.metamodel, \
com.github.javaparser.printer, \
com.github.javaparser.printer.concretesyntaxmodel, \
com.github.javaparser.utils, \
com.github.javaparser.ast, \
com.github.javaparser.ast.body, \
com.github.javaparser.ast.imports, \
com.github.javaparser.ast.comments, \
com.github.javaparser.ast.modules, \
com.github.javaparser.ast.nodeTypes, \
com.github.javaparser.ast.expr, \
com.github.javaparser.ast.stmt, \
Expand Down

0 comments on commit 20dbe9d

Please sign in to comment.