diff options
author | George Mount <mount@google.com> | 2015-06-23 14:04:59 -0700 |
---|---|---|
committer | George Mount <mount@google.com> | 2015-06-23 15:23:07 -0700 |
commit | 3e3bf43a2e11fb433b43558e2e05255edfa5b6a8 (patch) | |
tree | 15ce8a339c1e6ba1cd6bee5efd36977320630583 /compilerCommon | |
parent | af84cb304c158381a8bf0f0ac1c37c5a2ad04bfb (diff) | |
download | data-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.java | 12 |
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); |