@@ -109,6 +109,51 @@ class BindingFacadeGeneratorV2Test {
109109 assertThat(generated).doesNotContain(" public val viewText: TextView" )
110110 }
111111
112+ @Test
113+ fun `malformed data binding include uses native binding instead of missing x2c facade` () {
114+ tempFolder.newFile(" broken_child.xml" ).writeText(
115+ """
116+ <layout xmlns:android="http://schemas.android.com/apk/res/android">
117+ <data>
118+ <variable
119+ name="title"
120+ type="java.lang.String" />
121+ </data>
122+ </layout>
123+ """ .trimIndent()
124+ )
125+ val includeParser = XmlLayoutParser (includeResolver = IncludeResolver (tempFolder.root))
126+ val tree = includeParser.parse(
127+ """
128+ <layout xmlns:android="http://schemas.android.com/apk/res/android">
129+ <FrameLayout
130+ android:layout_width="match_parent"
131+ android:layout_height="match_parent">
132+ <include
133+ android:id="@+id/broken"
134+ layout="@layout/broken_child"
135+ android:layout_width="match_parent"
136+ android:layout_height="wrap_content" />
137+ </FrameLayout>
138+ </layout>
139+ """ .trimIndent(),
140+ " host_with_broken_include"
141+ )
142+ val analyzed = analyzer.analyze(tree.root)
143+
144+ val generated = generator.generate(
145+ analyzedRoot = analyzed,
146+ layoutName = " host_with_broken_include" ,
147+ layoutResId = " R.layout.host_with_broken_include" ,
148+ useFastPath = true ,
149+ dataBindingVariables = tree.rootMetadata.dataBindingVariables
150+ ).toString()
151+
152+ assertThat(generated).contains(" val broken: BrokenChildBinding = DataBindingUtil.bind(brokenRoot)" )
153+ assertThat(generated).doesNotContain(" BrokenChildX2CBinding.bind" )
154+ assertThat(generated).contains(" setContainedBinding(broken)" )
155+ }
156+
112157 @Test
113158 fun `generated binding binds root id field from root view directly` () {
114159 val xml = """
0 commit comments