aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviderValidationUtil.java86
3 files changed, 0 insertions, 94 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
index 48fdc0c610..f649728cf8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
@@ -186,14 +186,12 @@ public final class ConfiguredAspect implements Iterable<TransitiveInfoProvider>
}
public Builder addSkylarkTransitiveInfo(String name, Object value) {
- SkylarkProviderValidationUtil.checkSkylarkObjectSafe(value);
skylarkProviderBuilder.put(name, value);
return this;
}
public Builder addSkylarkTransitiveInfo(String name, Object value, Location loc)
throws EvalException {
- SkylarkProviderValidationUtil.validateAndThrowEvalException(name, value, loc);
skylarkProviderBuilder.put(name, value);
return this;
}
@@ -201,8 +199,6 @@ public final class ConfiguredAspect implements Iterable<TransitiveInfoProvider>
public Builder addSkylarkDeclaredProvider(SkylarkClassObject declaredProvider, Location loc)
throws EvalException {
ClassObjectConstructor constructor = declaredProvider.getConstructor();
- SkylarkProviderValidationUtil.validateAndThrowEvalException(
- constructor.getPrintableName(), declaredProvider, loc);
if (!constructor.isExported()) {
throw new EvalException(
constructor.getLocation(), "All providers must be top level values");
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
index fd5bca0873..9bab0463af 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
@@ -287,7 +287,6 @@ public final class RuleConfiguredTargetBuilder {
*/
public RuleConfiguredTargetBuilder addSkylarkTransitiveInfo(
String name, Object value, Location loc) throws EvalException {
- SkylarkProviderValidationUtil.validateAndThrowEvalException(name, value, loc);
skylarkProviders.put(name, value);
return this;
}
@@ -302,8 +301,6 @@ public final class RuleConfiguredTargetBuilder {
public RuleConfiguredTargetBuilder addSkylarkDeclaredProvider(
SkylarkClassObject provider, Location loc) throws EvalException {
ClassObjectConstructor constructor = provider.getConstructor();
- SkylarkProviderValidationUtil.validateAndThrowEvalException(
- constructor.getPrintableName(), provider, loc);
if (!constructor.isExported()) {
throw new EvalException(constructor.getLocation(),
"All providers must be top level values");
@@ -346,7 +343,6 @@ public final class RuleConfiguredTargetBuilder {
*/
public RuleConfiguredTargetBuilder addSkylarkTransitiveInfo(
String name, Object value) {
- SkylarkProviderValidationUtil.checkSkylarkObjectSafe(value);
skylarkProviders.put(name, value);
return this;
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviderValidationUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviderValidationUtil.java
index 74291c39e0..95e48a390a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviderValidationUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviderValidationUtil.java
@@ -17,100 +17,14 @@ import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
-import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.events.Location;
-import com.google.devtools.build.lib.rules.SkylarkApiProvider;
-import com.google.devtools.build.lib.syntax.ClassObject;
import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.EvalUtils;
-import com.google.devtools.build.lib.syntax.SkylarkList;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
-import java.util.Map;
/**
* Utility class to validate results of executing Skylark rules and aspects.
*/
public class SkylarkProviderValidationUtil {
- /**
- * Check if the value provided by a Skylark provider is safe (i.e. can be a
- * TransitiveInfoProvider value).
- */
- public static void checkSkylarkObjectSafe(Object value) {
- if (!isSimpleSkylarkObjectSafe(value.getClass())
- // Java transitive Info Providers are accessible from Skylark.
- && !(value instanceof TransitiveInfoProvider)) {
- checkCompositeSkylarkObjectSafe(value);
- }
- }
-
- /**
- * Check if the value provided by a Skylark provider is safe (i.e. can be a
- * TransitiveInfoProvider value).
- * Throws {@link EvalException} if not.
- */
- public static void validateAndThrowEvalException(String providerName, Object value, Location loc)
- throws EvalException {
- try {
- checkSkylarkObjectSafe(value);
- } catch (IllegalArgumentException e) {
- throw new EvalException(
- loc,
- String.format(
- "Value of provider '%s' is of an illegal type: %s", providerName, e.getMessage()));
- }
- }
-
-
- private static void checkCompositeSkylarkObjectSafe(Object object) {
- if (object instanceof SkylarkApiProvider) {
- return;
- } else if (object instanceof SkylarkList) {
- SkylarkList list = (SkylarkList) object;
- if (list.isEmpty()) {
- // Try not to iterate over the list if avoidable.
- return;
- }
- // The list can be a tuple or a list of composite items.
- for (Object listItem : list) {
- checkSkylarkObjectSafe(listItem);
- }
- return;
- } else if (object instanceof SkylarkNestedSet) {
- // SkylarkNestedSets cannot have composite items.
- Class<?> contentType = ((SkylarkNestedSet) object).getContentType().getType();
- if (!contentType.equals(Object.class) && !isSimpleSkylarkObjectSafe(contentType)) {
- throw new IllegalArgumentException(EvalUtils.getDataTypeNameFromClass(contentType));
- }
- return;
- } else if (object instanceof Map<?, ?>) {
- for (Map.Entry<?, ?> entry : ((Map<?, ?>) object).entrySet()) {
- checkSkylarkObjectSafe(entry.getKey());
- checkSkylarkObjectSafe(entry.getValue());
- }
- return;
- } else if (object instanceof ClassObject) {
- ClassObject struct = (ClassObject) object;
- for (String key : struct.getKeys()) {
- checkSkylarkObjectSafe(struct.getValue(key));
- }
- return;
- }
- throw new IllegalArgumentException(EvalUtils.getDataTypeName(object));
- }
-
- private static boolean isSimpleSkylarkObjectSafe(Class<?> type) {
- return type.equals(String.class)
- || type.equals(Integer.class)
- || type.equals(Boolean.class)
- || Artifact.class.isAssignableFrom(type)
- || ActionAnalysisMetadata.class.isAssignableFrom(type)
- || type.equals(Label.class)
- || type.equals(com.google.devtools.build.lib.syntax.Runtime.NoneType.class);
- }
-
public static void checkOrphanArtifacts(RuleContext ruleContext) throws EvalException {
ImmutableSet<Artifact> orphanArtifacts =
ruleContext.getAnalysisEnvironment().getOrphanArtifacts();