IdentifierExpr.java revision 2611838bffef5a009ca71e3e9e59a93f29b098ed
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2015 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.databinding.tool.expr; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.databinding.tool.reflection.ModelAnalyzer; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.databinding.tool.reflection.ModelClass; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.databinding.tool.util.L; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.databinding.tool.util.Preconditions; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2413656743cc21bac43676568314366497346713eeRomain Guyimport java.util.ArrayList; 2513656743cc21bac43676568314366497346713eeRomain Guyimport java.util.List; 2613656743cc21bac43676568314366497346713eeRomain Guy 2713656743cc21bac43676568314366497346713eeRomain Guypublic class IdentifierExpr extends Expr { 2813656743cc21bac43676568314366497346713eeRomain Guy String mName; 2913656743cc21bac43676568314366497346713eeRomain Guy String mUserDefinedType; 3013656743cc21bac43676568314366497346713eeRomain Guy IdentifierExpr(String name) { 3113656743cc21bac43676568314366497346713eeRomain Guy mName = name; 3213656743cc21bac43676568314366497346713eeRomain Guy } 3313656743cc21bac43676568314366497346713eeRomain Guy 3413656743cc21bac43676568314366497346713eeRomain Guy public String getName() { 3513656743cc21bac43676568314366497346713eeRomain Guy return mName; 3613656743cc21bac43676568314366497346713eeRomain Guy } 3713656743cc21bac43676568314366497346713eeRomain Guy 3813656743cc21bac43676568314366497346713eeRomain Guy /** 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If this is root, its type should be set while parsing the XML document 4013656743cc21bac43676568314366497346713eeRomain Guy * @param userDefinedType The type of this identifier 4113656743cc21bac43676568314366497346713eeRomain Guy */ 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setUserDefinedType(String userDefinedType) { 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mUserDefinedType = userDefinedType; 4413656743cc21bac43676568314366497346713eeRomain Guy } 4513656743cc21bac43676568314366497346713eeRomain Guy 4613656743cc21bac43676568314366497346713eeRomain Guy @Override 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected String computeUniqueKey() { 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return join(mName, super.computeUniqueKey()); 4913656743cc21bac43676568314366497346713eeRomain Guy } 5013656743cc21bac43676568314366497346713eeRomain Guy 5113656743cc21bac43676568314366497346713eeRomain Guy public String getUserDefinedType() { 5213656743cc21bac43676568314366497346713eeRomain Guy return mUserDefinedType; 5313656743cc21bac43676568314366497346713eeRomain Guy } 5413656743cc21bac43676568314366497346713eeRomain Guy 5513656743cc21bac43676568314366497346713eeRomain Guy public String getExpandedUserDefinedType(ModelAnalyzer modelAnalyzer) { 5613656743cc21bac43676568314366497346713eeRomain Guy Preconditions.checkNotNull(mUserDefinedType, 5713656743cc21bac43676568314366497346713eeRomain Guy "Identifiers must have user defined types from the XML file. %s is missing it", 5813656743cc21bac43676568314366497346713eeRomain Guy mName); 59f559326b182e321f51ab9711614d3e37fefa603aChris Craik final String expanded = modelAnalyzer 60f559326b182e321f51ab9711614d3e37fefa603aChris Craik .applyImports(mUserDefinedType, getModel().getImports()); 6113656743cc21bac43676568314366497346713eeRomain Guy L.d("expanded version of %s is %s", mUserDefinedType, expanded); 6213656743cc21bac43676568314366497346713eeRomain Guy return expanded; 6313656743cc21bac43676568314366497346713eeRomain Guy } 6413656743cc21bac43676568314366497346713eeRomain Guy 6513656743cc21bac43676568314366497346713eeRomain Guy @Override 6613656743cc21bac43676568314366497346713eeRomain Guy public boolean isDynamic() { 6713656743cc21bac43676568314366497346713eeRomain Guy return true; 6813656743cc21bac43676568314366497346713eeRomain Guy } 6913656743cc21bac43676568314366497346713eeRomain Guy 7013656743cc21bac43676568314366497346713eeRomain Guy @Override 7113656743cc21bac43676568314366497346713eeRomain Guy protected ModelClass resolveType(final ModelAnalyzer modelAnalyzer) { 72f559326b182e321f51ab9711614d3e37fefa603aChris Craik Preconditions.checkNotNull(mUserDefinedType, 73f559326b182e321f51ab9711614d3e37fefa603aChris Craik "Identifiers must have user defined types from the XML file. %s is missing it", mName); 7413656743cc21bac43676568314366497346713eeRomain Guy return modelAnalyzer.findClass(mUserDefinedType, getModel().getImports()); 7513656743cc21bac43676568314366497346713eeRomain Guy } 7613656743cc21bac43676568314366497346713eeRomain Guy 7713656743cc21bac43676568314366497346713eeRomain Guy @Override 7813656743cc21bac43676568314366497346713eeRomain Guy protected List<Dependency> constructDependencies() { 7913656743cc21bac43676568314366497346713eeRomain Guy return new ArrayList<>(); 8013656743cc21bac43676568314366497346713eeRomain Guy } 8113656743cc21bac43676568314366497346713eeRomain Guy 8213656743cc21bac43676568314366497346713eeRomain Guy @Override 8313656743cc21bac43676568314366497346713eeRomain Guy protected String asPackage() { 8413656743cc21bac43676568314366497346713eeRomain Guy return mUserDefinedType == null ? mName : null; 85f559326b182e321f51ab9711614d3e37fefa603aChris Craik } 86f559326b182e321f51ab9711614d3e37fefa603aChris Craik} 8713656743cc21bac43676568314366497346713eeRomain Guy