Skip to content

Commit 96ec541

Browse files
committed
small refactoring
1 parent 939b2bd commit 96ec541

1 file changed

Lines changed: 145 additions & 138 deletions

File tree

‎AndroidAnnotations/src/main/java/com/googlecode/androidannotations/AndroidAnnotationProcessor.java‎

Lines changed: 145 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -111,165 +111,172 @@
111111
import com.sun.codemodel.JCodeModel;
112112

113113
@SupportedAnnotationClasses({ Enhance.class, //
114-
BeforeCreate.class, //
115-
RoboGuice.class, //
116-
ViewById.class, //
117-
Click.class, //
118-
LongClick.class, //
119-
ItemClick.class, //
120-
ItemLongClick.class, //
121-
Touch.class, //
122-
ItemSelect.class, //
123-
UiThreadDelayed.class, //
124-
UiThread.class, //
125-
Transactional.class, //
126-
Background.class, //
127-
Extra.class, //
128-
SystemService.class, //
129-
StringRes.class, //
130-
ColorRes.class, //
131-
AnimationRes.class, //
132-
BooleanRes.class, //
133-
ColorStateListRes.class, //
134-
DimensionRes.class, //
135-
DimensionPixelOffsetRes.class, //
136-
DimensionPixelSizeRes.class, //
137-
DrawableRes.class, //
138-
IntArrayRes.class, //
139-
IntegerRes.class, //
140-
LayoutRes.class, //
141-
MovieRes.class, //
142-
TextRes.class, //
143-
TextArrayRes.class, //
144-
StringArrayRes.class })
114+
BeforeCreate.class, //
115+
RoboGuice.class, //
116+
ViewById.class, //
117+
Click.class, //
118+
LongClick.class, //
119+
ItemClick.class, //
120+
ItemLongClick.class, //
121+
Touch.class, //
122+
ItemSelect.class, //
123+
UiThreadDelayed.class, //
124+
UiThread.class, //
125+
Transactional.class, //
126+
Background.class, //
127+
Extra.class, //
128+
SystemService.class, //
129+
StringRes.class, //
130+
ColorRes.class, //
131+
AnimationRes.class, //
132+
BooleanRes.class, //
133+
ColorStateListRes.class, //
134+
DimensionRes.class, //
135+
DimensionPixelOffsetRes.class, //
136+
DimensionPixelSizeRes.class, //
137+
DrawableRes.class, //
138+
IntArrayRes.class, //
139+
IntegerRes.class, //
140+
LayoutRes.class, //
141+
MovieRes.class, //
142+
TextRes.class, //
143+
TextArrayRes.class, //
144+
StringArrayRes.class })
145145
@SupportedSourceVersion(SourceVersion.RELEASE_6)
146146
public class AndroidAnnotationProcessor extends AnnotatedAbstractProcessor {
147147

148-
@Override
149-
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
150-
Messager messager = processingEnv.getMessager();
151-
messager.printMessage(Diagnostic.Kind.NOTE, "AndroidAnnotations compile time annotation processing");
152-
try {
153-
processThrowing(annotations, roundEnv);
154-
} catch (Exception e) {
155-
156-
String errorMessage = "Unexpected error. Please report an issue on AndroidAnnotations, with the following content: " + stackTraceToString(e);
157-
messager.printMessage(Diagnostic.Kind.ERROR, errorMessage);
148+
@Override
149+
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
150+
Messager messager = processingEnv.getMessager();
151+
messager.printMessage(Diagnostic.Kind.NOTE, "AndroidAnnotations compile time annotation processing");
152+
try {
153+
processThrowing(annotations, roundEnv);
154+
} catch (Exception e) {
155+
handleException(annotations, roundEnv, e);
156+
}
157+
return false;
158+
}
158159

159-
/*
160-
* Printing exception as an error on a random element. The exception is not related to this element, but otherwise it wouldn't show up in eclipse.
161-
*/
162-
163-
Element element = roundEnv.getElementsAnnotatedWith(annotations.iterator().next()).iterator().next();
164-
messager.printMessage(Diagnostic.Kind.ERROR, errorMessage, element);
165-
}
160+
private void processThrowing(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) throws IOException {
161+
AnnotationElementsHolder extractedModel = extractAnnotations(annotations, roundEnv);
166162

167-
return false;
168-
}
163+
IRClass rClass = findAndroidRClass(extractedModel);
169164

