• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *      http://www.apache.org/licenses/LICENSE-2.0
7  * Unless required by applicable law or agreed to in writing, software
8  * distributed under the License is distributed on an "AS IS" BASIS,
9  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10  * See the License for the specific language governing permissions and
11  * limitations under the License.
12  */
13 
14 package android.databinding.tool;
15 
16 import android.databinding.tool.store.ResourceBundle;
17 import android.databinding.tool.util.L;
18 import android.databinding.tool.writer.BRWriter;
19 import android.databinding.tool.writer.DataBinderWriter;
20 import android.databinding.tool.writer.JavaFileWriter;
21 
22 import java.util.Set;
23 
24 /**
25  * Chef class for compiler.
26  *
27  * Different build systems can initiate a version of this to handle their work
28  */
29 public class CompilerChef {
30     private JavaFileWriter mFileWriter;
31     private ResourceBundle mResourceBundle;
32     private DataBinder mDataBinder;
33 
CompilerChef()34     private CompilerChef() {
35     }
36 
createChef(ResourceBundle bundle, JavaFileWriter fileWriter)37     public static CompilerChef createChef(ResourceBundle bundle, JavaFileWriter fileWriter) {
38         CompilerChef chef = new CompilerChef();
39 
40         chef.mResourceBundle = bundle;
41         chef.mFileWriter = fileWriter;
42         chef.mResourceBundle.validateMultiResLayouts();
43         return chef;
44     }
45 
getResourceBundle()46     public ResourceBundle getResourceBundle() {
47         return mResourceBundle;
48     }
49 
ensureDataBinder()50     public void ensureDataBinder() {
51         if (mDataBinder == null) {
52             mDataBinder = new DataBinder(mResourceBundle);
53             mDataBinder.setFileWriter(mFileWriter);
54         }
55     }
56 
hasAnythingToGenerate()57     public boolean hasAnythingToGenerate() {
58         L.d("checking if we have anything to generate. bundle size: %s",
59                 mResourceBundle == null ? -1 : mResourceBundle.getLayoutBundles().size());
60         return mResourceBundle != null && mResourceBundle.getLayoutBundles().size() > 0;
61     }
62 
writeDataBinderMapper(int minSdk, BRWriter brWriter)63     public void writeDataBinderMapper(int minSdk, BRWriter brWriter) {
64         ensureDataBinder();
65         final String pkg = "android.databinding";
66         DataBinderWriter dbr = new DataBinderWriter(pkg, mResourceBundle.getAppPackage(),
67                 "DataBinderMapper", mDataBinder.getLayoutBinders(), minSdk);
68         mFileWriter.writeToFile(pkg + "." + dbr.getClassName(), dbr.write(brWriter));
69     }
70 
71     /**
72      * Adds variables to list of Bindables.
73      */
addBRVariables(BindableHolder bindables)74     public void addBRVariables(BindableHolder bindables) {
75         ensureDataBinder();
76         for (LayoutBinder layoutBinder : mDataBinder.mLayoutBinders) {
77             for (String variableName : layoutBinder.getUserDefinedVariables().keySet()) {
78                 bindables.addVariable(variableName, layoutBinder.getClassName());
79             }
80         }
81     }
82 
sealModels()83     public void sealModels() {
84         ensureDataBinder();
85         mDataBinder.sealModels();
86     }
87 
writeViewBinderInterfaces(boolean isLibrary)88     public void writeViewBinderInterfaces(boolean isLibrary) {
89         ensureDataBinder();
90         mDataBinder.writerBaseClasses(isLibrary);
91     }
92 
writeViewBinders(int minSdk)93     public void writeViewBinders(int minSdk) {
94         ensureDataBinder();
95         mDataBinder.writeBinders(minSdk);
96     }
97 
writeComponent()98     public void writeComponent() {
99         ensureDataBinder();
100         mDataBinder.writeComponent();
101     }
102 
getWrittenClassNames()103     public Set<String> getWrittenClassNames() {
104         ensureDataBinder();
105         return mDataBinder.getWrittenClassNames();
106     }
107 
108     public interface BindableHolder {
addVariable(String variableName, String containingClassName)109         void addVariable(String variableName, String containingClassName);
110     }
111 }
112