diff options
author | Yigit Boyar <yboyar@google.com> | 2019-05-30 13:53:48 -0700 |
---|---|---|
committer | TreeHugger Robot <treehugger-gerrit@google.com> | 2019-06-17 11:45:11 +0000 |
commit | 23c84ab6dffb9d150308a3fccd8201fb912f3b46 (patch) | |
tree | 5264eb3e7fa3a490e4ec550c39b44f2439115541 /compiler/src/main/kotlin/android/databinding | |
parent | c43f250369850907c7785e48920b807aac7bb43b (diff) | |
download | data-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')
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() |