レイアウトファイルのパース
• https://android.googlesource.com/platform/frameworks/data-binding/+/gradle_3.0.0/
compilerCommon/src/main/java/android/databinding/tool/store/LayoutFileParser.java
public class LayoutFileParser {
// ...
private void parseData(File xml, XMLParser.ElementContext data,
ResourceBundle.LayoutFileBundle bundle) {
if (data == null) {
return;
}
for (XMLParser.ElementContext imp : filter(data, "import")) {
final Map attrMap = attributeMap(imp);
String type = attrMap.get("type");
String alias = attrMap.get("alias");
Preconditions.check(StringUtils.isNotBlank(type), "Type of an import cannot be empty."
+ " %s in %s", imp.toStringTree(), xml);
if (Strings.isNullOrEmpty(alias)) {
alias = type.substring(type.lastIndexOf('.') + 1);
}
bundle.addImport(alias, type, new Location(imp));
}
for (XMLParser.ElementContext variable : filter(data, "variable")) {
final Map attrMap = attributeMap(variable);
String type = attrMap.get("type");
String name = attrMap.get("name");
Preconditions.checkNotNull(type, "variable must have a type definition %s in %s",
variable.toStringTree(), xml);
Preconditions.checkNotNull(name, "variable must have a name %s in %s",
variable.toStringTree(), xml);
bundle.addVariable(name, type, new Location(variable), true);