Binding.java revision 97d6ddf47f4ff1abb3ed5201ce5232163f5325b1
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 1743596c2b2997e40b709627419732100d78a62ff0Yigit Boyarpackage com.android.databinding; 18d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 1979fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mountimport com.android.databinding.reflection.ModelAnalyzer; 2079fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mountimport com.android.databinding.reflection.ModelClass; 2197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyarimport com.android.databinding.reflection.SdkUtil; 22d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarimport com.android.databinding.store.SetterStore; 2343596c2b2997e40b709627419732100d78a62ff0Yigit Boyarimport com.android.databinding.expr.Expr; 24d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 25d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarpublic class Binding { 26d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 27d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar private final String mName; 28d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar private final Expr mExpr; 29d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar private final BindingTarget mTarget; 3097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar private SetterStore.SetterCall mSetterCall; 31d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 32d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public Binding(BindingTarget target, String name, Expr expr) { 33d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar mTarget = target; 34d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar mName = name; 35d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar mExpr = expr; 36d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 37d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 3897d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar private SetterStore.SetterCall getSetterCall() { 3997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar if (mSetterCall == null) { 4097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar ModelClass viewType = mTarget.getResolvedType(); 4197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar mSetterCall = SetterStore.get(ModelAnalyzer.getInstance()).getSetterCall(mName, 4297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar viewType, mExpr.getResolvedType(), mExpr.getModel().getImports()); 4397d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 4497d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar return mSetterCall; 4597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 4697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar 47d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public BindingTarget getTarget() { 48d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar return mTarget; 49d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 50d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 51d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public String toJavaCode(String targetViewName, String expressionCode) { 5297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar return getSetterCall().toJava(targetViewName, expressionCode); 5397d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 5497d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar 5597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar /** 5697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar * The min api level in which this binding should be executed. 5797d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar * <p> 5897d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar * This should be the minimum value among the dependencies of this binding. For now, we only 5997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar * check the setter. 6097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar */ 6197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar public int getMinApi() { 6297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar return getSetterCall().getMinApi(); 63d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 64d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 6579fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount// private String resolveJavaCode(ModelAnalyzer modelAnalyzer) { 66d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar// 67d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar// } 6879fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount//// return modelAnalyzer.findMethod(mTarget.getResolvedType(), mName, 69d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar//// Arrays.asList(mExpr.getResolvedType())); 70d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar// //} 71d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar// 72d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 73d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 74d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public String getName() { 75d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar return mName; 76d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 77d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 78d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public Expr getExpr() { 79d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar return mExpr; 80d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 81d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar} 82