[Bug]: Orphan comment is not pretty printed by Spoon
- Dominant language
- Java
- Stars
- 2k
- Forks
- 392
- Avg merge
- 11h 24m
- Merged PRs (30d)
- 36
Description
### Describe the bug
It seems that Spoon's pretty print feature is not able to handle orphan comments (e.g., comments at the very end of a method).
### Source code you are trying to analyze/transform
```Java
// /tmp/demo-in/org/Foo.java
package org;
public class Foo {
@Test
public void should_match() throws Exception {
class WithMockAndSpy {
@Spy private InnerStrength strength;
@Mock private List list;
abstract class InnerStrength {
private final String name;
InnerStrength() {
// Make sure that @Mock fields are always injected before @Spy fields.
assertNotNull(list);
// Make sure constructor is indeed called.
this.name = "inner";
}
abstract String strength();
String fullStrength() {
return name + " " + strength();
}
}
}
WithMockAndSpy outer = new WithMockAndSpy();
MockitoAnnotations.initMocks(outer);
when(outer.strength.strength()).thenReturn("strength");
// orphan comment
}
}
```
### Source code for your Spoon processing
```Java
final Launcher launcher = new Launcher();
launcher.addInputResource("/tmp/demo-in/org/Foo.java");
launcher.getEnvironment().setSourceOutputDirectory(new File("/tmp/demo-out"));
launcher.getEnvironment().setCommentEnabled(true);
launcher.run();
```
### Actual output
```Java
package org;
public class Foo {
@org.Test
public void should_match() throws java.lang.Exception {
class WithMockAndSpy {
@org.Spy
private WithMockAndSpy.InnerStrength strength;
@org.Mock
private org.List list;
abstract class InnerStrength {
private final java.lang.String name;
InnerStrength() {
// Make sure that @Mock fields are always injected before @Spy fields.
assertNotNull(list);
// Make sure constructor is indeed called.
this.name = "inner";
}
abstract java.lang.String strength();
java.lang.String fullStrength() {
return (name + " ") + strength();
}
}
}
WithMockAndSpy outer = new WithMockAndSpy();
org.MockitoAnnotations.initMocks(outer);
when(outer.strength.strength()).thenReturn("strength");
}
}
```
### Expected output
```Java
package org;
public class Foo {
@org.Test
public void should_match() throws java.lang.Exception {
class WithMockAndSpy {
@org.Spy
private WithMockAndSpy.InnerStrength strength;
@org.Mock
private org.List list;
abstract class InnerStrength {
private final java.lang.String name;
InnerStrength() {
// Make sure that @Mock fields are always injected before @Spy fields.
assertNotNull(list);
// Make sure constructor is indeed called.
this.name = "inner";
}
abstract java.lang.String strength();
java.lang.String fullStrength() {
return (name + " ") + strength();
}
}
}
WithMockAndSpy outer = new WithMockAndSpy();
org.MockitoAnnotations.initMocks(outer);
when(outer.strength.strength()).thenReturn("strength");
// orphan comment
}
}
```
### Spoon Version
10.2.0-beta-12
### JVM Version
11
### What operating system are you using?
Linux
Contributor guide
Assessment
This issue has not been assessed yet.