Skip to content

Commit c954eb4

Browse files
committed
Using a compiler argument to toggle incremental annotation processing support.
1 parent 28f53bc commit c954eb4

2 files changed

Lines changed: 37 additions & 14 deletions

File tree

modules/jooby-apt/src/main/java/io/jooby/apt/JoobyProcessor.java

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@
55
*/
66
package io.jooby.apt;
77

8+
import io.jooby.Jooby;
89
import io.jooby.MvcFactory;
910
import io.jooby.SneakyThrows;
1011
import io.jooby.internal.apt.HandlerCompiler;
1112
import io.jooby.internal.apt.ModuleCompiler;
1213

13-
import javax.annotation.processing.AbstractProcessor;
14-
import javax.annotation.processing.Filer;
15-
import javax.annotation.processing.ProcessingEnvironment;
16-
import javax.annotation.processing.RoundEnvironment;
14+
import javax.annotation.processing.*;
1715
import javax.lang.model.SourceVersion;
1816
import javax.lang.model.element.AnnotationMirror;
1917
import javax.lang.model.element.Element;
@@ -29,13 +27,7 @@
2927
import java.io.IOException;
3028
import java.io.OutputStream;
3129
import java.io.PrintWriter;
32-
import java.util.ArrayList;
33-
import java.util.Collections;
34-
import java.util.LinkedHashMap;
35-
import java.util.LinkedHashSet;
36-
import java.util.List;
37-
import java.util.Map;
38-
import java.util.Set;
30+
import java.util.*;
3931
import java.util.stream.Collectors;
4032
import java.util.stream.Stream;
4133

@@ -44,8 +36,14 @@
4436
*
4537
* @since 2.1.0
4638
*/
39+
@SupportedOptions({
40+
JoobyProcessor.OPT_DEBUG,
41+
JoobyProcessor.OPT_INCREMENTAL })
4742
public class JoobyProcessor extends AbstractProcessor {
4843

44+
protected static final String OPT_DEBUG = "jooby.debug";
45+
protected static final String OPT_INCREMENTAL = "jooby.incremental";
46+
4947
private ProcessingEnvironment processingEnv;
5048

5149
/**
@@ -57,9 +55,21 @@ public class JoobyProcessor extends AbstractProcessor {
5755
private Map<TypeElement, Map<TypeElement, List<ExecutableElement>>> routeMap = new LinkedHashMap<>();
5856

5957
private boolean debug;
58+
private boolean incremental;
6059

6160
private int round;
6261

62+
@Override public Set<String> getSupportedOptions() {
63+
Set<String> options = new HashSet<>(super.getSupportedOptions());
64+
65+
if (incremental) {
66+
// enables incremental annotation processing support in Gradle
67+
options.add("org.gradle.annotation.processing.isolating");
68+
}
69+
70+
return options;
71+
}
72+
6373
@Override public Set<String> getSupportedAnnotationTypes() {
6474
return Stream.concat(Annotations.PATH.stream(), Annotations.HTTP_METHODS.stream())
6575
.collect(Collectors.toCollection(LinkedHashSet::new));
@@ -71,7 +81,11 @@ public class JoobyProcessor extends AbstractProcessor {
7181

7282
@Override public void init(ProcessingEnvironment processingEnvironment) {
7383
this.processingEnv = processingEnvironment;
74-
debug = Boolean.parseBoolean(processingEnvironment.getOptions().getOrDefault("debug", "false"));
84+
85+
debug = boolOpt(processingEnv, OPT_DEBUG, false);
86+
incremental = boolOpt(processingEnv, OPT_INCREMENTAL, false);
87+
88+
debug("Incremental annotation processing is turned %s.", incremental ? "ON" : "OFF");
7589
}
7690

7791
@Override
@@ -183,7 +197,11 @@ private void build(Filer filer) throws Exception {
183197
moduleList.add(moduleClass);
184198
}
185199

186-
//doServices(filer, moduleList);
200+
if (!incremental) {
201+
// writing resource files would prevent incremental annotation processing in Gradle:
202+
// https://docs.gradle.org/5.0/userguide/java_plugin.html#sec:incremental_annotation_processing
203+
doServices(filer, moduleList);
204+
}
187205
}
188206

189207
private String signature(ExecutableElement method) {
@@ -291,4 +309,9 @@ private List<String> path(String method, List<? extends AnnotationMirror> annota
291309
.distinct()
292310
.collect(Collectors.toList());
293311
}
312+
313+
private boolean boolOpt(ProcessingEnvironment processingEnvironment, String option, boolean defaultValue) {
314+
return Boolean.parseBoolean(processingEnvironment
315+
.getOptions().getOrDefault(option, String.valueOf(defaultValue)));
316+
}
294317
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
io.jooby.apt.JoobyProcessor,isolating
1+
io.jooby.apt.JoobyProcessor,dynamic

0 commit comments

Comments
 (0)