ResourceExpr.java revision d0bb3f1e1a94747bb3dd8bd2fee315d8816f0f5d
120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber/*
220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Copyright (C) 2015 The Android Open Source Project
320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber *
420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * you may not use this file except in compliance with the License.
620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * You may obtain a copy of the License at
720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber *
820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber *
1020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Unless required by applicable law or agreed to in writing, software
1120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
1220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * See the License for the specific language governing permissions and
1420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * limitations under the License.
1520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber */
1620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpackage android.databinding.tool.expr;
1720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber
1820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberimport android.databinding.tool.reflection.ModelAnalyzer;
1920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberimport android.databinding.tool.reflection.ModelClass;
2020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberimport android.databinding.tool.writer.KCode;
21f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung
22f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hungimport java.util.HashMap;
2396e92b58b7e9647b4c7c2f54b62a1b357ab06b66Wei Jiaimport java.util.List;
2496e92b58b7e9647b4c7c2f54b62a1b357ab06b66Wei Jiaimport java.util.Map;
2520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber
2620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpublic class ResourceExpr extends Expr {
27b65990f4a0cf01db0b9f21c68fcf8824ae03a178Marco Nelissen
2820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    private final static Map<String, String> RESOURCE_TYPE_TO_R_OBJECT;
2920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    static {
3020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        RESOURCE_TYPE_TO_R_OBJECT = new HashMap<>();
3120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        RESOURCE_TYPE_TO_R_OBJECT.put("colorStateList", "color  ");
3220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        RESOURCE_TYPE_TO_R_OBJECT.put("dimenOffset", "dimen  ");
33f89d780df70b7fbb8465bce4913c46cca019721fAndreas Huber        RESOURCE_TYPE_TO_R_OBJECT.put("dimenSize", "dimen  ");
346a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis        RESOURCE_TYPE_TO_R_OBJECT.put("intArray", "array  ");
3520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        RESOURCE_TYPE_TO_R_OBJECT.put("stateListAnimator", "animator  ");
3620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        RESOURCE_TYPE_TO_R_OBJECT.put("stringArray", "array  ");
3720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        RESOURCE_TYPE_TO_R_OBJECT.put("typedArray", "array");
3820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    }
3920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    // lazily initialized
4020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    private Map<String, ModelClass> mResourceToTypeMapping;
4120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber
4220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    protected final String mPackage;
4320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber
4420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    protected final String mResourceType;
4520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber
4620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    protected final String mResourceId;
4720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber
4820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    public ResourceExpr(String packageName, String resourceType, String resourceName,
4920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            List<Expr> args) {
5020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        super(args);
5196e92b58b7e9647b4c7c2f54b62a1b357ab06b66Wei Jia        if ("android".equals(packageName)) {
5220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            mPackage = "android.";
53e9a5b96e7927fd4e38623e17ac73e8e4e25877eeWei Jia        } else {
54e9a5b96e7927fd4e38623e17ac73e8e4e25877eeWei Jia            mPackage = "";
55e9a5b96e7927fd4e38623e17ac73e8e4e25877eeWei Jia        }
5620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        mResourceType = resourceType;
5720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        mResourceId = resourceName;
5820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    }
5920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber
6020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    private Map<String, ModelClass> getResourceToTypeMapping(ModelAnalyzer modelAnalyzer) {
616a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis        if (mResourceToTypeMapping == null) {
626a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis            final Map<String, String> imports = getModel().getImports();
63f89d780df70b7fbb8465bce4913c46cca019721fAndreas Huber            mResourceToTypeMapping = new HashMap<>();
64f89d780df70b7fbb8465bce4913c46cca019721fAndreas Huber            mResourceToTypeMapping.put("anim", modelAnalyzer.findClass("android.view.animation.Animation",
65f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung                            imports));
66f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung            mResourceToTypeMapping.put("animator", modelAnalyzer.findClass("android.animation.Animator",
67f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung                            imports));
68f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung            mResourceToTypeMapping.put("colorStateList",
69f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung                            modelAnalyzer.findClass("android.content.res.ColorStateList",
70f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung                                    imports));
719bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung            mResourceToTypeMapping.put("drawable", modelAnalyzer.findClass("android.graphics.drawable.Drawable",
729bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung                            imports));
739bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung            mResourceToTypeMapping.put("stateListAnimator",
749bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung                            modelAnalyzer.findClass("android.animation.StateListAnimator",
759bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung                                    imports));
769bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung            mResourceToTypeMapping.put("transition", modelAnalyzer.findClass("android.transition.Transition",
7796e92b58b7e9647b4c7c2f54b62a1b357ab06b66Wei Jia                            imports));
7820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            mResourceToTypeMapping.put("typedArray", modelAnalyzer.findClass("android.content.res.TypedArray",
799bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung                            imports));
809bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung            mResourceToTypeMapping.put("interpolator",
8196e92b58b7e9647b4c7c2f54b62a1b357ab06b66Wei Jia                            modelAnalyzer.findClass("android.view.animation.Interpolator", imports));
8220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            mResourceToTypeMapping.put("bool", modelAnalyzer.findClass(boolean.class));
8320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            mResourceToTypeMapping.put("color", modelAnalyzer.findClass(int.class));
8420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            mResourceToTypeMapping.put("dimenOffset", modelAnalyzer.findClass(int.class));
8520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            mResourceToTypeMapping.put("dimenSize", modelAnalyzer.findClass(int.class));
8620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            mResourceToTypeMapping.put("id", modelAnalyzer.findClass(int.class));
8720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            mResourceToTypeMapping.put("integer", modelAnalyzer.findClass(int.class));
8820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            mResourceToTypeMapping.put("layout", modelAnalyzer.findClass(int.class));
8920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            mResourceToTypeMapping.put("dimen", modelAnalyzer.findClass(float.class));
9020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            mResourceToTypeMapping.put("fraction", modelAnalyzer.findClass(float.class));
916a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis            mResourceToTypeMapping.put("intArray", modelAnalyzer.findClass(int[].class));
926a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis            mResourceToTypeMapping.put("string", modelAnalyzer.findClass(String.class));
9320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            mResourceToTypeMapping.put("stringArray", modelAnalyzer.findClass(String[].class));
9420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        }
9520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        return mResourceToTypeMapping;
9620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    }
9720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber
9820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    @Override
9920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    protected ModelClass resolveType(ModelAnalyzer modelAnalyzer) {
10020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        final Map<String, ModelClass> mapping = getResourceToTypeMapping(
10120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber                modelAnalyzer);
10220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        final ModelClass modelClass = mapping.get(mResourceType);
10320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        if (modelClass != null) {
10420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            return modelClass;
1059bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung        }
1069bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung        if ("plurals".equals(mResourceType)) {
1079bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung            if (getChildren().isEmpty()) {
1089bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung                return modelAnalyzer.findClass(int.class);
1099bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung            } else {
1109bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung                return modelAnalyzer.findClass(String.class);
1119bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung            }
1129bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung        }
1139bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung        return modelAnalyzer.findClass(mResourceType, getModel().getImports());
1149bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung    }
1159bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung
1169bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung    @Override
1179bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung    protected List<Dependency> constructDependencies() {
1189bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung        return constructDynamicChildrenDependencies();
1199bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung    }
1209bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung
1219bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung    @Override
1229bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung    protected String computeUniqueKey() {
1239bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung        String base;
1249bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung        if (mPackage == null) {
1259bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung            base = "@" + mResourceType + "/" + mResourceId;
1269bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung        } else {
127693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber            base = "@" + "android:" + mResourceType + "/" + mResourceId;
128f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        }
129f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        return join(base, computeChildrenKey());
130f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung    }
131f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung
132f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung    @Override
133f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung    protected KCode generateCode() {
134f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        return new KCode(toJava());
135f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung    }
136f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung
137cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung    public String getResourceId() {
138cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung        return mPackage + "R." + getResourceObject() + "." + mResourceId;
139cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung    }
140cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung
141cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung    public String toJava() {
142cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung        final String context = "getRoot().getContext()";
143cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung        final String resources = "getRoot().getResources()";
144cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung        final String resourceName = mPackage + "R." + getResourceObject() + "." + mResourceId;
14520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        if ("anim".equals(mResourceType)) return "android.view.animation.AnimationUtils.loadAnimation(" + context + ", " + resourceName + ")";
146f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        if ("animator".equals(mResourceType)) return "android.animation.AnimatorInflater.loadAnimator(" + context + ", " + resourceName + ")";
147f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        if ("bool".equals(mResourceType)) return resources + ".getBoolean(" + resourceName + ")";
148f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        if ("color".equals(mResourceType)) return resources + ".getColor(" + resourceName + ")";
149f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        if ("colorStateList".equals(mResourceType)) return "getColorStateListFromResource(" + resourceName + ")";
150f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        if ("dimen".equals(mResourceType)) return resources + ".getDimension(" + resourceName + ")";
15120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        if ("dimenOffset".equals(mResourceType)) return resources + ".getDimensionPixelOffset(" + resourceName + ")";
15220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        if ("dimenSize".equals(mResourceType)) return resources + ".getDimensionPixelSize(" + resourceName + ")";
153f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        if ("drawable".equals(mResourceType)) return "getDrawableFromResource(" + resourceName + ")";
154f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        if ("fraction".equals(mResourceType)) {
15520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            String base = getChildCode(0, "1");
15620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            String pbase = getChildCode(1, "1");
15720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            return resources + ".getFraction(" + resourceName + ", " + base + ", " + pbase +
158b65990f4a0cf01db0b9f21c68fcf8824ae03a178Marco Nelissen                    ")";
159b65990f4a0cf01db0b9f21c68fcf8824ae03a178Marco Nelissen        }
16020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        if ("id".equals(mResourceType)) return resourceName;
16120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        if ("intArray".equals(mResourceType)) return resources + ".getIntArray(" + resourceName + ")";
16220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        if ("integer".equals(mResourceType)) return resources + ".getInteger(" + resourceName + ")";
16320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        if ("interpolator".equals(mResourceType))  return "android.view.animation.AnimationUtils.loadInterpolator(" + context + ", " + resourceName + ")";
16420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        if ("layout".equals(mResourceType)) return resourceName;
16520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        if ("plurals".equals(mResourceType)) {
16620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            if (getChildren().isEmpty()) {
16720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber                return resourceName;
16820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber            } else {
16920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber                return makeParameterCall(resourceName, "getQuantityString");
1706a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis            }
171f89d780df70b7fbb8465bce4913c46cca019721fAndreas Huber        }
17220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        if ("stateListAnimator".equals(mResourceType)) return "android.animation.AnimatorInflater.loadStateListAnimator(" + context + ", " + resourceName + ")";
17320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        if ("string".equals(mResourceType)) return makeParameterCall(resourceName, "getString");
17420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        if ("stringArray".equals(mResourceType)) return resources + ".getStringArray(" + resourceName + ")";
17520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        if ("transition".equals(mResourceType)) return "android.transition.TransitionInflater.from(" + context + ").inflateTransition(" + resourceName + ")";
17620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        if ("typedArray".equals(mResourceType)) return resources + ".obtainTypedArray(" + resourceName + ")";
17720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber        final String property = Character.toUpperCase(mResourceType.charAt(0)) +
17820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber                mResourceType.substring(1);
179cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung        return resources + ".get" + property + "(" + resourceName + ")";
180cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung
18120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    }
18220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber
183f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung    private String getChildCode(int childIndex, String defaultValue) {
184f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        if (getChildren().size() <= childIndex) {
185f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung            return defaultValue;
186f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        } else {
187f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung            return getChildren().get(childIndex).toCode().generate();
188f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        }
189f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung    }
190f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung
1919bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung    private String makeParameterCall(String resourceName, String methodCall) {
192f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        StringBuilder sb = new StringBuilder("getRoot().getResources().");
1939bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung        sb.append(methodCall).append("(").append(resourceName);
194f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        for (Expr expr : getChildren()) {
195f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung            sb.append(", ").append(expr.toCode().generate());
1969bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung        }
1979bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung        sb.append(")");
198f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        return sb.toString();
199f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung    }
2009bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung
201f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung    private String getResourceObject() {
2029bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung        String rFileObject = RESOURCE_TYPE_TO_R_OBJECT.get(mResourceType);
203f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        if (rFileObject == null) {
204f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung            rFileObject = mResourceType;
205f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        }
206f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung        return rFileObject;
207f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung    }
208f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung}
209f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung