9090import com .googlecode .androidannotations .rclass .AndroidRClassFinder ;
9191import com .googlecode .androidannotations .rclass .CoumpoundRClass ;
9292import com .googlecode .androidannotations .rclass .IRClass ;
93+ import com .googlecode .androidannotations .rclass .CompiledRClassFinder ;
9394import com .googlecode .androidannotations .rclass .RClassFinder ;
9495import com .googlecode .androidannotations .validation .BeforeCreateValidator ;
9596import com .googlecode .androidannotations .validation .ClickValidator ;
110111import com .sun .codemodel .JCodeModel ;
111112
112113@ SupportedAnnotationClasses ({ Enhance .class , //
113- BeforeCreate .class , //
114- RoboGuice .class , //
115- ViewById .class , //
116- Click .class , //
117- LongClick .class , //
118- ItemClick .class , //
119- ItemLongClick .class , //
120- Touch .class , //
121- ItemSelect .class , //
122- UiThreadDelayed .class , //
123- UiThread .class , //
124- Transactional .class , //
125- Background .class , //
126- Extra .class , //
127- SystemService .class , //
128- StringRes .class , //
129- ColorRes .class , //
130- AnimationRes .class , //
131- BooleanRes .class , //
132- ColorStateListRes .class , //
133- DimensionRes .class , //
134- DimensionPixelOffsetRes .class , //
135- DimensionPixelSizeRes .class , //
136- DrawableRes .class , //
137- IntArrayRes .class , //
138- IntegerRes .class , //
139- LayoutRes .class , //
140- MovieRes .class , //
141- TextRes .class , //
142- TextArrayRes .class , //
143- 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 })
144145@ SupportedSourceVersion (SourceVersion .RELEASE_6 )
145146public class AndroidAnnotationProcessor extends AnnotatedAbstractProcessor {
146147
147- @ Override
148- public boolean process (Set <? extends TypeElement > annotations , RoundEnvironment roundEnv ) {
149- Messager messager = processingEnv .getMessager ();
150- messager .printMessage (Diagnostic .Kind .NOTE , "AndroidAnnotations compile time annotation processing" );
151- try {
152- processThrowing (annotations , roundEnv );
153- } catch (Exception e ) {
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 ) {
154155
155- Throwable rootCause = e ;
156- while (rootCause .getCause () != null ) {
157- rootCause = rootCause .getCause ();
158- }
156+ Throwable rootCause = e ;
157+ while (rootCause .getCause () != null ) {
158+ rootCause = rootCause .getCause ();
159+ }
159160
160- StackTraceElement firstElement = e .getStackTrace ()[0 ];
161- StackTraceElement rootFirstElement = rootCause .getStackTrace ()[0 ];
162- String errorMessage = e .toString () + " " + firstElement .toString () + " root: " + rootCause .toString () + " " + rootFirstElement .toString ();
161+ StackTraceElement firstElement = e .getStackTrace ()[0 ];
162+ StackTraceElement rootFirstElement = rootCause .getStackTrace ()[0 ];
163+ String errorMessage = e .toString () + " " + firstElement .toString () + " root: " + rootCause .toString () + " " + rootFirstElement .toString ();
163164
164- messager .printMessage (Diagnostic .Kind .ERROR , "Unexpected annotation processing exception: " + errorMessage );
165- e .printStackTrace ();
165+ messager .printMessage (Diagnostic .Kind .ERROR , "Unexpected annotation processing exception: " + errorMessage );
166+ e .printStackTrace ();
166167
167- Element element = roundEnv .getElementsAnnotatedWith (annotations .iterator ().next ()).iterator ().next ();
168- messager .printMessage (Diagnostic .Kind .ERROR , "Unexpected annotation processing exception (not related to this element, but otherwise it wouldn't show up in eclipse) : " + errorMessage , element );
169- }
168+ Element element = roundEnv .getElementsAnnotatedWith (annotations .iterator ().next ()).iterator ().next ();
169+ messager .printMessage (Diagnostic .Kind .ERROR , "Unexpected annotation processing exception (not related to this element, but otherwise it wouldn't show up in eclipse) : " + errorMessage , element );
170+ }
170171
171- return false ;
172- }
172+ return false ;
173+ }
173174
174- private void processThrowing (Set <? extends TypeElement > annotations , RoundEnvironment roundEnv ) throws IOException {
175- AnnotationElementsHolder extractedModel = extractAnnotations (annotations , roundEnv );
175+ private void processThrowing (Set <? extends TypeElement > annotations , RoundEnvironment roundEnv ) throws IOException {
176+ AnnotationElementsHolder extractedModel = extractAnnotations (annotations , roundEnv );
176177
177- IRClass rClass = findAndroidRClass (extractedModel );
178+ IRClass rClass = findAndroidRClass (extractedModel );
178179
179- AndroidSystemServices androidSystemServices = new AndroidSystemServices ();
180+ AndroidSystemServices androidSystemServices = new AndroidSystemServices ();
180181
181- AnnotationElements validatedModel = validateAnnotations (extractedModel , rClass , androidSystemServices );
182+ AnnotationElements validatedModel = validateAnnotations (extractedModel , rClass , androidSystemServices );
182183
183- JCodeModel codeModel = processAnnotationsToCodeModel (validatedModel , rClass , androidSystemServices );
184+ JCodeModel codeModel = processAnnotationsToCodeModel (validatedModel , rClass , androidSystemServices );
184185
185- MetaModel stringModel = processAnnotationsToStringModel (validatedModel , rClass , androidSystemServices );
186+ MetaModel stringModel = processAnnotationsToStringModel (validatedModel , rClass , androidSystemServices );
186187
187- generateStringModelSources (stringModel );
188- generateCodeModelSources (codeModel );
189- }
188+ generateStringModelSources (stringModel );
189+ generateCodeModelSources (codeModel );
190+ }
190191
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- }
192+ private AnnotationElementsHolder extractAnnotations (Set <? extends TypeElement > annotations , RoundEnvironment roundEnv ) {
193+ ModelExtractor modelExtractor = new ModelExtractor ();
194+ AnnotationElementsHolder extractedModel = modelExtractor .extract (annotations , roundEnv );
195+ return extractedModel ;
196+ }
196197
197- private IRClass findAndroidRClass (AnnotationElementsHolder extractedModel ) {
198- RClassFinder rClassFinder = new RClassFinder (processingEnv );
199- IRClass rClass = rClassFinder .findFromAnnotationElements (extractedModel );
198+ private IRClass findAndroidRClass (AnnotationElementsHolder extractedModel ) throws IOException {
199+ RClassFinder rClassFinder = new CompiledRClassFinder (processingEnv );
200+ IRClass rClass = rClassFinder .find (extractedModel );
200201
201- AndroidRClassFinder androidRClassFinder = new AndroidRClassFinder (processingEnv );
202+ AndroidRClassFinder androidRClassFinder = new AndroidRClassFinder (processingEnv );
202203
203- IRClass androidRClass = androidRClassFinder .find ();
204+ IRClass androidRClass = androidRClassFinder .find ();
204205
205- return new CoumpoundRClass (rClass , androidRClass );
206- }
206+ return new CoumpoundRClass (rClass , androidRClass );
207+ }
207208
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- }
209+ private AnnotationElements validateAnnotations (AnnotationElementsHolder extractedModel , IRClass rClass , AndroidSystemServices androidSystemServices ) {
210+ if (rClass != null ) {
211+ ModelValidator modelValidator = buildModelValidator (rClass , androidSystemServices );
212+ return modelValidator .validate (extractedModel );
213+ } else {
214+ return EmptyAnnotationElements .INSTANCE ;
215+ }
216+ }
216217
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 ));
218+ private ModelValidator buildModelValidator (IRClass rClass , AndroidSystemServices androidSystemServices ) {
219+ ModelValidator modelValidator = new ModelValidator ();
220+ modelValidator .register (new EnhanceValidator (processingEnv , rClass ));
221+ modelValidator .register (new RoboGuiceValidator (processingEnv ));
222+ modelValidator .register (new ViewByIdValidator (processingEnv , rClass ));
223+ modelValidator .register (new ClickValidator (processingEnv , rClass ));
224+ modelValidator .register (new LongClickValidator (processingEnv , rClass ));
225+ modelValidator .register (new TouchValidator (processingEnv , rClass ));
226+ modelValidator .register (new ItemClickValidator (processingEnv , rClass ));
227+ modelValidator .register (new ItemSelectedValidator (processingEnv , rClass ));
228+ modelValidator .register (new ItemLongClickValidator (processingEnv , rClass ));
229+ for (AndroidRes androidRes : AndroidRes .values ()) {
230+ modelValidator .register (new ResValidator (androidRes , processingEnv , rClass ));
231+ }
232+ modelValidator .register (new RunnableValidator (UiThreadDelayed .class , processingEnv ));
233+ modelValidator .register (new RunnableValidator (UiThread .class , processingEnv ));
234+ modelValidator .register (new RunnableValidator (Background .class , processingEnv ));
235+ modelValidator .register (new TransactionalValidator (processingEnv ));
236+ modelValidator .register (new ExtraValidator (processingEnv ));
237+ modelValidator .register (new SystemServiceValidator (processingEnv , androidSystemServices ));
238+ modelValidator .register (new BeforeCreateValidator (processingEnv ));
238239
239- return modelValidator ;
240- }
240+ return modelValidator ;
241+ }
241242
242- private JCodeModel processAnnotationsToCodeModel (AnnotationElements validatedModel , IRClass rClass , AndroidSystemServices androidSystemServices ) {
243- ModelProcessor modelProcessor = buildModelProcessor (rClass , androidSystemServices );
244- return modelProcessor .processToCodeModel (validatedModel );
245- }
243+ private JCodeModel processAnnotationsToCodeModel (AnnotationElements validatedModel , IRClass rClass , AndroidSystemServices androidSystemServices ) {
244+ ModelProcessor modelProcessor = buildModelProcessor (rClass , androidSystemServices );
245+ return modelProcessor .processToCodeModel (validatedModel );
246+ }
246247
247- private MetaModel processAnnotationsToStringModel (AnnotationElements validatedModel , IRClass rClass , AndroidSystemServices androidSystemServices ) {
248- ModelProcessor modelProcessor = buildModelProcessor (rClass , androidSystemServices );
249- return modelProcessor .processToStringModel (validatedModel );
250- }
248+ private MetaModel processAnnotationsToStringModel (AnnotationElements validatedModel , IRClass rClass , AndroidSystemServices androidSystemServices ) {
249+ ModelProcessor modelProcessor = buildModelProcessor (rClass , androidSystemServices );
250+ return modelProcessor .processToStringModel (validatedModel );
251+ }
251252
252- private ModelProcessor buildModelProcessor (IRClass rClass , AndroidSystemServices androidSystemServices ) {
253- ModelProcessor modelProcessor = new ModelProcessor ();
254- modelProcessor .register (new EnhanceProcessor (processingEnv , rClass ));
255- modelProcessor .register (new RoboGuiceProcessor ());
256- modelProcessor .register (new ViewByIdProcessor (rClass ));
257- modelProcessor .register (new ClickProcessor (rClass ));
258- modelProcessor .register (new LongClickProcessor (rClass ));
259- modelProcessor .register (new TouchProcessor (rClass ));
260- modelProcessor .register (new ItemClickProcessor (rClass ));
261- modelProcessor .register (new ItemSelectedProcessor (rClass ));
262- modelProcessor .register (new ItemLongClickProcessor (rClass ));
263- for (AndroidRes androidRes : AndroidRes .values ()) {
264- modelProcessor .register (new ResProcessor (androidRes , rClass ));
265- }
266- modelProcessor .register (new UiThreadProcessor ());
267- modelProcessor .register (new UiThreadDelayedProcessor ());
268- modelProcessor .register (new BackgroundProcessor ());
269- modelProcessor .register (new TransactionalProcessor ());
270- modelProcessor .register (new ExtraProcessor ());
271- modelProcessor .register (new SystemServiceProcessor (androidSystemServices ));
272- modelProcessor .register (new BeforeCreateProcessor ());
273- return modelProcessor ;
274- }
253+ private ModelProcessor buildModelProcessor (IRClass rClass , AndroidSystemServices androidSystemServices ) {
254+ ModelProcessor modelProcessor = new ModelProcessor ();
255+ modelProcessor .register (new EnhanceProcessor (processingEnv , rClass ));
256+ modelProcessor .register (new RoboGuiceProcessor ());
257+ modelProcessor .register (new ViewByIdProcessor (rClass ));
258+ modelProcessor .register (new ClickProcessor (rClass ));
259+ modelProcessor .register (new LongClickProcessor (rClass ));
260+ modelProcessor .register (new TouchProcessor (rClass ));
261+ modelProcessor .register (new ItemClickProcessor (rClass ));
262+ modelProcessor .register (new ItemSelectedProcessor (rClass ));
263+ modelProcessor .register (new ItemLongClickProcessor (rClass ));
264+ for (AndroidRes androidRes : AndroidRes .values ()) {
265+ modelProcessor .register (new ResProcessor (androidRes , rClass ));
266+ }
267+ modelProcessor .register (new UiThreadProcessor ());
268+ modelProcessor .register (new UiThreadDelayedProcessor ());
269+ modelProcessor .register (new BackgroundProcessor ());
270+ modelProcessor .register (new TransactionalProcessor ());
271+ modelProcessor .register (new ExtraProcessor ());
272+ modelProcessor .register (new SystemServiceProcessor (androidSystemServices ));
273+ modelProcessor .register (new BeforeCreateProcessor ());
274+ return modelProcessor ;
275+ }
275276
276- private void generateStringModelSources (MetaModel model ) throws IOException {
277- StringModelGenerator modelGenerator = new StringModelGenerator (processingEnv .getFiler ());
278- modelGenerator .generate (model );
279- }
277+ private void generateStringModelSources (MetaModel model ) throws IOException {
278+ StringModelGenerator modelGenerator = new StringModelGenerator (processingEnv .getFiler ());
279+ modelGenerator .generate (model );
280+ }
280281
281- private void generateCodeModelSources (JCodeModel model ) throws IOException {
282- CodeModelGenerator modelGenerator = new CodeModelGenerator (processingEnv .getFiler ());
283- modelGenerator .generate (model );
284- }
282+ private void generateCodeModelSources (JCodeModel model ) throws IOException {
283+ CodeModelGenerator modelGenerator = new CodeModelGenerator (processingEnv .getFiler ());
284+ modelGenerator .generate (model );
285+ }
285286}
0 commit comments