Skip to content

Commit e10432f

Browse files
committed
Implemented Resource injection with CodeModel
1 parent 31425cc commit e10432f

2 files changed

Lines changed: 62 additions & 34 deletions

File tree

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public class ActivityHolder {
1515
public JBlock extrasNotNullBlock;
1616
public JVar extras;
1717
public JClass bundleClass;
18+
public JVar resources;
1819

1920

2021
}

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

Lines changed: 61 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -29,55 +29,82 @@
2929
import com.googlecode.androidannotations.rclass.IRClass;
3030
import com.googlecode.androidannotations.rclass.IRInnerClass;
3131
import com.googlecode.androidannotations.rclass.RClass.Res;
32+
import com.sun.codemodel.JBlock;
3233
import com.sun.codemodel.JCodeModel;
34+
import com.sun.codemodel.JExpr;
35+
import com.sun.codemodel.JFieldRef;
3336

3437
public class ResProcessor implements ElementProcessor {
3538

36-
private final IRClass rClass;
37-
private final AndroidRes androidValue;
39+
private final IRClass rClass;
40+
private final AndroidRes androidValue;
3841

39-
public ResProcessor(AndroidRes androidValue, IRClass rClass) {
40-
this.rClass = rClass;
41-
this.androidValue = androidValue;
42-
}
42+
public ResProcessor(AndroidRes androidValue, IRClass rClass) {
43+
this.rClass = rClass;
44+
this.androidValue = androidValue;
45+
}
4346

44-
@Override
45-
public Class<? extends Annotation> getTarget() {
46-
return androidValue.getTarget();
47-
}
47+
@Override
48+
public Class<? extends Annotation> getTarget() {
49+
return androidValue.getTarget();
50+
}
4851

49-
@Override
50-
public void process(Element element, MetaModel metaModel) {
52+
@Override
53+
public void process(Element element, MetaModel metaModel) {
5154

52-
String name = element.getSimpleName().toString();
55+
String name = element.getSimpleName().toString();
5356

54-
int idValue = androidValue.idFromElement(element);
57+
int idValue = androidValue.idFromElement(element);
5558

56-
Res resInnerClass = androidValue.getRInnerClass();
59+
Res resInnerClass = androidValue.getRInnerClass();
5760

58-
IRInnerClass rInnerClass = rClass.get(resInnerClass);
59-
String qualifiedId;
60-
if (idValue == Id.DEFAULT_VALUE) {
61-
String fieldName = element.getSimpleName().toString();
62-
qualifiedId = rInnerClass.getIdQualifiedName(fieldName);
63-
} else {
64-
qualifiedId = rInnerClass.getIdQualifiedName(idValue);
65-
}
61+
IRInnerClass rInnerClass = rClass.get(resInnerClass);
62+
String qualifiedId;
63+
if (idValue == Id.DEFAULT_VALUE) {
64+
String fieldName = element.getSimpleName().toString();
65+
qualifiedId = rInnerClass.getIdQualifiedName(fieldName);
66+
} else {
67+
qualifiedId = rInnerClass.getIdQualifiedName(idValue);
68+
}
6669

67-
Element enclosingElement = element.getEnclosingElement();
68-
MetaActivity metaActivity = metaModel.getMetaActivities().get(enclosingElement);
69-
List<Instruction> beforeCreateInstructions = metaActivity.getBeforeCreateInstructions();
70+
Element enclosingElement = element.getEnclosingElement();
71+
MetaActivity metaActivity = metaModel.getMetaActivities().get(enclosingElement);
72+
List<Instruction> beforeCreateInstructions = metaActivity.getBeforeCreateInstructions();
7073

71-
Instruction instruction = new ValueInstruction(name, androidValue.getResourceMethodName(), qualifiedId);
74+
Instruction instruction = new ValueInstruction(name, androidValue.getResourceMethodName(), qualifiedId);
7275

73-
beforeCreateInstructions.add(instruction);
76+
beforeCreateInstructions.add(instruction);
7477

75-
}
78+
}
7679

77-
@Override
78-
public void process(Element element, JCodeModel codeModel, ActivitiesHolder activitiesHolder) {
79-
// TODO Auto-generated method stub
80-
81-
}
80+
@Override
81+
public void process(Element element, JCodeModel codeModel, ActivitiesHolder activitiesHolder) {
82+
ActivityHolder holder = activitiesHolder.getActivityHolder(element);
83+
84+
String fieldName = element.getSimpleName().toString();
85+
86+
int idValue = androidValue.idFromElement(element);
87+
88+
Res resInnerClass = androidValue.getRInnerClass();
89+
90+
IRInnerClass rInnerClass = rClass.get(resInnerClass);
91+
JFieldRef idRef;
92+
if (idValue == Id.DEFAULT_VALUE) {
93+
idRef = rInnerClass.getIdStaticRef(fieldName, codeModel);
94+
} else {
95+
idRef = rInnerClass.getIdStaticRef(idValue, codeModel);
96+
}
97+
98+
JBlock methodBody = holder.beforeSetContentView.body();
99+
100+
if (holder.resources == null) {
101+
holder.resources = methodBody.decl(codeModel.ref("android.content.res.Resources"), "resources_", JExpr.invoke("getResources"));
102+
}
103+
104+
String resourceMethodName = androidValue.getResourceMethodName();
105+
106+
methodBody.assign(JExpr.ref(fieldName), JExpr.invoke(holder.resources, resourceMethodName).arg(idRef));
107+
108+
}
82109

83110
}

0 commit comments

Comments
 (0)