CompilerChef.java revision 96e1c821dd446d1ed78f8ae61131550588f60a24
13bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar/* 23bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar * Copyright (C) 2015 The Android Open Source Project 33bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 43bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar * you may not use this file except in compliance with the License. 53bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar * You may obtain a copy of the License at 63bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 73bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar * Unless required by applicable law or agreed to in writing, software 83bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 93bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 103bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar * See the License for the specific language governing permissions and 113bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar * limitations under the License. 123bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar */ 133bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar 14fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding.tool; 153bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar 16fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.store.ResourceBundle; 17fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.util.L; 18fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.writer.DataBinderWriter; 19fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.writer.JavaFileWriter; 203bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar 213bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar/** 223bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar * Chef class for compiler. 233bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar * 243bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar * Different build systems can initiate a version of this to handle their work 253bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar */ 263bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyarpublic class CompilerChef { 271b9940e612fc73202837fbe9db2f9035f307b5d1George Mount private JavaFileWriter mFileWriter; 283bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar private ResourceBundle mResourceBundle; 293bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar private DataBinder mDataBinder; 303bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar 31b134dd773c386246ee8b692fbc4f063945e88ec5Yigit Boyar private CompilerChef() { 323bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar } 333bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar 348e5d3b4aa4e47fc0150b4a26b58ec6e5c17b9d16George Mount public static CompilerChef createChef(ResourceBundle bundle, JavaFileWriter fileWriter) { 35b134dd773c386246ee8b692fbc4f063945e88ec5Yigit Boyar CompilerChef chef = new CompilerChef(); 36b134dd773c386246ee8b692fbc4f063945e88ec5Yigit Boyar 378e5d3b4aa4e47fc0150b4a26b58ec6e5c17b9d16George Mount chef.mResourceBundle = bundle; 38b134dd773c386246ee8b692fbc4f063945e88ec5Yigit Boyar chef.mFileWriter = fileWriter; 398e5d3b4aa4e47fc0150b4a26b58ec6e5c17b9d16George Mount chef.mResourceBundle.validateMultiResLayouts(); 40b134dd773c386246ee8b692fbc4f063945e88ec5Yigit Boyar return chef; 41b134dd773c386246ee8b692fbc4f063945e88ec5Yigit Boyar } 42b134dd773c386246ee8b692fbc4f063945e88ec5Yigit Boyar 438e5d3b4aa4e47fc0150b4a26b58ec6e5c17b9d16George Mount public ResourceBundle getResourceBundle() { 448e5d3b4aa4e47fc0150b4a26b58ec6e5c17b9d16George Mount return mResourceBundle; 45b134dd773c386246ee8b692fbc4f063945e88ec5Yigit Boyar } 46b134dd773c386246ee8b692fbc4f063945e88ec5Yigit Boyar 473bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar public void ensureDataBinder() { 483bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar if (mDataBinder == null) { 493bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar mDataBinder = new DataBinder(mResourceBundle); 503bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar mDataBinder.setFileWriter(mFileWriter); 513bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar } 523bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar } 538e5d3b4aa4e47fc0150b4a26b58ec6e5c17b9d16George Mount 543bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar public boolean hasAnythingToGenerate() { 558e5d3b4aa4e47fc0150b4a26b58ec6e5c17b9d16George Mount L.d("checking if we have anything to generate. bundle size: %s", 563bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar mResourceBundle == null ? -1 : mResourceBundle.getLayoutBundles().size()); 573bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar return mResourceBundle != null && mResourceBundle.getLayoutBundles().size() > 0; 583bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar } 593bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar 60e7c2a5e45d7651899790bd347da635875f9c73fbGeorge Mount public void writeDbrFile(int minSdk) { 613bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar ensureDataBinder(); 62fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mount final String pkg = "android.databinding"; 633bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar DataBinderWriter dbr = new DataBinderWriter(pkg, mResourceBundle.getAppPackage(), 64e7c2a5e45d7651899790bd347da635875f9c73fbGeorge Mount "DataBinderMapper", mDataBinder.getLayoutBinders(), minSdk); 653bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar if (dbr.getLayoutBinders().size() > 0) { 66fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mount mFileWriter.writeToFile(pkg + "." + dbr.getClassName(), dbr.write()); 673bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar } 683bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar } 6961630faa88ee4817834d47294a0e17f19d8e1c51George Mount 7061630faa88ee4817834d47294a0e17f19d8e1c51George Mount /** 7161630faa88ee4817834d47294a0e17f19d8e1c51George Mount * Adds variables to list of Bindables. 7261630faa88ee4817834d47294a0e17f19d8e1c51George Mount */ 7361630faa88ee4817834d47294a0e17f19d8e1c51George Mount public void addBRVariables(BindableHolder bindables) { 7461630faa88ee4817834d47294a0e17f19d8e1c51George Mount ensureDataBinder(); 7561630faa88ee4817834d47294a0e17f19d8e1c51George Mount for (LayoutBinder layoutBinder : mDataBinder.mLayoutBinders) { 7661630faa88ee4817834d47294a0e17f19d8e1c51George Mount for (String variableName : layoutBinder.getUserDefinedVariables().keySet()) { 77dea555cf42dc3583604699c8c018d22681f56166George Mount bindables.addVariable(variableName, layoutBinder.getClassName()); 7861630faa88ee4817834d47294a0e17f19d8e1c51George Mount } 7961630faa88ee4817834d47294a0e17f19d8e1c51George Mount } 8061630faa88ee4817834d47294a0e17f19d8e1c51George Mount } 813bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar 82dea555cf42dc3583604699c8c018d22681f56166George Mount public void writeViewBinderInterfaces(boolean isLibrary) { 833bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar ensureDataBinder(); 84dea555cf42dc3583604699c8c018d22681f56166George Mount mDataBinder.writerBaseClasses(isLibrary); 853bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar } 868e5d3b4aa4e47fc0150b4a26b58ec6e5c17b9d16George Mount 8796e1c821dd446d1ed78f8ae61131550588f60a24George Mount public void writeViewBinders(int minSdk) { 883bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar ensureDataBinder(); 8996e1c821dd446d1ed78f8ae61131550588f60a24George Mount mDataBinder.writeBinders(minSdk); 903bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar } 9161630faa88ee4817834d47294a0e17f19d8e1c51George Mount 9261630faa88ee4817834d47294a0e17f19d8e1c51George Mount public interface BindableHolder { 9361630faa88ee4817834d47294a0e17f19d8e1c51George Mount void addVariable(String variableName, String containingClassName); 9461630faa88ee4817834d47294a0e17f19d8e1c51George Mount } 953bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar} 96