diff options
author | George Mount <mount@google.com> | 2015-11-18 15:21:56 -0800 |
---|---|---|
committer | George Mount <mount@google.com> | 2015-11-19 14:04:59 -0800 |
commit | 9eb684f8375efd59c4fd880bd578b470eb273d41 (patch) | |
tree | ce3c3a3b0eca5e8cac8a1bcc130d64531e78304e | |
parent | 4e163480650e26cd37d814447ecc896c0b3ff00e (diff) | |
download | data-binding-9eb684f8375efd59c4fd880bd578b470eb273d41.tar.gz |
Fix tag element usage with data binding.
Bug 25763095
White list include & view usage, but all other lower-
case tag elements are thrown out when it comes to
data binding.
Change-Id: Iccd9d31ef0dfdd6e9ded149c06ee6e295bf4fdaf
3 files changed, 27 insertions, 14 deletions
diff --git a/compilerCommon/src/main/java/android/databinding/tool/store/LayoutFileParser.java b/compilerCommon/src/main/java/android/databinding/tool/store/LayoutFileParser.java index 03d55d8e..aca6fe86 100644 --- a/compilerCommon/src/main/java/android/databinding/tool/store/LayoutFileParser.java +++ b/compilerCommon/src/main/java/android/databinding/tool/store/LayoutFileParser.java @@ -13,6 +13,18 @@ package android.databinding.tool.store; +import android.databinding.parser.XMLLexer; +import android.databinding.parser.XMLParser; +import android.databinding.parser.XMLParserBaseVisitor; +import android.databinding.tool.LayoutXmlProcessor; +import android.databinding.tool.processing.ErrorMessages; +import android.databinding.tool.processing.Scope; +import android.databinding.tool.processing.scopes.FileScopeProvider; +import android.databinding.tool.util.L; +import android.databinding.tool.util.ParserHelper; +import android.databinding.tool.util.Preconditions; +import android.databinding.tool.util.XmlEditor; + import org.antlr.v4.runtime.ANTLRInputStream; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.ParserRuleContext; @@ -26,18 +38,6 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; -import android.databinding.parser.XMLLexer; -import android.databinding.parser.XMLParser; -import android.databinding.parser.XMLParserBaseVisitor; -import android.databinding.tool.LayoutXmlProcessor; -import android.databinding.tool.processing.ErrorMessages; -import android.databinding.tool.processing.Scope; -import android.databinding.tool.processing.scopes.FileScopeProvider; -import android.databinding.tool.util.L; -import android.databinding.tool.util.ParserHelper; -import android.databinding.tool.util.Preconditions; -import android.databinding.tool.util.XmlEditor; - import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -129,6 +129,16 @@ public class LayoutFileParser { } } + private static boolean isProcessedElement(String name) { + if (StringUtils.isEmpty(name)) { + return false; + } + if ("view".equals(name) || "include".equals(name) || name.indexOf('.') >= 0) { + return true; + } + return !name.toLowerCase().equals(name); + } + private void parseExpressions(String newTag, final XMLParser.ElementContext rootView, final boolean isMerge, ResourceBundle.LayoutFileBundle bundle) { final List<XMLParser.ElementContext> bindingElements @@ -142,7 +152,7 @@ public class LayoutFileParser { bindingElements.add(ctx); } else { String name = ctx.elmName.getText(); - if (!"fragment".equals(name) && + if (isProcessedElement(name) && attributeMap(ctx).containsKey("android:id")) { otherElementsWithIds.add(ctx); } diff --git a/integration-tests/TestApp/app/src/androidTestApi7/java/android/databinding/testapp/ViewWithTagTest.java b/integration-tests/TestApp/app/src/androidTestApi7/java/android/databinding/testapp/ViewWithTagTest.java index 05ad2b1d..f1f5e9e4 100644 --- a/integration-tests/TestApp/app/src/androidTestApi7/java/android/databinding/testapp/ViewWithTagTest.java +++ b/integration-tests/TestApp/app/src/androidTestApi7/java/android/databinding/testapp/ViewWithTagTest.java @@ -37,5 +37,6 @@ public class ViewWithTagTest extends BaseDataBinderTest<ViewWithTagBinding> { assertTrue(view2 instanceof TextView); assertEquals("i don't have tag", ((TextView) view2).getText().toString()); assertEquals("i have a tag", view1.getTag().toString()); + assertEquals("Hello", view2.getTag(R.id.customTag)); } } diff --git a/integration-tests/TestApp/app/src/main/res/layout/view_with_tag.xml b/integration-tests/TestApp/app/src/main/res/layout/view_with_tag.xml index a7103902..6672c997 100644 --- a/integration-tests/TestApp/app/src/main/res/layout/view_with_tag.xml +++ b/integration-tests/TestApp/app/src/main/res/layout/view_with_tag.xml @@ -25,6 +25,8 @@ <TextView android:text="@{str}" android:layout_width="wrap_content" - android:layout_height="wrap_content" /> + android:layout_height="wrap_content" > + <tag android:id="@+id/customTag" android:value="Hello"/> + </TextView> </LinearLayout> </layout> |