Skip to content

Commit ea4bb70

Browse files
authored
Merge pull request androidannotations#2264 from WonderCsabo/incremental-processing
Support incremental annotation processing
2 parents 0cef59e + df1e8fe commit ea4bb70

4 files changed

Lines changed: 40 additions & 0 deletions

File tree

AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/AndroidAnnotationProcessor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import javax.lang.model.element.Element;
3333
import javax.lang.model.element.TypeElement;
3434

35+
import org.androidannotations.Option;
3536
import org.androidannotations.helper.AndroidManifest;
3637
import org.androidannotations.helper.ModelConstants;
3738
import org.androidannotations.internal.core.CorePlugin;
@@ -61,6 +62,8 @@
6162

6263
public class AndroidAnnotationProcessor extends AbstractProcessor {
6364

65+
public static final Option OPTION_INCREMENTAL = new Option("incremental", "false");
66+
6467
private static final Logger LOGGER = LoggerFactory.getLogger(AndroidAnnotationProcessor.class);
6568

6669
private String coreVersion;

AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/Options.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.List;
2121
import java.util.Map;
2222
import java.util.Set;
23+
import java.util.TreeSet;
2324

2425
import javax.annotation.processing.ProcessingEnvironment;
2526

@@ -51,6 +52,7 @@ public Options(ProcessingEnvironment processingEnvironment) {
5152
addSupportedOption(LoggerContext.OPTION_LOG_APPENDER_FILE);
5253
addSupportedOption(BaseGeneratedClassHolder.OPTION_GENERATE_FINAL_CLASSES);
5354
addSupportedOption(CodeModelGenerator.OPTION_ENCODING);
55+
addSupportedOption(AndroidAnnotationProcessor.OPTION_INCREMENTAL);
5456
}
5557

5658
public void addAllSupportedOptions(List<Option> options) {
@@ -86,6 +88,12 @@ public boolean getBoolean(String optionKey) {
8688
}
8789

8890
public Set<String> getSupportedOptions() {
91+
if (getBoolean(AndroidAnnotationProcessor.OPTION_INCREMENTAL)) {
92+
Set<String> withIncremental = new TreeSet<>(supportedOptions.keySet());
93+
withIncremental.add("org.gradle.annotation.processing.isolating");
94+
return withIncremental;
95+
}
96+
8997
return supportedOptions.keySet();
9098
}
9199
}

AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/helper/FileHelper.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ public static File findRootProject(ProcessingEnvironment processingEnv) throws F
4444
* AndroidManifest.xml file. Any better solution will be appreciated.
4545
*/
4646
public static FileHolder findRootProjectHolder(ProcessingEnvironment processingEnv) throws FileNotFoundException {
47+
FileHolder rootProjectHolder = findKaptRootProjectHolder(processingEnv);
48+
49+
if (rootProjectHolder != null) {
50+
return rootProjectHolder;
51+
}
52+
4753
Filer filer = processingEnv.getFiler();
4854

4955
FileObject dummySourceFile;
@@ -76,6 +82,28 @@ public static FileHolder findRootProjectHolder(ProcessingEnvironment processingE
7682
return new FileHolder(dummySourceFilePath, sourcesGenerationFolder, projectRoot);
7783
}
7884

85+
private static FileHolder findKaptRootProjectHolder(ProcessingEnvironment processingEnv) throws FileNotFoundException {
86+
String kaptFolderOption = processingEnv.getOptions().get("kapt.kotlin.generated");
87+
88+
if (kaptFolderOption == null) {
89+
return null;
90+
}
91+
92+
File kaptFolder = new File(kaptFolderOption.replace("kaptKotlin", "kapt"));
93+
File dummySourceFile = new File(kaptFolder, "dummy");
94+
95+
String dummySourceFilePath;
96+
try {
97+
dummySourceFilePath = new URI("file://" + dummySourceFile.getAbsolutePath()).toString();
98+
} catch (URISyntaxException e) {
99+
throw new FileNotFoundException();
100+
}
101+
102+
File sourcesGenerationFolder = kaptFolder;
103+
File projectRoot = kaptFolder.getParentFile();
104+
return new FileHolder(dummySourceFilePath, sourcesGenerationFolder, projectRoot);
105+
}
106+
79107
public static File resolveOutputDirectory(ProcessingEnvironment processingEnv) throws FileNotFoundException {
80108
File rootProject = FileHelper.findRootProject(processingEnv);
81109

Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
org.androidannotations.internal.AndroidAnnotationProcessor,dynamic

0 commit comments

Comments
 (0)