diff options
author | 2017-01-20 04:23:37 +0000 | |
---|---|---|
committer | 2017-01-20 12:20:55 +0000 | |
commit | 3cfeeec080e8c837dbc118bc8b6005f01d30a688 (patch) | |
tree | 09bdb16a74519f0014281be9615a7a14637c9556 /src/main/java/com/google/devtools/build/lib/rules/objc | |
parent | afd34e072556b1565b43ebc2ba25980f595166c4 (diff) |
Refactor SkylarkNestedSet to not implement Iterable
This is not intended to be a user-visible semantic change, aside from error messages.
This is to help avoid unintentional flattening of depsets, and to narrow down the number of call sites where this can occur, to help us print warning/deprecation messages.
EvalUtils#toIterable will now return an ImmutableList in place of SkylarkNestedSet. This should be ok since the caller shouldn't be relying on the result being a Skylark-safe type. Code that takes Iterable because it accepts either a list or set, can instead be changed to take Object and use EvalUtils#toIterableStrict for validation.
Note that NestedSet still implements Iterable, so native code can still easily and accidentally flatten sets.
--
PiperOrigin-RevId: 145044023
MOS_MIGRATED_REVID=145044023
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java index 7e3b443119..ee8a37c35f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java @@ -94,7 +94,7 @@ public class ObjcProviderSkylarkConverters { @Override public Iterable<?> valueForJava(Key<?> javaKey, Object skylarkValue) { validateTypes(skylarkValue, javaKey.getType(), javaKey.getSkylarkKeyName()); - return (SkylarkNestedSet) skylarkValue; + return ((SkylarkNestedSet) skylarkValue).toCollection(); } } @@ -118,7 +118,7 @@ public class ObjcProviderSkylarkConverters { public Iterable<?> valueForJava(Key<?> javaKey, Object skylarkValue) { validateTypes(skylarkValue, String.class, javaKey.getSkylarkKeyName()); NestedSetBuilder<PathFragment> result = NestedSetBuilder.stableOrder(); - for (String path : (Iterable<String>) skylarkValue) { + for (String path : ((SkylarkNestedSet) skylarkValue).toCollection(String.class)) { result.add(new PathFragment(path)); } return result.build(); @@ -145,7 +145,7 @@ public class ObjcProviderSkylarkConverters { public Iterable<?> valueForJava(Key<?> javaKey, Object skylarkValue) { validateTypes(skylarkValue, String.class, javaKey.getSkylarkKeyName()); NestedSetBuilder<SdkFramework> result = NestedSetBuilder.stableOrder(); - for (String path : (Iterable<String>) skylarkValue) { + for (String path : ((SkylarkNestedSet) skylarkValue).toCollection(String.class)) { result.add(new SdkFramework(path)); } return result.build(); @@ -178,7 +178,8 @@ public class ObjcProviderSkylarkConverters { public Iterable<?> valueForJava(Key<?> javaKey, Object skylarkValue) { validateTypes(skylarkValue, SkylarkClassObject.class, javaKey.getSkylarkKeyName()); NestedSetBuilder<BundleableFile> result = NestedSetBuilder.stableOrder(); - for (SkylarkClassObject struct : (Iterable<SkylarkClassObject>) skylarkValue) { + for (SkylarkClassObject struct : + ((SkylarkNestedSet) skylarkValue).toCollection(SkylarkClassObject.class)) { Artifact artifact; String path; try { |