CompilerChef.java revision bdc7aa8269502b3fc3ce73c124e4f1b2092502c9
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 14package android.databinding.tool; 15 16import android.databinding.tool.store.ResourceBundle; 17import android.databinding.tool.util.L; 18import android.databinding.tool.writer.BRWriter; 19import android.databinding.tool.writer.DataBinderWriter; 20import android.databinding.tool.writer.DynamicUtilWriter; 21import android.databinding.tool.writer.JavaFileWriter; 22 23import java.util.Set; 24 25/** 26 * Chef class for compiler. 27 * 28 * Different build systems can initiate a version of this to handle their work 29 */ 30public class CompilerChef { 31 private JavaFileWriter mFileWriter; 32 private ResourceBundle mResourceBundle; 33 private DataBinder mDataBinder; 34 35 private CompilerChef() { 36 } 37 38 public static CompilerChef createChef(ResourceBundle bundle, JavaFileWriter fileWriter) { 39 CompilerChef chef = new CompilerChef(); 40 41 chef.mResourceBundle = bundle; 42 chef.mFileWriter = fileWriter; 43 chef.mResourceBundle.validateMultiResLayouts(); 44 return chef; 45 } 46 47 public ResourceBundle getResourceBundle() { 48 return mResourceBundle; 49 } 50 51 public void ensureDataBinder() { 52 if (mDataBinder == null) { 53 mDataBinder = new DataBinder(mResourceBundle); 54 mDataBinder.setFileWriter(mFileWriter); 55 } 56 } 57 58 public boolean hasAnythingToGenerate() { 59 L.d("checking if we have anything to generate. bundle size: %s", 60 mResourceBundle == null ? -1 : mResourceBundle.getLayoutBundles().size()); 61 return mResourceBundle != null && mResourceBundle.getLayoutBundles().size() > 0; 62 } 63 64 public void writeDataBinderMapper(int minSdk, BRWriter brWriter) { 65 ensureDataBinder(); 66 final String pkg = "android.databinding"; 67 DataBinderWriter dbr = new DataBinderWriter(pkg, mResourceBundle.getAppPackage(), 68 "DataBinderMapper", mDataBinder.getLayoutBinders(), minSdk); 69 mFileWriter.writeToFile(pkg + "." + dbr.getClassName(), dbr.write(brWriter)); 70 } 71 72 public void writeDynamicUtil() { 73 DynamicUtilWriter dynamicUtil = new DynamicUtilWriter(); 74 mFileWriter.writeToFile("android.databinding.DynamicUtil", dynamicUtil.write()); 75 } 76 77 /** 78 * Adds variables to list of Bindables. 79 */ 80 public void addBRVariables(BindableHolder bindables) { 81 ensureDataBinder(); 82 for (LayoutBinder layoutBinder : mDataBinder.mLayoutBinders) { 83 for (String variableName : layoutBinder.getUserDefinedVariables().keySet()) { 84 bindables.addVariable(variableName, layoutBinder.getClassName()); 85 } 86 } 87 } 88 89 public void sealModels() { 90 ensureDataBinder(); 91 mDataBinder.sealModels(); 92 } 93 94 public void writeViewBinderInterfaces(boolean isLibrary) { 95 ensureDataBinder(); 96 mDataBinder.writerBaseClasses(isLibrary); 97 } 98 99 public void writeViewBinders(int minSdk) { 100 ensureDataBinder(); 101 mDataBinder.writeBinders(minSdk); 102 } 103 104 public void writeComponent() { 105 ensureDataBinder(); 106 mDataBinder.writeComponent(); 107 } 108 109 public Set<String> getWrittenClassNames() { 110 ensureDataBinder(); 111 return mDataBinder.getWrittenClassNames(); 112 } 113 114 public interface BindableHolder { 115 void addVariable(String variableName, String containingClassName); 116 } 117} 118