diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
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(); |