111111import 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 )
146146public 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