summaryrefslogtreecommitdiff
path: root/compilerCommon
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2015-06-23 14:04:59 -0700
committerGeorge Mount <mount@google.com>2015-06-23 15:23:07 -0700
commit3e3bf43a2e11fb433b43558e2e05255edfa5b6a8 (patch)
tree15ce8a339c1e6ba1cd6bee5efd36977320630583 /compilerCommon
parentaf84cb304c158381a8bf0f0ac1c37c5a2ad04bfb (diff)
downloaddata-binding-3e3bf43a2e11fb433b43558e2e05255edfa5b6a8.tar.gz
Give an error when includes are in the root of data bound layouts.
Bug 22032146 Change-Id: Ia20264a843edf70358ea37cdf31ab8b5686052b8
Diffstat (limited to 'compilerCommon')
-rw-r--r--compilerCommon/src/main/java/android/databinding/tool/store/LayoutFileParser.java12
1 files changed, 11 insertions, 1 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 6cfbd96b..3c3c8e99 100644
--- a/compilerCommon/src/main/java/android/databinding/tool/store/LayoutFileParser.java
+++ b/compilerCommon/src/main/java/android/databinding/tool/store/LayoutFileParser.java
@@ -16,7 +16,6 @@ package android.databinding.tool.store;
import com.google.common.base.Preconditions;
import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
@@ -58,6 +57,7 @@ public class LayoutFileParser {
private static final String XPATH_IMPORT_DEFINITIONS = "/layout/data/import";
private static final String XPATH_MERGE_ELEMENT = "/layout/merge";
private static final String XPATH_BINDING_LAYOUT = "/layout";
+ private static final String XPATH_MERGE_INCLUDE = "/layout/merge/include";
private static final String XPATH_BINDING_CLASS = "/layout/data/@class";
final String LAYOUT_PREFIX = "@layout/";
@@ -84,6 +84,12 @@ public class LayoutFileParser {
return null;
}
+ if (hasMergeInclude(doc, xPath)) {
+ L.e("Data binding does not support include elements as direct children of a " +
+ "merge element: %s", xml.getPath());
+ return null;
+ }
+
List<Node> variableNodes = getVariableNodes(doc, xPath);
final List<Node> imports = getImportNodes(doc, xPath);
@@ -188,6 +194,10 @@ public class LayoutFileParser {
return !get(doc, xPath, XPATH_BINDING_LAYOUT).isEmpty();
}
+ private boolean hasMergeInclude(Document doc, XPath xPath) throws XPathExpressionException {
+ return !get(doc, xPath, XPATH_MERGE_INCLUDE).isEmpty();
+ }
+
private Node getLayoutParent(Document doc, XPath xPath) throws XPathExpressionException {
if (isMerge(doc, xPath)) {
return get(doc, xPath, XPATH_MERGE_ELEMENT).get(0);