From f6d2881825f8b42331263abfa47da9ebe5f951ba Mon Sep 17 00:00:00 2001 From: cparsons Date: Wed, 28 Mar 2018 08:51:32 -0700 Subject: Make deprecated ObjcProvider fields return empty sets when --incompatible_disable_objc_provider_resources is true. This involves propagating SkylarkSemantics to all ObjcProvider constructors. RELNOTES: Introduce --incompatible_disable_objc_provider_resources to turn off all resource-related fields of the Objc provider. PiperOrigin-RevId: 190778491 --- .../devtools/build/lib/rules/objc/AppleBinary.java | 3 ++- .../build/lib/rules/objc/AppleSkylarkCommon.java | 2 +- .../build/lib/rules/objc/AppleStaticLibrary.java | 5 +++-- .../devtools/build/lib/rules/objc/AppleStubBinary.java | 3 ++- .../devtools/build/lib/rules/objc/J2ObjcAspect.java | 2 +- .../devtools/build/lib/rules/objc/J2ObjcLibrary.java | 4 ++-- .../build/lib/rules/objc/MultiArchBinarySupport.java | 2 +- .../build/lib/rules/objc/ObjcBundleLibrary.java | 9 +++++---- .../devtools/build/lib/rules/objc/ObjcCommon.java | 10 +++++++--- .../devtools/build/lib/rules/objc/ObjcLibrary.java | 2 +- .../devtools/build/lib/rules/objc/ObjcProvider.java | 18 ++++++++++++++++-- .../devtools/build/lib/rules/objc/ProtobufSupport.java | 5 +++-- 12 files changed, 44 insertions(+), 21 deletions(-) (limited to 'src/main/java/com/google') diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java index 4150d8ec52..9b6c5ae54c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java @@ -179,7 +179,8 @@ public class AppleBinary implements RuleConfiguredTargetFactory { outputArtifact, platform); - ObjcProvider.Builder objcProviderBuilder = new ObjcProvider.Builder(); + ObjcProvider.Builder objcProviderBuilder = + new ObjcProvider.Builder(ruleContext.getAnalysisEnvironment().getSkylarkSemantics()); for (DependencySpecificConfiguration dependencySpecificConfiguration : dependencySpecificConfigurations) { objcProviderBuilder.addTransitiveAndPropagate( diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java index 921f398560..b4c07e32fd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java @@ -377,7 +377,7 @@ public class AppleSkylarkCommon { Environment environment) { boolean disableObjcResourceKeys = environment.getSemantics().incompatibleDisableObjcProviderResources(); - ObjcProvider.Builder resultBuilder = new ObjcProvider.Builder(); + ObjcProvider.Builder resultBuilder = new ObjcProvider.Builder(environment.getSemantics()); if (usesSwift) { resultBuilder.add(ObjcProvider.FLAG, ObjcProvider.Flag.USES_SWIFT); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java index 98b764baff..30f6c1e428 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java @@ -102,7 +102,8 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory { NestedSetBuilder.stableOrder() .add(ruleIntermediateArtifacts.combinedArchitectureArchive()); - ObjcProvider.Builder objcProviderBuilder = new ObjcProvider.Builder(); + ObjcProvider.Builder objcProviderBuilder = + new ObjcProvider.Builder(ruleContext.getAnalysisEnvironment().getSkylarkSemantics()); ImmutableListMultimap objcProtoProvidersMap = ruleContext.getPrerequisitesByConfiguration("deps", Mode.SPLIT, @@ -209,7 +210,7 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory { BuildConfiguration buildConfiguration, IntermediateArtifacts intermediateArtifacts, List propagatedConfigredTargetAndTargetDeps, - Optional protosObjcProvider) { + Optional protosObjcProvider) throws InterruptedException { CompilationArtifacts compilationArtifacts = new CompilationArtifacts.Builder().build(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java index e72b47c3a8..184d4e4ba4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java @@ -126,7 +126,8 @@ public class AppleStubBinary implements RuleConfiguredTargetFactory { RuleConfiguredTargetBuilder targetBuilder = ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build()); - ObjcProvider.Builder objcProviderBuilder = new ObjcProvider.Builder(); + ObjcProvider.Builder objcProviderBuilder = + new ObjcProvider.Builder(ruleContext.getAnalysisEnvironment().getSkylarkSemantics()); for (ObjcProvider depProvider : configurationToDepsMap.values()) { objcProviderBuilder.addTransitiveAndPropagate(depProvider); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java index 3870556daa..7f325a3016 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java @@ -787,7 +787,7 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF */ static ObjcCommon common(RuleContext ruleContext, Iterable transpiledSources, Iterable transpiledHeaders, Iterable headerSearchPaths, - Iterable dependentAttributes) { + Iterable dependentAttributes) throws InterruptedException { ObjcCommon.Builder builder = new ObjcCommon.Builder(ruleContext); IntermediateArtifacts intermediateArtifacts = ObjcRuleClasses.j2objcIntermediateArtifacts(ruleContext); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java index 83a35b91bf..b761f53fdc 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java @@ -47,7 +47,7 @@ public class J2ObjcLibrary implements RuleConfiguredTargetFactory { public static final ImmutableList J2OBJC_SUPPORTED_RULES = ImmutableList.of("java_import", "java_library", "proto_library"); - private ObjcCommon common(RuleContext ruleContext) { + private ObjcCommon common(RuleContext ruleContext) throws InterruptedException { return new ObjcCommon.Builder(ruleContext) .setCompilationAttributes( CompilationAttributes.Builder.fromRuleContext(ruleContext).build()) @@ -75,7 +75,7 @@ public class J2ObjcLibrary implements RuleConfiguredTargetFactory { Iterable jreDeps = ruleContext.getPrerequisites("jre_deps", Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR); ObjcProvider.Builder objcProviderBuilder = - new ObjcProvider.Builder() + new ObjcProvider.Builder(ruleContext.getAnalysisEnvironment().getSkylarkSemantics()) .addTransitiveAndPropagate(jreDeps) .addTransitiveAndPropagate( ruleContext.getPrerequisites( diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java index fa1662265d..cac4fdbe49 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java @@ -301,7 +301,7 @@ public class MultiArchBinarySupport { IntermediateArtifacts intermediateArtifacts, List propagatedConfiguredTargetAndDataDeps, List nonPropagatedObjcDeps, - Iterable additionalDepProviders) { + Iterable additionalDepProviders) throws InterruptedException { ObjcCommon.Builder commonBuilder = new ObjcCommon.Builder(ruleContext, buildConfiguration) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java index 3088b5df6b..f795cf94a9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java @@ -81,9 +81,10 @@ public class ObjcBundleLibrary implements RuleConfiguredTargetFactory { return null; } - ObjcProvider nestedBundleProvider = new ObjcProvider.Builder() - .add(NESTED_BUNDLE, bundling) - .build(); + ObjcProvider nestedBundleProvider = + new ObjcProvider.Builder(ruleContext.getAnalysisEnvironment().getSkylarkSemantics()) + .add(NESTED_BUNDLE, bundling) + .build(); return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build()) .addNativeDeclaredProvider(nestedBundleProvider) @@ -119,7 +120,7 @@ public class ObjcBundleLibrary implements RuleConfiguredTargetFactory { .build(); } - private ObjcCommon common(RuleContext ruleContext) { + private ObjcCommon common(RuleContext ruleContext) throws InterruptedException { return new ObjcCommon.Builder(ruleContext) .setResourceAttributes(new ResourceAttributes(ruleContext)) .addDepObjcProviders( diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java index bb20db497c..1b1a89d527 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java @@ -73,6 +73,7 @@ import com.google.devtools.build.lib.rules.cpp.CcLinkParamsInfo; import com.google.devtools.build.lib.rules.cpp.CppFileTypes; import com.google.devtools.build.lib.rules.cpp.CppModuleMap; import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData; +import com.google.devtools.build.lib.syntax.SkylarkSemantics; import com.google.devtools.build.lib.util.FileType; import com.google.devtools.build.lib.util.FileTypeSet; import com.google.devtools.build.lib.vfs.PathFragment; @@ -143,6 +144,7 @@ public final class ObjcCommon { static class Builder { private final RuleContext context; + private final SkylarkSemantics semantics; private final BuildConfiguration buildConfiguration; private Optional compilationAttributes = Optional.absent(); private Optional resourceAttributes = Optional.absent(); @@ -172,7 +174,7 @@ public final class ObjcCommon { * Builder for {@link ObjcCommon} obtaining both attribute data and configuration data from * the given rule context. */ - Builder(RuleContext context) { + Builder(RuleContext context) throws InterruptedException { this(context, context.getConfiguration()); } @@ -181,8 +183,10 @@ public final class ObjcCommon { * configuration data from the given configuration object for use in situations where a single * target's outputs are under multiple configurations. */ - Builder(RuleContext context, BuildConfiguration buildConfiguration) { + Builder(RuleContext context, BuildConfiguration buildConfiguration) + throws InterruptedException { this.context = Preconditions.checkNotNull(context); + this.semantics = context.getAnalysisEnvironment().getSkylarkSemantics(); this.buildConfiguration = Preconditions.checkNotNull(buildConfiguration); } @@ -394,7 +398,7 @@ public final class ObjcCommon { Iterable bundleImports = BundleableFile.bundleImportsFromRule(context); ObjcProvider.Builder objcProvider = - new ObjcProvider.Builder() + new ObjcProvider.Builder(semantics) .addAll(IMPORTED_LIBRARY, extraImportLibraries) .addAll(BUNDLE_FILE, bundleImports) .addAll(SDK_FRAMEWORK, extraSdkFrameworks) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java index 23b468476b..323de180cd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java @@ -39,7 +39,7 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory { /** * Constructs an {@link ObjcCommon} instance based on the attributes of the given rule context. */ - private ObjcCommon common(RuleContext ruleContext) { + private ObjcCommon common(RuleContext ruleContext) throws InterruptedException { return new ObjcCommon.Builder(ruleContext) .setCompilationAttributes( CompilationAttributes.Builder.fromRuleContext(ruleContext).build()) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java index 1cc56aeefc..648be7e6be 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java @@ -42,6 +42,7 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import com.google.devtools.build.lib.syntax.EvalUtils; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; +import com.google.devtools.build.lib.syntax.SkylarkSemantics; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.HashMap; import java.util.HashSet; @@ -364,6 +365,7 @@ public final class ObjcProvider extends NativeInfo { HAS_WATCH2_EXTENSION, } + private final SkylarkSemantics semantics; private final ImmutableMap, NestedSet> items; // Items which should not be propagated to dependents. @@ -832,10 +834,12 @@ public final class ObjcProvider extends NativeInfo { public static final NativeProvider SKYLARK_CONSTRUCTOR = new Constructor(); private ObjcProvider( + SkylarkSemantics semantics, ImmutableMap, NestedSet> items, ImmutableMap, NestedSet> nonPropagatedItems, ImmutableMap, NestedSet> strictDependencyItems) { super(SKYLARK_CONSTRUCTOR); + this.semantics = semantics; this.items = Preconditions.checkNotNull(items); this.nonPropagatedItems = Preconditions.checkNotNull(nonPropagatedItems); this.strictDependencyItems = Preconditions.checkNotNull(strictDependencyItems); @@ -848,6 +852,10 @@ public final class ObjcProvider extends NativeInfo { public NestedSet get(Key key) { Preconditions.checkNotNull(key); NestedSetBuilder builder = new NestedSetBuilder<>(key.order); + if (semantics.incompatibleDisableObjcProviderResources() + && ObjcProvider.isDeprecatedResourceKey(key)) { + return builder.build(); + } if (strictDependencyItems.containsKey(key)) { builder.addTransitive((NestedSet) strictDependencyItems.get(key)); } @@ -959,7 +967,7 @@ public final class ObjcProvider extends NativeInfo { avoidLibrariesSet.add(libraryToAvoid.getRunfilesPath()); } } - ObjcProvider.Builder objcProviderBuilder = new ObjcProvider.Builder(); + ObjcProvider.Builder objcProviderBuilder = new ObjcProvider.Builder(semantics); for (Key key : getValuedKeys()) { if (key == CC_LIBRARY) { addTransitiveAndFilter(objcProviderBuilder, CC_LIBRARY, @@ -1075,10 +1083,15 @@ public final class ObjcProvider extends NativeInfo { * several transitive dependencies. */ public static final class Builder { + private final SkylarkSemantics skylarkSemantics; private final Map, NestedSetBuilder> items = new HashMap<>(); private final Map, NestedSetBuilder> nonPropagatedItems = new HashMap<>(); private final Map, NestedSetBuilder> strictDependencyItems = new HashMap<>(); + public Builder(SkylarkSemantics semantics) { + this.skylarkSemantics = semantics; + } + private static void maybeAddEmptyBuilder(Map, NestedSetBuilder> set, Key key) { set.computeIfAbsent(key, k -> new NestedSetBuilder<>(k.order)); } @@ -1328,7 +1341,8 @@ public final class ObjcProvider extends NativeInfo { strictDependencyBuilder.put(typeEntry.getKey(), typeEntry.getValue().build()); } - return new ObjcProvider(propagatedBuilder.build(), nonPropagatedBuilder.build(), + return new ObjcProvider(skylarkSemantics, + propagatedBuilder.build(), nonPropagatedBuilder.build(), strictDependencyBuilder.build()); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java index 3ae8e83d10..89de32a4e6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java @@ -253,7 +253,7 @@ final class ProtobufSupport { * Returns the ObjcProvider for this target, or Optional.absent() if there were no protos to * generate. */ - public Optional getObjcProvider() { + public Optional getObjcProvider() throws InterruptedException { if (inputsToOutputsMap.isEmpty()) { return Optional.absent(); } @@ -398,7 +398,8 @@ final class ProtobufSupport { } private ObjcCommon getCommon( - IntermediateArtifacts intermediateArtifacts, CompilationArtifacts compilationArtifacts) { + IntermediateArtifacts intermediateArtifacts, CompilationArtifacts compilationArtifacts) + throws InterruptedException { ObjcCommon.Builder commonBuilder = new ObjcCommon.Builder(ruleContext) .setIntermediateArtifacts(intermediateArtifacts) -- cgit v1.2.3