aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-12-13 10:17:44 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-12-13 10:19:39 -0800
commit0c349543eb5551f2eebe6177e72e0041d5415350 (patch)
treeb8dd9f9bfb2d014944bc2b6628da51211febac5d /src/main/java/com/google/devtools/build/lib/rules
parenta9cd97c8075e1d7f3a2662795bde7afffa940dd3 (diff)
Allow not recognized Artifact category to be handled in Analysis phase
Nonexistent artifact categories or categories that are not supported by the action config now throw InvalidConfigurationException instead of ExpansionException. This allows the checked exception to be caught and reported as a RuleErrorException in Analysis phase. RELNOTES: None. PiperOrigin-RevId: 178919727
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java11
5 files changed, 53 insertions, 27 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
index 37db5839fe..c807289a7c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
@@ -802,9 +802,10 @@ public class CcToolchainFeatures implements Serializable {
}
}
if (foundCategory == null) {
- throw new ExpansionException(
+ throw new InvalidConfigurationException(
String.format(
- "Artifact category %s not recognized", artifactNamePattern.getCategoryName()));
+ "Invalid toolchain configuration: Artifact category %s not recognized",
+ artifactNamePattern.getCategoryName()));
}
this.artifactCategory = foundCategory;
@@ -2053,7 +2054,7 @@ public class CcToolchainFeatures implements Serializable {
}
/**
- * @return the selectable with the given {@code name}.
+ * @return the selectable with the given {@code name}.s
*
* @throws InvalidConfigurationException if no selectable with the given name was configured.
*/
@@ -2074,13 +2075,14 @@ public class CcToolchainFeatures implements Serializable {
}
return featureNames;
}
-
+
/**
- * Returns the artifact selected by the toolchain for the given action type and action category,
- * or null if the category is not supported by the action config.
+ * Returns the artifact selected by the toolchain for the given action type and action category.
+ *
+ * @throws InvalidConfigurationException if the category is not supported by the action config.
*/
String getArtifactNameForCategory(ArtifactCategory artifactCategory, String outputName)
- throws ExpansionException {
+ throws InvalidConfigurationException {
PathFragment output = PathFragment.create(outputName);
ArtifactNamePattern patternForCategory = null;
@@ -2090,7 +2092,7 @@ public class CcToolchainFeatures implements Serializable {
}
}
if (patternForCategory == null) {
- throw new ExpansionException(
+ throw new InvalidConfigurationException(
String.format(
MISSING_ARTIFACT_NAME_PATTERN_ERROR_TEMPLATE, artifactCategory.getCategoryName()));
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
index a079119ab5..815a4a6a8c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
@@ -584,8 +584,11 @@ public class CppCompileActionBuilder {
}
public CppCompileActionBuilder setOutputs(
- RuleContext ruleContext, ArtifactCategory outputCategory, String outputName,
- boolean generateDotd) {
+ RuleContext ruleContext,
+ ArtifactCategory outputCategory,
+ String outputName,
+ boolean generateDotd)
+ throws RuleErrorException {
this.outputFile = CppHelper.getCompileOutputArtifact(
ruleContext,
CppHelper.getArtifactNameForCategory(ruleContext, ccToolchain, outputCategory, outputName),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java
index 3a28981443..baeac86ce0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java
@@ -25,6 +25,7 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact;
import com.google.devtools.build.lib.actions.ArtifactOwner;
import com.google.devtools.build.lib.analysis.actions.ActionTemplate;
+import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -80,13 +81,15 @@ public final class CppCompileActionTemplate implements ActionTemplate<CppCompile
throws ActionTemplateExpansionException {
ImmutableList.Builder<CppCompileAction> expandedActions = new ImmutableList.Builder<>();
for (TreeFileArtifact inputTreeFileArtifact : inputTreeFileArtifacts) {
- String outputName = outputTreeFileArtifactName(inputTreeFileArtifact);
- TreeFileArtifact outputTreeFileArtifact = ActionInputHelper.treeFileArtifact(
- outputTreeArtifact,
- PathFragment.create(outputName),
- artifactOwner);
-
- expandedActions.add(createAction(inputTreeFileArtifact, outputTreeFileArtifact));
+ try {
+ String outputName = outputTreeFileArtifactName(inputTreeFileArtifact);
+ TreeFileArtifact outputTreeFileArtifact =
+ ActionInputHelper.treeFileArtifact(
+ outputTreeArtifact, PathFragment.create(outputName), artifactOwner);
+ expandedActions.add(createAction(inputTreeFileArtifact, outputTreeFileArtifact));
+ } catch (InvalidConfigurationException e) {
+ throw new ActionTemplateExpansionException(e);
+ }
}
return expandedActions.build();
@@ -120,7 +123,8 @@ public final class CppCompileActionTemplate implements ActionTemplate<CppCompile
return result;
}
- private String outputTreeFileArtifactName(TreeFileArtifact inputTreeFileArtifact) {
+ private String outputTreeFileArtifactName(TreeFileArtifact inputTreeFileArtifact)
+ throws InvalidConfigurationException {
String outputName = FileSystemUtils.removeExtension(
inputTreeFileArtifact.getParentRelativePath().getPathString());
for (ArtifactCategory category : categories) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
index 9392ffafe6..411c1527e4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
@@ -44,6 +44,7 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Options;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Options.MakeVariableSource;
import com.google.devtools.build.lib.analysis.config.CompilationMode;
+import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
import com.google.devtools.build.lib.cmdline.Label;
@@ -51,6 +52,7 @@ import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
+import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.packages.RuleErrorConsumer;
import com.google.devtools.build.lib.rules.cpp.CcLinkParams.Linkstamp;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
@@ -912,14 +914,26 @@ public class CppHelper {
objectDir.getRelative(rootRelativePath), sourceTreeArtifact.getRoot());
}
- static String getArtifactNameForCategory(RuleContext ruleContext, CcToolchainProvider toolchain,
- ArtifactCategory category, String outputName) {
- return toolchain.getFeatures().getArtifactNameForCategory(category, outputName);
+ static String getArtifactNameForCategory(
+ RuleContext ruleContext,
+ CcToolchainProvider toolchain,
+ ArtifactCategory category,
+ String outputName)
+ throws RuleErrorException {
+ try {
+ return toolchain.getFeatures().getArtifactNameForCategory(category, outputName);
+ } catch (InvalidConfigurationException e) {
+ ruleContext.throwWithRuleError(e.getMessage());
+ throw new IllegalStateException("Should not be reached");
+ }
}
static String getDotdFileName(
- RuleContext ruleContext, CcToolchainProvider toolchain, ArtifactCategory outputCategory,
- String outputName) {
+ RuleContext ruleContext,
+ CcToolchainProvider toolchain,
+ ArtifactCategory outputCategory,
+ String outputName)
+ throws RuleErrorException {
String baseName = outputCategory == ArtifactCategory.OBJECT_FILE
|| outputCategory == ArtifactCategory.PROCESSED_HEADER
? outputName
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
index 466b3ceed3..2051817205 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
@@ -1149,7 +1149,7 @@ public final class CppModel {
return outputFiles;
}
- String getOutputNameBaseWith(String base, boolean usePic) {
+ String getOutputNameBaseWith(String base, boolean usePic) throws RuleErrorException {
return usePic
? CppHelper.getArtifactNameForCategory(
ruleContext, ccToolchain, ArtifactCategory.PIC_FILE, base)
@@ -1529,9 +1529,12 @@ public final class CppModel {
* Creates cpp PIC compile action builder from the given builder by adding necessary copt and
* changing output and dotd file names.
*/
- private CppCompileActionBuilder copyAsPicBuilder(CppCompileActionBuilder builder,
- String outputName, ArtifactCategory outputCategory,
- boolean generateDotd) {
+ private CppCompileActionBuilder copyAsPicBuilder(
+ CppCompileActionBuilder builder,
+ String outputName,
+ ArtifactCategory outputCategory,
+ boolean generateDotd)
+ throws RuleErrorException {
CppCompileActionBuilder picBuilder = new CppCompileActionBuilder(builder);
picBuilder
.setPicMode(true)