Downgrade to java 1.6
This CL removes java 1.7 code so that we can easily integrate
w/ Idea.
It also partially removes dependency on ModelAnalyzer for
interface generation so that we can call it from the Idea
plugin.
Change-Id: Id7616987f5660911e951ddf20dacd4f407dacbd9
diff --git a/annotationprocessor/build.gradle b/annotationprocessor/build.gradle
index 8a0a9ac..d0099d6 100644
--- a/annotationprocessor/build.gradle
+++ b/annotationprocessor/build.gradle
@@ -17,6 +17,9 @@
apply plugin: 'java'
apply plugin: 'maven'
+sourceCompatibility = 1.7
+targetCompatibility = 1.7
+
buildscript {
repositories {
mavenLocal()
diff --git a/baseLibrary/build.gradle b/baseLibrary/build.gradle
index e32fabf..4e0c991 100644
--- a/baseLibrary/build.gradle
+++ b/baseLibrary/build.gradle
@@ -18,8 +18,8 @@
apply plugin: 'maven'
apply plugin: 'application'
-sourceCompatibility = 1.7
-mainClassName = "org.antlr.v4.Tool"
+sourceCompatibility = javaTargetCompatibility
+targetCompatibility = javaSourceCompatibility
buildscript {
repositories {
diff --git a/build.gradle b/build.gradle
index d1bd9cd..18b0ea2 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,6 +2,8 @@
ext.releaseVersion = "0.3"
ext.snapshotVersion = "0.3-SNAPSHOT"
ext.androidPluginVersion = "1.0.0"
+ext.javaTargetCompatibility = 1.6
+ext.javaSourceCompatibility = 1.6
subprojects {
group = 'com.android.databinding'
diff --git a/compiler/build.gradle b/compiler/build.gradle
index 8ebb27a..1e0f593 100644
--- a/compiler/build.gradle
+++ b/compiler/build.gradle
@@ -19,6 +19,8 @@
apply plugin: 'maven'
+sourceCompatibility = javaTargetCompatibility
+targetCompatibility = javaSourceCompatibility
buildscript {
repositories {
@@ -42,10 +44,17 @@
compile project(":xmlGrammar")
testCompile "com.android.databinding:library:$version@jar"
}
+
+task fatJar(type: Jar) {
+ baseName = project.name + '-all'
+ from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
+ with jar
+}
+
uploadArchives {
repositories {
mavenDeployer {
repository(url: mavenLocal().url)
}
}
-}
\ No newline at end of file
+}
diff --git a/compiler/src/main/java/com/android/databinding/BindingTarget.java b/compiler/src/main/java/com/android/databinding/BindingTarget.java
index a78398a..b0f1ff3 100644
--- a/compiler/src/main/java/com/android/databinding/BindingTarget.java
+++ b/compiler/src/main/java/com/android/databinding/BindingTarget.java
@@ -28,7 +28,7 @@
import java.util.Map;
public class BindingTarget {
- List<Binding> mBindings = new ArrayList<>();
+ List<Binding> mBindings = new ArrayList<Binding>();
ExprModel mModel;
ModelClass mResolvedClass;
// if this target presents itself in multiple layout files with different view types,
diff --git a/compiler/src/main/java/com/android/databinding/DataBinder.java b/compiler/src/main/java/com/android/databinding/DataBinder.java
index 1514a9e..0db8aae 100644
--- a/compiler/src/main/java/com/android/databinding/DataBinder.java
+++ b/compiler/src/main/java/com/android/databinding/DataBinder.java
@@ -30,7 +30,7 @@
* The main class that handles parsing files and generating classes.
*/
public class DataBinder {
- List<LayoutBinder> mLayoutBinders = new ArrayList<>();
+ List<LayoutBinder> mLayoutBinders = new ArrayList<LayoutBinder>();
private JavaFileWriter mFileWriter;
@@ -48,7 +48,7 @@
}
public void writerBinderInterfaces() {
- Set<String> writtenFiles = new HashSet<>();
+ Set<String> writtenFiles = new HashSet<String>();
for (LayoutBinder layoutBinder : mLayoutBinders) {
String interfaceName = layoutBinder.getInterfaceName();
if (writtenFiles.contains(interfaceName)) {
diff --git a/compiler/src/main/java/com/android/databinding/ExpressionVisitor.java b/compiler/src/main/java/com/android/databinding/ExpressionVisitor.java
index 9adca33..7b3f2f5 100644
--- a/compiler/src/main/java/com/android/databinding/ExpressionVisitor.java
+++ b/compiler/src/main/java/com/android/databinding/ExpressionVisitor.java
@@ -23,15 +23,18 @@
import com.android.databinding.expr.StaticIdentifierExpr;
import com.android.databinding.reflection.ModelAnalyzer;
import com.android.databinding.reflection.ModelClass;
+import com.android.databinding.util.L;
import org.antlr.v4.runtime.misc.NotNull;
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.TerminalNode;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
-import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
-import java.util.Objects;
+import java.util.Map;
public class ExpressionVisitor extends BindingExpressionBaseVisitor<Expr> {
private final ExprModel mModel;
@@ -69,7 +72,7 @@
} catch (Exception e) {
System.out.println("Error while parsing! " + ctx.getText());
e.printStackTrace();
- throw e;
+ throw new RuntimeException(e);
}
}
@@ -144,10 +147,10 @@
@Override
public Expr visitMethodInvocation(
@NotNull BindingExpressionParser.MethodInvocationContext ctx) {
- List<Expr> args = new ArrayList<>();
+ List<Expr> args = new ArrayList<Expr>();
if (ctx.args != null) {
for (ParseTree item : ctx.args.children) {
- if (Objects.equals(item.getText(), ",")) {
+ if (ObjectUtils.equals(item.getText(), ",")) {
continue;
}
args.add(item.accept(this));
@@ -164,10 +167,10 @@
@Override
public Expr visitResources(@NotNull BindingExpressionParser.ResourcesContext ctx) {
- final List<Expr> args = new ArrayList<>();
+ final List<Expr> args = new ArrayList<Expr>();
if (ctx.resourceParameters() != null) {
for (ParseTree item : ctx.resourceParameters().expressionList().children) {
- if (Objects.equals(item.getText(), ",")) {
+ if (ObjectUtils.equals(item.getText(), ",")) {
continue;
}
args.add(item.accept(this));
diff --git a/compiler/src/main/java/com/android/databinding/LayoutBinder.java b/compiler/src/main/java/com/android/databinding/LayoutBinder.java
index c08163f..faf60f7 100644
--- a/compiler/src/main/java/com/android/databinding/LayoutBinder.java
+++ b/compiler/src/main/java/com/android/databinding/LayoutBinder.java
@@ -47,7 +47,7 @@
private String mPackage;
private String mProjectPackage;
private String mBaseClassName;
- private final HashMap<String, String> mUserDefinedVariables = new HashMap<>();
+ private final HashMap<String, String> mUserDefinedVariables = new HashMap<String, String>();
private LayoutBinderWriter mWriter;
private ResourceBundle.LayoutFileBundle mBundle;
@@ -56,7 +56,7 @@
ResourceBundle.LayoutFileBundle layoutBundle) {
mExprModel = new ExprModel();
mExpressionParser = new ExpressionParser(mExprModel);
- mBindingTargets = new ArrayList<>();
+ mBindingTargets = new ArrayList<BindingTarget>();
mBundle = layoutBundle;
mProjectPackage = resourceBundle.getAppPackage();
mPackage = mProjectPackage + ".generated";
@@ -79,7 +79,7 @@
}
public void resolveWhichExpressionsAreUsed() {
- List<Expr> used = new ArrayList<>();
+ List<Expr> used = new ArrayList<Expr>();
for (BindingTarget target : mBindingTargets) {
for (Binding binding : target.getBindings()) {
binding.getExpr().setIsUsed(true);
diff --git a/compiler/src/main/java/com/android/databinding/LayoutXmlProcessor.java b/compiler/src/main/java/com/android/databinding/LayoutXmlProcessor.java
index 9bca851..ed170bf 100644
--- a/compiler/src/main/java/com/android/databinding/LayoutXmlProcessor.java
+++ b/compiler/src/main/java/com/android/databinding/LayoutXmlProcessor.java
@@ -88,6 +88,10 @@
return true;
}
+ public ResourceBundle getResourceBundle() {
+ return mResourceBundle;
+ }
+
public void writeIntermediateFile(File sdkDir) throws JAXBException {
if (mWritten) {
return;
diff --git a/compiler/src/main/java/com/android/databinding/expr/Expr.java b/compiler/src/main/java/com/android/databinding/expr/Expr.java
index d2b9514..7bf5eeb 100644
--- a/compiler/src/main/java/com/android/databinding/expr/Expr.java
+++ b/compiler/src/main/java/com/android/databinding/expr/Expr.java
@@ -34,10 +34,10 @@
abstract public class Expr {
public static final int NO_ID = -1;
- protected List<Expr> mChildren = new ArrayList<>();
+ protected List<Expr> mChildren = new ArrayList<Expr>();
// any expression that refers to this. Useful if this expr is duplicate and being replaced
- private List<Expr> mParents = new ArrayList<>();
+ private List<Expr> mParents = new ArrayList<Expr>();
private Boolean mIsDynamic;
@@ -295,7 +295,7 @@
* conditionals.
*/
protected List<Dependency> constructDynamicChildrenDependencies() {
- List<Dependency> dependencies = new ArrayList<>();
+ List<Dependency> dependencies = new ArrayList<Dependency>();
for (Expr node : mChildren) {
if (!node.isDynamic()) {
continue;
@@ -582,7 +582,7 @@
static class Node {
BitSet mBitSet = new BitSet();
- List<Node> mParents = new ArrayList<>();
+ List<Node> mParents = new ArrayList<Node>();
int mConditionFlag = -1;
public boolean areAllPathsSatisfied(BitSet readSoFar) {
diff --git a/compiler/src/main/java/com/android/databinding/expr/ExprModel.java b/compiler/src/main/java/com/android/databinding/expr/ExprModel.java
index 3328006..7b8d430 100644
--- a/compiler/src/main/java/com/android/databinding/expr/ExprModel.java
+++ b/compiler/src/main/java/com/android/databinding/expr/ExprModel.java
@@ -34,9 +34,9 @@
public class ExprModel {
- Map<String, Expr> mExprMap = new HashMap<>();
+ Map<String, Expr> mExprMap = new HashMap<String, Expr>();
- List<Expr> mBindingExpressions = new ArrayList<>();
+ List<Expr> mBindingExpressions = new ArrayList<Expr>();
private int mInvalidateableFieldLimit = 0;
@@ -62,7 +62,7 @@
private List<Expr> mObservables;
- private Map<String, String> mImports = new HashMap<>();
+ private Map<String, String> mImports = new HashMap<String, String>();
/**
* Adds the expression to the list of expressions and returns it.
@@ -216,11 +216,11 @@
* Give id to each expression. Will be useful if we serialize.
*/
public void seal() {
- List<Expr> notifiableExpressions = new ArrayList<>();
+ List<Expr> notifiableExpressions = new ArrayList<Expr>();
//ensure class analyzer. We need to know observables at this point
final ModelAnalyzer modelAnalyzer = ModelAnalyzer.getInstance();
- ArrayList<Expr> exprs = new ArrayList<>(mBindingExpressions);
+ ArrayList<Expr> exprs = new ArrayList<Expr>(mBindingExpressions);
for (Expr expr: exprs) {
expr.updateExpr(modelAnalyzer);
}
diff --git a/compiler/src/main/java/com/android/databinding/expr/IdentifierExpr.java b/compiler/src/main/java/com/android/databinding/expr/IdentifierExpr.java
index ba5583f..a826123 100644
--- a/compiler/src/main/java/com/android/databinding/expr/IdentifierExpr.java
+++ b/compiler/src/main/java/com/android/databinding/expr/IdentifierExpr.java
@@ -21,6 +21,7 @@
import com.android.databinding.reflection.ModelAnalyzer;
import com.android.databinding.reflection.ModelClass;
+import com.android.databinding.util.L;
import java.util.List;
@@ -52,6 +53,16 @@
return mUserDefinedType;
}
+ public String getExpandedUserDefinedType(ModelAnalyzer modelAnalyzer) {
+ Preconditions.checkNotNull(mUserDefinedType,
+ "Identifiers must have user defined types from the XML file. %s is missing it",
+ mName);
+ final String expanded = modelAnalyzer
+ .applyImports(mUserDefinedType, getModel().getImports());
+ L.d("expanded version of %s is %s", mUserDefinedType, expanded);
+ return expanded;
+ }
+
@Override
public boolean isDynamic() {
return true;
diff --git a/compiler/src/main/java/com/android/databinding/expr/MethodCallExpr.java b/compiler/src/main/java/com/android/databinding/expr/MethodCallExpr.java
index fcec227..41d6145 100644
--- a/compiler/src/main/java/com/android/databinding/expr/MethodCallExpr.java
+++ b/compiler/src/main/java/com/android/databinding/expr/MethodCallExpr.java
@@ -45,7 +45,7 @@
@Override
protected ModelClass resolveType(ModelAnalyzer modelAnalyzer) {
if (mGetter == null) {
- List<ModelClass> args = new ArrayList<>();
+ List<ModelClass> args = new ArrayList<ModelClass>();
for (Expr expr : getArgs()) {
args.add(expr.getResolvedType());
}
diff --git a/compiler/src/main/java/com/android/databinding/expr/ResourceExpr.java b/compiler/src/main/java/com/android/databinding/expr/ResourceExpr.java
index 555fdd7..9eb5f36 100644
--- a/compiler/src/main/java/com/android/databinding/expr/ResourceExpr.java
+++ b/compiler/src/main/java/com/android/databinding/expr/ResourceExpr.java
@@ -38,6 +38,9 @@
.put("typedArray", "array")
.build();
+ // lazily initialized
+ private Map<String, ModelClass> mResourceToTypeMapping;
+
protected final String mPackage;
protected final String mResourceType;
@@ -56,63 +59,61 @@
mResourceId = resourceName;
}
+ private Map<String, ModelClass> getResourceToTypeMapping(ModelAnalyzer modelAnalyzer) {
+ if (mResourceToTypeMapping == null) {
+ final Map<String, String> imports = getModel().getImports();
+ mResourceToTypeMapping = ImmutableMap.<String, ModelClass>builder()
+ .put("anim", modelAnalyzer.findClass("android.view.animation.Animation",
+ imports))
+ .put("animator", modelAnalyzer.findClass("android.animation.Animator",
+ imports))
+ .put("colorStateList",
+ modelAnalyzer.findClass("android.content.res.ColorStateList",
+ imports))
+ .put("drawable", modelAnalyzer.findClass("android.graphics.drawable.Drawable",
+ imports))
+ .put("stateListAnimator",
+ modelAnalyzer.findClass("android.animation.StateListAnimator",
+ imports))
+ .put("transition", modelAnalyzer.findClass("android.transition.Transition",
+ imports))
+ .put("typedArray", modelAnalyzer.findClass("android.content.res.TypedArray",
+ imports))
+ .put("interpolator",
+ modelAnalyzer.findClass("android.view.animation.Interpolator", imports))
+ .put("bool", modelAnalyzer.findClass(boolean.class))
+ .put("color", modelAnalyzer.findClass(int.class))
+ .put("dimenOffset", modelAnalyzer.findClass(int.class))
+ .put("dimenSize", modelAnalyzer.findClass(int.class))
+ .put("id", modelAnalyzer.findClass(int.class))
+ .put("integer", modelAnalyzer.findClass(int.class))
+ .put("layout", modelAnalyzer.findClass(int.class))
+ .put("dimen", modelAnalyzer.findClass(float.class))
+ .put("fraction", modelAnalyzer.findClass(float.class))
+ .put("intArray", modelAnalyzer.findClass(int[].class))
+ .put("string", modelAnalyzer.findClass(String.class))
+ .put("stringArray", modelAnalyzer.findClass(String[].class))
+ .build();
+ }
+ return mResourceToTypeMapping;
+ }
+
@Override
protected ModelClass resolveType(ModelAnalyzer modelAnalyzer) {
- String type;
- switch (mResourceType) {
- case "anim":
- type = "android.view.animation.Animation";
- break;
- case "animator":
- type = "android.animation.Animator";
- break;
- case "bool":
- return modelAnalyzer.findClass(boolean.class);
- case "color":
- case "dimenOffset":
- case "dimenSize":
- case "id":
- case "integer":
- case "layout":
- return modelAnalyzer.findClass(int.class);
- case "plurals":
- if (getChildren().isEmpty()) {
- return modelAnalyzer.findClass(int.class);
- } else {
- return modelAnalyzer.findClass(String.class);
- }
- case "colorStateList":
- type = "android.content.res.ColorStateList";
- break;
- case "dimen":
- case "fraction":
- return modelAnalyzer.findClass(float.class);
- case "drawable":
- type = "android.graphics.drawable.Drawable";
- break;
- case "intArray":
- return modelAnalyzer.findClass(int[].class);
- case "interpolator":
- type = "";
- break;
- case "stateListAnimator":
- type = "android.animation.StateListAnimator";
- break;
- case "string":
- return modelAnalyzer.findClass(String.class);
- case "stringArray":
- return modelAnalyzer.findClass(String[].class);
- case "transition":
- type = "android.transition.Transition";
- break;
- case "typedArray":
- type = "android.content.res.TypedArray";
- break;
- default:
- type = mResourceType;
- break;
+ final Map<String, ModelClass> mapping = getResourceToTypeMapping(
+ modelAnalyzer);
+ final ModelClass modelClass = mapping.get(mResourceType);
+ if (modelClass != null) {
+ return modelClass;
}
- return modelAnalyzer.findClass(type, getModel().getImports());
+ if ("plurals".equals(mResourceType)) {
+ if (getChildren().isEmpty()) {
+ return modelAnalyzer.findClass(int.class);
+ } else {
+ return modelAnalyzer.findClass(String.class);
+ }
+ }
+ return modelAnalyzer.findClass(mResourceType, getModel().getImports());
}
@Override
@@ -139,40 +140,38 @@
final String context = "getRoot().getContext()";
final String resources = "getRoot().getResources()";
final String resourceName = mPackage + "R." + getResourceObject() + "." + mResourceId;
- switch (mResourceType) {
- case "anim": return "android.view.animation.AnimationUtils.loadAnimation(" + context + ", " + resourceName + ")";
- case "animator": return "android.animation.AnimatorInflater.loadAnimator(" + context + ", " + resourceName + ")";
- case "bool": return resources + ".getBoolean(" + resourceName + ")";
- case "color": return resources + ".getColor(" + resourceName + ")";
- case "colorStateList": return resources + ".getColorStateList(" + resourceName + ")";
- case "dimen": return resources + ".getDimension(" + resourceName + ")";
- case "dimenOffset": return resources + ".getDimensionPixelOffset(" + resourceName + ")";
- case "dimenSize": return resources + ".getDimensionPixelSize(" + resourceName + ")";
- case "drawable": return resources + ".getDrawable(" + resourceName + ")";
- case "fraction": {
- String base = getChildCode(0, "1");
- String pbase = getChildCode(1, "1");
- return resources + ".getFraction(" + resourceName + ", " + base + ", " + pbase +
- ")";
- }
- case "id": return resourceName;
- case "intArray": return resources + ".getIntArray(" + resourceName + ")";
- case "integer": return resources + ".getInteger(" + resourceName + ")";
- case "interpolator": return "android.view.animation.AnimationUtils.loadInterpolator(" + context + ", " + resourceName + ")";
- case "layout": return resourceName;
- case "plurals": {
- if (getChildren().isEmpty()) {
- return resourceName;
- } else {
- return makeParameterCall(resourceName, "getQuantityString");
- }
- }
- case "stateListAnimator": return "android.animation.AnimatorInflater.loadStateListAnimator(" + context + ", " + resourceName + ")";
- case "string": return makeParameterCall(resourceName, "getString");
- case "stringArray": return resources + ".getStringArray(" + resourceName + ")";
- case "transition": return "android.transition.TransitionInflater.from(" + context + ").inflateTransition(" + resourceName + ")";
- case "typedArray": return resources + ".obtainTypedArray(" + resourceName + ")";
+ if ("anim".equals(mResourceType)) return "android.view.animation.AnimationUtils.loadAnimation(" + context + ", " + resourceName + ")";
+ if ("animator".equals(mResourceType)) return "android.animation.AnimatorInflater.loadAnimator(" + context + ", " + resourceName + ")";
+ if ("bool".equals(mResourceType)) return resources + ".getBoolean(" + resourceName + ")";
+ if ("color".equals(mResourceType)) return resources + ".getColor(" + resourceName + ")";
+ if ("colorStateList".equals(mResourceType)) return resources + ".getColorStateList(" + resourceName + ")";
+ if ("dimen".equals(mResourceType)) return resources + ".getDimension(" + resourceName + ")";
+ if ("dimenOffset".equals(mResourceType)) return resources + ".getDimensionPixelOffset(" + resourceName + ")";
+ if ("dimenSize".equals(mResourceType)) return resources + ".getDimensionPixelSize(" + resourceName + ")";
+ if ("drawable".equals(mResourceType)) return resources + ".getDrawable(" + resourceName + ")";
+ if ("fraction".equals(mResourceType)) {
+ String base = getChildCode(0, "1");
+ String pbase = getChildCode(1, "1");
+ return resources + ".getFraction(" + resourceName + ", " + base + ", " + pbase +
+ ")";
}
+ if ("id".equals(mResourceType)) return resourceName;
+ if ("intArray".equals(mResourceType)) return resources + ".getIntArray(" + resourceName + ")";
+ if ("integer".equals(mResourceType)) return resources + ".getInteger(" + resourceName + ")";
+ if ("interpolator".equals(mResourceType)) return "android.view.animation.AnimationUtils.loadInterpolator(" + context + ", " + resourceName + ")";
+ if ("layout".equals(mResourceType)) return resourceName;
+ if ("plurals".equals(mResourceType)) {
+ if (getChildren().isEmpty()) {
+ return resourceName;
+ } else {
+ return makeParameterCall(resourceName, "getQuantityString");
+ }
+ }
+ if ("stateListAnimator".equals(mResourceType)) return "android.animation.AnimatorInflater.loadStateListAnimator(" + context + ", " + resourceName + ")";
+ if ("string".equals(mResourceType)) return makeParameterCall(resourceName, "getString");
+ if ("stringArray".equals(mResourceType)) return resources + ".getStringArray(" + resourceName + ")";
+ if ("transition".equals(mResourceType)) return "android.transition.TransitionInflater.from(" + context + ").inflateTransition(" + resourceName + ")";
+ if ("typedArray".equals(mResourceType)) return resources + ".obtainTypedArray(" + resourceName + ")";
final String property = Character.toUpperCase(mResourceType.charAt(0)) +
mResourceType.substring(1);
return resources + ".get" + property + "(" + resourceName + ")";
diff --git a/compiler/src/main/java/com/android/databinding/reflection/ModelAnalyzer.java b/compiler/src/main/java/com/android/databinding/reflection/ModelAnalyzer.java
index b0e66c8..0397119 100644
--- a/compiler/src/main/java/com/android/databinding/reflection/ModelAnalyzer.java
+++ b/compiler/src/main/java/com/android/databinding/reflection/ModelAnalyzer.java
@@ -122,6 +122,63 @@
sAnalyzer = annotationAnalyzer;
}
+ /**
+ * Takes a raw className (potentially w/ generics and arrays) and expands definitions using
+ * the import statements.
+ * <p>
+ * For instance, this allows user to define variables
+ * <variable type="User" name="user"/>
+ * if they previously imported User.
+ * <import name="com.example.User"/>
+ */
+ public String applyImports(String className, Map<String, String> imports) {
+ className = className.trim();
+ int numDimensions = 0;
+ String generic = null;
+ // handle array
+ while (className.endsWith("[]")) {
+ numDimensions++;
+ className = className.substring(0, className.length() - 2);
+ }
+ // handle generics
+ final int lastCharIndex = className.length() - 1;
+ if ('>' == className.charAt(lastCharIndex)) {
+ // has generic.
+ int open = className.indexOf('<');
+ if (open == -1) {
+ L.e("un-matching generic syntax for %s", className);
+ return className;
+ }
+ generic = applyImports(className.substring(open + 1, lastCharIndex), imports);
+ className = className.substring(0, open);
+ }
+ int dotIndex = className.indexOf('.');
+ final String qualifier;
+ final String rest;
+ if (dotIndex == -1) {
+ qualifier = className;
+ rest = null;
+ } else {
+ qualifier = className.substring(0, dotIndex);
+ rest = className.substring(dotIndex); // includes dot
+ }
+ final String expandedQualifier = imports.get(qualifier);
+ String result;
+ if (expandedQualifier != null) {
+ result = rest == null ? expandedQualifier : expandedQualifier + rest;
+ } else {
+ result = className; // no change
+ }
+ // now append back dimension and generics
+ if (generic != null) {
+ result = result + "<" + applyImports(generic, imports) + ">";
+ }
+ while (numDimensions-- > 0) {
+ result = result + "[]";
+ }
+ return result;
+ }
+
public String getDefaultValue(String className) {
if ("int".equals(className)) {
return "0";
diff --git a/compiler/src/main/java/com/android/databinding/reflection/SdkUtil.java b/compiler/src/main/java/com/android/databinding/reflection/SdkUtil.java
index 6efe2bd..2031252 100644
--- a/compiler/src/main/java/com/android/databinding/reflection/SdkUtil.java
+++ b/compiler/src/main/java/com/android/databinding/reflection/SdkUtil.java
@@ -72,7 +72,7 @@
private static class ApiChecker {
- private Map<String, Integer> mFullLookup = new HashMap<>();
+ private Map<String, Integer> mFullLookup = new HashMap<String, Integer>();
private Document mDoc;
@@ -116,7 +116,6 @@
String methodDesc = child.getAttributes().getNamedItem("name")
.getNodeValue();
String key = cacheKey(classDesc, methodDesc);
- L.d("adding method lookup %s as %s", key, since);
mFullLookup.put(key, since);
}
}
diff --git a/compiler/src/main/java/com/android/databinding/reflection/annotation/AnnotationAnalyzer.java b/compiler/src/main/java/com/android/databinding/reflection/annotation/AnnotationAnalyzer.java
index d3e32ed..c6e3388 100644
--- a/compiler/src/main/java/com/android/databinding/reflection/annotation/AnnotationAnalyzer.java
+++ b/compiler/src/main/java/com/android/databinding/reflection/annotation/AnnotationAnalyzer.java
@@ -413,7 +413,7 @@
}
private ArrayList<String> splitTemplateParameters(String templateParameters) {
- ArrayList<String> list = new ArrayList<>();
+ ArrayList<String> list = new ArrayList<String>();
int index = 0;
int openCount = 0;
StringBuilder arg = new StringBuilder();
@@ -438,7 +438,7 @@
@Override
public List<URL> getResources(String name) {
- ArrayList<URL> urls = new ArrayList<>();
+ ArrayList<URL> urls = new ArrayList<URL>();
try {
Enumeration<URL> resources = getClass().getClassLoader().getResources(name);
while (resources.hasMoreElements()) {
diff --git a/compiler/src/main/java/com/android/databinding/reflection/annotation/AnnotationClass.java b/compiler/src/main/java/com/android/databinding/reflection/annotation/AnnotationClass.java
index de54044..f345db1 100644
--- a/compiler/src/main/java/com/android/databinding/reflection/annotation/AnnotationClass.java
+++ b/compiler/src/main/java/com/android/databinding/reflection/annotation/AnnotationClass.java
@@ -68,7 +68,7 @@
for (ModelMethod method : getMethods("get", 1)) {
ModelClass parameter = method.getParameterTypes()[0];
if (parameter.isInt() || parameter.isLong()) {
- ArrayList<ModelClass> parameters = new ArrayList<>(1);
+ ArrayList<ModelClass> parameters = new ArrayList<ModelClass>(1);
parameters.add(parameter);
return (AnnotationClass) method.getReturnType(parameters);
}
@@ -92,7 +92,7 @@
if (typeUtil.isSameType(interfaceType, typeUtil.erasure(mTypeMirror))) {
foundInterface = mTypeMirror;
} else {
- ArrayList<TypeMirror> toCheck = new ArrayList<>();
+ ArrayList<TypeMirror> toCheck = new ArrayList<TypeMirror>();
toCheck.add(mTypeMirror);
while (!toCheck.isEmpty()) {
TypeMirror typeMirror = toCheck.remove(0);
@@ -251,7 +251,7 @@
@Override
public ModelMethod[] getMethods(String name, int numParameters) {
- ArrayList<AnnotationMethod> matching = new ArrayList<>();
+ ArrayList<AnnotationMethod> matching = new ArrayList<AnnotationMethod>();
if (mTypeMirror.getKind() == TypeKind.DECLARED) {
DeclaredType declaredType = (DeclaredType) mTypeMirror;
getMethods(declaredType, matching, name, numParameters);
diff --git a/compiler/src/main/java/com/android/databinding/store/LayoutFileParser.java b/compiler/src/main/java/com/android/databinding/store/LayoutFileParser.java
index d13b170..93c5cd9 100644
--- a/compiler/src/main/java/com/android/databinding/store/LayoutFileParser.java
+++ b/compiler/src/main/java/com/android/databinding/store/LayoutFileParser.java
@@ -20,6 +20,7 @@
import com.android.databinding.util.XmlEditor;
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;
@@ -57,9 +58,10 @@
public ResourceBundle.LayoutFileBundle parseXml(File xml, String pkg, int layoutId)
throws ParserConfigurationException, IOException, SAXException,
XPathExpressionException {
- final File original = stripFileAndGetOriginal(xml, "" + layoutId);
+ File original = stripFileAndGetOriginal(xml, "" + layoutId);
if (original == null) {
- return null;
+ L.d("assuming the file is the original for %s", xml.getAbsoluteFile());
+ original = xml;
}
L.d("parsing file %s", xml.getAbsolutePath());
@@ -177,7 +179,7 @@
}
private List<Node> toList(NodeList nodeList) {
- List<Node> result = new ArrayList<>();
+ List<Node> result = new ArrayList<Node>();
for (int i = 0; i < nodeList.getLength(); i ++) {
result.add(nodeList.item(i));
}
@@ -186,8 +188,8 @@
private String getFullViewClassName(String viewName) {
if (viewName.indexOf('.') == -1) {
- if (Objects.equals(viewName, "View") || Objects.equals(viewName, "ViewGroup") ||
- Objects.equals(viewName, "ViewStub")) {
+ if (ObjectUtils.equals(viewName, "View") || ObjectUtils.equals(viewName, "ViewGroup") ||
+ ObjectUtils.equals(viewName, "ViewStub")) {
return "android.view." + viewName;
}
return "android.widget." + viewName;
diff --git a/compiler/src/main/java/com/android/databinding/store/ResourceBundle.java b/compiler/src/main/java/com/android/databinding/store/ResourceBundle.java
index e6faf11..7422e67 100644
--- a/compiler/src/main/java/com/android/databinding/store/ResourceBundle.java
+++ b/compiler/src/main/java/com/android/databinding/store/ResourceBundle.java
@@ -44,7 +44,8 @@
private String mAppPackage;
- private HashMap<String, List<LayoutFileBundle>> mLayoutBundles = new HashMap<>();
+ private HashMap<String, List<LayoutFileBundle>> mLayoutBundles
+ = new HashMap<String, List<LayoutFileBundle>>();
public ResourceBundle(String appPackage) {
mAppPackage = appPackage;
@@ -80,8 +81,8 @@
for (Map.Entry<String, List<LayoutFileBundle>> bundles : multiResLayouts) {
// validate all ids are in correct view types
// and all variables have the same name
- Map<String, String> variableTypes = new HashMap<>();
- Map<String, String> importTypes = new HashMap<>();
+ Map<String, String> variableTypes = new HashMap<String, String>();
+ Map<String, String> importTypes = new HashMap<String, String>();
for (LayoutFileBundle bundle : bundles.getValue()) {
bundle.mHasVariations = true;
@@ -123,9 +124,9 @@
}
}
- Set<String> includeBindingIds = new HashSet<>();
- Set<String> viewBindingIds = new HashSet<>();
- Map<String, String> viewTypes = new HashMap<>();
+ Set<String> includeBindingIds = new HashSet<String>();
+ Set<String> viewBindingIds = new HashSet<String>();
+ Map<String, String> viewTypes = new HashMap<String, String>();
L.d("validating ids for %s", bundles.getKey());
for (LayoutFileBundle bundle : bundles.getValue()) {
for (BindingTargetBundle target : bundle.mBindingTargetBundles) {
@@ -207,15 +208,15 @@
@XmlElement(name="Variables")
@XmlJavaTypeAdapter(NameTypeAdapter.class)
- public Map<String, String> mVariables = new HashMap<>();
+ public Map<String, String> mVariables = new HashMap<String, String>();
@XmlElement(name="Imports")
@XmlJavaTypeAdapter(NameTypeAdapter.class)
- public Map<String, String> mImports = new HashMap<>();
+ public Map<String, String> mImports = new HashMap<String, String>();
@XmlElementWrapper(name="Targets")
@XmlElement(name="Target")
- public List<BindingTargetBundle> mBindingTargetBundles = new ArrayList<>();
+ public List<BindingTargetBundle> mBindingTargetBundles = new ArrayList<BindingTargetBundle>();
// for XML binding
public LayoutFileBundle() {
@@ -317,7 +318,7 @@
public boolean mUsed = true;
@XmlElementWrapper(name="Expressions")
@XmlElement(name="Expression")
- public List<BindingBundle> mBindingBundleList = new ArrayList<>();
+ public List<BindingBundle> mBindingBundleList = new ArrayList<BindingBundle>();
@XmlAttribute(name="include")
public String mIncludedLayout;
private String mInterfaceType;
@@ -420,7 +421,7 @@
@Override
public HashMap<String, String> unmarshal(MarshalledMapType v) throws Exception {
- HashMap<String, String> map = new HashMap<>();
+ HashMap<String, String> map = new HashMap<String, String>();
if (v.entries != null) {
for (MarshalledNameType entry : v.entries) {
map.put(entry.name, entry.type);
@@ -435,7 +436,7 @@
return null;
}
MarshalledMapType marshalled = new MarshalledMapType();
- marshalled.entries = new ArrayList<>();
+ marshalled.entries = new ArrayList<MarshalledNameType>();
for (String name : v.keySet()) {
MarshalledNameType nameType = new MarshalledNameType();
nameType.name = name;
diff --git a/compiler/src/main/java/com/android/databinding/store/SetterStore.java b/compiler/src/main/java/com/android/databinding/store/SetterStore.java
index 77e1e34..fe14b7e 100644
--- a/compiler/src/main/java/com/android/databinding/store/SetterStore.java
+++ b/compiler/src/main/java/com/android/databinding/store/SetterStore.java
@@ -130,7 +130,7 @@
TypeElement declaredOn) {
HashMap<String, MethodDescription> renamed = mStore.renamedMethods.get(attribute);
if (renamed == null) {
- renamed = new HashMap<>();
+ renamed = new HashMap<String, MethodDescription>();
mStore.renamedMethods.put(attribute, renamed);
}
MethodDescription methodDescription =
@@ -142,7 +142,7 @@
HashMap<AccessorKey, MethodDescription> adapters = mStore.adapterMethods.get(attribute);
if (adapters == null) {
- adapters = new HashMap<>();
+ adapters = new HashMap<AccessorKey, MethodDescription>();
mStore.adapterMethods.put(attribute, adapters);
}
List<? extends VariableElement> parameters = bindingMethod.getParameters();
@@ -193,14 +193,14 @@
MethodDescription methodDescription = new MethodDescription(conversionMethod);
HashMap<String, MethodDescription> convertTo = mStore.conversionMethods.get(fromType);
if (convertTo == null) {
- convertTo = new HashMap<>();
+ convertTo = new HashMap<String, MethodDescription>();
mStore.conversionMethods.put(fromType, convertTo);
}
convertTo.put(toType, methodDescription);
}
public void clear(Set<String> classes) {
- ArrayList<AccessorKey> removedAccessorKeys = new ArrayList<>();
+ ArrayList<AccessorKey> removedAccessorKeys = new ArrayList<AccessorKey>();
for (HashMap<AccessorKey, MethodDescription> adapters : mStore.adapterMethods.values()) {
for (AccessorKey key : adapters.keySet()) {
MethodDescription description = adapters.get(key);
@@ -211,7 +211,7 @@
removeFromMap(adapters, removedAccessorKeys);
}
- ArrayList<String> removedRenamed = new ArrayList<>();
+ ArrayList<String> removedRenamed = new ArrayList<String>();
for (HashMap<String, MethodDescription> renamed : mStore.renamedMethods.values()) {
for (String key : renamed.keySet()) {
if (classes.contains(renamed.get(key).type)) {
@@ -221,7 +221,7 @@
removeFromMap(renamed, removedRenamed);
}
- ArrayList<String> removedConversions = new ArrayList<>();
+ ArrayList<String> removedConversions = new ArrayList<String>();
for (HashMap<String, MethodDescription> convertTos : mStore.conversionMethods.values()) {
for (String toType : convertTos.keySet()) {
MethodDescription methodDescription = convertTos.get(toType);
@@ -232,7 +232,7 @@
removeFromMap(convertTos, removedConversions);
}
- ArrayList<String> removedUntaggable = new ArrayList<>();
+ ArrayList<String> removedUntaggable = new ArrayList<String>();
for (String typeName : mStore.untaggableTypes.keySet()) {
if (classes.contains(mStore.untaggableTypes.get(typeName))) {
removedUntaggable.add(typeName);
@@ -334,7 +334,7 @@
private ModelMethod getBestSetter(ModelClass viewType, ModelClass argumentType,
String attribute, Map<String, String> imports) {
- List<String> setterCandidates = new ArrayList<>();
+ List<String> setterCandidates = new ArrayList<String>();
HashMap<String, MethodDescription> renamed = mStore.renamedMethods.get(attribute);
if (renamed != null) {
for (String className : renamed.keySet()) {
@@ -357,7 +357,7 @@
ModelMethod[] methods = viewType.getMethods(name, 1);
ModelClass bestParameterType = null;
- List<ModelClass> args = new ArrayList<>();
+ List<ModelClass> args = new ArrayList<ModelClass>();
args.add(argumentType);
for (ModelMethod method : methods) {
ModelClass[] parameterTypes = method.getParameterTypes();
@@ -626,12 +626,12 @@
private static class IntermediateV1 implements Serializable, Intermediate {
private static final long serialVersionUID = 1;
public final HashMap<String, HashMap<AccessorKey, MethodDescription>> adapterMethods =
- new HashMap<>();
+ new HashMap<String, HashMap<AccessorKey, MethodDescription>>();
public final HashMap<String, HashMap<String, MethodDescription>> renamedMethods =
- new HashMap<>();
+ new HashMap<String, HashMap<String, MethodDescription>>();
public final HashMap<String, HashMap<String, MethodDescription>> conversionMethods =
- new HashMap<>();
- public final HashMap<String, String> untaggableTypes = new HashMap<>();
+ new HashMap<String, HashMap<String, MethodDescription>>();
+ public final HashMap<String, String> untaggableTypes = new HashMap<String, String>();
public IntermediateV1() {
}
diff --git a/compiler/src/main/kotlin/com/android/databinding/util/ParserHelper.kt b/compiler/src/main/kotlin/com/android/databinding/util/ParserHelper.kt
index 9b9cefe..3a898a1 100644
--- a/compiler/src/main/kotlin/com/android/databinding/util/ParserHelper.kt
+++ b/compiler/src/main/kotlin/com/android/databinding/util/ParserHelper.kt
@@ -16,7 +16,7 @@
object ParserHelper {
public fun toClassName(name:String) : String {
- return stripExtension(name).split("[_-]").map { "${it.substring(0,1).toUpperCase()}${it.substring(1)}" }.join("")
+ return stripExtension(name).split("[_-]").map { it.capitalize() }.join("")
}
diff --git a/compiler/src/main/kotlin/com/android/databinding/writer/KCode.kt b/compiler/src/main/kotlin/com/android/databinding/writer/KCode.kt
index 23ce6ca..0456a47 100644
--- a/compiler/src/main/kotlin/com/android/databinding/writer/KCode.kt
+++ b/compiler/src/main/kotlin/com/android/databinding/writer/KCode.kt
@@ -19,6 +19,8 @@
private var sameLine = false
+ private val lineSeparator = System.getProperty("line.separator")
+
class Appendix(val glue : String, val code : KCode)
private val nodes = arrayListOf<Any>()
@@ -141,7 +143,7 @@
is KCode -> {
val childTab = n + (if(it.sameLine) 0 else 1)
if (addedChild || newlineFirstNode) {
- sb.append(System.lineSeparator())
+ sb.append(lineSeparator)
sb.append("${indent(childTab)}")
}
it.toS(childTab, sb)
diff --git a/compiler/src/main/kotlin/com/android/databinding/writer/LayoutBinderWriter.kt b/compiler/src/main/kotlin/com/android/databinding/writer/LayoutBinderWriter.kt
index b4b5986..a832805 100644
--- a/compiler/src/main/kotlin/com/android/databinding/writer/LayoutBinderWriter.kt
+++ b/compiler/src/main/kotlin/com/android/databinding/writer/LayoutBinderWriter.kt
@@ -38,6 +38,7 @@
import com.android.databinding.expr.BracketExpr
import com.android.databinding.reflection.Callable
import com.android.databinding.expr.CastExpr
+import com.android.databinding.reflection.ModelAnalyzer
fun String.stripNonJava() = this.split("[^a-zA-Z0-9]").map{ it.trim() }.joinToCamelCaseAsVar()
@@ -717,7 +718,8 @@
variables.forEach {
if (it.getUserDefinedType() != null) {
tab("@Bindable")
- val type = it.getResolvedType().toJavaCode();
+ //it.getExpandedUserDefinedType(ModelAnalyzer.getInstance());
+ val type = ModelAnalyzer.getInstance().applyImports(it.getUserDefinedType(), model.getImports())
tab("public void ${it.setterName}(${type} ${it.readableUniqueName});")
}
}
diff --git a/compiler/src/test/java/com/android/databinding/MockLayoutBinder.java b/compiler/src/test/java/com/android/databinding/MockLayoutBinder.java
index dcdad42..6ef97d2 100644
--- a/compiler/src/test/java/com/android/databinding/MockLayoutBinder.java
+++ b/compiler/src/test/java/com/android/databinding/MockLayoutBinder.java
@@ -21,4 +21,4 @@
super(new ResourceBundle("com.test"),
new ResourceBundle.LayoutFileBundle("blah.xml", 1, "."));
}
-}
+}
\ No newline at end of file
diff --git a/compiler/src/test/java/com/android/databinding/reflection/java/JavaAnalyzer.java b/compiler/src/test/java/com/android/databinding/reflection/java/JavaAnalyzer.java
index f03d77c..8e6d7f7 100644
--- a/compiler/src/test/java/com/android/databinding/reflection/java/JavaAnalyzer.java
+++ b/compiler/src/test/java/com/android/databinding/reflection/java/JavaAnalyzer.java
@@ -58,7 +58,7 @@
.build();
private static final String BINDABLE_ANNOTATION_NAME = "android.binding.Bindable";
- private HashMap<String, JavaClass> mClassCache = new HashMap<>();
+ private HashMap<String, JavaClass> mClassCache = new HashMap<String, JavaClass>();
private final ClassLoader mClassLoader;
@@ -110,7 +110,7 @@
public Callable findMethod(ModelClass modelClass, String name, List<ModelClass> argClasses,
boolean staticAccess) {
Class klass = ((JavaClass) modelClass).mClass;
- ArrayList<Class> args = new ArrayList<>(argClasses.size());
+ ArrayList<Class> args = new ArrayList<Class>(argClasses.size());
for (int i = 0; i < argClasses.size(); i++) {
args.add(((JavaClass) argClasses.get(i)).mClass);
}
diff --git a/compiler/src/test/java/com/android/databinding/reflection/java/JavaClass.java b/compiler/src/test/java/com/android/databinding/reflection/java/JavaClass.java
index 2ea2d2d..5d7a287 100644
--- a/compiler/src/test/java/com/android/databinding/reflection/java/JavaClass.java
+++ b/compiler/src/test/java/com/android/databinding/reflection/java/JavaClass.java
@@ -199,7 +199,7 @@
@Override
public ModelMethod[] getMethods(String name, int numParameters) {
Method[] methods = mClass.getMethods();
- ArrayList<JavaMethod> matching = new ArrayList<>();
+ ArrayList<JavaMethod> matching = new ArrayList<JavaMethod>();
for (Method method : methods) {
if (method.getName().equals(name) &&
method.getParameterTypes().length == numParameters) {
@@ -211,6 +211,9 @@
@Override
public ModelClass getSuperclass() {
+ if (mClass.getSuperclass() == null) {
+ return null;
+ }
return new JavaClass(mClass.getSuperclass());
}
diff --git a/gradlePlugin/build.gradle b/gradlePlugin/build.gradle
index a12ba47..0579516 100644
--- a/gradlePlugin/build.gradle
+++ b/gradlePlugin/build.gradle
@@ -18,6 +18,9 @@
apply plugin: "kotlin"
apply plugin: 'maven'
+sourceCompatibility = javaTargetCompatibility
+targetCompatibility = javaSourceCompatibility
+
buildscript {
repositories {
mavenCentral()
diff --git a/gradlePlugin/src/main/kotlin/DataBindingProcessLayoutsTask.kt b/gradlePlugin/src/main/kotlin/DataBindingProcessLayoutsTask.kt
new file mode 100644
index 0000000..7732f96
--- /dev/null
+++ b/gradlePlugin/src/main/kotlin/DataBindingProcessLayoutsTask.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.databinding
+
+import org.gradle.api.DefaultTask
+import org.gradle.api.tasks.TaskAction
+import com.android.databinding.LayoutXmlProcessor
+import kotlin.properties.Delegates
+import com.android.databinding.util.Log
+import java.io.File
+
+open class DataBindingProcessLayoutsTask : DefaultTask() {
+ {
+ Log.d {"created data binding task"}
+ }
+ var xmlProcessor: LayoutXmlProcessor by Delegates.notNull()
+ var sdkDir : File by Delegates.notNull()
+ [TaskAction]
+ public fun doIt() {
+ Log.d {"running process layouts task"}
+ xmlProcessor.processResources()
+ xmlProcessor.writeIntermediateFile(sdkDir)
+ }
+}
\ No newline at end of file
diff --git a/gradlePlugin/src/main/kotlin/plugin.kt b/gradlePlugin/src/main/kotlin/plugin.kt
index 5913a55..3741ba9 100644
--- a/gradlePlugin/src/main/kotlin/plugin.kt
+++ b/gradlePlugin/src/main/kotlin/plugin.kt
@@ -52,10 +52,12 @@
import java.io.ByteArrayOutputStream
import org.apache.commons.codec.binary.Base64
import com.android.builder.model.ApiVersion
+import com.android.databinding.util.Log
+import org.gradle.api.Action
class DataBinderPlugin : Plugin<Project> {
- inner class GradleFileWriter(var outputBase : String) : JavaFileWriter {
+ inner class GradleFileWriter(var outputBase: String) : JavaFileWriter {
override fun writeToFile(canonicalName: String, contents: String) {
val f = File("$outputBase/${canonicalName.replaceAll("\\.", "/")}.java")
log("Asked to write to ${canonicalName}. outputting to:${f.getAbsolutePath()}")
@@ -65,28 +67,28 @@
}
var xmlProcessor: LayoutXmlProcessor by Delegates.notNull()
- var project : Project by Delegates.notNull()
+ var project: Project by Delegates.notNull()
- var generatedBinderSrc : File by Delegates.notNull()
+ var generatedBinderSrc: File by Delegates.notNull()
- var generatedBinderOut : File by Delegates.notNull()
+ var generatedBinderOut: File by Delegates.notNull()
- var androidJar : File by Delegates.notNull()
+ var androidJar: File by Delegates.notNull()
- var variantData : ApplicationVariantData by Delegates.notNull()
+ var variantData: ApplicationVariantData by Delegates.notNull()
- var codeGenTargetFolder : File by Delegates.notNull()
+ var codeGenTargetFolder: File by Delegates.notNull()
- var viewBinderSource : File by Delegates.notNull()
+ var viewBinderSource: File by Delegates.notNull()
- var sdkDir : File by Delegates.notNull()
+ var sdkDir: File by Delegates.notNull()
val viewBinderSourceRoot by Delegates.lazy {
File(project.getBuildDir(), "databinder")
}
- var fileWriter : GradleFileWriter by Delegates.notNull()
+ var fileWriter: GradleFileWriter by Delegates.notNull()
val viewBinderCompileOutput by Delegates.lazy { File(viewBinderSourceRoot, "out") }
@@ -102,15 +104,33 @@
log("after eval")
//processDebugResources
variants.forEach { variant ->
-// val preTasks = it.getTasksByName("pre${variant}Build", true)
-// preTasks.forEach {
-// it.doLast (generateAttr)
-// }
val processResTasks = it.getTasksByName("process${variant}Resources", true)
processResTasks.forEach {
- it.doFirst(preprocessLayoutFiles)
- it.doLast(generateIntermediateFile)
+ Log.d { "${it} depends on ${it.getDependsOn()}" }
}
+ project.getTasks().create("processDataBinding${variant}Resources",
+ javaClass<DataBindingProcessLayoutsTask>(),
+ object : Action<DataBindingProcessLayoutsTask> {
+ override fun execute(task: DataBindingProcessLayoutsTask) {
+ task.xmlProcessor = xmlProcessor
+ task.sdkDir = sdkDir
+ processResTasks.forEach {
+ // until we add these as a new source folder,
+ // do it the old way
+
+ // TODO uncomment this and comment below
+ // it.dependsOn(task)
+ it.doFirst(preprocessLayoutFiles)
+ it.doLast(generateIntermediateFile)
+ }
+ processResTasks.forEach {
+ it.getDependsOn().filterNot { it == task }.forEach {
+ Log.d { "adding dependency on ${it} for ${task}" }
+ task.dependsOn(it)
+ }
+ }
+ }
+ });
}
}
}
@@ -123,7 +143,8 @@
val ss = p.getExtensions().getByName("android") as AppExtension
sdkDir = ss.getSdkDirectory()
val minSdkVersion = ss.getDefaultConfig().getMinSdkVersion()
- androidJar = File(ss.getSdkDirectory().getAbsolutePath() + "/platforms/${ss.getCompileSdkVersion()}/android.jar")
+ androidJar = File(ss.getSdkDirectory().getAbsolutePath()
+ + "/platforms/${ss.getCompileSdkVersion()}/android.jar")
log("creating parser!")
log("project build dir:${p.getBuildDir()}")
val clazz = javaClass<ApplicationVariantImpl>()
@@ -152,7 +173,9 @@
log("compile options: ${options.optionMap()}")
viewBinderSource = File(viewBinderSourceRoot.getAbsolutePath() + "/src")
viewBinderSource.mkdirs()
- variantData.registerJavaGeneratingTask(project.task("dataBinderDummySourceGenTask", MethodClosure(this,"dummySourceGenTask" )), File(viewBinderSourceRoot.getAbsolutePath() + "/src/"))
+ variantData.registerJavaGeneratingTask(project.task("dataBinderDummySourceGenTask",
+ MethodClosure(this, "dummySourceGenTask")),
+ File(viewBinderSourceRoot.getAbsolutePath() + "/src/"))
viewBinderCompileOutput.mkdirs()
log("view binder source will be ${viewBinderSource}")
log("adding out dir to input files ${viewBinderCompileOutput}")
@@ -165,21 +188,20 @@
}
inputFiles.add(viewBinderCompileOutput)
dexTask.setInputFiles(inputFiles)
- log("updated dexTask input files ${dexTask.getInputFiles()} vs ${inputFiles} vs dir ${dexTask.getInputDir()}")
dexTask.doFirst(MethodClosure(this, "preDexAnalysis"))
val writerOutBase = codeGenTargetFolder.getAbsolutePath();
fileWriter = GradleFileWriter(writerOutBase)
- return LayoutXmlProcessor(packageName, resourceFolders, fileWriter, minSdkVersion.getApiLevel())
+ return LayoutXmlProcessor(packageName, resourceFolders, fileWriter,
+ minSdkVersion.getApiLevel())
}
-
- fun dummySourceGenTask(o : Any?) {
+ fun dummySourceGenTask(o: Any?) {
System.out.println("running dummySourceGenTask")
}
- fun preDexAnalysis(o : Any?) {
+ fun preDexAnalysis(o: Any?) {
val jCompileTask = variantData.javaCompileTask
val dexTask = variantData.dexTask
log("dex task files: ${dexTask.getInputFiles()} ${dexTask.getInputFiles().javaClass}")
@@ -189,7 +211,6 @@
val cpFiles = arrayListOf<File>()
cpFiles.addAll(dexTask.getInputFiles())
cpFiles.addAll(jCompileTask.getClasspath().getFiles())
- //project.task("compileGenerated", MethodClosure(this, "compileGenerated"))
}
fun preprocessLayoutFiles(o: Any?) {
diff --git a/grammarBuilder/build.gradle b/grammarBuilder/build.gradle
index cd82724..17e9c4b 100644
--- a/grammarBuilder/build.gradle
+++ b/grammarBuilder/build.gradle
@@ -18,7 +18,9 @@
apply plugin: 'application'
apply plugin: 'maven'
-sourceCompatibility = 1.7
+sourceCompatibility = javaTargetCompatibility
+targetCompatibility = javaSourceCompatibility
+
mainClassName = "org.antlr.v4.Tool"
run {
diff --git a/samples/BindingDemo/app/src/main/java/com/android/example/bindingdemo/MainActivity.java b/samples/BindingDemo/app/src/main/java/com/android/example/bindingdemo/MainActivity.java
index dd06cdc..d4a5466 100644
--- a/samples/BindingDemo/app/src/main/java/com/android/example/bindingdemo/MainActivity.java
+++ b/samples/BindingDemo/app/src/main/java/com/android/example/bindingdemo/MainActivity.java
@@ -1,6 +1,7 @@
package com.android.example.bindingdemo;
import android.binding.Bindable;
+import android.binding.BinderBundle;
import android.binding.Observable;
import android.binding.OnPropertyChangedListener;
import android.support.v7.app.ActionBarActivity;
diff --git a/samples/BindingDemo/app/src/main/res/layout/list_item.xml b/samples/BindingDemo/app/src/main/res/layout/list_item.xml
index 607c091..ea0ddd3 100644
--- a/samples/BindingDemo/app/src/main/res/layout/list_item.xml
+++ b/samples/BindingDemo/app/src/main/res/layout/list_item.xml
@@ -40,7 +40,7 @@
android:layout_marginLeft="@dimen/user_name_margin_left"
android:id="@+id/fullname"
android:gravity="center"
- android:text="@{user.name.substring(0,1).toUpperCase() + ". " + user.lastName}"
+ android:text='@{user.name.substring(0,1).toUpperCase() + "." + user.lastName}'
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</android.support.v7.widget.CardView>
\ No newline at end of file
diff --git a/xmlGrammar/build.gradle b/xmlGrammar/build.gradle
index 2489f0e..ea0d5f0 100644
--- a/xmlGrammar/build.gradle
+++ b/xmlGrammar/build.gradle
@@ -3,7 +3,9 @@
apply plugin: 'application'
apply plugin: 'maven'
-sourceCompatibility = 1.5
+sourceCompatibility = javaTargetCompatibility
+targetCompatibility = javaSourceCompatibility
+
mainClassName = "org.antlr.v4.Tool"