aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2018-07-30 14:59:43 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-30 15:00:58 -0700
commit3f87d1638f931d08fac0f675ad8783af8b5ce0d9 (patch)
tree3758b8f9c72469607149f4e7a09f8d4f9fadd6e0 /src/main/java/com/google/devtools/build/lib/analysis
parentc80185c1b6ea5d746b4a38b8b5b8b5ad4682bc89 (diff)
Make explicit the contract of ConfiguredTarget builders returning null when there are rule errors.
RELNOTES: None. PiperOrigin-RevId: 206652580
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java15
2 files changed, 18 insertions, 4 deletions
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 786dba9aeb..ddc1ad6746 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
@@ -49,6 +49,7 @@ import com.google.devtools.build.lib.syntax.Type;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
+import javax.annotation.Nullable;
/**
* Builder class for analyzed rule instances.
@@ -79,7 +80,11 @@ public final class RuleConfiguredTargetBuilder {
add(VisibilityProvider.class, new VisibilityProviderImpl(ruleContext.getVisibility()));
}
- /** Constructs the RuleConfiguredTarget instance based on the values set for this Builder. */
+ /**
+ * Constructs the RuleConfiguredTarget instance based on the values set for this Builder.
+ * Returns null if there were rule errors reported.
+ */
+ @Nullable
public ConfiguredTarget build() throws ActionConflictException {
if (ruleContext.getConfiguration().enforceConstraints()) {
checkConstraints();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java
index 1f2a184844..3b150c210e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java
@@ -74,7 +74,11 @@ public final class SkylarkRuleConfiguredTargetUtil {
private static final ImmutableSet<String> DEFAULT_PROVIDER_FIELDS =
ImmutableSet.of("files", "runfiles", "data_runfiles", "default_runfiles", "executable");
- /** Create a Rule Configured Target from the ruleContext and the ruleImplementation. */
+ /**
+ * Create a Rule Configured Target from the ruleContext and the ruleImplementation.
+ * Returns null if there were errors during target creation.
+ */
+ @Nullable
public static ConfiguredTarget buildRule(
RuleContext ruleContext,
AdvertisedProviderSet advertisedProviders,
@@ -115,8 +119,12 @@ public final class SkylarkRuleConfiguredTargetUtil {
return null;
}
ConfiguredTarget configuredTarget = createTarget(skylarkRuleContext, target);
- SkylarkProviderValidationUtil.validateArtifacts(ruleContext);
- checkDeclaredProviders(configuredTarget, advertisedProviders, location);
+ if (configuredTarget != null) {
+ // If there was error creating the ConfiguredTarget, no further validation is needed.
+ // Null will be returned and the errors thus reported.
+ SkylarkProviderValidationUtil.validateArtifacts(ruleContext);
+ checkDeclaredProviders(configuredTarget, advertisedProviders, location);
+ }
return configuredTarget;
} catch (EvalException e) {
addRuleToStackTrace(e, ruleContext.getRule(), ruleImplementation);
@@ -172,6 +180,7 @@ public final class SkylarkRuleConfiguredTargetUtil {
return ex.getMessage();
}
+ @Nullable
private static ConfiguredTarget createTarget(SkylarkRuleContext context, Object target)
throws EvalException, RuleErrorException, ActionConflictException {
RuleConfiguredTargetBuilder builder = new RuleConfiguredTargetBuilder(