Skip to content

Commit

Permalink
Mark all generated visitor methods generated
Browse files Browse the repository at this point in the history
  • Loading branch information
matozoid committed Apr 22, 2017
1 parent 4e845ed commit d72a025
Show file tree
Hide file tree
Showing 11 changed files with 908 additions and 6 deletions.
Expand Up @@ -58,24 +58,26 @@ protected void after() throws Exception {
} }


private void generateVisitMethodForNode(BaseNodeMetaModel node, ClassOrInterfaceDeclaration visitorClass, CompilationUnit compilationUnit) { private void generateVisitMethodForNode(BaseNodeMetaModel node, ClassOrInterfaceDeclaration visitorClass, CompilationUnit compilationUnit) {
Optional<MethodDeclaration> visitMethod = visitorClass.getMethods().stream() final Optional<MethodDeclaration> existingVisitMethod = visitorClass.getMethods().stream()
.filter(m -> m.getNameAsString().equals("visit")) .filter(m -> m.getNameAsString().equals("visit"))
.filter(m -> m.getParameter(0).getType().toString().equals(node.getTypeName())) .filter(m -> m.getParameter(0).getType().toString().equals(node.getTypeName()))
.findFirst(); .findFirst();


if (visitMethod.isPresent()) { if (existingVisitMethod.isPresent()) {
generateVisitMethodBody(node, visitMethod.get(), compilationUnit); generateVisitMethodBody(node, existingVisitMethod.get(), compilationUnit);
markGenerated(existingVisitMethod.get());
} else if (createMissingVisitMethods) { } else if (createMissingVisitMethods) {
MethodDeclaration methodDeclaration = visitorClass.addMethod("visit") MethodDeclaration newVisitMethod = visitorClass.addMethod("visit")
.addParameter(node.getTypeNameGenerified(), "n") .addParameter(node.getTypeNameGenerified(), "n")
.addParameter(argumentType, "arg") .addParameter(argumentType, "arg")
.setType(returnType); .setType(returnType);
if (!visitorClass.isInterface()) { if (!visitorClass.isInterface()) {
methodDeclaration newVisitMethod
.addAnnotation(new MarkerAnnotationExpr(new Name("Override"))) .addAnnotation(new MarkerAnnotationExpr(new Name("Override")))
.addModifier(PUBLIC); .addModifier(PUBLIC);
} }
generateVisitMethodBody(node, methodDeclaration, compilationUnit); generateVisitMethodBody(node, newVisitMethod, compilationUnit);
markGenerated(newVisitMethod);
} }
} }


Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

0 comments on commit d72a025

Please sign in to comment.