diff options
author | 2018-04-13 01:46:09 -0700 | |
---|---|---|
committer | 2018-04-13 01:47:45 -0700 | |
commit | afc490381806ba66910d37b606a98818083ba36f (patch) | |
tree | 34446926799158a144d8535bcedc432c0e361551 /src/main/java/com | |
parent | 1f748cb37d7107af2a83bc2f9d63d2ffa19767e7 (diff) |
Remove JavaRuntimeJarProvider.
PiperOrigin-RevId: 192736049
Diffstat (limited to 'src/main/java/com')
10 files changed, 56 insertions, 78 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index faf5ea0054..d1a4f2b1dc 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD @@ -853,7 +853,6 @@ java_library( "rules/java/JavaRuntime.java", "rules/java/JavaRuntimeAlias.java", "rules/java/JavaRuntimeClasspathProvider.java", - "rules/java/JavaRuntimeJarProvider.java", "rules/java/JavaRuntimeRule.java", "rules/java/JavaRuntimeSuite.java", "rules/java/JavaRuntimeSuiteRule.java", diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java index 74264b7f88..5cd4f0f123 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java @@ -40,7 +40,6 @@ import com.google.devtools.build.lib.rules.java.JavaConfiguration.ImportDepsChec import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider; import com.google.devtools.build.lib.rules.java.JavaRuntimeInfo; -import com.google.devtools.build.lib.rules.java.JavaRuntimeJarProvider; import com.google.devtools.build.lib.rules.java.JavaSemantics; import com.google.devtools.build.lib.rules.java.JavaSkylarkApiProvider; import com.google.devtools.build.lib.rules.java.JavaToolchainProvider; @@ -181,6 +180,7 @@ public class AarImport implements RuleConfiguredTargetFactory { JavaInfo.Builder javaInfoBuilder = JavaInfo.Builder.create() + .setRuntimeJars(ImmutableList.of(mergedJar)) .addProvider(JavaCompilationArgsProvider.class, javaCompilationArgsProvider) .addProvider(JavaRuleOutputJarsProvider.class, jarProviderBuilder.build()); @@ -196,8 +196,6 @@ public class AarImport implements RuleConfiguredTargetFactory { .addNativeDeclaredProvider( new AndroidNativeLibsInfo( AndroidCommon.collectTransitiveNativeLibs(ruleContext).add(nativeLibs).build())) - .addProvider( - JavaRuntimeJarProvider.class, new JavaRuntimeJarProvider(ImmutableList.of(mergedJar))) .addNativeDeclaredProvider(javaInfoBuilder.build()); if (depsCheckerResult != null) { // Add the deps check result so that we can unit test it. diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java index 8c638aa3c9..8299b129da 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java @@ -60,7 +60,6 @@ import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaPluginInfoProvider; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar; -import com.google.devtools.build.lib.rules.java.JavaRuntimeJarProvider; import com.google.devtools.build.lib.rules.java.JavaSemantics; import com.google.devtools.build.lib.rules.java.JavaSkylarkApiProvider; import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider; @@ -728,6 +727,7 @@ public class AndroidCommon { .addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) .addProvider(JavaSourceJarsProvider.class, sourceJarsProvider) .addProvider(JavaPluginInfoProvider.class, JavaCommon.getTransitivePlugins(ruleContext)) + .setRuntimeJars(javaCommon.getJavaCompilationArtifacts().getRuntimeJars()) .setNeverlink(isNeverlink) .build(); @@ -738,9 +738,6 @@ public class AndroidCommon { .addSkylarkTransitiveInfo( JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext()) .addNativeDeclaredProvider(javaInfo) - .addProvider( - JavaRuntimeJarProvider.class, - new JavaRuntimeJarProvider(javaCommon.getJavaCompilationArtifacts().getRuntimeJars())) .addProvider(RunfilesProvider.class, RunfilesProvider.simple(getRunfiles())) .addNativeDeclaredProvider(resourceInfo) .addProvider( diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java index 8e569e1f89..953f413af5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java @@ -26,7 +26,6 @@ import com.google.devtools.build.lib.packages.NativeAspectClass; import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.rules.java.JavaCommon; import com.google.devtools.build.lib.rules.java.JavaInfo; -import com.google.devtools.build.lib.rules.java.JavaRuntimeJarProvider; import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData; import java.util.ArrayList; import java.util.List; @@ -72,10 +71,9 @@ public class AndroidNeverlinkAspect extends NativeAspectClass implements Configu AndroidCommon.collectTransitiveNeverlinkLibraries( ruleContext, deps, - ctadBase - .getConfiguredTarget() - .getProvider(JavaRuntimeJarProvider.class) - .getRuntimeJars()))) + JavaInfo.getJavaInfo(ctadBase + .getConfiguredTarget()) + .getDirectRuntimeJars()))) .build(); } 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 93d1709505..900ab8b80f 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 @@ -59,7 +59,6 @@ import com.google.devtools.build.lib.rules.java.JavaCommon; import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; import com.google.devtools.build.lib.rules.java.JavaCompilationInfoProvider; import com.google.devtools.build.lib.rules.java.JavaInfo; -import com.google.devtools.build.lib.rules.java.JavaRuntimeJarProvider; import com.google.devtools.build.lib.rules.java.proto.JavaProtoAspectCommon; import com.google.devtools.build.lib.rules.java.proto.JavaProtoLibraryAspectProvider; import com.google.devtools.build.lib.rules.proto.ProtoLangToolchainProvider; @@ -126,7 +125,6 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu public AspectDefinition getDefinition(AspectParameters params) { AspectDefinition.Builder result = new AspectDefinition.Builder(this) - // We care about JavaRuntimeJarProvider, but rules don't advertise that provider. .requireSkylarkProviders(SkylarkProviderIdentifier.forKey(JavaInfo.PROVIDER.getKey())) .requireProviderSets( ImmutableList.of( @@ -222,9 +220,9 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu } /** - * Runs Jars in {@link JavaRuntimeJarProvider} through desugaring action if flag is set and adds - * the result to {@code result}. Note that this cannot happen in a separate aspect because aspects - * don't see providers added by other aspects executed on the same target. + * Runs Jars in {@link JavaInfo#getDirectRuntimeJars()} through desugaring action if flag is set + * and adds the result to {@code result}. Note that this cannot happen in a separate aspect + * because aspects don't see providers added by other aspects executed on the same target. */ private Function<Artifact, Artifact> desugarJarsIfRequested( ConfiguredTarget base, RuleContext ruleContext, ConfiguredAspect.Builder result) { @@ -246,8 +244,8 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu return Functions.identity(); } - JavaRuntimeJarProvider jarProvider = base.getProvider(JavaRuntimeJarProvider.class); - if (jarProvider != null) { + JavaInfo javaInfo = JavaInfo.getJavaInfo(base); + if (javaInfo != null) { // These are all transitive hjars of dependencies and hjar of the jar itself NestedSet<Artifact> compileTimeClasspath = getJavaCompilationArgsProvider(base, ruleContext) @@ -256,8 +254,9 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu // For android_* targets we need to honor their bootclasspath (nicer in general to do so) ImmutableList<Artifact> bootclasspath = getBootclasspath(base, ruleContext); - boolean basenameClash = checkBasenameClash(jarProvider.getRuntimeJars()); - for (Artifact jar : jarProvider.getRuntimeJars()) { + + boolean basenameClash = checkBasenameClash(javaInfo.getDirectRuntimeJars()); + for (Artifact jar : javaInfo.getDirectRuntimeJars()) { Artifact desugared = createDesugarAction( ruleContext, basenameClash, jar, bootclasspath, compileTimeClasspath); @@ -281,9 +280,9 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu } } } else { - JavaRuntimeJarProvider jarProvider = base.getProvider(JavaRuntimeJarProvider.class); - if (jarProvider != null) { - return jarProvider.getRuntimeJars(); + JavaInfo javaInfo = JavaInfo.getJavaInfo(base); + if (javaInfo != null) { + return javaInfo.getDirectRuntimeJars(); } } return null; diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java index 0ff1762470..a4c3d9628a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java @@ -168,6 +168,7 @@ public class JavaImport implements RuleConfiguredTargetFactory { .addProvider(JavaCompilationArgsProvider.class, compilationArgsProvider) .addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) .addProvider(JavaSourceJarsProvider.class, sourceJarsProvider) + .setRuntimeJars(javaArtifacts.getRuntimeJars()) .setNeverlink(neverLink) .build(); return ruleBuilder @@ -175,9 +176,6 @@ public class JavaImport implements RuleConfiguredTargetFactory { .addSkylarkTransitiveInfo( JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext()) .addNativeDeclaredProvider(javaInfo) - .add( - JavaRuntimeJarProvider.class, - new JavaRuntimeJarProvider(javaArtifacts.getRuntimeJars())) .add(RunfilesProvider.class, RunfilesProvider.simple(runfiles)) .addNativeDeclaredProvider(new CcLinkParamsInfo(ccLinkParamsStore)) .add( diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java index 33ef7f8a36..24ea6be658 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java @@ -297,6 +297,17 @@ public final class JavaInfo extends NativeInfo { private final TransitiveInfoProviderMap providers; + /* + * Contains the .jar files to be put on the runtime classpath by the configured target. + * <p>Unlike {@link JavaCompilationArgs#getRuntimeJars()}, it does not contain transitive runtime + * jars, only those produced by the configured target itself. + * + * <p>The reason why this field exists is that neverlink libraries do not contain the compiled jar + * in {@link JavaCompilationArgs#getRuntimeJars()} and those are sometimes needed, for example, + * for Proguarding (the compile time classpath is not enough because that contains only ijars) + */ + private final ImmutableList<Artifact> directRuntimeJars; + // Whether or not this library should be used only for compilation and not at runtime. private final boolean neverlink; @@ -398,6 +409,10 @@ public final class JavaInfo extends NativeInfo { return javaInfo.getProvider(providerClass); } + public static JavaInfo getJavaInfo(TransitiveInfoCollection target) { + return (JavaInfo) target.get(JavaInfo.PROVIDER.getKey()); + } + public static <T extends TransitiveInfoProvider> T getProvider( Class<T> providerClass, TransitiveInfoProviderMap providerMap) { T provider = providerMap.getProvider(providerClass); @@ -442,8 +457,13 @@ public final class JavaInfo extends NativeInfo { @VisibleForSerialization @AutoCodec.Instantiator - JavaInfo(TransitiveInfoProviderMap providers, boolean neverlink, Location location) { + JavaInfo( + TransitiveInfoProviderMap providers, + ImmutableList<Artifact> directRuntimeJars, + boolean neverlink, + Location location) { super(PROVIDER, location); + this.directRuntimeJars = directRuntimeJars; this.providers = providers; this.neverlink = neverlink; } @@ -556,6 +576,10 @@ public final class JavaInfo extends NativeInfo { return getProvider(JavaCompilationInfoProvider.class); } + public ImmutableList<Artifact> getDirectRuntimeJars() { + return directRuntimeJars; + } + @SkylarkCallable( name = "transitive_deps", doc = "Returns the transitive set of Jars required to build the target.", @@ -665,6 +689,7 @@ public final class JavaInfo extends NativeInfo { */ public static class Builder { TransitiveInfoProviderMapBuilder providerMap; + private ImmutableList<Artifact> runtimeJars; private boolean neverlink; private Location location = Location.BUILTIN; @@ -673,7 +698,8 @@ public final class JavaInfo extends NativeInfo { } public static Builder create() { - return new Builder(new TransitiveInfoProviderMapBuilder()); + return new Builder(new TransitiveInfoProviderMapBuilder()) + .setRuntimeJars(ImmutableList.of()); } public static Builder copyOf(JavaInfo javaInfo) { @@ -681,6 +707,11 @@ public final class JavaInfo extends NativeInfo { new TransitiveInfoProviderMapBuilder().addAll(javaInfo.getProviders())); } + public Builder setRuntimeJars(ImmutableList<Artifact> runtimeJars) { + this.runtimeJars = runtimeJars; + return this; + } + public Builder setNeverlink(boolean neverlink) { this.neverlink = neverlink; return this; @@ -699,7 +730,7 @@ public final class JavaInfo extends NativeInfo { } public JavaInfo build() { - return new JavaInfo(providerMap.build(), neverlink, location); + return new JavaInfo(providerMap.build(), runtimeJars, neverlink, location); } } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java index df28e7cc9c..714dbd74ab 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java @@ -165,6 +165,8 @@ final class JavaInfoBuildHelper { createJavaSourceJarsProvider( outputSourceJars, concat(compileTimeDeps, runtimeDeps, exports))); + javaInfoBuilder.setRuntimeJars(ImmutableList.of(outputJar)); + return javaInfoBuilder.build(); } @@ -356,6 +358,7 @@ final class JavaInfoBuildHelper { JavaSourceJarsProvider.class, JavaSourceJarsProvider.create( NestedSetBuilder.emptySet(Order.STABLE_ORDER), sourceJars)) + .setRuntimeJars(ImmutableList.copyOf(runtimeJars)) .build(); return javaInfo; } @@ -463,6 +466,7 @@ final class JavaInfoBuildHelper { .addProvider(JavaRunfilesProvider.class, new JavaRunfilesProvider(runfiles)) .addProvider(JavaPluginInfoProvider.class, transitivePluginsProvider) .setNeverlink(neverlink) + .setRuntimeJars(ImmutableList.of(outputJar)) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java index ec47ee7bcb..c7663d084e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java @@ -227,13 +227,13 @@ public class JavaLibrary implements RuleConfiguredTargetFactory { .addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) // TODO(bazel-team): this should only happen for java_plugin .addProvider(JavaPluginInfoProvider.class, pluginInfoProvider) + .setRuntimeJars(javaArtifacts.getRuntimeJars()) .setNeverlink(neverLink) .build(); builder .addSkylarkTransitiveInfo( JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext()) - .addProvider(new JavaRuntimeJarProvider(javaArtifacts.getRuntimeJars())) .addProvider( RunfilesProvider.simple( JavaCommon.getRunfiles(ruleContext, semantics, javaArtifacts, neverLink))) diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeJarProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeJarProvider.java deleted file mode 100644 index 3033639934..0000000000 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeJarProvider.java +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2015 The Bazel Authors. All rights reserved. -// -// 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.google.devtools.build.lib.rules.java; - -import com.google.common.collect.ImmutableList; -import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; -import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; - -/** - * This {@link com.google.devtools.build.lib.analysis.TransitiveInfoProvider} contains the .jar - * files to be put on the runtime classpath by the configured target. - * - * <p>Unlike {@link com.google.devtools.build.lib.rules.java.JavaCompilationArgs#getRuntimeJars()}, - * it does not contain transitive runtime jars, only those produced by the configured target itself. - * - * <p>The reason why this class exists is that neverlink libraries do not contain the compiled jar - * in {@link com.google.devtools.build.lib.rules.java.JavaCompilationArgs#getRuntimeJars()} and - * those are sometimes needed, for example, for Proguarding (the compile time classpath is not - * enough because that contains only ijars) - */ -@Immutable -@AutoCodec -public final class JavaRuntimeJarProvider implements TransitiveInfoProvider { - private final ImmutableList<Artifact> runtimeJars; - - public JavaRuntimeJarProvider(ImmutableList<Artifact> runtimeJars) { - this.runtimeJars = runtimeJars; - } - - public ImmutableList<Artifact> getRuntimeJars() { - return runtimeJars; - } -} |