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
 	 */