summaryrefslogtreecommitdiff
path: root/compiler/src/main/kotlin/android/databinding
diff options
context:
space:
mode:
authorYigit Boyar <yboyar@google.com>2016-09-09 18:55:26 -0700
committerYigit Boyar <yboyar@google.com>2016-09-20 17:06:27 -0700
commit3ca8e88cda63da006d8ebd9b19a914e0598816f5 (patch)
treec05e724517ba4251638451e0025d82351ba235be /compiler/src/main/kotlin/android/databinding
parent315ded5d95dd5ce6dbe1226a1065aa340df251a7 (diff)
downloaddata-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.kt2
-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];")