summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--compilationTests/src/test/java/android/databinding/compilationTest/BaseCompilationTest.java2
-rw-r--r--compilationTests/src/test/java/android/databinding/compilationTest/SimpleCompilationTest.java23
-rw-r--r--compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java4
-rw-r--r--compiler/src/main/java/android/databinding/tool/CompilerChef.java39
-rw-r--r--compiler/src/main/java/android/databinding/tool/expr/ExprModel.java17
-rw-r--r--compiler/src/main/kotlin/android/databinding/tool/writer/DynamicUtilWriter.kt25
-rw-r--r--compiler/src/test/java/android/databinding/SafeUnboxingTest.java38
-rw-r--r--compilerCommon/src/main/java/android/databinding/tool/DataBindingBuilder.java1
-rw-r--r--gradlePlugin/src/main/java/android/databinding/tool/DataBindingExcludeGeneratedTask.java1
-rw-r--r--integration-tests/IndependentLibrary/app/src/main/res/layout/included_in_app_from_library.xml2
11 files changed, 38 insertions, 116 deletions
diff --git a/README.md b/README.md
index db313fe6..e25391d9 100644
--- a/README.md
+++ b/README.md
@@ -62,7 +62,7 @@ Now you can open extensions in Android Studio.
## Running Android Gradle Plugin Data Binding Tests
Some of data binding tests are only in AGP. To run them:
-`gw :base:build-system:integration-test:application:te -D:base:build-system:integration-test:application:test.single=DataBinding\*`
+`gw :base:build-system:integration-test:databinding:te`
### Running Integration Tests
These are run by gradle build.
diff --git a/compilationTests/src/test/java/android/databinding/compilationTest/BaseCompilationTest.java b/compilationTests/src/test/java/android/databinding/compilationTest/BaseCompilationTest.java
index 16c53986..54e3bb96 100644
--- a/compilationTests/src/test/java/android/databinding/compilationTest/BaseCompilationTest.java
+++ b/compilationTests/src/test/java/android/databinding/compilationTest/BaseCompilationTest.java
@@ -77,7 +77,7 @@ public class BaseCompilationTest {
public TemporaryBuildFolder tmpBuildFolder =
new TemporaryBuildFolder(new File("./build", "build-test"), false);
- private final boolean mEnableV2;
+ protected final boolean mEnableV2;
File testFolder;
diff --git a/compilationTests/src/test/java/android/databinding/compilationTest/SimpleCompilationTest.java b/compilationTests/src/test/java/android/databinding/compilationTest/SimpleCompilationTest.java
index bdf780fa..2c64c283 100644
--- a/compilationTests/src/test/java/android/databinding/compilationTest/SimpleCompilationTest.java
+++ b/compilationTests/src/test/java/android/databinding/compilationTest/SimpleCompilationTest.java
@@ -350,29 +350,6 @@ public class SimpleCompilationTest extends BaseCompilationTest {
"and cannot be assigned.", ex.getBareMessage());
}
- @SuppressWarnings("deprecated")
- @Test
- public void testDynamicUtilMembers() throws Throwable {
- prepareProject();
- CompilationResult result = runGradle("assembleDebug");
- assertEquals(result.error, 0, result.resultCode);
- assertTrue("there should not be any errors " + result.error,
- StringUtils.isEmpty(result.error));
- assertTrue("Test sanity, should compile fine",
- result.resultContainsText("BUILD SUCCESSFUL"));
- File classFile = new File(testFolder,
- "app/build/intermediates/classes/debug/android/databinding/DynamicUtil.class");
- assertTrue(classFile.exists());
-
- File root = new File(testFolder, "app/build/intermediates/classes/debug/");
- URL[] urls = new URL[] {root.toURL()};
- ClassLoader classLoader = new URLClassLoader(urls,
- SimpleCompilationTest.class.getClassLoader());
- Class dynamicUtilClass = classLoader.loadClass("android.databinding.DynamicUtil");
- // ensure it is generated.
- MatcherAssert.assertThat(dynamicUtilClass, CoreMatchers.notNullValue());
- }
-
@Test
public void testDependantDoesNotExist() throws Throwable {
prepareProject();
diff --git a/compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java b/compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java
index 0a9863e2..13ca86f7 100644
--- a/compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java
+++ b/compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java
@@ -127,10 +127,6 @@ public class ProcessDataBinding extends AbstractProcessor {
chef.addBRVariables(processBindable);
mChef = chef;
considerWritingMapper();
- if (mCompilerArgs.isApp() != mCompilerArgs.isTestVariant() ||
- mCompilerArgs.isEnabledForTests()) {
- mChef.writeDynamicUtil();
- }
}
private void considerWritingMapper() {
diff --git a/compiler/src/main/java/android/databinding/tool/CompilerChef.java b/compiler/src/main/java/android/databinding/tool/CompilerChef.java
index 24ee1454..363b2b0a 100644
--- a/compiler/src/main/java/android/databinding/tool/CompilerChef.java
+++ b/compiler/src/main/java/android/databinding/tool/CompilerChef.java
@@ -13,24 +13,18 @@
package android.databinding.tool;
-import android.databinding.tool.expr.ExprModel;
import android.databinding.tool.processing.Scope;
import android.databinding.tool.processing.ScopedException;
import android.databinding.tool.reflection.InjectedClass;
-import android.databinding.tool.reflection.InjectedMethod;
import android.databinding.tool.reflection.ModelAnalyzer;
-import android.databinding.tool.reflection.ModelClass;
import android.databinding.tool.store.GenClassInfoLog;
import android.databinding.tool.store.ResourceBundle;
import android.databinding.tool.util.L;
-import android.databinding.tool.util.Preconditions;
import android.databinding.tool.writer.BRWriter;
import android.databinding.tool.writer.BindingMapperWriter;
import android.databinding.tool.writer.BindingMapperWriterV2;
-import android.databinding.tool.writer.DynamicUtilWriter;
import android.databinding.tool.writer.JavaFileWriter;
import android.databinding.tool.writer.MergedBindingMapperWriter;
-
import com.squareup.javapoet.JavaFile;
import com.squareup.javapoet.TypeSpec;
@@ -39,7 +33,6 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
-import java.util.Map;
import java.util.Set;
/**
@@ -90,7 +83,6 @@ public class CompilerChef {
chef.mResourceBundle.validateMultiResLayouts();
chef.mEnableV2 = compilerArgs.isEnableV2();
chef.pushClassesToAnalyzer();
- chef.pushDynamicUtilToAnalyzer();
return chef;
}
@@ -166,20 +158,6 @@ public class CompilerChef {
}
}
- public static InjectedClass pushDynamicUtilToAnalyzer() {
- InjectedClass injectedClass = new InjectedClass("android.databinding.DynamicUtil",
- "java.lang.Object");
- for (Map.Entry<Class, Class> entry : ModelClass.BOX_MAPPING.entrySet()) {
- injectedClass.addMethod(new InjectedMethod(injectedClass, true,
- ExprModel.SAFE_UNBOX_METHOD_NAME, null, entry.getKey().getCanonicalName(),
- entry.getValue().getCanonicalName()));
- }
-
- ModelAnalyzer analyzer = ModelAnalyzer.getInstance();
- analyzer.injectClass(injectedClass);
- return injectedClass;
- }
-
public void writeDataBinderMapper(DataBindingCompilerArgs compilerArgs, BRWriter brWriter,
List<String> modulePackages) {
if (compilerArgs.isEnableV2()) {
@@ -265,23 +243,6 @@ public class CompilerChef {
}
}
- public void writeDynamicUtil() {
- DynamicUtilWriter dynamicUtil = new DynamicUtilWriter();
- // TODO: Replace this with targetSDK check from plugin
- ModelClass versionCodes = ModelAnalyzer.getInstance().findClass(
- "android.os.Build.VERSION_CODES", null);
- Preconditions.checkNotNull(versionCodes, "Could not find compile SDK");
- int compileVersion = 1;
- for (int i = VERSION_CODES.length - 1; i >= 0; i--) {
- if (versionCodes.findGetterOrField(VERSION_CODES[i], true) != null) {
- compileVersion = i + 1;
- break;
- }
- }
- mFileWriter.writeToFile("android.databinding.DynamicUtil",
- dynamicUtil.write(compileVersion).generate());
- }
-
/**
* Adds variables to list of Bindables.
*/
diff --git a/compiler/src/main/java/android/databinding/tool/expr/ExprModel.java b/compiler/src/main/java/android/databinding/tool/expr/ExprModel.java
index 0464aa91..53ed1e7d 100644
--- a/compiler/src/main/java/android/databinding/tool/expr/ExprModel.java
+++ b/compiler/src/main/java/android/databinding/tool/expr/ExprModel.java
@@ -43,7 +43,6 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
public class ExprModel {
- static final String DYNAMIC_UTIL = "android.databinding.DynamicUtil";
public static final String SAFE_UNBOX_METHOD_NAME = "safeUnbox";
Map<String, Expr> mExprMap = new HashMap<String, Expr>();
@@ -210,12 +209,6 @@ public class ExprModel {
return register(new ViewFieldExpr(bindingTarget));
}
- public IdentifierExpr dynamicUtil() {
- IdentifierExpr dynamicUtil = staticIdentifier(DYNAMIC_UTIL);
- dynamicUtil.setUserDefinedType(DYNAMIC_UTIL);
- return dynamicUtil;
- }
-
public IdentifierExpr viewDataBinding() {
IdentifierExpr viewDataBinding = staticIdentifier(ModelAnalyzer.VIEW_DATA_BINDING);
viewDataBinding.setUserDefinedType(ModelAnalyzer.VIEW_DATA_BINDING);
@@ -224,9 +217,9 @@ public class ExprModel {
public MethodCallExpr safeUnbox(Expr expr) {
ModelClass resolvedType = expr.getResolvedType();
- Preconditions.check(resolvedType.unbox() != resolvedType, ErrorMessages.CANNOT_UNBOX_TYPE,
- resolvedType);
- MethodCallExpr methodCallExpr = methodCall(dynamicUtil(), SAFE_UNBOX_METHOD_NAME,
+ Preconditions.check(resolvedType.unbox() != resolvedType,
+ ErrorMessages.CANNOT_UNBOX_TYPE, resolvedType);
+ MethodCallExpr methodCallExpr = methodCall(viewDataBinding(), SAFE_UNBOX_METHOD_NAME,
Collections.singletonList(expr));
methodCallExpr.setAllowProtected();
for (Location location : expr.getLocations()) {
@@ -239,14 +232,14 @@ public class ExprModel {
* These are global methods in the expressions.
* <p>
* To keep this list under control, we validate the method name instead of just resolving to
- * DynamicUtil or parent.
+ * parent.
*/
public Expr globalMethodCall(String methodName, List<Expr> args) {
Preconditions.check(SAFE_UNBOX_METHOD_NAME.equals(methodName),
ErrorMessages.CANNOT_FIND_METHOD_ON_OWNER, methodName, "ViewDataBinding");
Preconditions.check(args.size() == 1,
ErrorMessages.ARGUMENT_COUNT_MISMATCH, 1, args.size());
- MethodCallExpr expr = methodCall(dynamicUtil(), SAFE_UNBOX_METHOD_NAME, args);
+ MethodCallExpr expr = methodCall(viewDataBinding(), SAFE_UNBOX_METHOD_NAME, args);
expr.setAllowProtected();
return expr;
}
diff --git a/compiler/src/main/kotlin/android/databinding/tool/writer/DynamicUtilWriter.kt b/compiler/src/main/kotlin/android/databinding/tool/writer/DynamicUtilWriter.kt
deleted file mode 100644
index d349f95c..00000000
--- a/compiler/src/main/kotlin/android/databinding/tool/writer/DynamicUtilWriter.kt
+++ /dev/null
@@ -1,25 +0,0 @@
-package android.databinding.tool.writer;
-
-import android.databinding.tool.expr.ExprModel
-import android.databinding.tool.reflection.ModelAnalyzer
-import android.databinding.tool.reflection.ModelClass
-
-@Suppress("UNUSED_PARAMETER") // TODO remove in a followup CL, this class is not used anymore.
-class DynamicUtilWriter {
- fun write(targetSdk : kotlin.Int) : KCode = kcode("package android.databinding;") {
- nl("")
- nl("import android.os.Build.VERSION;")
- nl("import android.os.Build.VERSION_CODES;")
- nl("import android.databinding.BindingConversion;")
- nl("")
- annotateWithGenerated()
- block("public class DynamicUtil") {
- val analyzer = ModelAnalyzer.getInstance();
- ModelClass.UNBOX_MAPPING.forEach {
- block("public static ${it.value.simpleName} ${ExprModel.SAFE_UNBOX_METHOD_NAME}(${it.key.canonicalName} boxed)") {
- nl("return boxed == null ? ${analyzer.getDefaultValue(it.value.simpleName)} : (${it.value.canonicalName})boxed;");
- }
- }
- }
- }
-}
diff --git a/compiler/src/test/java/android/databinding/SafeUnboxingTest.java b/compiler/src/test/java/android/databinding/SafeUnboxingTest.java
index 9a2cf438..5186ba53 100644
--- a/compiler/src/test/java/android/databinding/SafeUnboxingTest.java
+++ b/compiler/src/test/java/android/databinding/SafeUnboxingTest.java
@@ -19,32 +19,53 @@ package android.databinding;
import android.databinding.tool.CompilerChef;
import android.databinding.tool.LayoutBinder;
import android.databinding.tool.MockLayoutBinder;
-import android.databinding.tool.expr.*;
+import android.databinding.tool.expr.BitShiftExpr;
+import android.databinding.tool.expr.BracketExpr;
+import android.databinding.tool.expr.CastExpr;
+import android.databinding.tool.expr.ComparisonExpr;
+import android.databinding.tool.expr.Expr;
+import android.databinding.tool.expr.ExprModel;
+import android.databinding.tool.expr.MathExpr;
+import android.databinding.tool.expr.MethodCallExpr;
+import android.databinding.tool.expr.TernaryExpr;
+import android.databinding.tool.expr.UnaryExpr;
import android.databinding.tool.reflection.InjectedClass;
import android.databinding.tool.reflection.InjectedMethod;
import android.databinding.tool.reflection.ModelAnalyzer;
+import android.databinding.tool.reflection.ModelClass;
import android.databinding.tool.reflection.java.JavaAnalyzer;
+import org.junit.Before;
+import org.junit.Test;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import java.util.Map;
public class SafeUnboxingTest {
ExprModel mExprModel;
LayoutBinder mLayoutBinder;
- IdentifierExpr mDynamicUtil;
@Before
- public void setUp() throws Exception {
+ public void setUp() {
JavaAnalyzer.initForTests();
mLayoutBinder = new MockLayoutBinder();
mExprModel = mLayoutBinder.getModel();
- mDynamicUtil = mExprModel.dynamicUtil();
- CompilerChef.pushDynamicUtilToAnalyzer();
+ createFakeViewDataBinding();
+ }
+
+ private void createFakeViewDataBinding() {
+ InjectedClass injectedClass = new InjectedClass("android.databinding.ViewDataBinding",
+ "java.lang.Object");
+ for (Map.Entry<Class, Class> entry : ModelClass.BOX_MAPPING.entrySet()) {
+ injectedClass.addMethod(new InjectedMethod(injectedClass, true,
+ ExprModel.SAFE_UNBOX_METHOD_NAME, null, entry.getKey().getCanonicalName(),
+ entry.getValue().getCanonicalName()));
+ }
+
+ ModelAnalyzer analyzer = ModelAnalyzer.getInstance();
+ analyzer.injectClass(injectedClass);
}
@Test
@@ -482,7 +503,6 @@ public class SafeUnboxingTest {
assertThat(methodCallExpr.getResolvedType().getCanonicalName(), is(replacementReturn));
assertThat(methodCallExpr.getArgs().get(0), is(original));
assertThat(methodCallExpr.getArgs().size(), is(1));
- assertThat(methodCallExpr.getTarget(), is(mDynamicUtil));
}
private <T extends Expr> T parse(String input) {
diff --git a/compilerCommon/src/main/java/android/databinding/tool/DataBindingBuilder.java b/compilerCommon/src/main/java/android/databinding/tool/DataBindingBuilder.java
index 8e0aa78b..62a801c6 100644
--- a/compilerCommon/src/main/java/android/databinding/tool/DataBindingBuilder.java
+++ b/compilerCommon/src/main/java/android/databinding/tool/DataBindingBuilder.java
@@ -133,7 +133,6 @@ public class DataBindingBuilder {
for (String pkg : getBRFilePackages(dataBindingCompilerBuildFolder)) {
excludes.add(pkg.replace('.', '/') + "/BR.*");
}
- excludes.add("android/databinding/DynamicUtil.class");
if (generatedClassListFile != null) {
List<String> generatedClasses = readGeneratedClasses(generatedClassListFile);
for (String klass : generatedClasses) {
diff --git a/gradlePlugin/src/main/java/android/databinding/tool/DataBindingExcludeGeneratedTask.java b/gradlePlugin/src/main/java/android/databinding/tool/DataBindingExcludeGeneratedTask.java
index f311513b..a58d97af 100644
--- a/gradlePlugin/src/main/java/android/databinding/tool/DataBindingExcludeGeneratedTask.java
+++ b/gradlePlugin/src/main/java/android/databinding/tool/DataBindingExcludeGeneratedTask.java
@@ -88,7 +88,6 @@ public class DataBindingExcludeGeneratedTask extends DefaultTask {
exclude(EXCLUDE_PATTERN);
if (isLibrary) {
exclude(appPkgAsClass + "/BR.*");
- exclude("android/databinding/DynamicUtil.class");
List<String> generatedClasses = readGeneratedClasses();
for (String klass : generatedClasses) {
exclude(klass.replace('.', '/') + ".class");
diff --git a/integration-tests/IndependentLibrary/app/src/main/res/layout/included_in_app_from_library.xml b/integration-tests/IndependentLibrary/app/src/main/res/layout/included_in_app_from_library.xml
index c7ee78d2..06c83bea 100644
--- a/integration-tests/IndependentLibrary/app/src/main/res/layout/included_in_app_from_library.xml
+++ b/integration-tests/IndependentLibrary/app/src/main/res/layout/included_in_app_from_library.xml
@@ -20,10 +20,12 @@
<data>
<variable name="foo" type="String"/>
<variable name="foo2" type="int"/>
+ <variable name="fooInteger" type="Integer"/>
</data>
<RelativeLayout android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:text='@{foo2 + " " + foo}' android:layout_width="wrap_content"
+ android:textSize="@{safeUnbox(fooInteger)}"
android:layout_height="wrap_content"/>
</RelativeLayout>