170-
private String stackTraceToString(Throwable e) {
171-
StringWriter writer = new StringWriter();
172-
PrintWriter pw = new PrintWriter(writer);
173-
e.printStackTrace(pw);
174-
return writer.toString();
175-
}
165+
AndroidSystemServices androidSystemServices = new AndroidSystemServices();
176166

177-
private void processThrowing(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) throws IOException {
178-
AnnotationElementsHolder extractedModel = extractAnnotations(annotations, roundEnv);
167+
AnnotationElements validatedModel = validateAnnotations(extractedModel, rClass, androidSystemServices);
179168

180-
IRClass rClass = findAndroidRClass(extractedModel);
169+
JCodeModel codeModel = processAnnotations(validatedModel, rClass, androidSystemServices);
181170

182-
AndroidSystemServices androidSystemServices = new AndroidSystemServices();
171+
generateSources(codeModel);
172+
}
183173

184-
AnnotationElements validatedModel = validateAnnotations(extractedModel, rClass, androidSystemServices);
174+
private AnnotationElementsHolder extractAnnotations(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
175+
ModelExtractor modelExtractor = new ModelExtractor();
176+
AnnotationElementsHolder extractedModel = modelExtractor.extract(annotations, roundEnv);
177+
return extractedModel;
178+
}
185179

186-
JCodeModel codeModel = processAnnotations(validatedModel, rClass, androidSystemServices);
180+
private IRClass findAndroidRClass(AnnotationElementsHolder extractedModel) throws IOException {
181+
RClassFinder rClassFinder = new CompiledRClassFinder(processingEnv);
182+
IRClass rClass = rClassFinder.find(extractedModel);
187183

188-
generateSources(codeModel);
189-
}
184+
AndroidRClassFinder androidRClassFinder = new AndroidRClassFinder(processingEnv);
190185

191-
private AnnotationElementsHolder extractAnnotations(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
192-
ModelExtractor modelExtractor = new ModelExtractor();
193-
AnnotationElementsHolder extractedModel = modelExtractor.extract(annotations, roundEnv);
194-
return extractedModel;
195-
}
186+
IRClass androidRClass = androidRClassFinder.find();
196187

197-
private IRClass findAndroidRClass(AnnotationElementsHolder extractedModel) throws IOException {
198-
RClassFinder rClassFinder = new CompiledRClassFinder(processingEnv);
199-
IRClass rClass = rClassFinder.find(extractedModel);
188+
return new CoumpoundRClass(rClass, androidRClass);
189+
}
200190

201-
AndroidRClassFinder androidRClassFinder = new AndroidRClassFinder(processingEnv);
191+
private AnnotationElements validateAnnotations(AnnotationElementsHolder extractedModel, IRClass rClass, AndroidSystemServices androidSystemServices) {
192+
if (rClass != null) {
193+
ModelValidator modelValidator = buildModelValidator(rClass, androidSystemServices);
194+
return modelValidator.validate(extractedModel);
195+
} else {
196+
return EmptyAnnotationElements.INSTANCE;
197+
}
198+
}
202199

