diff options
author | 2017-12-18 10:22:20 -0800 | |
---|---|---|
committer | 2017-12-18 10:23:50 -0800 | |
commit | 64d46e67121e08e2b305b3f3bd4353a9ff49da13 (patch) | |
tree | c7c6e8531e18ab60d83a60ce359a8a832bc165ff /src/main/java/com/google/devtools/build/lib/rules | |
parent | b82ea3886d428301484fc88ca7734d5003e47fd7 (diff) |
Remove JavaNeverlinkInfoProvider.
We need to handle neverlink libraries in java_common (see #3735). Therefore JavaInfo needs to store the neverlink information. Instead of wrapping yet
another provider (JavaNeverlinkInfoProvider) into JavaInfo, store the neverlink
value directly.
PiperOrigin-RevId: 179439005
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
8 files changed, 36 insertions, 56 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index c23e947b87..3b1933cf3d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java @@ -583,7 +583,9 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { zipAlignedApk, apksUnderTest, nativeLibs, - /* isResourcesOnly = */ false); + /* isResourcesOnly = */ false, + androidCommon.isNeverLink() + ); if (proguardOutput.getMapping() != null) { builder.add(ProguardMappingProvider.class, ProguardMappingProvider.create(finalProguardMap)); 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 659bf5e985..c50550c580 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 @@ -792,7 +792,8 @@ public class AndroidCommon { Artifact zipAlignedApk, Iterable<Artifact> apksUnderTest, NativeLibs nativeLibs, - boolean isResourcesOnly) { + boolean isResourcesOnly, + boolean isNeverlink) { idlHelper.addTransitiveInfoProviders(builder, classJar, manifestProtoOutput); @@ -826,12 +827,12 @@ public class AndroidCommon { javaCommon.addGenJarsProvider(builder, javaInfoBuilder, genClassJar, genSourceJar); DataBinding.maybeAddProvider(builder, ruleContext); - JavaInfo javaInfo = - javaInfoBuilder - .addProvider(JavaCompilationArgsProvider.class, compilationArgsProvider) - .addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) - .addProvider(JavaSourceJarsProvider.class, sourceJarsProvider) - .build(); + JavaInfo javaInfo = javaInfoBuilder + .addProvider(JavaCompilationArgsProvider.class, compilationArgsProvider) + .addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) + .addProvider(JavaSourceJarsProvider.class, sourceJarsProvider) + .setNeverlink(isNeverlink) + .build(); return builder .setFilesToBuild(filesToBuild) @@ -1114,3 +1115,4 @@ public class AndroidCommon { .build(); } } + diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java index bcc8fdcaf0..e92828ead0 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java @@ -32,7 +32,6 @@ import com.google.devtools.build.lib.packages.TriState; import com.google.devtools.build.lib.rules.android.AndroidLibraryAarProvider.Aar; import com.google.devtools.build.lib.rules.android.ResourceContainer.ResourceType; import com.google.devtools.build.lib.rules.java.JavaCommon; -import com.google.devtools.build.lib.rules.java.JavaNeverlinkInfoProvider; import com.google.devtools.build.lib.rules.java.JavaPluginInfoProvider; import com.google.devtools.build.lib.rules.java.JavaSemantics; import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider; @@ -321,7 +320,9 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { null, ImmutableList.<Artifact>of(), NativeLibs.EMPTY, - isResourcesOnly); + isResourcesOnly, + // TODO(elenairina): Use JavaCommon.isNeverlink(ruleContext) for consistency among rules. + androidCommon.isNeverLink()); NestedSetBuilder<Artifact> transitiveResourcesJars = collectTransitiveResourceJars(ruleContext); if (androidCommon.getResourceClassJar() != null) { @@ -334,9 +335,6 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { new NativeLibsZipsProvider( AndroidCommon.collectTransitiveNativeLibsZips(ruleContext).build())) .add( - JavaNeverlinkInfoProvider.class, - new JavaNeverlinkInfoProvider(androidCommon.isNeverLink())) - .add( JavaSourceInfoProvider.class, JavaSourceInfoProvider.fromJavaTargetAttributes(javaTargetAttributes, javaSemantics)) .add( diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java index 3549ecfdf1..4b246657c3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java @@ -316,14 +316,13 @@ public class JavaCommon { public static void checkRuntimeDeps( RuleContext ruleContext, List<TransitiveInfoCollection> runtimeDepInfo) { for (TransitiveInfoCollection c : runtimeDepInfo) { - JavaNeverlinkInfoProvider neverLinkedness = - c.getProvider(JavaNeverlinkInfoProvider.class); - if (neverLinkedness == null) { + JavaInfo javaInfo = (JavaInfo) c.get(JavaInfo.PROVIDER.getKey()); + if (javaInfo == null) { continue; } boolean reportError = !ruleContext.getFragment(JavaConfiguration.class).getAllowRuntimeDepsOnNeverLink(); - if (neverLinkedness.isNeverlink()) { + if (javaInfo.isNeverlink()) { String msg = String.format("neverlink dep %s not allowed in runtime deps", c.getLabel()); if (reportError) { ruleContext.attributeError("runtime_deps", msg); 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 b31c79e297..cdd553f414 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 @@ -169,6 +169,7 @@ public class JavaImport implements RuleConfiguredTargetFactory { .addProvider(JavaCompilationArgsProvider.class, compilationArgsProvider) .addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) .addProvider(JavaSourceJarsProvider.class, sourceJarsProvider) + .setNeverlink(neverLink) .build(); return ruleBuilder .setFilesToBuild(filesToBuild) @@ -178,7 +179,6 @@ public class JavaImport implements RuleConfiguredTargetFactory { .add( JavaRuntimeJarProvider.class, new JavaRuntimeJarProvider(javaArtifacts.getRuntimeJars())) - .add(JavaNeverlinkInfoProvider.class, new JavaNeverlinkInfoProvider(neverLink)) .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 56c633e1bf..c26679ff51 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 @@ -68,6 +68,9 @@ public final class JavaInfo extends NativeInfo { private final TransitiveInfoProviderMap providers; + // Whether or not this library should be used only for compilation and not at runtime. + private final boolean neverlink; + /** Returns the instance for the provided providerClass, or <tt>null</tt> if not present. */ @Nullable public <P extends TransitiveInfoProvider> P getProvider(Class<P> providerClass) { @@ -203,9 +206,14 @@ public final class JavaInfo extends NativeInfo { return providersList.build(); } - private JavaInfo(TransitiveInfoProviderMap providers) { + private JavaInfo(TransitiveInfoProviderMap providers, boolean neverlink) { super(PROVIDER); this.providers = providers; + this.neverlink = neverlink; + } + + public Boolean isNeverlink() { + return neverlink; } @SkylarkCallable( @@ -421,6 +429,7 @@ public final class JavaInfo extends NativeInfo { */ public static class Builder { TransitiveInfoProviderMapBuilder providerMap; + private boolean neverlink; private Builder(TransitiveInfoProviderMapBuilder providerMap) { this.providerMap = providerMap; @@ -435,6 +444,11 @@ public final class JavaInfo extends NativeInfo { new TransitiveInfoProviderMapBuilder().addAll(javaInfo.getProviders())); } + public Builder setNeverlink(boolean neverlink) { + this.neverlink = neverlink; + return this; + } + public <P extends TransitiveInfoProvider> Builder addProvider( Class<P> providerClass, TransitiveInfoProvider provider) { Preconditions.checkArgument(ALLOWED_PROVIDERS.contains(providerClass)); @@ -443,7 +457,7 @@ public final class JavaInfo extends NativeInfo { } public JavaInfo build() { - return new JavaInfo(providerMap.build()); + return new JavaInfo(providerMap.build(), neverlink); } } } 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 2c8ea6de2a..80b2f905f1 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 @@ -231,6 +231,7 @@ public class JavaLibrary implements RuleConfiguredTargetFactory { .addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) // TODO(bazel-team): this should only happen for java_plugin .addProvider(JavaPluginInfoProvider.class, pluginInfoProvider) + .setNeverlink(neverLink) .build(); builder @@ -241,7 +242,6 @@ public class JavaLibrary implements RuleConfiguredTargetFactory { RunfilesProvider.simple( JavaCommon.getRunfiles(ruleContext, semantics, javaArtifacts, neverLink))) .setFilesToBuild(filesToBuild) - .addProvider(new JavaNeverlinkInfoProvider(neverLink)) .addProvider(transitiveCppDeps) .addNativeDeclaredProvider(ccLinkParamsInfo) .addProvider(new JavaNativeLibraryProvider(transitiveJavaNativeLibraries)) diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaNeverlinkInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaNeverlinkInfoProvider.java deleted file mode 100644 index e156133218..0000000000 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaNeverlinkInfoProvider.java +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2014 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.devtools.build.lib.analysis.TransitiveInfoProvider; -import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; - -/** - * A {@link TransitiveInfoProvider} that provides information about whether a Java archive - * is neverlink. - */ -@Immutable -public final class JavaNeverlinkInfoProvider implements TransitiveInfoProvider { - private final boolean isNeverLink; - - public JavaNeverlinkInfoProvider(boolean isNeverLink) { - this.isNeverLink = isNeverLink; - } - - public boolean isNeverlink() { - return isNeverLink; - } -} |