summaryrefslogtreecommitdiff
path: root/compiler/src/main/kotlin/android/databinding
diff options
context:
space:
mode:
authorYigit Boyar <yboyar@google.com>2019-05-30 13:53:48 -0700
committerTreeHugger Robot <treehugger-gerrit@google.com>2019-06-17 11:45:11 +0000
commit23c84ab6dffb9d150308a3fccd8201fb912f3b46 (patch)
tree5264eb3e7fa3a490e4ec550c39b44f2439115541 /compiler/src/main/kotlin/android/databinding
parentc43f250369850907c7785e48920b807aac7bb43b (diff)
downloaddata-binding-23c84ab6dffb9d150308a3fccd8201fb912f3b46.tar.gz
Ensure BR files have consistent output
This CL fixes an incrementality problem where we could've generated different BR classes w/o any actual code change on the developer side. I've moved usages of BR to a separate class to ensure ordering as multiple things access it ~yay v1 compat~. This is still not perfect for caching because the BR data uses a java serializable class w/ a regular map. We need to move it to json as well to ensure caching is consistent too (thought this change should help with incremental javac) Bug: 131659806 Test: existing tests Change-Id: I3412845f121798bb474fb503fe2bfdfa93034da1
Diffstat (limited to 'compiler/src/main/kotlin/android/databinding')
-rw-r--r--compiler/src/main/kotlin/android/databinding/tool/writer/BRWriter.kt4
-rw-r--r--compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriter.kt7
-rw-r--r--compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriterV2.kt13
3 files changed, 13 insertions, 11 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 e6796aa0..f5beb20b 100644
--- a/compiler/src/main/kotlin/android/databinding/tool/writer/BRWriter.kt
+++ b/compiler/src/main/kotlin/android/databinding/tool/writer/BRWriter.kt
@@ -29,14 +29,14 @@ import com.squareup.javapoet.TypeSpec
import javax.lang.model.element.Modifier
class BRWriter(private val useFinal : Boolean) {
- fun write(values : BindableBag.BRWithValues): String {
+ fun write(values : BindableBag.ModuleBR): String {
val spec = TypeSpec.classBuilder("BR").apply {
addModifiers(Modifier.PUBLIC)
if (ModelAnalyzer.getInstance().hasGeneratedAnnotation) {
addAnnotation(AnnotationSpec.builder(ClassName.get("javax.annotation", "Generated"))
.addMember("value", S,"Android Data Binding").build())
}
- values.props.forEach {
+ values.br.props.forEach {
addField(
FieldSpec.builder(TypeName.INT, it.first, Modifier.PUBLIC,
Modifier.STATIC).apply {
diff --git a/compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriter.kt b/compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriter.kt
index 8a01cda1..2392cd2d 100644
--- a/compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriter.kt
+++ b/compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriter.kt
@@ -13,6 +13,7 @@
package android.databinding.tool.writer
+import android.databinding.annotationprocessor.BindableBag
import android.databinding.tool.CompilerArguments
import android.databinding.tool.LayoutBinder
import android.databinding.tool.LibTypes
@@ -33,7 +34,7 @@ class BindingMapperWriter(
className = "Test${className}"
}
}
- fun write(brValueLookup: MutableMap<String, Int>) = kcode("") {
+ fun write(brValueLookup: BindableBag.BRMapping) = kcode("") {
nl("package $pkg;")
nl("import ${compilerArgs.modulePackage}.BR;")
nl("import android.util.SparseArray;")
@@ -156,8 +157,8 @@ class BindingMapperWriter(
nl("static final SparseArray<String> sKeys = new SparseArray<>();")
block("static") {
tab("sKeys.put(0, \"_all\");")
- brValueLookup.forEach {
- tab("sKeys.put(${it.value}, \"${it.key}\");")
+ brValueLookup.props.forEach {
+ tab("sKeys.put(${it.second}, \"${it.first}\");")
}
}
}
diff --git a/compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriterV2.kt b/compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriterV2.kt
index 52e2e8b4..346c03ac 100644
--- a/compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriterV2.kt
+++ b/compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriterV2.kt
@@ -16,6 +16,7 @@
package android.databinding.tool.writer
+import android.databinding.annotationprocessor.BindableBag
import android.databinding.tool.CompilerArguments
import android.databinding.tool.LibTypes
import android.databinding.tool.ext.L
@@ -157,7 +158,7 @@ class BindingMapperWriterV2(genClassInfoLog: GenClassInfoLog,
val genClass: GenClassInfoLog.GenClass)
- fun write(brValueLookup: MutableMap<String, Int>): TypeSpec
+ fun write(brValueLookup: BindableBag.BRMapping): TypeSpec
= TypeSpec.classBuilder(className).apply {
superclass(dataBinderMapper)
addModifiers(Modifier.PUBLIC)
@@ -211,7 +212,7 @@ class BindingMapperWriterV2(genClassInfoLog: GenClassInfoLog,
}
}
- private fun generateInnerBrLookup(brValueLookup: MutableMap<String, Int>) = TypeSpec
+ private fun generateInnerBrLookup(brValueLookup: BindableBag.BRMapping) = TypeSpec
.classBuilder("InnerBrLookup").apply {
/**
* generated code looks like:
@@ -227,15 +228,15 @@ class BindingMapperWriterV2(genClassInfoLog: GenClassInfoLog,
)
val keysField = FieldSpec.builder(keysTypeName, "sKeys").apply {
addModifiers(Modifier.STATIC, Modifier.FINAL)
- initializer("new $T($L)", keysTypeName, brValueLookup.size + 1)
+ initializer("new $T($L)", keysTypeName, brValueLookup.size)
}.build()
addField(keysField)
addStaticBlock(CodeBlock.builder().apply {
- brValueLookup.forEach {
+ brValueLookup.props.forEach {
addStatement("$N.put($L, $S)",
keysField,
- it.value,
- it.key)
+ it.second,
+ it.first)
}
}.build())
}.build()