From e054db3c2bcbc7f0effe148a6023da9136d16388 Mon Sep 17 00:00:00 2001 From: Pouryafard75 Date: Wed, 4 Sep 2024 15:39:57 -0400 Subject: [PATCH] feat: Add JavaDoc comments JdtVisitor --- .../gen/jdt/JdtCommentVisitor.java | 10 +++-- .../gumtreediff/gen/jdt/JdtVisitor.java | 2 +- .../gumtreediff/gen/jdt/TestJdtGenerator.java | 39 +++++++++++++++++++ 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/gen.jdt/src/main/java/com/github/gumtreediff/gen/jdt/JdtCommentVisitor.java b/gen.jdt/src/main/java/com/github/gumtreediff/gen/jdt/JdtCommentVisitor.java index 3b26983a..ae5f7ad1 100644 --- a/gen.jdt/src/main/java/com/github/gumtreediff/gen/jdt/JdtCommentVisitor.java +++ b/gen.jdt/src/main/java/com/github/gumtreediff/gen/jdt/JdtCommentVisitor.java @@ -29,11 +29,9 @@ /* Created by pourya on 2024-08-28*/ class JdtCommentVisitor extends JdtVisitor { final TreeContext context; - final char[] source; public JdtCommentVisitor(IScanner scanner, TreeContext context) { super(scanner); - this.source = scanner.getSource(); this.context = context; } @@ -45,11 +43,17 @@ public boolean visit(LineComment node) { return visitComment(node); } + public boolean visit(Javadoc node) { + if (node.getParent() == null) //Then it is not a normal java doc, it is a comment + return visitComment(node); + return true; + } + public boolean visitComment(Comment node) { int start = node.getStartPosition(); int end = start + node.getLength(); Tree parent = findMostInnerEnclosingParent(context.getRoot(), start, end); - Tree t = context.createTree(nodeAsSymbol(node), new String(source, start, end - start)); + Tree t = context.createTree(nodeAsSymbol(node), new String(scanner.getSource(), start, end - start)); t.setPos(start); t.setLength(node.getLength()); insertChildProperly(parent, t); diff --git a/gen.jdt/src/main/java/com/github/gumtreediff/gen/jdt/JdtVisitor.java b/gen.jdt/src/main/java/com/github/gumtreediff/gen/jdt/JdtVisitor.java index 775079c7..46e86acb 100644 --- a/gen.jdt/src/main/java/com/github/gumtreediff/gen/jdt/JdtVisitor.java +++ b/gen.jdt/src/main/java/com/github/gumtreediff/gen/jdt/JdtVisitor.java @@ -46,7 +46,7 @@ public class JdtVisitor extends AbstractJdtVisitor { private static final Type ARRAY_INITIALIZER = nodeAsSymbol(ASTNode.ARRAY_INITIALIZER); private static final Type SIMPLE_NAME = nodeAsSymbol(ASTNode.SIMPLE_NAME); - private IScanner scanner; + protected IScanner scanner; public JdtVisitor(IScanner scanner) { super(); diff --git a/gen.jdt/src/test/java/com/github/gumtreediff/gen/jdt/TestJdtGenerator.java b/gen.jdt/src/test/java/com/github/gumtreediff/gen/jdt/TestJdtGenerator.java index 7c233040..69632acc 100644 --- a/gen.jdt/src/test/java/com/github/gumtreediff/gen/jdt/TestJdtGenerator.java +++ b/gen.jdt/src/test/java/com/github/gumtreediff/gen/jdt/TestJdtGenerator.java @@ -224,4 +224,43 @@ public void testComments() throws IOException { + " LineComment: //run(); [66,74]"; assertEquals(expected, ct.getRoot().toTreeString()); } + + @Test + public void testComments2() throws IOException { + String input = "/**\n" + + " * test\n" + + " */\n" + + "public class X {\n" + + " void A(boolean b\n" + + " ) {\n" + + " /**\n" + + " * test2 \n" + + " */\n" + + " sleep();\n" + + " }\n" + + "}\n"; + String expected = "CompilationUnit [0,145]\n" + + " TypeDeclaration [0,144]\n" + + " Javadoc [0,31]\n" + + " TagElement [15,19]\n" + + " TextElement: test [15,19]\n" + + " Modifier: public [32,38]\n" + + " TYPE_DECLARATION_KIND: class [39,44]\n" + + " SimpleName: X [45,46]\n" + + " MethodDeclaration [53,142]\n" + + " PrimitiveType: void [53,57]\n" + + " SimpleName: A [58,59]\n" + + " SingleVariableDeclaration [60,69]\n" + + " PrimitiveType: boolean [60,67]\n" + + " SimpleName: b [68,69]\n" + + " Block [76,142]\n" + + " Javadoc: /**\n" + + " * test2 \n" + + " */ [86,119]\n" + + " ExpressionStatement [128,136]\n" + + " MethodInvocation [128,135]\n" + + " SimpleName: sleep [128,133]"; + TreeContext ct = new JdtTreeGenerator().generateFrom().string(input); + assertEquals(expected, ct.getRoot().toTreeString()); + } }