diff options
author | Yigit Boyar <yboyar@google.com> | 2016-09-09 18:55:26 -0700 |
---|---|---|
committer | Yigit Boyar <yboyar@google.com> | 2016-09-20 17:06:27 -0700 |
commit | 3ca8e88cda63da006d8ebd9b19a914e0598816f5 (patch) | |
tree | c05e724517ba4251638451e0025d82351ba235be /compiler/src/main/kotlin/android/databinding | |
parent | 315ded5d95dd5ce6dbe1226a1065aa340df251a7 (diff) | |
download | data-binding-3ca8e88cda63da006d8ebd9b19a914e0598816f5.tar.gz |
Better testing support
Add test apk field to the compiler options so that data binding
can know whether we are compiling a test apk for a library or
test apk for an app. This will allow us not to re-generate
data binding codes for test apks.
Bug: 24711174
Bug: 24670839
Change-Id: Ib00ff3148ce5a9f1ab0512c3821ea59a567401d5
Diffstat (limited to 'compiler/src/main/kotlin/android/databinding')
-rw-r--r-- | compiler/src/main/kotlin/android/databinding/tool/writer/BRWriter.kt | 2 | ||||
-rw-r--r-- | compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriter.kt (renamed from compiler/src/main/kotlin/android/databinding/tool/writer/DataBinderWriter.kt) | 54 |
2 files changed, 50 insertions, 6 deletions
diff --git a/compiler/src/main/kotlin/android/databinding/tool/writer/BRWriter.kt b/compiler/src/main/kotlin/android/databinding/tool/writer/BRWriter.kt index a11804ff..885284ef 100644 --- a/compiler/src/main/kotlin/android/databinding/tool/writer/BRWriter.kt +++ b/compiler/src/main/kotlin/android/databinding/tool/writer/BRWriter.kt @@ -20,7 +20,7 @@ import android.databinding.tool.util.StringUtils class BRWriter(properties: Set<String>, val useFinal : Boolean) { val indexedProps = properties.sorted().withIndex() - public fun write(pkg : String): String = "package $pkg;${StringUtils.LINE_SEPARATOR}$klass" + fun write(pkg : String): String = "package $pkg;${StringUtils.LINE_SEPARATOR}$klass" val klass: String by lazy { kcode("") { val prefix = if (useFinal) "final " else ""; diff --git a/compiler/src/main/kotlin/android/databinding/tool/writer/DataBinderWriter.kt b/compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriter.kt index 9bd06a00..0caf8a6f 100644 --- a/compiler/src/main/kotlin/android/databinding/tool/writer/DataBinderWriter.kt +++ b/compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriter.kt @@ -13,15 +13,39 @@ package android.databinding.tool.writer +import android.databinding.tool.DataBindingCompilerArgs import android.databinding.tool.LayoutBinder -class DataBinderWriter(val pkg: String, val projectPackage: String, val className: String, - val layoutBinders : List<LayoutBinder>, val minSdk : kotlin.Int) { +class BindingMapperWriter(var pkg : String, var className: String, val layoutBinders : List<LayoutBinder>, + val compilerArgs: DataBindingCompilerArgs) { + private val appClassName : String = className + private val testClassName = "Test$className" + val generateAsTest = compilerArgs.isTestVariant && compilerArgs.isApp + val generateTestOverride = !generateAsTest && compilerArgs.isEnabledForTests + init { + if (generateAsTest) { + className = "Test${className}" + } + } fun write(brWriter : BRWriter) = kcode("") { nl("package $pkg;") - nl("import $projectPackage.BR;") - block("class $className") { - nl("final static int TARGET_MIN_SDK = $minSdk;") + nl("import ${compilerArgs.modulePackage}.BR;") + val extends = if (generateAsTest) "extends $appClassName" else "" + block("class $className $extends") { + nl("final static int TARGET_MIN_SDK = ${compilerArgs.minApi};") + if (generateTestOverride) { + nl("static $appClassName mTestOverride;") + block("static") { + block("try") { + nl("mTestOverride = ($appClassName)$appClassName.class.getClassLoader().loadClass(\"$pkg.$testClassName\").newInstance();") + } + block("catch(Throwable ignored)") { + nl("// ignore, we are not running in test mode") + nl("mTestOverride = null;") + } + + } + } nl("") block("public $className()") { } @@ -58,6 +82,11 @@ class DataBinderWriter(val pkg: String, val projectPackage: String, val classNam } } } + if (generateTestOverride) { + block("if(mTestOverride != null)") { + nl("return mTestOverride.getDataBinder(bindingComponent, view, layoutId);") + } + } nl("return null;") } block("android.databinding.ViewDataBinding getDataBinder(android.databinding.DataBindingComponent bindingComponent, android.view.View[] views, int layoutId)") { @@ -80,6 +109,11 @@ class DataBinderWriter(val pkg: String, val projectPackage: String, val classNam } } } + if (generateTestOverride) { + block("if(mTestOverride != null)") { + nl("return mTestOverride.getDataBinder(bindingComponent, views, layoutId);") + } + } nl("return null;") } @@ -102,11 +136,21 @@ class DataBinderWriter(val pkg: String, val projectPackage: String, val classNam } } + if (generateTestOverride) { + block("if(mTestOverride != null)") { + nl("return mTestOverride.getLayoutId(tag);") + } + } nl("return 0;") } block("String convertBrIdToString(int id)") { block("if (id < 0 || id >= InnerBrLookup.sKeys.length)") { + if (generateTestOverride) { + block("if(mTestOverride != null)") { + nl("return mTestOverride.convertBrIdToString(id);") + } + } nl("return null;") } nl("return InnerBrLookup.sKeys[id];") |