CompilerChef.java revision 8e5d3b4aa4e47fc0150b4a26b58ec6e5c17b9d16
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 143bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyarpackage com.android.databinding; 153bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar 163bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyarimport com.android.databinding.store.ResourceBundle; 173bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyarimport com.android.databinding.util.L; 183bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyarimport com.android.databinding.writer.DataBinderWriter; 191b9940e612fc73202837fbe9db2f9035f307b5d1George Mountimport com.android.databinding.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 60b134dd773c386246ee8b692fbc4f063945e88ec5Yigit Boyar public void writeDbrFile() { 613bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar ensureDataBinder(); 623bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar final String pkg = "com.android.databinding.library"; 633bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar DataBinderWriter dbr = new DataBinderWriter(pkg, mResourceBundle.getAppPackage(), 643bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar "GeneratedDataBinderRenderer", mDataBinder.getLayoutBinders()); 653bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar if (dbr.getLayoutBinders().size() > 0) { 66b134dd773c386246ee8b692fbc4f063945e88ec5Yigit Boyar mFileWriter.writeToFile(dbr.getPkg() + "." + dbr.getClassName(), dbr.write()); 673bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar } 683bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar } 693bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar 70b134dd773c386246ee8b692fbc4f063945e88ec5Yigit Boyar public void writeViewBinderInterfaces() { 713bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar ensureDataBinder(); 72b134dd773c386246ee8b692fbc4f063945e88ec5Yigit Boyar mDataBinder.writerBinderInterfaces(); 733bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar } 748e5d3b4aa4e47fc0150b4a26b58ec6e5c17b9d16George Mount 75b134dd773c386246ee8b692fbc4f063945e88ec5Yigit Boyar public void writeViewBinders() { 763bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar ensureDataBinder(); 77b134dd773c386246ee8b692fbc4f063945e88ec5Yigit Boyar mDataBinder.writeBinders(); 783bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar } 793bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar} 80