Skip to content

Commit d9a95ca

Browse files
committed
Add an annotation processing OptionsHandler.
1 parent 149ef49 commit d9a95ca

9 files changed

Lines changed: 142 additions & 73 deletions

File tree

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

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

18-
import static org.androidannotations.helper.AndroidManifestFinder.ANDROID_MANIFEST_FILE_OPTION;
19-
import static org.androidannotations.helper.ModelConstants.TRACE_OPTION;
20-
import static org.androidannotations.logger.LoggerContext.LOG_APPENDER_CONSOLE;
21-
import static org.androidannotations.logger.LoggerContext.LOG_FILE_OPTION;
22-
import static org.androidannotations.logger.LoggerContext.LOG_LEVEL_OPTION;
23-
import static org.androidannotations.rclass.ProjectRClassFinder.RESOURCE_PACKAGE_NAME_OPTION;
24-
2518
import java.io.FileNotFoundException;
2619
import java.io.IOException;
2720
import java.net.URL;
@@ -32,7 +25,6 @@
3225
import javax.annotation.processing.AbstractProcessor;
3326
import javax.annotation.processing.ProcessingEnvironment;
3427
import javax.annotation.processing.RoundEnvironment;
35-
import javax.annotation.processing.SupportedOptions;
3628
import javax.annotation.processing.SupportedSourceVersion;
3729
import javax.lang.model.SourceVersion;
3830
import javax.lang.model.element.Element;
@@ -47,6 +39,7 @@
4739
import org.androidannotations.helper.AndroidManifestFinder;
4840
import org.androidannotations.helper.ErrorHelper;
4941
import org.androidannotations.helper.Option;
42+
import org.androidannotations.helper.OptionsHelper;
5043
import org.androidannotations.logger.Level;
5144
import org.androidannotations.logger.Logger;
5245
import org.androidannotations.logger.LoggerContext;
@@ -64,16 +57,15 @@
6457
import org.androidannotations.rclass.ProjectRClassFinder;
6558

