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() + &quot;. &quot; + 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"
 
 
