Prevented catching/wrapping of InterruptedExceptions, especially in BaseFunction.
--
MOS_MIGRATED_REVID=102988766
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
index c181a7e..1f30820 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
@@ -865,7 +865,7 @@
* configuration. Note that configurations transitions are applied after the late-bound
* attribute was evaluated.
*/
- Object getDefault(Rule rule, T o) throws EvalException;
+ Object getDefault(Rule rule, T o) throws EvalException, InterruptedException;
}
/**
@@ -982,7 +982,7 @@
}
@Override
- public Object getDefault(Rule rule, Object o) throws EvalException {
+ public Object getDefault(Rule rule, Object o) throws EvalException, InterruptedException {
Map<String, Object> attrValues = new HashMap<>();
// TODO(bazel-team): support configurable attributes here. RawAttributeMapper will throw
// an exception on any instance of configurable attributes.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java b/src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java
index 49852ee..cfb8143 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java
@@ -111,7 +111,7 @@
public void addBindRule(
RuleClass bindRuleClass, Label virtual, Label actual, Location location)
- throws InvalidRuleException, NameConflictException {
+ throws InvalidRuleException, NameConflictException, InterruptedException {
Map<String, Object> attributes = Maps.newHashMap();
// Bound rules don't have a name field, but this works because we don't want more than one
@@ -133,7 +133,7 @@
*/
public Builder createAndAddRepositoryRule(RuleClass ruleClass, RuleClass bindRuleClass,
Map<String, Object> kwargs, FuncallExpression ast, Environment env)
- throws InvalidRuleException, NameConflictException, SyntaxException {
+ throws InvalidRuleException, NameConflictException, SyntaxException, InterruptedException {
StoredEventHandler eventHandler = new StoredEventHandler();
Rule tempRule = RuleFactory.createRule(
this, ruleClass, kwargs, eventHandler, ast, ast.getLocation(), env);
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java b/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java
index 12d02c6..eb3badd 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java
@@ -59,10 +59,11 @@
public abstract static class SkylarkImplicitOutputsFunction extends ImplicitOutputsFunction {
public abstract ImmutableMap<String, String> calculateOutputs(AttributeMap map)
- throws EvalException;
+ throws EvalException, InterruptedException;
@Override
- public Iterable<String> getImplicitOutputs(AttributeMap map) throws EvalException {
+ public Iterable<String> getImplicitOutputs(AttributeMap map)
+ throws EvalException, InterruptedException {
return calculateOutputs(map).values();
}
}
@@ -83,7 +84,8 @@
}
@Override
- public ImmutableMap<String, String> calculateOutputs(AttributeMap map) throws EvalException {
+ public ImmutableMap<String, String> calculateOutputs(AttributeMap map)
+ throws EvalException, InterruptedException {
Map<String, Object> attrValues = new HashMap<>();
for (String attrName : map.getAttributeNames()) {
Type<?> attrType = map.getAttributeType(attrName);
@@ -175,7 +177,8 @@
* Given a newly-constructed Rule instance (with attributes populated),
* returns the list of output files that this rule produces implicitly.
*/
- public abstract Iterable<String> getImplicitOutputs(AttributeMap rule) throws EvalException;
+ public abstract Iterable<String> getImplicitOutputs(AttributeMap rule)
+ throws EvalException, InterruptedException;
/**
* The implicit output function that returns no files.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java
index 2a6945c..256aab0 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Package.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java
@@ -240,7 +240,7 @@
}
}
- private void readObject(ObjectInputStream in) throws IOException {
+ private void readObject(ObjectInputStream in) throws IOException, InterruptedException {
try {
deserializedPkg = new PackageDeserializer().deserialize(in);
} catch (PackageDeserializationException e) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java b/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java
index 2537693..2f0715c 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java
@@ -166,7 +166,7 @@
}
private void deserializeRule(DeserializationContext context, Build.Rule rulePb)
- throws PackageDeserializationException {
+ throws PackageDeserializationException, InterruptedException {
Location ruleLocation = EmptyLocation.INSTANCE;
RuleClass ruleClass = packageDeserializationEnvironment.getRuleClass(rulePb, ruleLocation);
Map<String, ParsedAttributeValue> attributeValues = new HashMap<>();
@@ -326,9 +326,11 @@
* Deserialize a package from its representation as a protocol message. The inverse of
* {@link PackageSerializer#serialize}.
* @throws IOException
+ * @throws InterruptedException
*/
private void deserializeInternal(Build.Package packagePb, StoredEventHandler eventHandler,
- Package.Builder builder, InputStream in) throws PackageDeserializationException, IOException {
+ Package.Builder builder, InputStream in)
+ throws PackageDeserializationException, IOException, InterruptedException {
Path buildFile = packageDeserializationEnvironment.getPath(packagePb.getBuildFilePath());
Preconditions.checkNotNull(buildFile);
DeserializationContext context = new DeserializationContext(builder);
@@ -394,7 +396,7 @@
}
private void deserializeTargets(InputStream in, DeserializationContext context)
- throws IOException, PackageDeserializationException {
+ throws IOException, PackageDeserializationException, InterruptedException {
Build.TargetOrTerminator tot;
while (!(tot = Build.TargetOrTerminator.parseDelimitedFrom(in)).getIsTerminator()) {
Build.Target target = tot.getTarget();
@@ -428,8 +430,10 @@
* @return a new {@link Package} as read from {@code in}
* @throws PackageDeserializationException on failures deserializing the input
* @throws IOException on failures reading from {@code in}
+ * @throws InterruptedException
*/
- public Package deserialize(InputStream in) throws PackageDeserializationException, IOException {
+ public Package deserialize(InputStream in)
+ throws PackageDeserializationException, IOException, InterruptedException {
try {
return deserializeInternal(in);
} catch (PackageDeserializationException | RuntimeException e) {
@@ -439,7 +443,7 @@
}
private Package deserializeInternal(InputStream in)
- throws PackageDeserializationException, IOException {
+ throws PackageDeserializationException, IOException, InterruptedException {
// Read the initial Package message so we have the data to initialize the builder. We will read
// the Targets in individually later.
Build.Package packagePb = Build.Package.parseDelimitedFrom(in);
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
index 6cb807f..4fd5428 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
@@ -900,7 +900,7 @@
Map<String, Object> kwargs,
FuncallExpression ast,
Environment env)
- throws RuleFactory.InvalidRuleException, Package.NameConflictException {
+ throws RuleFactory.InvalidRuleException, Package.NameConflictException, InterruptedException {
RuleClass ruleClass = getBuiltInRuleClass(ruleClassName, ruleFactory);
RuleFactory.createAndAddRule(context, ruleClass, kwargs, ast, env);
}
@@ -938,7 +938,7 @@
@SuppressWarnings({"unchecked", "unused"})
public Runtime.NoneType invoke(Map<String, Object> kwargs,
FuncallExpression ast, Environment env)
- throws EvalException {
+ throws EvalException, InterruptedException {
env.checkLoadingPhase(ruleClass, ast.getLocation());
try {
addRule(ruleFactory, ruleClass, getContext(env, ast), kwargs, ast, env);
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Rule.java b/src/main/java/com/google/devtools/build/lib/packages/Rule.java
index a4a46bc..da1c804 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Rule.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Rule.java
@@ -483,8 +483,8 @@
* first, followed by any explicit files. Additionally both implicit and explicit output files
* will retain the relative order in which they were declared.
*/
- void populateOutputFiles(EventHandler eventHandler,
- Package.Builder pkgBuilder) throws SyntaxException {
+ void populateOutputFiles(EventHandler eventHandler, Package.Builder pkgBuilder)
+ throws SyntaxException, InterruptedException {
Preconditions.checkState(outputFiles == null);
// Order is important here: implicit before explicit
outputFiles = Lists.newArrayList();
@@ -519,8 +519,8 @@
* Implicit output files come from rule-specific patterns, and are a function
* of the rule's "name", "srcs", and other attributes.
*/
- private void populateImplicitOutputFiles(EventHandler eventHandler,
- Package.Builder pkgBuilder) {
+ private void populateImplicitOutputFiles(EventHandler eventHandler, Package.Builder pkgBuilder)
+ throws InterruptedException {
try {
for (String out : ruleClass.getImplicitOutputsFunction().getImplicitOutputs(attributeMap)) {
try {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index 91723d0..1e7dd2a 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -1315,7 +1315,7 @@
*/
Rule createRuleWithLabel(Package.Builder pkgBuilder, Label ruleLabel,
Map<String, Object> attributeValues, EventHandler eventHandler, FuncallExpression ast,
- Location location) throws SyntaxException {
+ Location location) throws SyntaxException, InterruptedException {
Rule rule = pkgBuilder.newRuleWithLabel(ruleLabel, this, null, location);
createRuleCommon(rule, pkgBuilder, attributeValues, eventHandler, ast);
return rule;
@@ -1323,7 +1323,7 @@
private void createRuleCommon(Rule rule, Package.Builder pkgBuilder,
Map<String, Object> attributeValues, EventHandler eventHandler, FuncallExpression ast)
- throws SyntaxException {
+ throws SyntaxException, InterruptedException {
populateRuleAttributeValues(
rule, pkgBuilder, attributeValues, eventHandler, ast);
rule.populateOutputFiles(eventHandler, pkgBuilder);
@@ -1365,7 +1365,7 @@
Rule createRuleWithParsedAttributeValues(Label label,
Package.Builder pkgBuilder, Location ruleLocation,
Map<String, ParsedAttributeValue> attributeValues, EventHandler eventHandler)
- throws SyntaxException{
+ throws SyntaxException, InterruptedException {
Rule rule = pkgBuilder.newRuleWithLabel(label, this, null, ruleLocation);
rule.checkValidityPredicate(eventHandler);
@@ -1404,7 +1404,8 @@
Package.Builder pkgBuilder,
Map<String, Object> attributeValues,
EventHandler eventHandler,
- FuncallExpression ast) {
+ FuncallExpression ast)
+ throws InterruptedException {
BitSet definedAttrs = new BitSet(); // set of attr indices
for (Map.Entry<String, Object> entry : attributeValues.entrySet()) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java b/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java
index 8c073d2..9c3516e 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java
@@ -83,7 +83,7 @@
FuncallExpression ast,
Location location,
@Nullable Environment env)
- throws InvalidRuleException {
+ throws InvalidRuleException, InterruptedException {
Preconditions.checkNotNull(ruleClass);
String ruleClassName = ruleClass.getName();
Object nameObject = attributeValues.get("name");
@@ -149,7 +149,7 @@
FuncallExpression ast,
Location location,
Environment env)
- throws InvalidRuleException, NameConflictException {
+ throws InvalidRuleException, NameConflictException, InterruptedException {
Rule rule = createRule(
pkgBuilder, ruleClass, attributeValues, eventHandler, ast, location, env);
pkgBuilder.addRule(rule);
@@ -162,7 +162,7 @@
Map<String, Object> attributeValues,
FuncallExpression ast,
Environment env)
- throws InvalidRuleException, NameConflictException {
+ throws InvalidRuleException, NameConflictException, InterruptedException {
return createAndAddRule(
context.pkgBuilder,
ruleClass,
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
index abbbdf8..74def59 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
@@ -140,7 +140,7 @@
return new BuiltinFunction(ruleClassName,
FunctionSignature.KWARGS, BuiltinFunction.USE_AST_ENV) {
public Object invoke(Map<String, Object> kwargs, FuncallExpression ast, Environment env)
- throws EvalException {
+ throws EvalException, InterruptedException {
try {
RuleClass ruleClass = ruleFactory.getRuleClass(ruleClassName);
RuleClass bindRuleClass = ruleFactory.getRuleClass("bind");