6659
@SupportedSourceVersion(SourceVersion.RELEASE_6)
67-
@SupportedOptions({ TRACE_OPTION, ANDROID_MANIFEST_FILE_OPTION, RESOURCE_PACKAGE_NAME_OPTION, LOG_FILE_OPTION, LOG_LEVEL_OPTION, LOG_APPENDER_CONSOLE })
6860
public class AndroidAnnotationProcessor extends AbstractProcessor {
6961

7062
private static final Logger LOGGER = LoggerFactory.getLogger(AndroidAnnotationProcessor.class);
7163

7264
private final Properties properties = new Properties();
7365
private final Properties propertiesApi = new Properties();
7466
private final TimeStats timeStats = new TimeStats();
75-
private AnnotationHandlers annotationHandlers;
7667
private final ErrorHelper errorHelper = new ErrorHelper();
68+
private AnnotationHandlers annotationHandlers;
7769

7870
@Override
7971
public synchronized void init(ProcessingEnvironment processingEnv) {
@@ -284,4 +276,10 @@ private void handleException(Set<? extends TypeElement> annotations, RoundEnviro
284276
public Set<String> getSupportedAnnotationTypes() {
285277
return annotationHandlers.getSupportedAnnotationTypes();
286278
}
279+
280+
@Override
281+
public Set<String> getSupportedOptions() {
282+
return OptionsHelper.getOptionsConstants();
283+
}
284+
287285
}

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/AnnotationHandlers.java‎

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,10 @@
1515
*/
1616
package org.androidannotations.handler;
1717

18-
import static org.androidannotations.helper.ModelConstants.TRACE_OPTION;
19-
2018
import java.util.ArrayList;
2119
import java.util.Collections;
2220
import java.util.HashSet;
2321
import java.util.List;
24-
import java.util.Map;
2522
import java.util.Set;
2623

2724
import javax.annotation.processing.ProcessingEnvironment;
@@ -35,6 +32,7 @@
3532
import org.androidannotations.handler.rest.RestHandler;
3633
import org.androidannotations.handler.rest.RestServiceHandler;
3734
import org.androidannotations.helper.AndroidManifest;
35+
import org.androidannotations.helper.OptionsHelper;
3836
import org.androidannotations.holder.GeneratedClassHolder;
3937
import org.androidannotations.model.AndroidRes;
4038
import org.androidannotations.model.AndroidSystemServices;
@@ -48,14 +46,17 @@ public class AnnotationHandlers {
4846
private List<GeneratingAnnotationHandler<? extends GeneratedClassHolder>> generatingAnnotationHandlers = new ArrayList<GeneratingAnnotationHandler<? extends GeneratedClassHolder>>();
4947
private List<AnnotationHandler<? extends GeneratedClassHolder>> decoratingAnnotationHandlers = new ArrayList<AnnotationHandler<? extends GeneratedClassHolder>>();
5048
private Set<String> supportedAnnotationNames;
49+
private OptionsHelper optionsHelper;
5150

5251
public AnnotationHandlers(ProcessingEnvironment processingEnvironment) {
52+
optionsHelper = new OptionsHelper(processingEnvironment);
53+
5354
add(new EApplicationHandler(processingEnvironment));
5455
add(new EActivityHandler(processingEnvironment));
5556
add(new EProviderHandler(processingEnvironment));
5657
add(new EReceiverHandler(processingEnvironment));
5758
add(new EServiceHandler(processingEnvironment));
58-
add(new EIntentServiceHandler(processingEnvironment));
59+
add(new EIntentServiceHandler(processingEnvironment));
5960
add(new EFragmentHandler(processingEnvironment));
6061
add(new EBeanHandler(processingEnvironment));
6162
add(new EViewGroupHandler(processingEnvironment));
@@ -107,7 +108,7 @@ public AnnotationHandlers(ProcessingEnvironment processingEnvironment) {
107108
add(new SeekBarProgressChangeHandler(processingEnvironment));
108109
add(new SeekBarTouchStartHandler(processingEnvironment));
109110
add(new SeekBarTouchStopHandler(processingEnvironment));
110-
add(new ServiceActionHandler(processingEnvironment));
111+
add(new ServiceActionHandler(processingEnvironment));
111112
add(new SubscribeHandler(processingEnvironment));
112113
add(new ProduceHandler(processingEnvironment));
113114
add(new InstanceStateHandler(processingEnvironment));
@@ -120,12 +121,12 @@ public AnnotationHandlers(ProcessingEnvironment processingEnvironment) {
120121
add(new AfterInjectHandler(processingEnvironment));
121122
add(new AfterViewsHandler(processingEnvironment));
122123

123-
if (traceActivated(processingEnvironment)) {
124-
add(new TraceHandler(processingEnvironment));
125-
}
126-
/* UIThreadHandler and BackgroundHandler must be after TraceHandler */
127-
add(new UiThreadHandler(processingEnvironment));
128-
add(new BackgroundHandler(processingEnvironment));
124+
if (optionsHelper.shouldLogTrace()) {
125+
add(new TraceHandler(processingEnvironment));
126+
}
127+
/* UIThreadHandler and BackgroundHandler must be after TraceHandler */
128+
add(new UiThreadHandler(processingEnvironment));
129+
add(new BackgroundHandler(processingEnvironment));
129130
}
130131

131132
private void add(AnnotationHandler<? extends GeneratedClassHolder> annotationHandler) {
@@ -168,16 +169,6 @@ public void setProcessHolder(ProcessHolder processHolder) {
168169
}
169170
}
170171

171-
private boolean traceActivated(ProcessingEnvironment processingEnvironment) {
172-
Map<String, String> options = processingEnvironment.getOptions();
173-
if (options.containsKey(TRACE_OPTION)) {
174-
String trace = options.get(TRACE_OPTION);
175-
return !"false".equals(trace);
176-
} else {
177-
return true;
178-
}
179-
}
180-
181172
public Set<String> getSupportedAnnotationTypes() {
182173
if (supportedAnnotationNames == null) {
183174
Set<String> annotationNames = new HashSet<String>();

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@
3838

3939
public class AndroidManifestFinder {
4040

41-
public static final String ANDROID_MANIFEST_FILE_OPTION = "androidManifestFile";
42-
4341
private static final Logger LOGGER = LoggerFactory.getLogger(AndroidManifestFinder.class);
4442
private static final int MAX_PARENTS_FROM_SOURCE_FOLDER = 10;
4543

46-
private ProcessingEnvironment processingEnv;
44+
private final ProcessingEnvironment processingEnv;
45+
private final OptionsHelper optionsHelper;
4746

4847
public AndroidManifestFinder(ProcessingEnvironment processingEnv) {
4948
this.processingEnv = processingEnv;
49+
optionsHelper = new OptionsHelper(processingEnv);
5050
}
5151

5252
public Option<AndroidManifest> extractAndroidManifest() {
@@ -81,18 +81,18 @@ public Option<AndroidManifest> extractAndroidManifest() {
8181
}
8282

8383
private Option<File> findManifestFile() {
84-
if (processingEnv.getOptions().containsKey(ANDROID_MANIFEST_FILE_OPTION)) {
85-
return findManifestInSpecifiedPath();
84+
String androidManifestFile = optionsHelper.getAndroidManifestFile();
85+
if (androidManifestFile != null) {
86+
return findManifestInSpecifiedPath(androidManifestFile);
8687
} else {
8788
return findManifestInParentsDirectories();
8889
}
8990
}
9091

91-
private Option<File> findManifestInSpecifiedPath() {
92-
String path = processingEnv.getOptions().get(ANDROID_MANIFEST_FILE_OPTION);
93-
File androidManifestFile = new File(path);
92+
private Option<File> findManifestInSpecifiedPath(String androidManifestPath) {
93+
File androidManifestFile = new File(androidManifestPath);
9494
if (!androidManifestFile.exists()) {
95-
LOGGER.error("Could not find the AndroidManifest.xml file in specified path : {}", path);
95+
LOGGER.error("Could not find the AndroidManifest.xml file in specified path : {}", androidManifestPath);
9696
return Option.absent();
9797
} else {
9898
LOGGER.debug("AndroidManifest.xml file found with specified path: {}", androidManifestFile.toString());

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@ public abstract class ModelConstants {
3535

3636
public static final String GENERATION_SUFFIX = "_";
3737

38-
public static final String TRACE_OPTION = "trace";
39-
4038
@SuppressWarnings("unchecked")
4139
public static final List<Class<? extends Annotation>> VALID_ENHANCED_VIEW_SUPPORT_ANNOTATIONS = asList(EActivity.class, EViewGroup.class, EView.class, EBean.class, EFragment.class);
4240

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package org.androidannotations.helper;
2+
3+
import java.util.Map;
4+
import java.util.Set;
5+
import java.util.TreeSet;
6+
7+
import javax.annotation.processing.ProcessingEnvironment;
8+
9+
import org.androidannotations.logger.Level;
10+
11+
public class OptionsHelper {
12+
13+
enum Option {
14+
TRACE("trace"), //
15+
ANDROID_MANIFEST_FILE("androidManifestFile"), //
16+
RESOURCE_PACKAGE_NAME("resourcePackageName"), //
17+
LOG_FILE("logFile"), //
18+
LOG_LEVEL("logLevel"), //
19+
LOG_APPENDER_CONSOLE("logAppenderConsole");
20+
21+
private String key;
22+
23+
private Option(String key) {
24+
this.key = key;
25+
}
26+
27+
public String getKey() {
28+
return key;
29+
}
30+
}
31+
32+
private final Map<String, String> options;
33+
34+
public OptionsHelper(ProcessingEnvironment processingEnvironment) {
35+
options = processingEnvironment.getOptions();
36+
}
37+
38+
public static Set<String> getOptionsConstants() {
39+
TreeSet<String> set = new TreeSet<String>();
40+
for (Option optionEnum : Option.values()) {
41+
set.add(optionEnum.getKey());
42+
}
43+
return set;
44+
}
45+
46+
public boolean shouldLogTrace() {
47+
return getBoolean(Option.TRACE);
48+
}
49+
50+
public String getAndroidManifestFile() {
51+
return getString(Option.ANDROID_MANIFEST_FILE);
52+
}
53+
54+
public String getResourcePackageName() {
55+
return getString(Option.RESOURCE_PACKAGE_NAME);
56+
}
57+
58+
public String getLogFile() {
59+
return getString(Option.LOG_FILE);
60+
}
61+
62+
public Level getLogLevel() {
63+
try {
64+
return Level.parse(getString(Option.LOG_LEVEL));
65+
} catch (Exception e) {
66+
return Level.DEBUG;
67+
}
68+
}
69+
70+
public boolean shouldUseConsoleAppender() {
71+
return getBoolean(Option.LOG_APPENDER_CONSOLE);
72+
}
73+
74+
private String getString(Option option) {
75+
return options.get(option.getKey());
76+
}
77+
78+
private boolean getBoolean(Option option) {
79+
String key = option.getKey();
80+
if (options.containsKey(key)) {
81+
String trace = options.get(key);
82+
return !"false".equals(trace);
83+
} else {
84+
return true;
85+
}
86+
}
87+
88+
}

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

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,19 @@
1717

1818
import java.util.ArrayList;
1919
import java.util.List;
20-
import java.util.Map;
2120

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

25+
import org.androidannotations.helper.OptionsHelper;
2626
import org.androidannotations.logger.appender.Appender;
2727
import org.androidannotations.logger.appender.ConsoleAppender;
2828
import org.androidannotations.logger.appender.FileAppender;
2929
import org.androidannotations.logger.appender.MessagerAppender;
3030

3131
public class LoggerContext {
3232

33-
public static final String LOG_FILE_OPTION = "logFile";
34-
public static final String LOG_LEVEL_OPTION = "logLevel";
35-
public static final String LOG_APPENDER_CONSOLE = "logAppenderConsole";
3633
private static LoggerContext INSTANCE = null;
3734
private static final Level DEFAULT_LEVEL = Level.DEBUG;
3835

@@ -77,8 +74,9 @@ public void setProcessingEnv(ProcessingEnvironment processingEnv) {
7774
appender.open();
7875
}
7976

80-
resolveLogLevel(processingEnv);
81-
addConsoleAppender(processingEnv);
77+
OptionsHelper optionsHelper = new OptionsHelper(processingEnv);
78+
resolveLogLevel(optionsHelper);
79+
addConsoleAppender(optionsHelper);
8280
}
8381

8482
public void close() {
@@ -87,20 +85,13 @@ public void close() {
8785
}
8886
}
8987

90-
private void resolveLogLevel(ProcessingEnvironment processingEnv) {
91-
Map<String, String> options = processingEnv.getOptions();
92-
if (options.containsKey(LOG_LEVEL_OPTION)) {
93-
Level logLevel = Level.parse(options.get(LOG_LEVEL_OPTION));
94-
setCurrentLevel(logLevel);
95-
}
88+
private void resolveLogLevel(OptionsHelper optionsHelper) {
89+
setCurrentLevel(optionsHelper.getLogLevel());
9690
}
9791

98-
private void addConsoleAppender(ProcessingEnvironment processingEnv) {
99-
Map<String, String> options = processingEnv.getOptions();
100-
if (options.containsKey(LOG_APPENDER_CONSOLE)) {
101-
if (Boolean.parseBoolean(options.get(LOG_APPENDER_CONSOLE))) {
102-
appenders.add(new ConsoleAppender());
103-
}
92+
private void addConsoleAppender(OptionsHelper optionsHelper) {
93+
if (optionsHelper.shouldUseConsoleAppender()) {
94+
appenders.add(new ConsoleAppender());
10495
}
10596
}
10697

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

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

22+
import org.androidannotations.helper.OptionsHelper;
2223
import org.androidannotations.logger.Level;
2324

2425
public abstract class Appender {
2526

2627
protected ProcessingEnvironment processingEnv;
28+
protected OptionsHelper optionsHelper;
2729

2830
public void setProcessingEnv(ProcessingEnvironment processingEnv) {
2931
this.processingEnv = processingEnv;
32+
optionsHelper = new OptionsHelper(processingEnv);
3033
}
3134

3235
public abstract void open();

0 commit comments

Comments
 (0)