203-
IRClass androidRClass = androidRClassFinder.find();
200+
private ModelValidator buildModelValidator(IRClass rClass, AndroidSystemServices androidSystemServices) {
201+
ModelValidator modelValidator = new ModelValidator();
202+
modelValidator.register(new EnhanceValidator(processingEnv, rClass));
203+
modelValidator.register(new RoboGuiceValidator(processingEnv));
204+
modelValidator.register(new ViewByIdValidator(processingEnv, rClass));
205+
modelValidator.register(new ClickValidator(processingEnv, rClass));
206+
modelValidator.register(new LongClickValidator(processingEnv, rClass));
207+
modelValidator.register(new TouchValidator(processingEnv, rClass));
208+
modelValidator.register(new ItemClickValidator(processingEnv, rClass));
209+
modelValidator.register(new ItemSelectedValidator(processingEnv, rClass));
210+
modelValidator.register(new ItemLongClickValidator(processingEnv, rClass));
211+
for (AndroidRes androidRes : AndroidRes.values()) {
212+
modelValidator.register(new ResValidator(androidRes, processingEnv, rClass));
213+
}
214+
modelValidator.register(new RunnableValidator(UiThreadDelayed.class, processingEnv));
215+
modelValidator.register(new RunnableValidator(UiThread.class, processingEnv));
216+
modelValidator.register(new RunnableValidator(Background.class, processingEnv));
217+
modelValidator.register(new TransactionalValidator(processingEnv));
218+
modelValidator.register(new ExtraValidator(processingEnv));
219+
modelValidator.register(new SystemServiceValidator(processingEnv, androidSystemServices));
220+
modelValidator.register(new BeforeCreateValidator(processingEnv));
204221

205-
return new CoumpoundRClass(rClass, androidRClass);
206-
}
222+
return modelValidator;
223+
}
207224

208-
private AnnotationElements validateAnnotations(AnnotationElementsHolder extractedModel, IRClass rClass, AndroidSystemServices androidSystemServices) {
209-
if (rClass != null) {
210-
ModelValidator modelValidator = buildModelValidator(rClass, androidSystemServices);
211-
return modelValidator.validate(extractedModel);
212-
} else {
213-
return EmptyAnnotationElements.INSTANCE;
214-
}
215-
}
225+
private JCodeModel processAnnotations(AnnotationElements validatedModel, IRClass rClass, AndroidSystemServices androidSystemServices) {
226+
ModelProcessor modelProcessor = buildModelProcessor(rClass, androidSystemServices);
227+
return modelProcessor.process(validatedModel);
228+
}
216229

217-
private ModelValidator buildModelValidator(IRClass rClass, AndroidSystemServices androidSystemServices) {
218-
ModelValidator modelValidator = new ModelValidator();
219-
modelValidator.register(new EnhanceValidator(processingEnv, rClass));
220-
modelValidator.register(new RoboGuiceValidator(processingEnv));
221-
modelValidator.register(new ViewByIdValidator(processingEnv, rClass));
222-
modelValidator.register(new ClickValidator(processingEnv, rClass));
223-
modelValidator.register(new LongClickValidator(processingEnv, rClass));
224-
modelValidator.register(new TouchValidator(processingEnv, rClass));
225-
modelValidator.register(new ItemClickValidator(processingEnv, rClass));
226-
modelValidator.register(new ItemSelectedValidator(processingEnv, rClass));
227-
modelValidator.register(new ItemLongClickValidator(processingEnv, rClass));
228-
for (AndroidRes androidRes : AndroidRes.values()) {
229-
modelValidator.register(new ResValidator(androidRes, processingEnv, rClass));
230-
}
231-
modelValidator.register(new RunnableValidator(UiThreadDelayed.class, processingEnv));
232-
modelValidator.register(new RunnableValidator(UiThread.class, processingEnv));
233-
modelValidator.register(new RunnableValidator(Background.class, processingEnv));
234-
modelValidator.register(new TransactionalValidator(processingEnv));
235-
modelValidator.register(new ExtraValidator(processingEnv));
236-
modelValidator.register(new SystemServiceValidator(processingEnv, androidSystemServices));
237-
modelValidator.register(new BeforeCreateValidator(processingEnv));
230+
private ModelProcessor buildModelProcessor(IRClass rClass, AndroidSystemServices androidSystemServices) {
231+
ModelProcessor modelProcessor = new ModelProcessor();
232+
modelProcessor.register(new EnhanceProcessor(processingEnv, rClass));
233+
modelProcessor.register(new RoboGuiceProcessor());
234+
modelProcessor.register(new ViewByIdProcessor(rClass));
235+
modelProcessor.register(new ClickProcessor(rClass));
236+
modelProcessor.register(new LongClickProcessor(rClass));
237+
modelProcessor.register(new TouchProcessor(rClass));
238+
modelProcessor.register(new ItemClickProcessor(rClass));
239+
modelProcessor.register(new ItemSelectedProcessor(rClass));
240+
modelProcessor.register(new ItemLongClickProcessor(rClass));
241+
for (AndroidRes androidRes : AndroidRes.values()) {
242+
modelProcessor.register(new ResProcessor(androidRes, rClass));
243+
}
244+
modelProcessor.register(new UiThreadProcessor());
245+
modelProcessor.register(new UiThreadDelayedProcessor());
246+
modelProcessor.register(new BackgroundProcessor());
247+
modelProcessor.register(new TransactionalProcessor());
248+
modelProcessor.register(new ExtraProcessor());
249+
modelProcessor.register(new SystemServiceProcessor(androidSystemServices));
250+
modelProcessor.register(new BeforeCreateProcessor());
251+
return modelProcessor;
252+
}
238253

239-
return modelValidator;
240-
}
254+
private void generateSources(JCodeModel model) throws IOException {
255+
CodeModelGenerator modelGenerator = new CodeModelGenerator(processingEnv.getFiler());
256+
modelGenerator.generate(model);
257+
}
241258

