summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2015-11-18 15:21:56 -0800
committerGeorge Mount <mount@google.com>2015-11-19 14:04:59 -0800
commit9eb684f8375efd59c4fd880bd578b470eb273d41 (patch)
treece3c3a3b0eca5e8cac8a1bcc130d64531e78304e
parent4e163480650e26cd37d814447ecc896c0b3ff00e (diff)
downloaddata-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
-rw-r--r--compilerCommon/src/main/java/android/databinding/tool/store/LayoutFileParser.java36
-rw-r--r--integration-tests/TestApp/app/src/androidTestApi7/java/android/databinding/testapp/ViewWithTagTest.java1
-rw-r--r--integration-tests/TestApp/app/src/main/res/layout/view_with_tag.xml4
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>