Skip to content

Commit 8170998

Browse files
authored
Improve debugging support for annotation processors (#575)
1 parent 33d75e0 commit 8170998

File tree

5 files changed

+72
-40
lines changed

5 files changed

+72
-40
lines changed

core/src/main/java/org/kohsuke/stapler/jsr269/AbstractProcessorImpl.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,7 @@ protected String getJavadoc(Element md) {
6363
}
6464

6565
protected void notice(String msg, Element location) {
66-
// IntelliJ flags this as an error. So disabling it for now.
67-
// See http://youtrack.jetbrains.net/issue/IDEA-71822
68-
// processingEnv.getMessager().printMessage(NOTE, msg, location);
66+
processingEnv.getMessager().printMessage(Kind.NOTE, msg, location);
6967
}
7068

7169
protected void writePropertyFile(Properties p, String name) throws IOException {

core/src/main/java/org/kohsuke/stapler/jsr269/QueryParameterAnnotationProcessor.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ private void write(ExecutableElement m) throws IOException {
6969
}
7070

7171
TypeElement t = (TypeElement) m.getEnclosingElement();
72-
FileObject f = createResource(
73-
t.getQualifiedName().toString().replace('.', '/') + "/" + m.getSimpleName() + ".stapler");
74-
notice("Generating " + f, m);
72+
String name = t.getQualifiedName().toString().replace('.', '/') + "/" + m.getSimpleName() + ".stapler";
73+
FileObject f = createResource(name);
74+
notice("Generating " + name, m);
7575

7676
try (OutputStream os = f.openOutputStream()) {
7777
os.write(buf.toString().getBytes(StandardCharsets.UTF_8));

core/src/test/java/org/kohsuke/stapler/jsr269/ConstructorProcessorTest.java

+40-27
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,16 @@
44
import static org.hamcrest.Matchers.containsString;
55
import static org.hamcrest.Matchers.not;
66
import static org.junit.jupiter.api.Assertions.assertEquals;
7-
import static org.junit.jupiter.api.Assertions.assertTrue;
87

98
import com.karuslabs.elementary.Results;
109
import com.karuslabs.elementary.junit.JavacExtension;
1110
import com.karuslabs.elementary.junit.annotations.Inline;
1211
import com.karuslabs.elementary.junit.annotations.Options;
1312
import com.karuslabs.elementary.junit.annotations.Processors;
1413
import java.time.Year;
15-
import java.util.Collections;
16-
import java.util.List;
1714
import java.util.Locale;
18-
import javax.tools.Diagnostic;
19-
import javax.tools.JavaFileObject;
15+
import java.util.Set;
16+
import java.util.stream.Collectors;
2017
import org.junit.jupiter.api.Test;
2118
import org.junit.jupiter.api.extension.ExtendWith;
2219

@@ -36,7 +33,10 @@ class ConstructorProcessorTest {
3633
})
3734
@Test
3835
void basicOutput(Results results) {
39-
assertEquals(Collections.emptyList(), results.diagnostics);
36+
Set<String> diagnostics = results.diagnostics.stream()
37+
.map(d -> d.getMessage(Locale.ENGLISH))
38+
.collect(Collectors.toSet());
39+
assertEquals(Set.of("Generating some/pkg/Stuff.stapler"), diagnostics);
4040
assertEquals(
4141
"{constructor=count,name}",
4242
Utils.normalizeProperties(Utils.getGeneratedResource(results.sources, "some/pkg/Stuff.stapler")));
@@ -52,7 +52,10 @@ void basicOutput(Results results) {
5252
})
5353
@Test
5454
void preAnnotationCompatibility(Results results) {
55-
assertEquals(Collections.emptyList(), results.diagnostics);
55+
Set<String> diagnostics = results.diagnostics.stream()
56+
.map(d -> d.getMessage(Locale.ENGLISH))
57+
.collect(Collectors.toSet());
58+
assertEquals(Set.of("Generating some/pkg/Stuff.stapler"), diagnostics);
5659
assertEquals(
5760
"{constructor=name,count}",
5861
Utils.normalizeProperties(Utils.getGeneratedResource(results.sources, "some/pkg/Stuff.stapler")));
@@ -70,7 +73,10 @@ void preAnnotationCompatibility(Results results) {
7073
@Inline(name = "some.pkg.package-info", source = "package some.pkg;")
7174
@Test
7275
void JENKINS_11739(Results results) {
73-
assertEquals(Collections.emptyList(), results.diagnostics);
76+
Set<String> diagnostics = results.diagnostics.stream()
77+
.map(d -> d.getMessage(Locale.ENGLISH))
78+
.collect(Collectors.toSet());
79+
assertEquals(Set.of("Generating some/pkg/Stuff.stapler"), diagnostics);
7480
assertEquals(
7581
"{constructor=count,name}",
7682
Utils.normalizeProperties(Utils.getGeneratedResource(results.sources, "some/pkg/Stuff.stapler")));
@@ -87,10 +93,10 @@ void JENKINS_11739(Results results) {
8793
})
8894
@Test
8995
void privateConstructor(Results results) {
90-
List<Diagnostic<? extends JavaFileObject>> diagnostics = results.diagnostics;
91-
assertEquals(1, diagnostics.size());
92-
String msg = diagnostics.get(0).getMessage(Locale.ENGLISH);
93-
assertTrue(msg.contains("public"), msg);
96+
Set<String> diagnostics = results.diagnostics.stream()
97+
.map(d -> d.getMessage(Locale.ENGLISH))
98+
.collect(Collectors.toSet());
99+
assertEquals(Set.of("@DataBoundConstructor must be applied to a public constructor"), diagnostics);
94100
}
95101

96102
@Inline(
@@ -104,10 +110,12 @@ void privateConstructor(Results results) {
104110
})
105111
@Test
106112
void abstractClass(Results results) {
107-
List<Diagnostic<? extends JavaFileObject>> diagnostics = results.diagnostics;
108-
assertEquals(1, diagnostics.size());
109-
String msg = diagnostics.get(0).getMessage(Locale.ENGLISH);
110-
assertTrue(msg.contains("abstract"), msg);
113+
Set<String> diagnostics = results.diagnostics.stream()
114+
.map(d -> d.getMessage(Locale.ENGLISH))
115+
.collect(Collectors.toSet());
116+
assertEquals(
117+
Set.of("@DataBoundConstructor may not be used on an abstract class (only on concrete subclasses)"),
118+
diagnostics);
111119
}
112120

113121
// issue-179
@@ -123,10 +131,10 @@ void abstractClass(Results results) {
123131
})
124132
@Test
125133
void duplicatedConstructor1(Results results) {
126-
List<Diagnostic<? extends JavaFileObject>> diagnostics = results.diagnostics;
127-
assertEquals(1, diagnostics.size());
128-
String msg = diagnostics.get(0).getMessage(Locale.ENGLISH);
129-
assertTrue(msg.contains(ConstructorProcessor.MESSAGE), msg);
134+
Set<String> diagnostics = results.diagnostics.stream()
135+
.map(d -> d.getMessage(Locale.ENGLISH))
136+
.collect(Collectors.toSet());
137+
assertEquals(Set.of("Generating some/pkg/Stuff.stapler", ConstructorProcessor.MESSAGE), diagnostics);
130138
}
131139

132140
// issue-179
@@ -145,10 +153,10 @@ void duplicatedConstructor1(Results results) {
145153
})
146154
@Test
147155
void duplicatedConstructor2(Results results) {
148-
List<Diagnostic<? extends JavaFileObject>> diagnostics = results.diagnostics;
149-
assertEquals(1, diagnostics.size());
150-
String msg = diagnostics.get(0).getMessage(Locale.ENGLISH);
151-
assertTrue(msg.contains(ConstructorProcessor.MESSAGE), msg);
156+
Set<String> diagnostics = results.diagnostics.stream()
157+
.map(d -> d.getMessage(Locale.ENGLISH))
158+
.collect(Collectors.toSet());
159+
assertEquals(Set.of("Generating some/pkg/Stuff.stapler", ConstructorProcessor.MESSAGE), diagnostics);
152160
}
153161

154162
// issue-179
@@ -164,8 +172,10 @@ void duplicatedConstructor2(Results results) {
164172
})
165173
@Test
166174
void duplicatedButNotAnnotatedConstructor(Results results) {
167-
List<Diagnostic<? extends JavaFileObject>> diagnostics = results.diagnostics;
168-
assertEquals(0, diagnostics.size());
175+
Set<String> diagnostics = results.diagnostics.stream()
176+
.map(d -> d.getMessage(Locale.ENGLISH))
177+
.collect(Collectors.toSet());
178+
assertEquals(Set.of("Generating some/pkg/Stuff.stapler"), diagnostics);
169179
}
170180
// TODO nested classes use qualified rather than binary name
171181

@@ -181,7 +191,10 @@ void duplicatedButNotAnnotatedConstructor(Results results) {
181191
})
182192
@Test
183193
void reproducibleBuild(Results results) {
184-
assertEquals(Collections.emptyList(), results.diagnostics);
194+
Set<String> diagnostics = results.diagnostics.stream()
195+
.map(d -> d.getMessage(Locale.ENGLISH))
196+
.collect(Collectors.toSet());
197+
assertEquals(Set.of("Generating some/pkg/Stuff.stapler"), diagnostics);
185198
assertThat(
186199
Utils.getGeneratedResource(results.sources, "some/pkg/Stuff.stapler"),
187200
not(containsString(Integer.toString(Year.now().getValue()))));

core/src/test/java/org/kohsuke/stapler/jsr269/ExportedBeanAnnotationProcessorTest.java

+19-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
import com.karuslabs.elementary.junit.annotations.Inline;
99
import com.karuslabs.elementary.junit.annotations.Options;
1010
import com.karuslabs.elementary.junit.annotations.Processors;
11-
import java.util.Collections;
11+
import java.util.Locale;
12+
import java.util.Set;
13+
import java.util.stream.Collectors;
1214
import org.junit.jupiter.api.Test;
1315
import org.junit.jupiter.api.extension.ExtendWith;
1416
import org.jvnet.hudson.annotation_indexer.AnnotationProcessorImpl;
@@ -36,7 +38,10 @@ private void assertEqualsCRLF(String s1, String s2) {
3638
})
3739
@Test
3840
void basicOutput(Results results) {
39-
assertEquals(Collections.emptyList(), results.diagnostics);
41+
Set<String> diagnostics = results.diagnostics.stream()
42+
.map(d -> d.getMessage(Locale.ENGLISH))
43+
.collect(Collectors.toSet());
44+
assertEquals(Set.of("Generating some/pkg/Stuff.javadoc"), diagnostics);
4045
assertEqualsCRLF(
4146
"some.pkg.Stuff\n",
4247
Utils.getGeneratedResource(
@@ -60,7 +65,10 @@ void basicOutput(Results results) {
6065
})
6166
@Test
6267
void noJavadoc(Results results) {
63-
assertEquals(Collections.emptyList(), results.diagnostics);
68+
Set<String> diagnostics = results.diagnostics.stream()
69+
.map(d -> d.getMessage(Locale.ENGLISH))
70+
.collect(Collectors.toSet());
71+
assertEquals(Set.of("Generating some/pkg/Stuff.javadoc"), diagnostics);
6472
assertEqualsCRLF(
6573
"some.pkg.Stuff\n",
6674
Utils.getGeneratedResource(
@@ -93,7 +101,10 @@ void noJavadoc(Results results) {
93101
})
94102
@Test
95103
void subclassOfExportedBean(Results results) {
96-
assertEquals(Collections.emptyList(), results.diagnostics);
104+
Set<String> diagnostics = results.diagnostics.stream()
105+
.map(d -> d.getMessage(Locale.ENGLISH))
106+
.collect(Collectors.toSet());
107+
assertEquals(Set.of("Generating some/pkg/Super.javadoc"), diagnostics);
97108
/* #7188605: broken in JDK 6u33 + org.jvnet.hudson:annotation-indexer:1.2:
98109
assertEquals("some.pkg.Stuff\n", Utils.getGeneratedResource(results.sources, "META-INF/services/annotations/org.kohsuke.stapler.export.ExportedBean"));
99110
*/
@@ -125,7 +136,10 @@ void subclassOfExportedBean(Results results) {
125136
})
126137
@Test
127138
void multiple(Results results) {
128-
assertEquals(Collections.emptyList(), results.diagnostics);
139+
Set<String> diagnostics = results.diagnostics.stream()
140+
.map(d -> d.getMessage(Locale.ENGLISH))
141+
.collect(Collectors.toSet());
142+
assertEquals(Set.of("Generating some/pkg/Stuff.javadoc", "Generating some/pkg/MoreStuff.javadoc"), diagnostics);
129143
assertEqualsCRLF(
130144
"some.pkg.MoreStuff\nsome.pkg.Stuff\n",
131145
Utils.getGeneratedResource(

core/src/test/java/org/kohsuke/stapler/jsr269/QueryParameterAnnotationProcessorTest.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
import com.karuslabs.elementary.junit.annotations.Inline;
88
import com.karuslabs.elementary.junit.annotations.Options;
99
import com.karuslabs.elementary.junit.annotations.Processors;
10-
import java.util.Collections;
10+
import java.util.Locale;
11+
import java.util.Set;
12+
import java.util.stream.Collectors;
1113
import org.junit.jupiter.api.Test;
1214
import org.junit.jupiter.api.extension.ExtendWith;
1315

@@ -28,7 +30,12 @@ class QueryParameterAnnotationProcessorTest {
2830
})
2931
@Test
3032
void basicOutput(Results results) {
31-
assertEquals(Collections.emptyList(), results.diagnostics);
33+
Set<String> diagnostics = results.diagnostics.stream()
34+
.map(d -> d.getMessage(Locale.ENGLISH))
35+
.collect(Collectors.toSet());
36+
assertEquals(
37+
Set.of("Generating some/pkg/Stuff/doOneThing.stapler", "Generating some/pkg/Stuff/doAnother.stapler"),
38+
diagnostics);
3239
assertEquals("key", Utils.getGeneratedResource(results.sources, "some/pkg/Stuff/doOneThing.stapler"));
3340
assertEquals("name,address", Utils.getGeneratedResource(results.sources, "some/pkg/Stuff/doAnother.stapler"));
3441
}

0 commit comments

Comments
 (0)