Skip to content

Commit 7626fa0

Browse files
Refactored code by deleting MultipleResIdsBasedProcessor class, removing the inheritance link from *Processor and moving the code into IdAnnotationHelper. (see androidannotations#180)
1 parent c5f8081 commit 7626fa0

10 files changed

Lines changed: 93 additions & 103 deletions

File tree

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -466,12 +466,12 @@ private ModelProcessor buildModelProcessor(IRClass rClass, AndroidSystemServices
466466
modelProcessor.register(new RoboGuiceProcessor());
467467
modelProcessor.register(new ViewByIdProcessor(rClass));
468468
modelProcessor.register(new FromHtmlProcessor(rClass));
469-
modelProcessor.register(new ClickProcessor(rClass));
470-
modelProcessor.register(new LongClickProcessor(rClass));
471-
modelProcessor.register(new TouchProcessor(rClass));
472-
modelProcessor.register(new ItemClickProcessor(rClass));
473-
modelProcessor.register(new ItemSelectedProcessor(rClass));
474-
modelProcessor.register(new ItemLongClickProcessor(rClass));
469+
modelProcessor.register(new ClickProcessor(processingEnv, rClass));
470+
modelProcessor.register(new LongClickProcessor(processingEnv, rClass));
471+
modelProcessor.register(new TouchProcessor(processingEnv, rClass));
472+
modelProcessor.register(new ItemClickProcessor(processingEnv, rClass));
473+
modelProcessor.register(new ItemSelectedProcessor(processingEnv, rClass));
474+
modelProcessor.register(new ItemLongClickProcessor(processingEnv, rClass));
475475
for (AndroidRes androidRes : AndroidRes.values()) {
476476
modelProcessor.register(new ResProcessor(androidRes, rClass));
477477
}
@@ -489,7 +489,7 @@ private ModelProcessor buildModelProcessor(IRClass rClass, AndroidSystemServices
489489
modelProcessor.register(new OptionsProcessor(processingEnv, restImplementationHolder));
490490
modelProcessor.register(new AppProcessor());
491491
modelProcessor.register(new OptionsMenuProcessor(rClass));
492-
modelProcessor.register(new OptionsItemProcessor(rClass));
492+
modelProcessor.register(new OptionsItemProcessor(processingEnv, rClass));
493493
modelProcessor.register(new NoTitleProcessor());
494494
modelProcessor.register(new FullscreenProcessor());
495495
modelProcessor.register(new RestServiceProcessor());

‎AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/helper/IdAnnotationHelper.java‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@
2323
import javax.lang.model.element.Element;
2424

2525
import com.googlecode.androidannotations.annotations.Id;
26+
import com.googlecode.androidannotations.processing.EBeanHolder;
2627
import com.googlecode.androidannotations.rclass.IRClass;
2728
import com.googlecode.androidannotations.rclass.IRClass.Res;
2829
import com.googlecode.androidannotations.rclass.IRInnerClass;
30+
import com.sun.codemodel.JFieldRef;
2931

3032
public class IdAnnotationHelper extends TargetAnnotationHelper {
3133

@@ -59,6 +61,34 @@ public List<String> extractAnnotationQualifiedIds(Element element) {
5961
return clickQualifiedIds;
6062
}
6163

64+
public List<JFieldRef> extractFieldRefsFromAnnotationValues(Element element, int[] idsValues, String methodSuffix, EBeanHolder holder) {
65+
66+
List<JFieldRef> idsRefs = new ArrayList<JFieldRef>();
67+
IRInnerClass rInnerClass = rClass.get(Res.ID);
68+
69+
if (idsValues.length == 1 && idsValues[0] == Id.DEFAULT_VALUE) {
70+
71+
String fieldName = element.getSimpleName().toString();
72+
int lastIndex = fieldName.lastIndexOf(methodSuffix);
73+
74+
if (lastIndex != -1) {
75+
fieldName = fieldName.substring(0, lastIndex);
76+
}
77+
78+
JFieldRef idRef = rInnerClass.getIdStaticRef(fieldName, holder);
79+
idsRefs.add(idRef);
80+
81+
} else {
82+
for (int idValue : idsValues) {
83+
84+
JFieldRef idRef = rInnerClass.getIdStaticRef(idValue, holder);
85+
idsRefs.add(idRef);
86+
87+
}
88+
}
89+
return idsRefs;
90+
}
91+
6292
boolean containsIdValue(Integer idValue, Res res) {
6393
IRInnerClass rInnerClass = rClass.get(res);
6494
return rInnerClass.containsIdValue(idValue);

‎AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ClickProcessor.java‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818
import java.lang.annotation.Annotation;
1919
import java.util.List;
2020

21+
import javax.annotation.processing.ProcessingEnvironment;
2122
import javax.lang.model.element.Element;
2223
import javax.lang.model.element.ExecutableElement;
2324
import javax.lang.model.element.VariableElement;
2425

2526
import com.googlecode.androidannotations.annotations.Click;
27+
import com.googlecode.androidannotations.helper.IdAnnotationHelper;
2628
import com.googlecode.androidannotations.rclass.IRClass;
2729
import com.sun.codemodel.JBlock;
2830
import com.sun.codemodel.JClass;
@@ -39,10 +41,12 @@
3941
* @author Mathieu Boniface
4042
* @author Pierre-Yves
4143
*/
42-
public class ClickProcessor extends MultipleResIdsBasedProcessor implements ElementProcessor {
44+
public class ClickProcessor implements ElementProcessor {
4345

44-
public ClickProcessor(IRClass rClass) {
45-
super(rClass);
46+
private final IdAnnotationHelper helper;
47+
48+
public ClickProcessor(ProcessingEnvironment processingEnv, IRClass rClass) {
49+
helper = new IdAnnotationHelper(processingEnv, getTarget(), rClass);
4650
}
4751

4852
@Override
@@ -63,7 +67,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti
6367
boolean hasViewParameter = parameters.size() == 1;
6468

6569
Click annotation = element.getAnnotation(Click.class);
66-
List<JFieldRef> idsRefs = extractQualifiedIds(element, annotation.value(), "Clicked", holder);
70+
List<JFieldRef> idsRefs = helper.extractFieldRefsFromAnnotationValues(element, annotation.value(), "Clicked", holder);
6771

6872
JDefinedClass onClickListenerClass = codeModel.anonymousClass(holder.refClass("android.view.View.OnClickListener"));
6973
JMethod onClickMethod = onClickListenerClass.method(JMod.PUBLIC, codeModel.VOID, "onClick");

‎AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ItemClickProcessor.java‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@
1818
import java.lang.annotation.Annotation;
1919
import java.util.List;
2020

21+
import javax.annotation.processing.ProcessingEnvironment;
2122
import javax.lang.model.element.Element;
2223
import javax.lang.model.element.ExecutableElement;
2324
import javax.lang.model.element.VariableElement;
2425
import javax.lang.model.type.TypeKind;
2526
import javax.lang.model.type.TypeMirror;
2627

2728
import com.googlecode.androidannotations.annotations.ItemClick;
29+
import com.googlecode.androidannotations.helper.IdAnnotationHelper;
2830
import com.googlecode.androidannotations.rclass.IRClass;
2931
import com.sun.codemodel.JBlock;
3032
import com.sun.codemodel.JClass;
@@ -42,10 +44,12 @@
4244
* @author Pierre-Yves Ricau
4345
* @author Mathieu Boniface
4446
*/
45-
public class ItemClickProcessor extends MultipleResIdsBasedProcessor implements ElementProcessor {
47+
public class ItemClickProcessor implements ElementProcessor {
4648

47-
public ItemClickProcessor(IRClass rClass) {
48-
super(rClass);
49+
private IdAnnotationHelper helper;
50+
51+
public ItemClickProcessor(ProcessingEnvironment processingEnv, IRClass rClass) {
52+
helper = new IdAnnotationHelper(processingEnv, getTarget(), rClass);
4953
}
5054

5155
@Override
@@ -65,7 +69,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti
6569
boolean hasItemParameter = parameters.size() == 1;
6670

6771
ItemClick annotation = element.getAnnotation(ItemClick.class);
68-
List<JFieldRef> idsRefs = extractQualifiedIds(element, annotation.value(), "ItemClicked", holder);
72+
List<JFieldRef> idsRefs = helper.extractFieldRefsFromAnnotationValues(element, annotation.value(), "ItemClicked", holder);
6973

7074
JDefinedClass onItemClickListenerClass = codeModel.anonymousClass(holder.refClass("android.widget.AdapterView.OnItemClickListener"));
7175
JMethod onItemClickMethod = onItemClickListenerClass.method(JMod.PUBLIC, codeModel.VOID, "onItemClick");

‎AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ItemLongClickProcessor.java‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@
1818
import java.lang.annotation.Annotation;
1919
import java.util.List;
2020

21+
import javax.annotation.processing.ProcessingEnvironment;
2122
import javax.lang.model.element.Element;
2223
import javax.lang.model.element.ExecutableElement;
2324
import javax.lang.model.element.VariableElement;
2425
import javax.lang.model.type.TypeKind;
2526
import javax.lang.model.type.TypeMirror;
2627

2728
import com.googlecode.androidannotations.annotations.ItemLongClick;
29+
import com.googlecode.androidannotations.helper.IdAnnotationHelper;
2830
import com.googlecode.androidannotations.rclass.IRClass;
2931
import com.sun.codemodel.JBlock;
3032
import com.sun.codemodel.JClass;
@@ -42,10 +44,12 @@
4244
* @author Pierre-Yves Ricau
4345
* @author Mathieu Boniface
4446
*/
45-
public class ItemLongClickProcessor extends MultipleResIdsBasedProcessor implements ElementProcessor {
47+
public class ItemLongClickProcessor implements ElementProcessor {
4648

47-
public ItemLongClickProcessor(IRClass rClass) {
48-
super(rClass);
49+
private IdAnnotationHelper helper;
50+
51+
public ItemLongClickProcessor(ProcessingEnvironment processingEnv, IRClass rClass) {
52+
helper = new IdAnnotationHelper(processingEnv, getTarget(), rClass);
4953
}
5054

5155
@Override
@@ -67,7 +71,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti
6771
boolean hasItemParameter = parameters.size() == 1;
6872

6973
ItemLongClick annotation = element.getAnnotation(ItemLongClick.class);
70-
List<JFieldRef> idsRefs = extractQualifiedIds(element, annotation.value(), "ItemLongClicked", holder);
74+
List<JFieldRef> idsRefs = helper.extractFieldRefsFromAnnotationValues(element, annotation.value(), "ItemLongClicked", holder);
7175

7276
JDefinedClass onItemClickListenerClass = codeModel.anonymousClass(holder.refClass("android.widget.AdapterView.OnItemLongClickListener"));
7377
JMethod onItemLongClickMethod = onItemClickListenerClass.method(JMod.PUBLIC, codeModel.BOOLEAN, "onItemLongClick");

‎AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/ItemSelectedProcessor.java‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@
2121
import java.lang.annotation.Annotation;
2222
import java.util.List;
2323

24+
import javax.annotation.processing.ProcessingEnvironment;
2425
import javax.lang.model.element.Element;
2526
import javax.lang.model.element.ExecutableElement;
2627
import javax.lang.model.element.VariableElement;
2728
import javax.lang.model.type.TypeKind;
2829
import javax.lang.model.type.TypeMirror;
2930

3031
import com.googlecode.androidannotations.annotations.ItemSelect;
32+
import com.googlecode.androidannotations.helper.IdAnnotationHelper;
3133
import com.googlecode.androidannotations.rclass.IRClass;
3234
import com.sun.codemodel.JBlock;
3335
import com.sun.codemodel.JClass;
@@ -44,10 +46,12 @@
4446
* @author Pierre-Yves Ricau
4547
* @author Mathieu Boniface
4648
*/
47-
public class ItemSelectedProcessor extends MultipleResIdsBasedProcessor implements ElementProcessor {
49+
public class ItemSelectedProcessor implements ElementProcessor {
4850

49-
public ItemSelectedProcessor(IRClass rClass) {
50-
super(rClass);
51+
private IdAnnotationHelper helper;
52+
53+
public ItemSelectedProcessor(ProcessingEnvironment processingEnv, IRClass rClass) {
54+
helper = new IdAnnotationHelper(processingEnv, getTarget(), rClass);
5155
}
5256

5357
@Override
@@ -65,7 +69,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti
6569
List<? extends VariableElement> parameters = executableElement.getParameters();
6670

6771
ItemSelect annotation = element.getAnnotation(ItemSelect.class);
68-
List<JFieldRef> idsRefs = extractQualifiedIds(element, annotation.value(), "ItemSelected", holder);
72+
List<JFieldRef> idsRefs = helper.extractFieldRefsFromAnnotationValues(element, annotation.value(), "ItemSelected", holder);
6973

7074
JDefinedClass onItemSelectedListenerClass = codeModel.anonymousClass(holder.refClass("android.widget.AdapterView.OnItemSelectedListener"));
7175
JMethod onItemSelectedMethod = onItemSelectedListenerClass.method(JMod.PUBLIC, codeModel.VOID, "onItemSelected");

‎AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/LongClickProcessor.java‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@
1818
import java.lang.annotation.Annotation;
1919
import java.util.List;
2020

21+
import javax.annotation.processing.ProcessingEnvironment;
2122
import javax.lang.model.element.Element;
2223
import javax.lang.model.element.ExecutableElement;
2324
import javax.lang.model.element.VariableElement;
2425
import javax.lang.model.type.TypeKind;
2526
import javax.lang.model.type.TypeMirror;
2627

2728
import com.googlecode.androidannotations.annotations.LongClick;
29+
import com.googlecode.androidannotations.helper.IdAnnotationHelper;
2830
import com.googlecode.androidannotations.rclass.IRClass;
2931
import com.sun.codemodel.JBlock;
3032
import com.sun.codemodel.JClass;
@@ -42,10 +44,12 @@
4244
* @author Pierre-Yves Ricau
4345
* @author Mathieu Boniface
4446
*/
45-
public class LongClickProcessor extends MultipleResIdsBasedProcessor implements ElementProcessor {
47+
public class LongClickProcessor implements ElementProcessor {
4648

47-
public LongClickProcessor(IRClass rClass) {
48-
super(rClass);
49+
private IdAnnotationHelper helper;
50+
51+
public LongClickProcessor(ProcessingEnvironment processingEnv, IRClass rClass) {
52+
helper = new IdAnnotationHelper(processingEnv, getTarget(), rClass);
4953
}
5054

5155
@Override
@@ -67,7 +71,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti
6771
boolean hasItemParameter = parameters.size() == 1;
6872

6973
LongClick annotation = element.getAnnotation(LongClick.class);
70-
List<JFieldRef> idsRefs = extractQualifiedIds(element, annotation.value(), "LongClicked", holder);
74+
List<JFieldRef> idsRefs = helper.extractFieldRefsFromAnnotationValues(element, annotation.value(), "LongClicked", holder);
7175

7276
JDefinedClass listenerClass = codeModel.anonymousClass(holder.refClass("android.view.View.OnLongClickListener"));
7377
JMethod listenerMethod = listenerClass.method(JMod.PUBLIC, codeModel.BOOLEAN, "onLongClick");

‎AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/MultipleResIdsBasedProcessor.java‎

Lines changed: 0 additions & 68 deletions
This file was deleted.

‎AndroidAnnotations/androidannotations/src/main/java/com/googlecode/androidannotations/processing/OptionsItemProcessor.java‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@
2323
import java.lang.annotation.Annotation;
2424
import java.util.List;
2525

26+
import javax.annotation.processing.ProcessingEnvironment;
2627
import javax.lang.model.element.Element;
2728
import javax.lang.model.element.ExecutableElement;
2829
import javax.lang.model.element.VariableElement;
2930
import javax.lang.model.type.TypeKind;
3031
import javax.lang.model.type.TypeMirror;
3132

3233
import com.googlecode.androidannotations.annotations.OptionsItem;
34+
import com.googlecode.androidannotations.helper.IdAnnotationHelper;
3335
import com.googlecode.androidannotations.rclass.IRClass;
3436
import com.sun.codemodel.JBlock;
3537
import com.sun.codemodel.JCase;
@@ -43,10 +45,12 @@
4345
/**
4446
* @author Pierre-Yves Ricau
4547
*/
46-
public class OptionsItemProcessor extends MultipleResIdsBasedProcessor implements ElementProcessor {
48+
public class OptionsItemProcessor implements ElementProcessor {
4749

48-
public OptionsItemProcessor(IRClass rClass) {
49-
super(rClass);
50+
private IdAnnotationHelper helper;
51+
52+
public OptionsItemProcessor(ProcessingEnvironment processingEnv, IRClass rClass) {
53+
helper = new IdAnnotationHelper(processingEnv, getTarget(), rClass);
5054
}
5155

5256
@Override
@@ -68,7 +72,7 @@ public void process(Element element, JCodeModel codeModel, EBeansHolder activiti
6872
boolean hasItemParameter = parameters.size() == 1;
6973

7074
OptionsItem annotation = element.getAnnotation(OptionsItem.class);
71-
List<JFieldRef> idsRefs = extractQualifiedIds(element, annotation.value(), "Selected", holder);
75+
List<JFieldRef> idsRefs = helper.extractFieldRefsFromAnnotationValues(element, annotation.value(), "Selected", holder);
7276

7377
if (holder.onOptionsItemSelectedSwitch == null) {
7478
JMethod method = holder.eBean.method(JMod.PUBLIC, codeModel.BOOLEAN, "onOptionsItemSelected");

0 commit comments

Comments
 (0)