From 75dcb3dcc0b37c0e7ae7e18b87f43083aa064bb3 Mon Sep 17 00:00:00 2001 From: Csaba Kozak Date: Thu, 6 Jul 2017 14:34:25 +0200 Subject: [PATCH] Support R2 class for resource values The R class contains non-constant fields in case of library projects, so we cannot use them in annotation values, nor for validaiton, since the values are not available at compile time. To work around this, there is a Gradle plugin to generate an R2 class, which contains constants fields. This commit adds a very simple integration to this plugin, by using the R2 class instead of R if the former is available. --- .../java/org/androidannotations/internal/Options.java | 1 + .../internal/rclass/ProjectRClassFinder.java | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/Options.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/Options.java index 7169578641..66bdf3badf 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/Options.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/Options.java @@ -41,6 +41,7 @@ public Options(ProcessingEnvironment processingEnvironment) { addSupportedOption(AndroidManifestFinder.OPTION_MANIFEST); addSupportedOption(AndroidManifestFinder.OPTION_LIBRARY); addSupportedOption(ProjectRClassFinder.OPTION_RESOURCE_PACKAGE_NAME); + addSupportedOption(ProjectRClassFinder.OPTION_USE_R2); addSupportedOption(ModelConstants.OPTION_CLASS_SUFFIX); addSupportedOption(FileAppender.OPTION_LOG_FILE); addSupportedOption(LoggerContext.OPTION_LOG_LEVEL); diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/rclass/ProjectRClassFinder.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/rclass/ProjectRClassFinder.java index de405f6113..7ba3cadd66 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/rclass/ProjectRClassFinder.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/rclass/ProjectRClassFinder.java @@ -29,6 +29,7 @@ public class ProjectRClassFinder { public static final Option OPTION_RESOURCE_PACKAGE_NAME = new Option("resourcePackageName", null); + public static final Option OPTION_USE_R2 = new Option("useR2", "false"); private static final Logger LOGGER = LoggerFactory.getLogger(ProjectRClassFinder.class); @@ -40,7 +41,7 @@ public ProjectRClassFinder(AndroidAnnotationsEnvironment environment) { public IRClass find(AndroidManifest manifest) throws RClassNotFoundException { Elements elementUtils = environment.getProcessingEnvironment().getElementUtils(); - String rClass = getRClassPackageName(manifest) + ".R"; + String rClass = getRClassPackageName(manifest) + "." + getRClassSimpleName(); TypeElement rType = elementUtils.getTypeElement(rClass); if (rType == null) { @@ -60,4 +61,10 @@ public String getRClassPackageName(AndroidManifest manifest) { return manifest.getApplicationPackage(); } } + + private String getRClassSimpleName() { + boolean useR2 = environment.getOptionBooleanValue(OPTION_USE_R2); + + return useR2 ? "R2" : "R"; + } }