summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorYigit Boyar <yboyar@google.com>2019-01-03 22:36:16 -0800
committerYigit Boyar <yboyar@google.com>2019-01-17 23:43:15 +0000
commitcd6f3dc67f30330d78d2315fad38d0789cda1112 (patch)
tree5e7578c2799fa1e839902cba9f37084eb097fe4d /compiler
parentf9c9259388b99c7882d26c16ae614feba162d509 (diff)
downloaddata-binding-cd6f3dc67f30330d78d2315fad38d0789cda1112.tar.gz
Add support for dependency artifact packages
This CL adds a new argument to the compiler args that has the list of packages that are directly accessible. Normally, data binding discovers this automatically from avaiable classes but blaze/bazel makes transitive dependencies available, which makes data binding access them and then break strict deps rules. This new flag is not used by gradle. I've also updated the google3 push script to partial jetify classes since Google3 is jetified in pieces. Bug: 119645762 Test: google3 Change-Id: I0f2d330671b9b046f591a29a6cae0b7b5e4a6096
Diffstat (limited to 'compiler')
-rw-r--r--compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java1
-rw-r--r--compiler/src/main/java/android/databinding/tool/CompilerChef.java44
-rw-r--r--compiler/src/main/java/android/databinding/tool/util/GenerationalClassUtil.kt4
3 files changed, 36 insertions, 13 deletions
diff --git a/compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java b/compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java
index 498801df..41ffe60e 100644
--- a/compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java
+++ b/compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java
@@ -185,6 +185,7 @@ public class ProcessDataBinding extends AbstractProcessor {
try {
mCompilerArgs = CompilerArguments.readFromOptions(processingEnv.getOptions());
L.setDebugLog(mCompilerArgs.getEnableDebugLogs());
+ L.d("processor args: %s", mCompilerArgs);
ScopedException.encodeOutput(mCompilerArgs.getPrintEncodedErrorLogs());
} catch (Throwable t) {
String allParam = processingEnv.getOptions().entrySet().stream().map(
diff --git a/compiler/src/main/java/android/databinding/tool/CompilerChef.java b/compiler/src/main/java/android/databinding/tool/CompilerChef.java
index d93d701d..029fb472 100644
--- a/compiler/src/main/java/android/databinding/tool/CompilerChef.java
+++ b/compiler/src/main/java/android/databinding/tool/CompilerChef.java
@@ -23,14 +23,19 @@ import android.databinding.tool.store.FeatureInfoList;
import android.databinding.tool.store.GenClassInfoLog;
import android.databinding.tool.store.ResourceBundle;
import android.databinding.tool.util.L;
+import android.databinding.tool.util.StringUtils;
import android.databinding.tool.writer.BindingMapperWriter;
import android.databinding.tool.writer.BindingMapperWriterV2;
import android.databinding.tool.writer.JavaFileWriter;
import android.databinding.tool.writer.MergedBindingMapperWriter;
import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
+import com.google.common.base.Splitter;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
import com.squareup.javapoet.JavaFile;
import com.squareup.javapoet.TypeSpec;
+import org.jetbrains.annotations.NotNull;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.TypeElement;
@@ -42,6 +47,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.SortedSet;
import java.util.TreeSet;
import java.util.stream.Collectors;
@@ -189,18 +195,8 @@ public class CompilerChef {
List<String> modulePackages) {
if (compilerArgs.isEnableV2()) {
// figure out which mappers exists as they may not exist for v1 libs.
- Set<String> availableDependencyModules = modulePackages.stream()
- .filter(modulePackage -> {
- if (modulePackage.equals(compilerArgs.getModulePackage())) {
- // I'm not a dependency
- return false;
- }
- String mapper = BindingMapperWriterV2.createMapperQName(modulePackage);
- TypeElement impl = processingEnv
- .getElementUtils()
- .getTypeElement(mapper);
- return impl != null;
- }).distinct().collect(Collectors.toCollection(TreeSet::new));
+ SortedSet<String> availableDependencyModules = getDirectDependencies(
+ processingEnv, compilerArgs, modulePackages);
final boolean generateMapper;
if (compilerArgs.isApp()) {
// generate mapper for apps only if it is not test or enabled for tests.
@@ -244,6 +240,30 @@ public class CompilerChef {
}
}
+ @NotNull
+ private SortedSet<String> getDirectDependencies(
+ ProcessingEnvironment processingEnv,
+ CompilerArguments compilerArgs,
+ List<String> modulePackages) {
+ TreeSet<String> explicitPkgs = compilerArgs.parseDirectDependencyPackages();
+ if (explicitPkgs != null) {
+ // used the value specified by the compiler
+ return Sets.newTreeSet(explicitPkgs);
+ }
+ return modulePackages.stream()
+ .filter(modulePackage -> {
+ if (modulePackage.equals(compilerArgs.getModulePackage())) {
+ // I'm not a dependency
+ return false;
+ }
+ String mapper = BindingMapperWriterV2.createMapperQName(modulePackage);
+ TypeElement impl = processingEnv
+ .getElementUtils()
+ .getTypeElement(mapper);
+ return impl != null;
+ }).distinct().collect(Collectors.toCollection(TreeSet::new));
+ }
+
public boolean useAndroidX() {
return ModelAnalyzer.getInstance().libTypes.getUseAndroidX();
}
diff --git a/compiler/src/main/java/android/databinding/tool/util/GenerationalClassUtil.kt b/compiler/src/main/java/android/databinding/tool/util/GenerationalClassUtil.kt
index eeb2c016..b2fa9368 100644
--- a/compiler/src/main/java/android/databinding/tool/util/GenerationalClassUtil.kt
+++ b/compiler/src/main/java/android/databinding/tool/util/GenerationalClassUtil.kt
@@ -78,11 +78,12 @@ class GenerationalClassUtil constructor(
}
fun write(pkg:String, ext : ExtensionFilter, item: Any) {
+ L.d("writing output file for %s, %s into %s", pkg, ext, outputDir)
try {
Preconditions.checkNotNull(outputDir,
"incremental out directory should be" + " set to aar output directory.")
outputDir!!.mkdirs()
- val outFile = File(outputDir, "$pkg-${ext.ext}")
+ val outFile = File(outputDir, "$pkg${ext.ext}")
if (ext.isJson) {
outFile.bufferedWriter(Charsets.UTF_8).use {
GSON.toJson(item, it)
@@ -94,6 +95,7 @@ class GenerationalClassUtil constructor(
}
}
}
+ L.d("done writing output file %s into %s", pkg, outFile.canonicalPath)
} catch (t : Throwable) {
L.e(t, "cannot write file $pkg $ext")
}