From 8a0e9ac0be8e9754471cbe0cee469b7975f5de70 Mon Sep 17 00:00:00 2001 From: Andrew Bwogi <bwogi.andrew@gmail.com> Date: Thu, 29 Apr 2021 18:52:07 +0200 Subject: [PATCH 1/7] add test cases --- .../java/spoon/test/snippets/SnippetTest.java | 57 +++++++++++++++++++ .../snippet/SnippetCommentResource.java | 8 +++ .../UnnamedPackageSnippetResource.java | 6 ++ 3 files changed, 71 insertions(+) create mode 100644 src/test/resources/snippet/UnnamedPackageSnippetResource.java diff --git a/src/test/java/spoon/test/snippets/SnippetTest.java b/src/test/java/spoon/test/snippets/SnippetTest.java index f53d1501a26..71d421af148 100644 --- a/src/test/java/spoon/test/snippets/SnippetTest.java +++ b/src/test/java/spoon/test/snippets/SnippetTest.java @@ -197,4 +197,61 @@ public void testCompileSnippetsWithCtComment() { assertEquals(0,body.getStatements().get(2).getComments().size()); assertEquals(0,body.getStatements().get(3).getComments().size()); } + + @Test + public void testCommentSnippetCompilation() { + // contract: snippets with only a comment should be embedded in the next element + Launcher launcher = new Launcher(); + Factory factory = launcher.getFactory(); + launcher.addInputResource("src/test/resources/snippet/SnippetCommentResource.java"); + launcher.buildModel(); + CtClass<?> snippetClass = factory.Class().get("snippet.test.resources.SnippetCommentResource"); + CtMethod method = snippetClass.getMethodsByName("methodForCommentOnlySnippet").get(0); + CtBlock body = method.getBody(); + body.addStatement(0,factory.createCodeSnippetStatement("int x")); + body.addStatement(0,factory.createCodeSnippetStatement("// comment")); + snippetClass.compileAndReplaceSnippets(); + + assertTrue(body.getStatements().get(0) instanceof CtLocalVariable); + assertTrue(body.getStatements().get(1) instanceof CtReturn); + assertEquals(2,body.getStatements().size()); + assertEquals(1,body.getStatements().get(0).getComments().size()); + } + + @Test + public void testLastInBlockCommentSnippetCompilation() { + // contract: if a snippet with only a comment is last in a block + // or followed by CtComments or comment-only snippets exclusively, + // it should be compiled to a CtComment + Launcher launcher = new Launcher(); + Factory factory = launcher.getFactory(); + launcher.addInputResource("src/test/resources/snippet/SnippetCommentResource.java"); + launcher.buildModel(); + CtClass<?> snippetClass = factory.Class().get("snippet.test.resources.SnippetCommentResource"); + CtMethod method = snippetClass.getMethodsByName("methodWithComment").get(0); + CtBlock body = method.getBody(); + body.addStatement(0,factory.createCodeSnippetStatement("// comment")); + snippetClass.compileAndReplaceSnippets(); + + assertTrue(body.getStatements().get(0) instanceof CtComment); + assertTrue(body.getStatements().get(1) instanceof CtComment); + assertEquals(2,body.getStatements().size()); + } + + @Test + public void testSnippetsInEmptyBody() { + // contract: a snippet can be successfully compiled in a class with an unnamed package + Launcher launcher = new Launcher(); + Factory factory = launcher.getFactory(); + launcher.addInputResource("src/test/resources/snippet/UnnamedPackageSnippetResource.java"); + launcher.buildModel(); + CtClass<?> snippetClass = factory.Class().get("UnnamedPackageSnippetResource"); + CtMethod method = snippetClass.getMethodsByName("method").get(0); + CtBlock body = method.getBody(); + body.addStatement(0,factory.createCodeSnippetStatement("int x")); + snippetClass.compileAndReplaceSnippets(); + + assertTrue(body.getStatements().get(0) instanceof CtLocalVariable); + assertEquals(1,body.getStatements().size()); + } } diff --git a/src/test/resources/snippet/SnippetCommentResource.java b/src/test/resources/snippet/SnippetCommentResource.java index 4850fc785ad..aca7647dbfe 100644 --- a/src/test/resources/snippet/SnippetCommentResource.java +++ b/src/test/resources/snippet/SnippetCommentResource.java @@ -10,4 +10,12 @@ public void modifiedMethod() { void invokedMethod() { } + + public void methodWithComment() { + // comment + } + + public void methodForCommentOnlySnippet(){ + return; + } } diff --git a/src/test/resources/snippet/UnnamedPackageSnippetResource.java b/src/test/resources/snippet/UnnamedPackageSnippetResource.java new file mode 100644 index 00000000000..1d930aeaaa8 --- /dev/null +++ b/src/test/resources/snippet/UnnamedPackageSnippetResource.java @@ -0,0 +1,6 @@ +public class UnnamedPackageSnippetResource { + + public void method() { + + } +} \ No newline at end of file From e2a5af7dff7e428413e80e56b0e051d360b3be53 Mon Sep 17 00:00:00 2001 From: Andrew Bwogi <bwogi.andrew@gmail.com> Date: Thu, 29 Apr 2021 18:59:50 +0200 Subject: [PATCH 2/7] change test name --- src/test/java/spoon/test/snippets/SnippetTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/spoon/test/snippets/SnippetTest.java b/src/test/java/spoon/test/snippets/SnippetTest.java index 71d421af148..15e44abea7a 100644 --- a/src/test/java/spoon/test/snippets/SnippetTest.java +++ b/src/test/java/spoon/test/snippets/SnippetTest.java @@ -239,7 +239,7 @@ public void testLastInBlockCommentSnippetCompilation() { } @Test - public void testSnippetsInEmptyBody() { + public void testSnippetCompilationInUnnamedPackage() { // contract: a snippet can be successfully compiled in a class with an unnamed package Launcher launcher = new Launcher(); Factory factory = launcher.getFactory(); From 0020040d1287965bb38673652ea639427a731e07 Mon Sep 17 00:00:00 2001 From: Andrew Bwogi <bwogi.andrew@gmail.com> Date: Sun, 9 May 2021 09:10:29 +0200 Subject: [PATCH 3/7] pass testCommentSnippetCompilation --- .../compiler/SnippetCompilationHelper.java | 68 ++++++++++++++++--- .../support/compiler/jdt/PositionBuilder.java | 4 +- .../java/spoon/test/snippets/SnippetTest.java | 38 ++++------- .../snippet/SnippetCommentResource.java | 4 -- 4 files changed, 76 insertions(+), 38 deletions(-) diff --git a/src/main/java/spoon/support/compiler/SnippetCompilationHelper.java b/src/main/java/spoon/support/compiler/SnippetCompilationHelper.java index 6c4823e6389..0f071bc804e 100644 --- a/src/main/java/spoon/support/compiler/SnippetCompilationHelper.java +++ b/src/main/java/spoon/support/compiler/SnippetCompilationHelper.java @@ -29,14 +29,10 @@ import spoon.reflect.reference.CtTypeReference; import spoon.reflect.visitor.filter.TypeFilter; import spoon.support.compiler.jdt.JDTSnippetCompiler; +import spoon.support.compiler.jdt.PositionBuilder; import spoon.support.reflect.declaration.CtElementImpl; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; /** Helper class for working with snippets */ public class SnippetCompilationHelper { @@ -54,11 +50,14 @@ private SnippetCompilationHelper() { } * */ public static void compileAndReplaceSnippetsIn(CtType<?> initialClass) { - Map<CtPath, CtElement> elements2before = new HashMap<>(); Map<CtPath, CtElement> elements2after = new HashMap<>(); for (Object o : initialClass.filterChildren(new TypeFilter<>(CtCodeSnippet.class)).list()) { CtElement el = (CtElement) o; + if(el instanceof CtCodeSnippetStatement && containsOnlyWhiteSpace(el)){ + replaceComments((CtStatement) el); + continue; + } elements2before.put(el.getPath(), el); } Factory f = initialClass.getFactory(); @@ -75,6 +74,7 @@ public static void compileAndReplaceSnippetsIn(CtType<?> initialClass) { // add dummy statements for each comment so paths are same for initial and new class CtType<?> clonedInitialClass = initialClass.clone(); addDummyStatements(clonedInitialClass); + removeIllegalDummyStatements(clonedInitialClass); try { build(f, "package " + initialClass.getPackage().getQualifiedName() + ";" + clonedInitialClass.toString()); @@ -101,16 +101,68 @@ public static void compileAndReplaceSnippetsIn(CtType<?> initialClass) { } } + private static boolean containsOnlyWhiteSpace(CtElement element) { + char[] snippet = (element.toString() + '\n').toCharArray(); + int next = PositionBuilder.findNextNonWhitespace(snippet,snippet.length-1,0); + if (next == -1) { + return true; + } + else { + return false; + } + } + + private static void replaceComments(CtStatement element) { + replaceComments(element,(element.toString() + '\n').toCharArray()); + element.delete(); + } + + private static void replaceComments(CtStatement element, char[] snippet) { + Factory factory = element.getFactory(); + CtComment comment; + for(int i = 0; i < snippet.length;i++){ + if(Character.isWhitespace(snippet[i])){ + continue; + } + int end = PositionBuilder.getEndOfComment(snippet,snippet.length-1,i); + if(snippet[i+1] == '*') { + comment = factory.createComment(new String(Arrays.copyOfRange(snippet, i+2, end-1)),CtComment.CommentType.BLOCK); + } else { + comment = factory.createComment(new String(Arrays.copyOfRange(snippet, i+2, end)),CtComment.CommentType.INLINE); + } + element.insertBefore(comment); + if(end+1<snippet.length) { + replaceComments(element, Arrays.copyOfRange(snippet, end + 1, snippet.length)); + } + break; + } + } + private static void addDummyStatements(CtType<?> clonedInitialClass) { Factory factory = clonedInitialClass.getFactory(); - CtConstructorCall call = factory.createConstructorCall(factory.createCtTypeReference(Object.class)); List<CtComment> list = clonedInitialClass.filterChildren(new TypeFilter<>(CtComment.class)).list(); for (CtComment comment : list) { + CtConstructorCall call = factory.createConstructorCall(factory.createCtTypeReference(Object.class)); comment.insertBefore(call); comment.delete(); } } + private static void removeIllegalDummyStatements(CtType<?> clonedInitialClass) { + for (Object o : clonedInitialClass.filterChildren(new TypeFilter<>(CtReturn.class)).list()) { + CtStatement returnStmt = (CtStatement) o; + CtBlock block = (CtBlock) returnStmt.getParent(); + for(int i = block.getStatements().size()-1; i>0; i--){ + CtStatement currentStatement = block.getStatement(i); + if(currentStatement == returnStmt){ + break; + } else { + currentStatement.delete(); + } + } + } + } + public static CtStatement compileStatement(CtCodeSnippetStatement st) throws SnippetCompilationError { return internalCompileStatement(st, st.getFactory().Type().VOID_PRIMITIVE); diff --git a/src/main/java/spoon/support/compiler/jdt/PositionBuilder.java b/src/main/java/spoon/support/compiler/jdt/PositionBuilder.java index d5131c4c4de..f122ad7e5aa 100644 --- a/src/main/java/spoon/support/compiler/jdt/PositionBuilder.java +++ b/src/main/java/spoon/support/compiler/jdt/PositionBuilder.java @@ -668,7 +668,7 @@ static int findNextChar(char[] contents, int maxOff, int off, char expectedChar) * Note: all kinds of java comments are understood as whitespace too. * The search must start out of comment or on the first character of the comment */ - static int findNextNonWhitespace(char[] content, int maxOff, int off) { + public static int findNextNonWhitespace(char[] content, int maxOff, int off) { return findNextNonWhitespace(true, content, maxOff, off); } @@ -779,7 +779,7 @@ static int findPrevWhitespace(char[] content, int minOff, int off) { * @return if the off points at start of comment then it returns offset which points on last character of the comment * if the off does not point at start of comment then it returns -1 */ - static int getEndOfComment(char[] content, int maxOff, int off) { + public static int getEndOfComment(char[] content, int maxOff, int off) { maxOff = Math.min(maxOff, content.length - 1); if (off + 1 <= maxOff) { if (content[off] == '/' && content[off + 1] == '*') { diff --git a/src/test/java/spoon/test/snippets/SnippetTest.java b/src/test/java/spoon/test/snippets/SnippetTest.java index 15e44abea7a..3cbb11a98f0 100644 --- a/src/test/java/spoon/test/snippets/SnippetTest.java +++ b/src/test/java/spoon/test/snippets/SnippetTest.java @@ -200,7 +200,7 @@ public void testCompileSnippetsWithCtComment() { @Test public void testCommentSnippetCompilation() { - // contract: snippets with only a comment should be embedded in the next element + // contract: a snippet with only a comment should be replaced with a CtComment Launcher launcher = new Launcher(); Factory factory = launcher.getFactory(); launcher.addInputResource("src/test/resources/snippet/SnippetCommentResource.java"); @@ -208,34 +208,24 @@ public void testCommentSnippetCompilation() { CtClass<?> snippetClass = factory.Class().get("snippet.test.resources.SnippetCommentResource"); CtMethod method = snippetClass.getMethodsByName("methodForCommentOnlySnippet").get(0); CtBlock body = method.getBody(); + body.addStatement(1,factory.createCodeSnippetStatement("/* a \n block \n comment */\n// inline")); + body.addStatement(0,factory.createCodeSnippetStatement("/* a \n block \n comment */")); body.addStatement(0,factory.createCodeSnippetStatement("int x")); - body.addStatement(0,factory.createCodeSnippetStatement("// comment")); - snippetClass.compileAndReplaceSnippets(); - - assertTrue(body.getStatements().get(0) instanceof CtLocalVariable); - assertTrue(body.getStatements().get(1) instanceof CtReturn); - assertEquals(2,body.getStatements().size()); - assertEquals(1,body.getStatements().get(0).getComments().size()); - } + body.addStatement(0,factory.createCodeSnippetStatement(" // inline")); - @Test - public void testLastInBlockCommentSnippetCompilation() { - // contract: if a snippet with only a comment is last in a block - // or followed by CtComments or comment-only snippets exclusively, - // it should be compiled to a CtComment - Launcher launcher = new Launcher(); - Factory factory = launcher.getFactory(); - launcher.addInputResource("src/test/resources/snippet/SnippetCommentResource.java"); - launcher.buildModel(); - CtClass<?> snippetClass = factory.Class().get("snippet.test.resources.SnippetCommentResource"); - CtMethod method = snippetClass.getMethodsByName("methodWithComment").get(0); - CtBlock body = method.getBody(); - body.addStatement(0,factory.createCodeSnippetStatement("// comment")); snippetClass.compileAndReplaceSnippets(); assertTrue(body.getStatements().get(0) instanceof CtComment); - assertTrue(body.getStatements().get(1) instanceof CtComment); - assertEquals(2,body.getStatements().size()); + assertTrue(body.getStatements().get(1) instanceof CtLocalVariable); + assertTrue(body.getStatements().get(2) instanceof CtComment); + assertTrue(body.getStatements().get(3) instanceof CtReturn); + assertTrue(body.getStatements().get(4) instanceof CtComment); + assertTrue(body.getStatements().get(5) instanceof CtComment); + assertEquals(CtComment.CommentType.INLINE,((CtComment) body.getStatements().get(0)).getCommentType()); + assertEquals(CtComment.CommentType.BLOCK,((CtComment) body.getStatements().get(2)).getCommentType()); + assertEquals(CtComment.CommentType.BLOCK,((CtComment) body.getStatements().get(4)).getCommentType()); + assertEquals(CtComment.CommentType.INLINE,((CtComment) body.getStatements().get(5)).getCommentType()); + assertEquals(6,body.getStatements().size()); } @Test diff --git a/src/test/resources/snippet/SnippetCommentResource.java b/src/test/resources/snippet/SnippetCommentResource.java index aca7647dbfe..1ae41833e8e 100644 --- a/src/test/resources/snippet/SnippetCommentResource.java +++ b/src/test/resources/snippet/SnippetCommentResource.java @@ -11,10 +11,6 @@ public void modifiedMethod() { void invokedMethod() { } - public void methodWithComment() { - // comment - } - public void methodForCommentOnlySnippet(){ return; } From 5304cfe87f8d2af193262e3909a1c83430aaac0f Mon Sep 17 00:00:00 2001 From: Andrew Bwogi <bwogi.andrew@gmail.com> Date: Wed, 12 May 2021 14:07:23 +0200 Subject: [PATCH 4/7] pass testSnippetCompilationInUnnamedPackage --- .../compiler/SnippetCompilationHelper.java | 15 ++++++++++++--- .../java/spoon/test/snippets/SnippetTest.java | 7 +------ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/main/java/spoon/support/compiler/SnippetCompilationHelper.java b/src/main/java/spoon/support/compiler/SnippetCompilationHelper.java index 0f071bc804e..5660a4ece05 100644 --- a/src/main/java/spoon/support/compiler/SnippetCompilationHelper.java +++ b/src/main/java/spoon/support/compiler/SnippetCompilationHelper.java @@ -31,8 +31,13 @@ import spoon.support.compiler.jdt.JDTSnippetCompiler; import spoon.support.compiler.jdt.PositionBuilder; import spoon.support.reflect.declaration.CtElementImpl; - -import java.util.*; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Arrays; /** Helper class for working with snippets */ public class SnippetCompilationHelper { @@ -76,8 +81,12 @@ public static void compileAndReplaceSnippetsIn(CtType<?> initialClass) { addDummyStatements(clonedInitialClass); removeIllegalDummyStatements(clonedInitialClass); + String pkg = initialClass.getPackage().getQualifiedName(); + if(!pkg.equals("")){ + pkg = "package " + pkg + ";"; + } try { - build(f, "package " + initialClass.getPackage().getQualifiedName() + ";" + clonedInitialClass.toString()); + build(f, pkg + clonedInitialClass.toString()); } finally { // restore modifiers initialClass.setModifiers(backup); diff --git a/src/test/java/spoon/test/snippets/SnippetTest.java b/src/test/java/spoon/test/snippets/SnippetTest.java index 3cbb11a98f0..0020ba2c0b5 100644 --- a/src/test/java/spoon/test/snippets/SnippetTest.java +++ b/src/test/java/spoon/test/snippets/SnippetTest.java @@ -181,9 +181,7 @@ public void testCompileSnippetsWithCtComment() { CtBlock innerBlock = body.getStatement(0); innerBlock.addStatement(0,factory.createCodeSnippetStatement("invokedMethod()")); body.addStatement(0,factory.createComment("block comment", CtComment.CommentType.BLOCK)); - testClass.compileAndReplaceSnippets(); - assertTrue(body.getStatements().get(0) instanceof CtComment); assertTrue(body.getStatements().get(1) instanceof CtBlock); assertTrue(body.getStatements().get(2) instanceof CtComment); @@ -200,7 +198,7 @@ public void testCompileSnippetsWithCtComment() { @Test public void testCommentSnippetCompilation() { - // contract: a snippet with only a comment should be replaced with a CtComment + // contract: a snippet with only comments should be replaced with corresponding CtComments Launcher launcher = new Launcher(); Factory factory = launcher.getFactory(); launcher.addInputResource("src/test/resources/snippet/SnippetCommentResource.java"); @@ -212,9 +210,7 @@ public void testCommentSnippetCompilation() { body.addStatement(0,factory.createCodeSnippetStatement("/* a \n block \n comment */")); body.addStatement(0,factory.createCodeSnippetStatement("int x")); body.addStatement(0,factory.createCodeSnippetStatement(" // inline")); - snippetClass.compileAndReplaceSnippets(); - assertTrue(body.getStatements().get(0) instanceof CtComment); assertTrue(body.getStatements().get(1) instanceof CtLocalVariable); assertTrue(body.getStatements().get(2) instanceof CtComment); @@ -240,7 +236,6 @@ public void testSnippetCompilationInUnnamedPackage() { CtBlock body = method.getBody(); body.addStatement(0,factory.createCodeSnippetStatement("int x")); snippetClass.compileAndReplaceSnippets(); - assertTrue(body.getStatements().get(0) instanceof CtLocalVariable); assertEquals(1,body.getStatements().size()); } From eac1e5648cfb4e0147f9144a711ed95b31ff7c09 Mon Sep 17 00:00:00 2001 From: Andrew Bwogi <bwogi.andrew@gmail.com> Date: Wed, 12 May 2021 14:13:31 +0200 Subject: [PATCH 5/7] fix checkstyle --- .../compiler/SnippetCompilationHelper.java | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/main/java/spoon/support/compiler/SnippetCompilationHelper.java b/src/main/java/spoon/support/compiler/SnippetCompilationHelper.java index 5660a4ece05..7f41a3a0034 100644 --- a/src/main/java/spoon/support/compiler/SnippetCompilationHelper.java +++ b/src/main/java/spoon/support/compiler/SnippetCompilationHelper.java @@ -59,7 +59,7 @@ public static void compileAndReplaceSnippetsIn(CtType<?> initialClass) { Map<CtPath, CtElement> elements2after = new HashMap<>(); for (Object o : initialClass.filterChildren(new TypeFilter<>(CtCodeSnippet.class)).list()) { CtElement el = (CtElement) o; - if(el instanceof CtCodeSnippetStatement && containsOnlyWhiteSpace(el)){ + if (el instanceof CtCodeSnippetStatement && containsOnlyWhiteSpace(el)) { replaceComments((CtStatement) el); continue; } @@ -82,7 +82,7 @@ public static void compileAndReplaceSnippetsIn(CtType<?> initialClass) { removeIllegalDummyStatements(clonedInitialClass); String pkg = initialClass.getPackage().getQualifiedName(); - if(!pkg.equals("")){ + if (!pkg.equals("")) { pkg = "package " + pkg + ";"; } try { @@ -112,35 +112,34 @@ public static void compileAndReplaceSnippetsIn(CtType<?> initialClass) { private static boolean containsOnlyWhiteSpace(CtElement element) { char[] snippet = (element.toString() + '\n').toCharArray(); - int next = PositionBuilder.findNextNonWhitespace(snippet,snippet.length-1,0); + int next = PositionBuilder.findNextNonWhitespace(snippet, snippet.length - 1, 0); if (next == -1) { return true; - } - else { + } else { return false; } } private static void replaceComments(CtStatement element) { - replaceComments(element,(element.toString() + '\n').toCharArray()); + replaceComments(element, (element.toString() + '\n').toCharArray()); element.delete(); } private static void replaceComments(CtStatement element, char[] snippet) { Factory factory = element.getFactory(); CtComment comment; - for(int i = 0; i < snippet.length;i++){ - if(Character.isWhitespace(snippet[i])){ + for (int i = 0; i < snippet.length; i++) { + if (Character.isWhitespace(snippet[i])) { continue; } - int end = PositionBuilder.getEndOfComment(snippet,snippet.length-1,i); - if(snippet[i+1] == '*') { - comment = factory.createComment(new String(Arrays.copyOfRange(snippet, i+2, end-1)),CtComment.CommentType.BLOCK); + int end = PositionBuilder.getEndOfComment(snippet, snippet.length - 1, i); + if (snippet[i + 1] == '*') { + comment = factory.createComment(new String(Arrays.copyOfRange(snippet, i + 2, end - 1)), CtComment.CommentType.BLOCK); } else { - comment = factory.createComment(new String(Arrays.copyOfRange(snippet, i+2, end)),CtComment.CommentType.INLINE); + comment = factory.createComment(new String(Arrays.copyOfRange(snippet, i + 2, end)), CtComment.CommentType.INLINE); } element.insertBefore(comment); - if(end+1<snippet.length) { + if (end + 1 < snippet.length) { replaceComments(element, Arrays.copyOfRange(snippet, end + 1, snippet.length)); } break; @@ -161,9 +160,9 @@ private static void removeIllegalDummyStatements(CtType<?> clonedInitialClass) { for (Object o : clonedInitialClass.filterChildren(new TypeFilter<>(CtReturn.class)).list()) { CtStatement returnStmt = (CtStatement) o; CtBlock block = (CtBlock) returnStmt.getParent(); - for(int i = block.getStatements().size()-1; i>0; i--){ + for (int i = block.getStatements().size() - 1; i > 0; i--) { CtStatement currentStatement = block.getStatement(i); - if(currentStatement == returnStmt){ + if (currentStatement == returnStmt) { break; } else { currentStatement.delete(); From 2040475fd0054850d66883d6b19f8e7d06695b4b Mon Sep 17 00:00:00 2001 From: Andrew Bwogi <bwogi.andrew@gmail.com> Date: Tue, 18 May 2021 09:36:13 +0200 Subject: [PATCH 6/7] retrigger tests --- src/test/java/spoon/test/snippets/SnippetTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/spoon/test/snippets/SnippetTest.java b/src/test/java/spoon/test/snippets/SnippetTest.java index 0020ba2c0b5..7e265017d57 100644 --- a/src/test/java/spoon/test/snippets/SnippetTest.java +++ b/src/test/java/spoon/test/snippets/SnippetTest.java @@ -237,6 +237,6 @@ public void testSnippetCompilationInUnnamedPackage() { body.addStatement(0,factory.createCodeSnippetStatement("int x")); snippetClass.compileAndReplaceSnippets(); assertTrue(body.getStatements().get(0) instanceof CtLocalVariable); - assertEquals(1,body.getStatements().size()); + assertEquals(1,body.getStatements().size()); } } From d668116029d3dda002c5de4eefc5b4cb3381c111 Mon Sep 17 00:00:00 2001 From: Andrew Bwogi <bwogi.andrew@gmail.com> Date: Wed, 19 May 2021 11:56:33 +0200 Subject: [PATCH 7/7] fix javadoc checkstyle --- .../java/spoon/support/compiler/jdt/PositionBuilder.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/spoon/support/compiler/jdt/PositionBuilder.java b/src/main/java/spoon/support/compiler/jdt/PositionBuilder.java index f122ad7e5aa..ea53076ff12 100644 --- a/src/main/java/spoon/support/compiler/jdt/PositionBuilder.java +++ b/src/main/java/spoon/support/compiler/jdt/PositionBuilder.java @@ -662,7 +662,9 @@ static int findNextChar(char[] contents, int maxOff, int off, char expectedChar) } /** - * @param maxOff maximum acceptable return value + * @param content the character array on which the search will be performed. + * @param maxOff maximum acceptable return value. + * @param off the offset of {@code content} where the search begins. * @return index of first non whitespace char, searching forward. * Can return 'off' if it is non whitespace. * Note: all kinds of java comments are understood as whitespace too. @@ -775,7 +777,9 @@ static int findPrevWhitespace(char[] content, int minOff, int off) { return -1; } /** - * @param maxOff maximum acceptable return value + * @param content the character array on which the search will be performed. + * @param maxOff maximum acceptable return value. + * @param off the offset of {@code content} where the search begins. * @return if the off points at start of comment then it returns offset which points on last character of the comment * if the off does not point at start of comment then it returns -1 */