diff options
author | Yigit Boyar <yboyar@google.com> | 2019-01-03 22:36:16 -0800 |
---|---|---|
committer | Yigit Boyar <yboyar@google.com> | 2019-01-17 23:43:15 +0000 |
commit | cd6f3dc67f30330d78d2315fad38d0789cda1112 (patch) | |
tree | 5e7578c2799fa1e839902cba9f37084eb097fe4d /compiler | |
parent | f9c9259388b99c7882d26c16ae614feba162d509 (diff) | |
download | data-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')
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") } |