aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2018-03-28 08:51:32 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-28 08:53:10 -0700
commitf6d2881825f8b42331263abfa47da9ebe5f951ba (patch)
treee0d6ee28af39489e3a865ced2a7dc1f7dd60ca13
parent3a61eb654b2ee4da0a1a749ec48adbc06aa42aee (diff)
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
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java5
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProviderTest.java39
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java86
14 files changed, 147 insertions, 43 deletions
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.<Artifact>stableOrder()
.add(ruleIntermediateArtifacts.combinedArchitectureArchive());
- ObjcProvider.Builder objcProviderBuilder = new ObjcProvider.Builder();
+ ObjcProvider.Builder objcProviderBuilder =
+ new ObjcProvider.Builder(ruleContext.getAnalysisEnvironment().getSkylarkSemantics());
ImmutableListMultimap<BuildConfiguration, ObjcProtoProvider> objcProtoProvidersMap =
ruleContext.getPrerequisitesByConfiguration("deps", Mode.SPLIT,
@@ -209,7 +210,7 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory {
BuildConfiguration buildConfiguration,
IntermediateArtifacts intermediateArtifacts,
List<ConfiguredTargetAndData> propagatedConfigredTargetAndTargetDeps,
- Optional<ObjcProvider> protosObjcProvider) {
+ Optional<ObjcProvider> 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<Artifact> transpiledSources,
Iterable<Artifact> transpiledHeaders, Iterable<PathFragment> headerSearchPaths,
- Iterable<Attribute> dependentAttributes) {
+ Iterable<Attribute> 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<String> 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<ObjcProvider> 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<ConfiguredTargetAndData> propagatedConfiguredTargetAndDataDeps,
List<ObjcProvider> nonPropagatedObjcDeps,
- Iterable<ObjcProvider> additionalDepProviders) {
+ Iterable<ObjcProvider> 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> compilationAttributes = Optional.absent();
private Optional<ResourceAttributes> 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<BundleableFile> 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<Key<?>, NestedSet<?>> items;
// Items which should not be propagated to dependents.
@@ -832,10 +834,12 @@ public final class ObjcProvider extends NativeInfo {
public static final NativeProvider<ObjcProvider> SKYLARK_CONSTRUCTOR = new Constructor();
private ObjcProvider(
+ SkylarkSemantics semantics,
ImmutableMap<Key<?>, NestedSet<?>> items,
ImmutableMap<Key<?>, NestedSet<?>> nonPropagatedItems,
ImmutableMap<Key<?>, 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 <E> NestedSet<E> get(Key<E> key) {
Preconditions.checkNotNull(key);
NestedSetBuilder<E> builder = new NestedSetBuilder<>(key.order);
+ if (semantics.incompatibleDisableObjcProviderResources()
+ && ObjcProvider.isDeprecatedResourceKey(key)) {
+ return builder.build();
+ }
if (strictDependencyItems.containsKey(key)) {
builder.addTransitive((NestedSet<E>) 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<Key<?>, NestedSetBuilder<?>> items = new HashMap<>();
private final Map<Key<?>, NestedSetBuilder<?>> nonPropagatedItems = new HashMap<>();
private final Map<Key<?>, NestedSetBuilder<?>> strictDependencyItems = new HashMap<>();
+ public Builder(SkylarkSemantics semantics) {
+ this.skylarkSemantics = semantics;
+ }
+
private static void maybeAddEmptyBuilder(Map<Key<?>, 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<ObjcProvider> getObjcProvider() {
+ public Optional<ObjcProvider> 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)
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProviderTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProviderTest.java
index 0996bb4318..5c1f6b7ba5 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProviderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProviderTest.java
@@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertWithMessage;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
@@ -33,15 +34,19 @@ import org.junit.runners.JUnit4;
@RunWith(JUnit4.class)
public class ObjcProviderTest {
+ private static ObjcProvider.Builder objcProviderBuilder() {
+ return new ObjcProvider.Builder(SkylarkSemantics.DEFAULT_SEMANTICS);
+ }
+
@Test
public void emptyProvider() {
- ObjcProvider empty = new ObjcProvider.Builder().build();
+ ObjcProvider empty = objcProviderBuilder().build();
assertThat(empty.get(ObjcProvider.SDK_DYLIB)).isEmpty();
}
@Test
public void onlyPropagatesProvider() {
- ObjcProvider onlyPropagates = new ObjcProvider.Builder()
+ ObjcProvider onlyPropagates = objcProviderBuilder()
.add(ObjcProvider.SDK_DYLIB, "foo")
.build();
assertThat(onlyPropagates.get(ObjcProvider.SDK_DYLIB)).containsExactly("foo");
@@ -49,10 +54,10 @@ public class ObjcProviderTest {
@Test
public void onlyNonPropagatesProvider() {
- ObjcProvider dep = new ObjcProvider.Builder()
+ ObjcProvider dep = objcProviderBuilder()
.add(ObjcProvider.SDK_DYLIB, "foo")
.build();
- ObjcProvider notPropagates = new ObjcProvider.Builder()
+ ObjcProvider notPropagates = objcProviderBuilder()
.addTransitiveWithoutPropagating(ImmutableList.of(dep))
.build();
assertThat(notPropagates.get(ObjcProvider.SDK_DYLIB)).containsExactly("foo");
@@ -60,10 +65,10 @@ public class ObjcProviderTest {
@Test
public void propagatesAndNonPropagatesProvider() {
- ObjcProvider dep = new ObjcProvider.Builder()
+ ObjcProvider dep = objcProviderBuilder()
.add(ObjcProvider.SDK_DYLIB, "foo")
.build();
- ObjcProvider provider = new ObjcProvider.Builder()
+ ObjcProvider provider = objcProviderBuilder()
.addTransitiveWithoutPropagating(ImmutableList.of(dep))
.add(ObjcProvider.SDK_DYLIB, "bar")
.build();
@@ -72,14 +77,14 @@ public class ObjcProviderTest {
@Test
public void doesNotPropagate() {
- ObjcProvider dep = new ObjcProvider.Builder()
+ ObjcProvider dep = objcProviderBuilder()
.add(ObjcProvider.SDK_DYLIB, "foo")
.build();
- ObjcProvider provider = new ObjcProvider.Builder()
+ ObjcProvider provider = objcProviderBuilder()
.addTransitiveWithoutPropagating(ImmutableList.of(dep))
.add(ObjcProvider.SDK_DYLIB, "bar")
.build();
- ObjcProvider depender = new ObjcProvider.Builder()
+ ObjcProvider depender = objcProviderBuilder()
.addTransitiveAndPropagate(provider)
.build();
assertThat(depender.get(ObjcProvider.SDK_DYLIB)).containsExactly("bar");
@@ -91,17 +96,17 @@ public class ObjcProviderTest {
PathFragment propagatedInclude = PathFragment.create("propagated_path");
ObjcProvider strictDep =
- new ObjcProvider.Builder()
+ objcProviderBuilder()
.addForDirectDependents(ObjcProvider.INCLUDE, strictInclude)
.build();
ObjcProvider propagatedDep =
- new ObjcProvider.Builder().add(ObjcProvider.INCLUDE, propagatedInclude).build();
+ objcProviderBuilder().add(ObjcProvider.INCLUDE, propagatedInclude).build();
ObjcProvider provider =
- new ObjcProvider.Builder()
+ objcProviderBuilder()
.addTransitiveAndPropagate(ImmutableList.of(strictDep, propagatedDep))
.build();
- ObjcProvider depender = new ObjcProvider.Builder().addTransitiveAndPropagate(provider).build();
+ ObjcProvider depender = objcProviderBuilder().addTransitiveAndPropagate(provider).build();
assertThat(provider.get(ObjcProvider.INCLUDE))
.containsExactly(strictInclude, propagatedInclude);
@@ -114,17 +119,17 @@ public class ObjcProviderTest {
PathFragment propagatedInclude = PathFragment.create("propagated_path");
ObjcProvider strictDep =
- new ObjcProvider.Builder()
+ objcProviderBuilder()
.addForDirectDependents(ObjcProvider.INCLUDE, strictInclude)
.build();
ObjcProvider propagatedDep =
- new ObjcProvider.Builder().add(ObjcProvider.INCLUDE, propagatedInclude).build();
+ objcProviderBuilder().add(ObjcProvider.INCLUDE, propagatedInclude).build();
ObjcProvider provider =
- new ObjcProvider.Builder()
+ objcProviderBuilder()
.addTransitiveAndPropagate(ImmutableList.of(strictDep, propagatedDep))
.build();
- ObjcProvider depender = new ObjcProvider.Builder().addTransitiveAndPropagate(provider).build();
+ ObjcProvider depender = objcProviderBuilder().addTransitiveAndPropagate(provider).build();
assertThat(provider.include().toCollection())
.containsExactly(strictInclude.toString(), propagatedInclude.toString());
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java
index 20a32ce795..7a63720693 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java
@@ -30,6 +30,7 @@ import com.google.devtools.build.lib.rules.apple.AppleToolchain;
import com.google.devtools.build.lib.rules.apple.DottedVersion;
import com.google.devtools.build.lib.syntax.SkylarkDict;
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.List;
import org.junit.Test;
@@ -41,6 +42,10 @@ import org.junit.runners.JUnit4;
*/
@RunWith(JUnit4.class)
public class ObjcSkylarkTest extends ObjcRuleTestCase {
+ private static ObjcProvider.Builder objcProviderBuilder() {
+ return new ObjcProvider.Builder(SkylarkSemantics.DEFAULT_SEMANTICS);
+ }
+
@Test
public void testSkylarkRuleCanDependOnNativeAppleRule() throws Exception {
scratch.file("examples/rule/BUILD");
@@ -855,9 +860,9 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase {
ObjcProvider skylarkProvider = skylarkTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
ObjcProvider skylarkProviderDirectDepender =
- new ObjcProvider.Builder().addTransitiveAndPropagate(skylarkProvider).build();
- ObjcProvider skylarkProviderIndirectDepender =
- new ObjcProvider.Builder().addTransitiveAndPropagate(skylarkProviderDirectDepender).build();
+ objcProviderBuilder().addTransitiveAndPropagate(skylarkProvider).build();
+ ObjcProvider skylarkProviderIndirectDepender =
+ objcProviderBuilder().addTransitiveAndPropagate(skylarkProviderDirectDepender).build();
assertThat(skylarkProvider.get(ObjcProvider.INCLUDE))
.containsExactly(PathFragment.create("path1"), PathFragment.create("path2"));
@@ -1347,7 +1352,7 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase {
}
@Test
- public void testDisableObjcProviderResources() throws Exception {
+ public void testDisableObjcProviderResourcesWrite() throws Exception {
scratch.file("examples/rule/BUILD");
scratch.file(
"examples/rule/apple_rules.bzl",
@@ -1378,7 +1383,7 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase {
}
@Test
- public void testEnabledObjcProviderResources() throws Exception {
+ public void testEnabledObjcProviderResourcesWrite() throws Exception {
scratch.file("examples/rule/BUILD");
scratch.file(
"examples/rule/apple_rules.bzl",
@@ -1406,6 +1411,77 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase {
assertThat(objcProvider.get(ObjcProvider.XIB)).isNotNull();
}
+ @Test
+ public void testDisableObjcProviderResourcesRead() throws Exception {
+ scratch.file("examples/rule/BUILD");
+ scratch.file(
+ "examples/rule/apple_rules.bzl",
+ "def my_rule_impl(ctx):",
+ " dep = ctx.attr.deps[0]",
+ " objc_provider = dep[apple_common.Objc]",
+ " return struct(strings=str(objc_provider.strings))",
+ "my_rule = rule(implementation = my_rule_impl,",
+ " attrs = {",
+ " 'deps': attr.label_list(providers = ['objc'])})");
+
+ scratch.file("examples/apple_skylark/foo.strings");
+ scratch.file("examples/apple_skylark/bar.a");
+ scratch.file(
+ "examples/apple_skylark/BUILD",
+ "package(default_visibility = ['//visibility:public'])",
+ "load('//examples/rule:apple_rules.bzl', 'my_rule')",
+ "my_rule(",
+ " name='my_target',",
+ " deps=[':bundle_lib'],",
+ ")",
+ "objc_import(",
+ " name='bundle_lib',",
+ " archives = ['bar.a'],",
+ " strings=['foo.strings'],",
+ ")");
+
+ setSkylarkSemanticsOptions("--incompatible_disable_objc_provider_resources=true");
+ ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+
+ assertThat(skylarkTarget.get("strings")).isEqualTo("depset([])");
+ }
+
+ @Test
+ public void testEnabledObjcProviderResourcesRead() throws Exception {
+ scratch.file("examples/rule/BUILD");
+ scratch.file(
+ "examples/rule/apple_rules.bzl",
+ "def my_rule_impl(ctx):",
+ " dep = ctx.attr.deps[0]",
+ " objc_provider = dep[apple_common.Objc]",
+ " return struct(strings=str(objc_provider.strings))",
+ "my_rule = rule(implementation = my_rule_impl,",
+ " attrs = {",
+ " 'deps': attr.label_list(providers = ['objc'])})");
+
+ scratch.file("examples/apple_skylark/foo.strings");
+ scratch.file("examples/apple_skylark/bar.a");
+ scratch.file(
+ "examples/apple_skylark/BUILD",
+ "package(default_visibility = ['//visibility:public'])",
+ "load('//examples/rule:apple_rules.bzl', 'my_rule')",
+ "my_rule(",
+ " name='my_target',",
+ " deps=[':bundle_lib'],",
+ ")",
+ "objc_import(",
+ " name='bundle_lib',",
+ " archives = ['bar.a'],",
+ " strings=['foo.strings'],",
+ ")");
+
+ setSkylarkSemanticsOptions("--incompatible_disable_objc_provider_resources=false");
+ ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+
+ assertThat(skylarkTarget.get("strings"))
+ .isEqualTo("depset([<source file examples/apple_skylark/foo.strings>])");
+ }
+
private void checkSkylarkRunMemleaksWithExpectedValue(boolean expectedValue) throws Exception {
scratch.file("examples/rule/BUILD");
scratch.file(