|
29 | 29 | import com.googlecode.androidannotations.rclass.IRClass; |
30 | 30 | import com.googlecode.androidannotations.rclass.IRInnerClass; |
31 | 31 | import com.googlecode.androidannotations.rclass.RClass.Res; |
| 32 | +import com.sun.codemodel.JBlock; |
32 | 33 | import com.sun.codemodel.JCodeModel; |
| 34 | +import com.sun.codemodel.JExpr; |
| 35 | +import com.sun.codemodel.JFieldRef; |
33 | 36 |
|
34 | 37 | public class ResProcessor implements ElementProcessor { |
35 | 38 |
|
36 | | - private final IRClass rClass; |
37 | | - private final AndroidRes androidValue; |
| 39 | + private final IRClass rClass; |
| 40 | + private final AndroidRes androidValue; |
38 | 41 |
|
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 | + } |
43 | 46 |
|
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 | + } |
48 | 51 |
|
49 | | - @Override |
50 | | - public void process(Element element, MetaModel metaModel) { |
| 52 | + @Override |
| 53 | + public void process(Element element, MetaModel metaModel) { |
51 | 54 |
|
52 | | - String name = element.getSimpleName().toString(); |
| 55 | + String name = element.getSimpleName().toString(); |
53 | 56 |
|
54 | | - int idValue = androidValue.idFromElement(element); |
| 57 | + int idValue = androidValue.idFromElement(element); |
55 | 58 |
|
56 | | - Res resInnerClass = androidValue.getRInnerClass(); |
| 59 | + Res resInnerClass = androidValue.getRInnerClass(); |
57 | 60 |
|
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 | + } |
66 | 69 |
|
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(); |
70 | 73 |
|
71 | | - Instruction instruction = new ValueInstruction(name, androidValue.getResourceMethodName(), qualifiedId); |
| 74 | + Instruction instruction = new ValueInstruction(name, androidValue.getResourceMethodName(), qualifiedId); |
72 | 75 |
|
73 | | - beforeCreateInstructions.add(instruction); |
| 76 | + beforeCreateInstructions.add(instruction); |
74 | 77 |
|
75 | | - } |
| 78 | + } |
76 | 79 |
|
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 | + } |
82 | 109 |
|
83 | 110 | } |
0 commit comments