1d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar/* 2d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Copyright (C) 2015 The Android Open Source Project 3d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * 4d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 5d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * you may not use this file except in compliance with the License. 6d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * You may obtain a copy of the License at 7d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * 8d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 9d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * 10d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Unless required by applicable law or agreed to in writing, software 11d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 12d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * See the License for the specific language governing permissions and 14d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * limitations under the License. 15d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar */ 16d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 17fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding.tool.expr; 18d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 19731b74f7f44e67312a1fc4161c4e0aae221b2417Yigit Boyarimport android.databinding.tool.processing.ErrorMessages; 20fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.ModelAnalyzer; 21fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.ModelClass; 22fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.util.L; 232611838bffef5a009ca71e3e9e59a93f29b098edYigit Boyarimport android.databinding.tool.util.Preconditions; 24d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 252611838bffef5a009ca71e3e9e59a93f29b098edYigit Boyarimport java.util.ArrayList; 26d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarimport java.util.List; 27d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 28d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarpublic class IdentifierExpr extends Expr { 29d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar String mName; 30d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar String mUserDefinedType; 31d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar IdentifierExpr(String name) { 32d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar mName = name; 33d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 34d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 35d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public String getName() { 36d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar return mName; 37d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 38d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 39d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar /** 40d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * If this is root, its type should be set while parsing the XML document 41d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * @param userDefinedType The type of this identifier 42d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar */ 43d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public void setUserDefinedType(String userDefinedType) { 44d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar mUserDefinedType = userDefinedType; 45d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 46d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 47d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Override 48d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar protected String computeUniqueKey() { 492611838bffef5a009ca71e3e9e59a93f29b098edYigit Boyar return join(mName, super.computeUniqueKey()); 50d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 51d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 5243596c2b2997e40b709627419732100d78a62ff0Yigit Boyar public String getUserDefinedType() { 5343596c2b2997e40b709627419732100d78a62ff0Yigit Boyar return mUserDefinedType; 5443596c2b2997e40b709627419732100d78a62ff0Yigit Boyar } 5543596c2b2997e40b709627419732100d78a62ff0Yigit Boyar 56d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Override 57d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public boolean isDynamic() { 58d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar return true; 59d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 60d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 61d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Override 6279fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount protected ModelClass resolveType(final ModelAnalyzer modelAnalyzer) { 63731b74f7f44e67312a1fc4161c4e0aae221b2417Yigit Boyar Preconditions.checkNotNull(mUserDefinedType, ErrorMessages.UNDEFINED_VARIABLE, mName); 64a7e767e576adebcddf043ad34ccb8dd167f777b3George Mount return modelAnalyzer.findClass(mUserDefinedType, getModel().getImports()); 65d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 66d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 67d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Override 68d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar protected List<Dependency> constructDependencies() { 692611838bffef5a009ca71e3e9e59a93f29b098edYigit Boyar return new ArrayList<>(); 70d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 7118243f6f1b7527272ef4feccdf4327d80d9f2241George Mount 7218243f6f1b7527272ef4feccdf4327d80d9f2241George Mount @Override 7318243f6f1b7527272ef4feccdf4327d80d9f2241George Mount protected String asPackage() { 7418243f6f1b7527272ef4feccdf4327d80d9f2241George Mount return mUserDefinedType == null ? mName : null; 7518243f6f1b7527272ef4feccdf4327d80d9f2241George Mount } 76d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar} 77