diff options
author | Googler <noreply@google.com> | 2017-02-17 02:11:16 +0000 |
---|---|---|
committer | Dmitry Lomov <dslomov@google.com> | 2017-02-17 14:54:17 +0000 |
commit | cbca207285f13945f6853357c8395f3c25ed4cac (patch) | |
tree | 930c9e6e22fdc97a4b2dd38117fd31abb7ce966b /src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java | |
parent | ae634640dcea09c10dba1f21daa4603221e5bcc9 (diff) |
Guard incremental dexing of lite protos in android builds with flag
--
PiperOrigin-RevId: 147793223
MOS_MIGRATED_REVID=147793223
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java index ebd734bb45..5ffd0fa70a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java @@ -104,10 +104,12 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu private static final String ASPECT_DEXBUILDER_PREREQ = "$dex_archive_dexbuilder"; /** Aspect-only label for desugaring executable, to avoid name clashes with labels on rules. */ private static final String ASPECT_DESUGAR_PREREQ = "$aspect_desugar"; + private static final ImmutableList<String> TRANSITIVE_ATTRIBUTES_EXCEPT_FOR_PROTOS = + ImmutableList.of("deps", "exports", "runtime_deps"); private static final ImmutableList<String> TRANSITIVE_ATTRIBUTES = - ImmutableList.of("deps", "exports", "runtime_deps", + ImmutableList.<String>builder().addAll(TRANSITIVE_ATTRIBUTES_EXCEPT_FOR_PROTOS) // To get from proto_library through proto_lang_toolchain rule to proto runtime library. - JavaLiteProtoAspect.PROTO_TOOLCHAIN_ATTR, "runtime"); + .add(JavaLiteProtoAspect.PROTO_TOOLCHAIN_ATTR, "runtime").build(); private final String toolsRepository; @@ -215,14 +217,15 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu } AndroidRuntimeJarProvider.Builder desugaredJars = new AndroidRuntimeJarProvider.Builder() .addTransitiveProviders(collectPrerequisites(ruleContext, AndroidRuntimeJarProvider.class)); - if (isProtoLibrary(ruleContext)) { + if (isProtoLibrary(ruleContext) + && getAndroidConfig(ruleContext).incrementalDexingForLiteProtos()) { // TODO(b/33557068): Desugar protos if needed instead of assuming they don't need desugaring result.addProvider(desugaredJars.build()); return Functions.identity(); } JavaRuntimeJarProvider jarProvider = base.getProvider(JavaRuntimeJarProvider.class); - if (jarProvider != null) { + if (jarProvider != null && !isProtoLibrary(ruleContext)) { // These are all transitive hjars of dependencies and hjar of the jar itself NestedSet<Artifact> compileTimeClasspath = getJavaCompilationArgsProvider(base, ruleContext) @@ -245,7 +248,8 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu private static Iterable<Artifact> getProducedRuntimeJars(ConfiguredTarget base, RuleContext ruleContext) { - if (isProtoLibrary(ruleContext)) { + if (isProtoLibrary(ruleContext) + && getAndroidConfig(ruleContext).incrementalDexingForLiteProtos()) { JavaCompilationArgsAspectProvider javaProtos = base.getProvider(JavaCompilationArgsAspectProvider.class); if (javaProtos != null && !ruleContext.getPrerequisites("srcs", Mode.TARGET).isEmpty()) { @@ -285,8 +289,10 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu private static <T extends TransitiveInfoProvider> IterablesChain<T> collectPrerequisites( RuleContext ruleContext, Class<T> classType) { + ImmutableList<String> attrs = getAndroidConfig(ruleContext).incrementalDexingForLiteProtos() + ? TRANSITIVE_ATTRIBUTES : TRANSITIVE_ATTRIBUTES_EXCEPT_FOR_PROTOS; IterablesChain.Builder<T> result = IterablesChain.builder(); - for (String attr : TRANSITIVE_ATTRIBUTES) { + for (String attr : attrs) { if (ruleContext.attributes().getAttributeType(attr) != null) { result.add(ruleContext.getPrerequisites(attr, Mode.TARGET, classType)); } |