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