summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJake Wharton <jakew@google.com>2020-04-23 16:02:32 -0400
committerJake Wharton <jakew@google.com>2020-04-24 02:28:41 +0000
commit9d9b437bf5f6ea210c4b75b0bba08b61df6015f9 (patch)
tree8261d98e267bf05ff586a2f915e0dfaade7ad77d
parent9162ebbad769ab02cd6a02ea0152961bbf35636e (diff)
downloaddata-binding-9d9b437bf5f6ea210c4b75b0bba08b61df6015f9.tar.gz
Ignore merge tags with IDs
Bug: 154747638 Test: ../base/bazel/bazel test //tools/data-binding/... Change-Id: Ib9dee8548b96c8917358897f9c78107b4a4cc202
-rw-r--r--compilerCommon/src/main/kotlin/android/databinding/tool/writer/ViewBinder.kt5
-rw-r--r--compilerCommon/src/test/kotlin/android/databinding/tool/writer/ViewBinderGenerateJavaTest.kt20
2 files changed, 24 insertions, 1 deletions
diff --git a/compilerCommon/src/main/kotlin/android/databinding/tool/writer/ViewBinder.kt b/compilerCommon/src/main/kotlin/android/databinding/tool/writer/ViewBinder.kt
index c4bc938b..6d271b57 100644
--- a/compilerCommon/src/main/kotlin/android/databinding/tool/writer/ViewBinder.kt
+++ b/compilerCommon/src/main/kotlin/android/databinding/tool/writer/ViewBinder.kt
@@ -111,7 +111,10 @@ fun BaseLayoutModel.toViewBinder(): ViewBinder {
)
}
- val bindings = sortedTargets.filter { it.id != null }.map { it.toBinding() }
+ val bindings = sortedTargets
+ .filter { it.id != null }
+ .filter { it.viewName != "merge" } // <merge> can have ID but it's ignored at runtime.
+ .map { it.toBinding() }
val rootNode = parseRootNode(rClassName, bindings)
return ViewBinder(
generatedTypeName = ClassName.get(bindingClassPackage, bindingClassName),
diff --git a/compilerCommon/src/test/kotlin/android/databinding/tool/writer/ViewBinderGenerateJavaTest.kt b/compilerCommon/src/test/kotlin/android/databinding/tool/writer/ViewBinderGenerateJavaTest.kt
index dcc2bdf3..f4a805a2 100644
--- a/compilerCommon/src/test/kotlin/android/databinding/tool/writer/ViewBinderGenerateJavaTest.kt
+++ b/compilerCommon/src/test/kotlin/android/databinding/tool/writer/ViewBinderGenerateJavaTest.kt
@@ -700,4 +700,24 @@ class ViewBinderGenerateJavaTest {
doesNotContain("two")
}
}
+
+ @Test fun mergeWithIdAndInclude() {
+ // https://issuetracker.google.com/154747638
+ // Note: This bug only manifests when there's a nested <include> the <merge>.
+
+ layouts.write("simple", "layout", "<View/>")
+ layouts.write("merge_with_id", "layout", """
+ <merge
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/main_content"
+ >
+ <include layout="@layout/simple"/>
+ </merge>
+ """.trimIndent())
+
+ val mergeWithId = layouts.parse().getValue("merge_with_id")
+ mergeWithId.toViewBinder().toJavaFile().assert {
+ doesNotContain("mainContent")
+ }
+ }
}