242-
private JCodeModel processAnnotations(AnnotationElements validatedModel, IRClass rClass, AndroidSystemServices androidSystemServices) {
243-
ModelProcessor modelProcessor = buildModelProcessor(rClass, androidSystemServices);
244-
return modelProcessor.process(validatedModel);
245-
}
259+
private void handleException(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv, Exception e) {
260+
String errorMessage = "Unexpected error. Please report an issue on AndroidAnnotations, with the following content: " + stackTraceToString(e);
246261

247-
private ModelProcessor buildModelProcessor(IRClass rClass, AndroidSystemServices androidSystemServices) {
248-
ModelProcessor modelProcessor = new ModelProcessor();
249-
modelProcessor.register(new EnhanceProcessor(processingEnv, rClass));
250-
modelProcessor.register(new RoboGuiceProcessor());
251-
modelProcessor.register(new ViewByIdProcessor(rClass));
252-
modelProcessor.register(new ClickProcessor(rClass));
253-
modelProcessor.register(new LongClickProcessor(rClass));
254-
modelProcessor.register(new TouchProcessor(rClass));
255-
modelProcessor.register(new ItemClickProcessor(rClass));
256-
modelProcessor.register(new ItemSelectedProcessor(rClass));
257-
modelProcessor.register(new ItemLongClickProcessor(rClass));
258-
for (AndroidRes androidRes : AndroidRes.values()) {
259-
modelProcessor.register(new ResProcessor(androidRes, rClass));
260-
}
261-
modelProcessor.register(new UiThreadProcessor());
262-
modelProcessor.register(new UiThreadDelayedProcessor());
263-
modelProcessor.register(new BackgroundProcessor());
264-
modelProcessor.register(new TransactionalProcessor());
265-
modelProcessor.register(new ExtraProcessor());
266-
modelProcessor.register(new SystemServiceProcessor(androidSystemServices));
267-
modelProcessor.register(new BeforeCreateProcessor());
268-
return modelProcessor;
269-
}
262+
Messager messager = processingEnv.getMessager();
263+
messager.printMessage(Diagnostic.Kind.ERROR, errorMessage);
264+
265+
/*
266+
* Printing exception as an error on a random element. The exception is
267+
* not related to this element, but otherwise it wouldn't show up in
268+
* eclipse.
269+
*/
270+
271+
Element element = roundEnv.getElementsAnnotatedWith(annotations.iterator().next()).iterator().next();
272+
messager.printMessage(Diagnostic.Kind.ERROR, errorMessage, element);
273+
}
274+
275+
private String stackTraceToString(Throwable e) {
276+
StringWriter writer = new StringWriter();
277+
PrintWriter pw = new PrintWriter(writer);
278+
e.printStackTrace(pw);
279+
return writer.toString();
280+
}
270281

271-
private void generateSources(JCodeModel model) throws IOException {
272-
CodeModelGenerator modelGenerator = new CodeModelGenerator(processingEnv.getFiler());
273-
modelGenerator.generate(model);
274-
}
275282
}

0 commit comments

Comments
 (0)