Skip to content

Commit baddbd4

Browse files
committed
Add Options and let plugin add its options
1 parent 31e833a commit baddbd4

12 files changed

Lines changed: 232 additions & 66 deletions

File tree

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import org.androidannotations.helper.ErrorHelper;
4444
import org.androidannotations.helper.ModelConstants;
4545
import org.androidannotations.helper.Option;
46-
import org.androidannotations.helper.OptionsHelper;
4746
import org.androidannotations.logger.Level;
4847
import org.androidannotations.logger.Logger;
4948
import org.androidannotations.logger.LoggerContext;
@@ -76,11 +75,11 @@ public synchronized void init(ProcessingEnvironment processingEnv) {
7675
super.init(processingEnv);
7776
androidAnnotationsEnv = new AndroidAnnotationsEnvironment(processingEnv);
7877

79-
ModelConstants.init(processingEnv);
78+
ModelConstants.init(androidAnnotationsEnv);
8079

8180
// Configure Logger
8281
LoggerContext loggerContext = LoggerContext.getInstance();
83-
loggerContext.setProcessingEnv(processingEnv);
82+
loggerContext.setEnvironment(androidAnnotationsEnv);
8483

8584
try {
8685
loadPropertyFile();
@@ -225,15 +224,15 @@ private AnnotationElementsHolder extractAnnotations(Set<? extends TypeElement> a
225224

226225
private Option<AndroidManifest> extractAndroidManifest() {
227226
timeStats.start("Extract Manifest");
228-
AndroidManifestFinder finder = new AndroidManifestFinder(processingEnv);
227+
AndroidManifestFinder finder = new AndroidManifestFinder(androidAnnotationsEnv);
229228
Option<AndroidManifest> manifest = finder.extractAndroidManifest();
230229
timeStats.stop("Extract Manifest");
231230
return manifest;
232231
}
233232

234233
private Option<IRClass> findRClasses(AndroidManifest androidManifest) throws IOException {
235234
timeStats.start("Find R Classes");
236-
ProjectRClassFinder rClassFinder = new ProjectRClassFinder(processingEnv);
235+
ProjectRClassFinder rClassFinder = new ProjectRClassFinder(androidAnnotationsEnv);
237236

238237
Option<IRClass> rClass = rClassFinder.find(androidManifest);
239238

@@ -301,7 +300,7 @@ public Set<String> getSupportedAnnotationTypes() {
301300

302301
@Override
303302
public Set<String> getSupportedOptions() {
304-
return OptionsHelper.getOptionsConstants();
303+
return androidAnnotationsEnv.getSupportedOptions();
305304
}
306305

307306
@Override

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/AndroidAnnotationsEnvironment.java‎

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,28 @@
1515
*/
1616
package org.androidannotations;
1717

18+
import java.util.List;
19+
import java.util.Set;
20+
21+
import javax.annotation.processing.ProcessingEnvironment;
22+
1823
import org.androidannotations.handler.AnnotationHandler;
1924
import org.androidannotations.handler.AnnotationHandlers;
2025
import org.androidannotations.handler.GeneratingAnnotationHandler;
2126
import org.androidannotations.helper.AndroidManifest;
22-
import org.androidannotations.helper.OptionsHelper;
2327
import org.androidannotations.holder.GeneratedClassHolder;
2428
import org.androidannotations.model.AndroidSystemServices;
2529
import org.androidannotations.model.AnnotationElements;
2630
import org.androidannotations.plugin.AndroidAnnotationsPlugin;
31+
import org.androidannotations.process.Option;
32+
import org.androidannotations.process.Options;
2733
import org.androidannotations.process.ProcessHolder;
2834
import org.androidannotations.rclass.IRClass;
2935

30-
import javax.annotation.processing.ProcessingEnvironment;
31-
import java.util.List;
32-
import java.util.Set;
33-
3436
public class AndroidAnnotationsEnvironment {
3537

3638
private final ProcessingEnvironment processingEnvironment;
37-
private final OptionsHelper options;
39+
private final Options options;
3840
private final AnnotationHandlers annotationHandlers;
3941

4042
private List<AndroidAnnotationsPlugin> plugins;
@@ -49,13 +51,14 @@ public class AndroidAnnotationsEnvironment {
4951

5052
AndroidAnnotationsEnvironment(ProcessingEnvironment processingEnvironment) {
5153
this.processingEnvironment = processingEnvironment;
52-
options = new OptionsHelper(processingEnvironment);
54+
options = new Options(processingEnvironment);
5355
annotationHandlers = new AnnotationHandlers();
5456
}
5557

5658
public void setPlugins(List<AndroidAnnotationsPlugin> plugins) {
5759
this.plugins = plugins;
5860
for (AndroidAnnotationsPlugin plugin : plugins) {
61+
options.addAllSupportedOptions(plugin.getSupportedOptions());
5962
plugin.addHandlers(annotationHandlers, this);
6063
}
6164
}
@@ -78,8 +81,24 @@ public ProcessingEnvironment getProcessingEnvironment() {
7881
return processingEnvironment;
7982
}
8083

81-
public OptionsHelper getOptions() {
82-
return options;
84+
public Set<String> getSupportedOptions() {
85+
return options.getSupportedOptions();
86+
}
87+
88+
public String getOptionValue(Option option) {
89+
return options.get(option);
90+
}
91+
92+
public String getOptionValue(String optionKey) {
93+
return options.get(optionKey);
94+
}
95+
96+
public boolean getOptionBooleanValue(Option option) {
97+
return options.getBoolean(option);
98+
}
99+
100+
public boolean getOptionBooleanValue(String optionKey) {
101+
return options.getBoolean(optionKey);
83102
}
84103

85104
public Set<String> getSupportedAnnotationTypes() {

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/CorePlugin.java‎

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
*/
1616
package org.androidannotations;
1717

18+
import java.util.Arrays;
19+
import java.util.List;
20+
1821
import org.androidannotations.handler.AfterExtrasHandler;
1922
import org.androidannotations.handler.AfterInjectHandler;
2023
import org.androidannotations.handler.AfterPreferencesHandler;
@@ -93,16 +96,24 @@
9396
import org.androidannotations.handler.WindowFeatureHandler;
9497
import org.androidannotations.model.AndroidRes;
9598
import org.androidannotations.plugin.AndroidAnnotationsPlugin;
99+
import org.androidannotations.process.Option;
96100

97101
public class CorePlugin extends AndroidAnnotationsPlugin {
98102

99103
private static final String NAME = "AndroidAnnotations";
100104

105+
private static final Option OPTION_TRACE = new Option("trace", "false");
106+
private static final Option OPTION_THREAD_CONTROL = new Option("threadControl", "true");
107+
101108
@Override
102109
public String getName() {
103110
return NAME;
104111
}
105112

113+
@Override public List<Option> getSupportedOptions() {
114+
return Arrays.asList(OPTION_TRACE, OPTION_THREAD_CONTROL);
115+
}
116+
106117
@Override
107118
public void addHandlers(AnnotationHandlers annotationHandlers, AndroidAnnotationsEnvironment androidAnnotationEnv) {
108119
annotationHandlers.add(new EApplicationHandler(androidAnnotationEnv));
@@ -189,7 +200,7 @@ public void addHandlers(AnnotationHandlers annotationHandlers, AndroidAnnotation
189200
/* After preference injection methods must be after preference injections */
190201
annotationHandlers.add(new AfterPreferencesHandler(androidAnnotationEnv));
191202

192-
if (androidAnnotationEnv.getOptions().shouldLogTrace()) {
203+
if (androidAnnotationEnv.getOptionBooleanValue(OPTION_TRACE)) {
193204
annotationHandlers.add(new TraceHandler(androidAnnotationEnv));
194205
}
195206

@@ -210,7 +221,7 @@ public void addHandlers(AnnotationHandlers annotationHandlers, AndroidAnnotation
210221
* SupposeUiThreadHandler and SupposeBackgroundHandler must be after all
211222
* handlers that modifies generated method body
212223
*/
213-
if (androidAnnotationEnv.getOptions().shouldEnsureThreadControl()) {
224+
if (androidAnnotationEnv.getOptionBooleanValue(OPTION_THREAD_CONTROL)) {
214225
annotationHandlers.add(new SupposeUiThreadHandler(androidAnnotationEnv));
215226
annotationHandlers.add(new SupposeBackgroundHandler(androidAnnotationEnv));
216227
}

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/AndroidManifestFinder.java‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@
2424
import java.util.List;
2525
import java.util.Properties;
2626

27-
import javax.annotation.processing.ProcessingEnvironment;
2827
import javax.lang.model.util.Elements;
2928
import javax.xml.parsers.DocumentBuilder;
3029
import javax.xml.parsers.DocumentBuilderFactory;
3130

31+
import org.androidannotations.AndroidAnnotationsEnvironment;
3232
import org.androidannotations.helper.FileHelper.FileHolder;
3333
import org.androidannotations.logger.Logger;
3434
import org.androidannotations.logger.LoggerFactory;
@@ -40,15 +40,15 @@
4040

4141
public class AndroidManifestFinder {
4242

43+
public static final org.androidannotations.process.Option OPTION_MANIFEST = new org.androidannotations.process.Option("androidManifestFile", null);
44+
4345
private static final Logger LOGGER = LoggerFactory.getLogger(AndroidManifestFinder.class);
4446
private static final int MAX_PARENTS_FROM_SOURCE_FOLDER = 10;
4547

46-
private final ProcessingEnvironment processingEnv;
47-
private final OptionsHelper optionsHelper;
48+
private final AndroidAnnotationsEnvironment environment;
4849

49-
public AndroidManifestFinder(ProcessingEnvironment processingEnv) {
50-
this.processingEnv = processingEnv;
51-
optionsHelper = new OptionsHelper(processingEnv);
50+
public AndroidManifestFinder(AndroidAnnotationsEnvironment environment) {
51+
this.environment = environment;
5252
}
5353

5454
public Option<AndroidManifest> extractAndroidManifest() {
@@ -84,7 +84,7 @@ public Option<AndroidManifest> extractAndroidManifest() {
8484
}
8585

8686
private Option<File> findManifestFile() {
87-
String androidManifestFile = optionsHelper.getAndroidManifestFile();
87+
String androidManifestFile = environment.getOptionValue(OPTION_MANIFEST);
8888
if (androidManifestFile != null) {
8989
return findManifestInSpecifiedPath(androidManifestFile);
9090
} else {
@@ -111,7 +111,7 @@ private Option<File> findManifestInSpecifiedPath(String androidManifestPath) {
111111
* appreciated.
112112
*/
113113
private Option<File> findManifestInParentsDirectories() {
114-
Option<FileHolder> projectRootHolderOption = FileHelper.findRootProjectHolder(processingEnv);
114+
Option<FileHolder> projectRootHolderOption = FileHelper.findRootProjectHolder(environment.getProcessingEnvironment());
115115
if (projectRootHolderOption.isAbsent()) {
116116
return Option.absent();
117117
}
@@ -286,7 +286,7 @@ private String manifestNameToValidQualifiedName(String applicationPackage, Node
286286
}
287287

288288
private boolean classOrModelClassExists(String className) {
289-
Elements elementUtils = processingEnv.getElementUtils();
289+
Elements elementUtils = environment.getProcessingEnvironment().getElementUtils();
290290

291291
if (className.endsWith(classSuffix())) {
292292
className = className.substring(0, className.length() - classSuffix().length());

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/ModelConstants.java‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
import java.lang.annotation.Annotation;
2121
import java.util.List;
2222

23-
import javax.annotation.processing.ProcessingEnvironment;
2423
import javax.lang.model.SourceVersion;
2524

25+
import org.androidannotations.AndroidAnnotationsEnvironment;
2626
import org.androidannotations.annotations.EActivity;
2727
import org.androidannotations.annotations.EApplication;
2828
import org.androidannotations.annotations.EBean;
@@ -34,9 +34,12 @@
3434
import org.androidannotations.annotations.EView;
3535
import org.androidannotations.annotations.EViewGroup;
3636
import org.androidannotations.annotations.sharedpreferences.SharedPref;
37+
import org.androidannotations.process.Option;
3738

3839
public abstract class ModelConstants {
3940

41+
public static final Option OPTION_CLASS_SUFFIX = new Option("classSuffix", "_");
42+
4043
private static String generationSuffix = "_";
4144
private static String classSuffix;
4245

@@ -51,9 +54,8 @@ public abstract class ModelConstants {
5154
private ModelConstants() {
5255
}
5356

54-
public static void init(ProcessingEnvironment processingEnv) {
55-
OptionsHelper optionsHelper = new OptionsHelper(processingEnv);
56-
classSuffix = optionsHelper.getClassSuffix().trim();
57+
public static void init(AndroidAnnotationsEnvironment environment) {
58+
classSuffix = environment.getOptionValue(OPTION_CLASS_SUFFIX).trim();
5759

5860
if (classSuffix.isEmpty()) {
5961
throw new IllegalArgumentException("'" + classSuffix + "' may not be an emtpy string.");

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/logger/LoggerContext.java‎

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,23 @@
1818
import java.util.ArrayList;
1919
import java.util.List;
2020

21-
import javax.annotation.processing.ProcessingEnvironment;
2221
import javax.lang.model.element.AnnotationMirror;
2322
import javax.lang.model.element.Element;
2423

25-
import org.androidannotations.helper.OptionsHelper;
24+
import org.androidannotations.AndroidAnnotationsEnvironment;
2625
import org.androidannotations.logger.appender.Appender;
2726
import org.androidannotations.logger.appender.ConsoleAppender;
2827
import org.androidannotations.logger.appender.FileAppender;
2928
import org.androidannotations.logger.appender.MessagerAppender;
3029
import org.androidannotations.logger.formatter.Formatter;
30+
import org.androidannotations.process.Option;
3131

3232
public final class LoggerContext {
3333

34+
public static final Option OPTION_LOG_LEVEL = new Option("logLevel", "DEBUG");
35+
public static final Option OPTION_LOG_APPENDER_CONSOLE = new Option("logAppenderConsole", "false");
36+
public static final Option OPTION_LOG_APPENDER_FILE = new Option("logAppenderFile", "true");
37+
3438
private static LoggerContext instance = null;
3539
private static final Level DEFAULT_LEVEL = Level.DEBUG;
3640

@@ -68,16 +72,15 @@ public void setCurrentLevel(Level currentLevel) {
6872
this.currentLevel = currentLevel;
6973
}
7074

71-
public void setProcessingEnv(ProcessingEnvironment processingEnv) {
75+
public void setEnvironment(AndroidAnnotationsEnvironment environment) {
7276
appenders.clear();
73-
OptionsHelper optionsHelper = new OptionsHelper(processingEnv);
74-
resolveLogLevel(optionsHelper);
75-
addConsoleAppender(optionsHelper);
76-
addFileAppender(optionsHelper);
77+
resolveLogLevel(environment);
78+
addConsoleAppender(environment);
79+
addFileAppender(environment);
7780
appenders.add(new MessagerAppender());
7881

7982
for (Appender appender : appenders) {
80-
appender.setProcessingEnv(processingEnv);
83+
appender.setEnvironment(environment);
8184
appender.open();
8285
}
8386
}
@@ -88,18 +91,25 @@ public void close() {
8891
}
8992
}
9093

91-
private void resolveLogLevel(OptionsHelper optionsHelper) {
92-
setCurrentLevel(optionsHelper.getLogLevel());
94+
private void resolveLogLevel(AndroidAnnotationsEnvironment environment) {
95+
Level level = Level.DEBUG;
96+
try {
97+
level = Level.parse(environment.getOptionValue(OPTION_LOG_LEVEL));
98+
} catch (Exception ignored) {
99+
// Do nothing, keep the default value;
100+
}
101+
setCurrentLevel(level);
93102
}
94103

95-
private void addConsoleAppender(OptionsHelper optionsHelper) {
96-
if (optionsHelper.shouldUseConsoleAppender()) {
104+
105+
private void addConsoleAppender(AndroidAnnotationsEnvironment environment) {
106+
if (environment.getOptionBooleanValue(OPTION_LOG_APPENDER_CONSOLE)) {
97107
appenders.add(new ConsoleAppender());
98108
}
99109
}
100110

101-
private void addFileAppender(OptionsHelper optionsHelper) {
102-
if (optionsHelper.shouldUseFileAppender()) {
111+
private void addFileAppender(AndroidAnnotationsEnvironment environment) {
112+
if (environment.getOptionBooleanValue(OPTION_LOG_APPENDER_FILE)) {
103113
appenders.add(new FileAppender());
104114
}
105115
}

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/logger/appender/Appender.java‎

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,14 @@
1919
import javax.lang.model.element.AnnotationMirror;
2020
import javax.lang.model.element.Element;
2121

22-
import org.androidannotations.helper.OptionsHelper;
22+
import org.androidannotations.AndroidAnnotationsEnvironment;
2323
import org.androidannotations.logger.Level;
2424
import org.androidannotations.logger.formatter.Formatter;
2525

2626
public abstract class Appender {
2727

2828
protected final Formatter formatter;
2929
protected ProcessingEnvironment processingEnv;
30-
protected OptionsHelper optionsHelper;
3130

3231
public Appender(Formatter formatter) {
3332
this.formatter = formatter;
@@ -37,9 +36,8 @@ public Formatter getFormatter() {
3736
return formatter;
3837
}
3938

40-
public void setProcessingEnv(ProcessingEnvironment processingEnv) {
41-
this.processingEnv = processingEnv;
42-
optionsHelper = new OptionsHelper(processingEnv);
39+
public void setEnvironment(AndroidAnnotationsEnvironment environment) {
40+
this.processingEnv = environment.getProcessingEnvironment();
4341
}
4442

4543
public abstract void open();

0 commit comments

Comments
 (0)