aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2015-09-15 13:56:14 +0000
committerGravatar John Field <jfield@google.com>2015-09-15 20:27:47 +0000
commita6434361097c0ee18c706bf7a86a93324f68e284 (patch)
tree98a3109cb41b1f6cbcb5bae4f9452fdb81553ae4 /src/main/java/com/google
parent5d737d642623749c8672916548b7c7c85b2ca9e6 (diff)
Parse the label syntax "@//a:b" so that eventually we can make that the syntax that means "refer to the main repository".
There isn't an overarching plan for what we are going to do with the cmdline package, which seems to be separated from the .syntax one in all sorts of awkward ways. -- MOS_MIGRATED_REVID=103088960
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/LabelExpander.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/LocationExpander.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleDefinitionEnvironment.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/DefaultsPackage.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/PackageProviderForConfigurations.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/RunUnderConverter.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryFunction.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/cmdline/LabelSyntaxException.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java33
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/ConstantRuleVisibility.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/License.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/Package.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/Rule.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/RuleClass.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/Type.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/pkgcache/TargetPatternResolverUtil.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/PreciseAspectResolver.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationLoader.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentFunction.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/PackageValue.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageLoaderWithValueEnvironment.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/CommaSeparatedPackageNameListConverter.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/Label.java80
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/Parser.java3
50 files changed, 202 insertions, 181 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
index 2f4f86e052..a94134f5bf 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
@@ -29,6 +29,7 @@ import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactory;
import com.google.devtools.build.lib.analysis.config.DefaultsPackage;
import com.google.devtools.build.lib.analysis.config.FragmentOptions;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.graph.Digraph;
import com.google.devtools.build.lib.graph.Node;
@@ -255,7 +256,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
public Label load(String from) {
try {
return Label.parseAbsolute(from);
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new IllegalArgumentException(from);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/LabelExpander.java b/src/main/java/com/google/devtools/build/lib/analysis/LabelExpander.java
index 89ce2e73dc..9c1630869d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/LabelExpander.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/LabelExpander.java
@@ -19,6 +19,7 @@ import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.syntax.Label;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -154,7 +155,7 @@ public final class LabelExpander {
private static Label resolveLabelText(String labelText, Label labelResolver) {
try {
return labelResolver.getRelative(labelText);
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
// It's a heuristic, so quietly ignore "errors". Because Label.getRelative never
// returns null, we can use null to indicate an error.
return null;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/LocationExpander.java b/src/main/java/com/google/devtools/build/lib/analysis/LocationExpander.java
index 04c2d5a071..26b0f8c513 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/LocationExpander.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/LocationExpander.java
@@ -23,6 +23,7 @@ import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.packages.OutputFile;
import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.syntax.Label;
@@ -212,7 +213,7 @@ public class LocationExpander {
private Label parseLabel(String labelText, String message, ErrorReporter reporter) {
try {
return ruleContext.getLabel().getRelative(labelText);
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
reporter.report(ruleContext, String.format("invalid label%s: %s", message, e.getMessage()));
return null;
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinitionEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinitionEnvironment.java
index 4dcd0802e4..1f00eca12f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinitionEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinitionEnvironment.java
@@ -23,9 +23,7 @@ import com.google.devtools.build.lib.syntax.Label;
public interface RuleDefinitionEnvironment {
/**
* Parses the given string as a label and returns the label, by calling {@link
- * Label#parseAbsolute}. Instead of throwing a {@link
- * com.google.devtools.build.lib.syntax.Label.SyntaxException}, it throws an {@link
- * IllegalArgumentException}, if the parsing fails.
+ * Label#parseAbsolute}. Throws a {@link IllegalArgumentException} if the parsing fails.
*/
Label getLabel(String labelValue);
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
index 485786fc53..4ea15094e6 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
@@ -38,6 +38,7 @@ import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
import com.google.devtools.build.lib.analysis.DependencyResolver;
import com.google.devtools.build.lib.analysis.ViewCreationFailedException;
import com.google.devtools.build.lib.analysis.config.BuildConfigurationCollection.Transitions;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.packages.Attribute;
@@ -52,7 +53,6 @@ import com.google.devtools.build.lib.packages.RuleClassProvider;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.rules.test.TestActionBuilder;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.syntax.SkylarkCallable;
import com.google.devtools.build.lib.syntax.SkylarkModule;
import com.google.devtools.build.lib.syntax.SkylarkModuleNameResolver;
@@ -286,7 +286,7 @@ public final class BuildConfiguration {
input = "//" + input;
}
return Label.parseAbsolute(input);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new OptionsParsingException(e.getMessage());
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/DefaultsPackage.java b/src/main/java/com/google/devtools/build/lib/analysis/config/DefaultsPackage.java
index e04633011f..e702ac2c50 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/DefaultsPackage.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/DefaultsPackage.java
@@ -18,8 +18,8 @@ import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import java.util.Locale;
import java.util.Map;
@@ -161,7 +161,7 @@ public final class DefaultsPackage {
if (value.startsWith("//")) {
try {
return Label.parseAbsolute(value);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
// We ignore this exception here - it will cause an error message at a later time.
return null;
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java
index c7b8c47206..677aa3439c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java
@@ -17,9 +17,9 @@ package com.google.devtools.build.lib.analysis.config;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Multimap;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.packages.Attribute.SplitTransition;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.common.options.Options;
import com.google.devtools.common.options.OptionsBase;
@@ -115,7 +115,7 @@ public abstract class FragmentOptions extends OptionsBase implements Cloneable,
if ((value != null) && value.startsWith("//")) {
try {
return Label.parseAbsolute(value);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
// We ignore this exception here - it will cause an error message at a later time.
// TODO(bazel-team): We can use a Converter to check the validity of the crosstoolTop
// earlier.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/PackageProviderForConfigurations.java b/src/main/java/com/google/devtools/build/lib/analysis/config/PackageProviderForConfigurations.java
index 83b4715e0e..d6846ef5d5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/PackageProviderForConfigurations.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/PackageProviderForConfigurations.java
@@ -15,9 +15,9 @@ package com.google.devtools.build.lib.analysis.config;
import com.google.devtools.build.lib.analysis.BlazeDirectories;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.pkgcache.LoadedPackageProvider;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import java.io.IOException;
@@ -29,7 +29,7 @@ public interface PackageProviderForConfigurations extends LoadedPackageProvider
* Adds dependency to fileName if needed. Used only in skyframe, for creating correct dependencies
* for {@link com.google.devtools.build.lib.skyframe.ConfigurationCollectionValue}.
*/
- void addDependency(Package pkg, String fileName) throws SyntaxException, IOException;
+ void addDependency(Package pkg, String fileName) throws LabelSyntaxException, IOException;
/**
* Returns fragment based on fragment type and build options.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/RunUnderConverter.java b/src/main/java/com/google/devtools/build/lib/analysis/config/RunUnderConverter.java
index 8da1fbbaa2..951c478c99 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/RunUnderConverter.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/RunUnderConverter.java
@@ -13,10 +13,10 @@
// limitations under the License.
package com.google.devtools.build.lib.analysis.config;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.shell.ShellUtils;
import com.google.devtools.build.lib.shell.ShellUtils.TokenizationException;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.common.options.Converter;
import com.google.devtools.common.options.OptionsParsingException;
@@ -44,7 +44,7 @@ public class RunUnderConverter implements Converter<RunUnder> {
try {
final Label runUnderLabel = Label.parseAbsolute(runUnderCommand);
return new RunUnderLabel(input, runUnderLabel, runUnderList);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new OptionsParsingException("Not a valid label " + e.getMessage());
}
} else {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryFunction.java
index c8605b89f6..4bf10f794e 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryFunction.java
@@ -17,7 +17,6 @@ package com.google.devtools.build.lib.bazel.repository;
import com.google.common.base.Preconditions;
import com.google.devtools.build.lib.analysis.BlazeDirectories;
import com.google.devtools.build.lib.analysis.RuleDefinition;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
import com.google.devtools.build.lib.packages.AggregatingAttributeMapper;
import com.google.devtools.build.lib.packages.BuildFileContainsErrorsException;
@@ -255,8 +254,7 @@ public abstract class RepositoryFunction implements SkyFunction {
public static Rule getRule(
RepositoryName repositoryName, @Nullable String ruleClassName, Environment env)
throws RepositoryFunctionException {
- SkyKey packageKey = PackageValue.key(
- PackageIdentifier.createInDefaultRepo(ExternalPackage.NAME));
+ SkyKey packageKey = PackageValue.key(ExternalPackage.PACKAGE_IDENTIFIER);
PackageValue packageValue;
try {
packageValue = (PackageValue) env.getValueOrThrow(packageKey,
@@ -327,7 +325,8 @@ public abstract class RepositoryFunction implements SkyFunction {
}
public static Path getExternalRepositoryDirectory(BlazeDirectories directories) {
- return directories.getOutputBase().getRelative(ExternalPackage.NAME);
+ return directories.getOutputBase().getRelative(
+ ExternalPackage.PACKAGE_IDENTIFIER.getPackageFragment());
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/LabelSyntaxException.java b/src/main/java/com/google/devtools/build/lib/cmdline/LabelSyntaxException.java
new file mode 100644
index 0000000000..3c66959021
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/LabelSyntaxException.java
@@ -0,0 +1,24 @@
+// Copyright 2015 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.cmdline;
+
+/**
+ * Thrown by the parsing methods to indicate a bad label.
+ */
+public class LabelSyntaxException extends Exception {
+ public LabelSyntaxException(String message) {
+ super(message);
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java b/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java
index 8867c98d2c..9d0ef0edcf 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java
@@ -55,12 +55,12 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S
.build(
new CacheLoader<String, RepositoryName> () {
@Override
- public RepositoryName load(String name) throws TargetParsingException {
+ public RepositoryName load(String name) throws LabelSyntaxException {
String errorMessage = validate(name);
if (errorMessage != null) {
errorMessage = "invalid repository name '"
+ StringUtilities.sanitizeControlChars(name) + "': " + errorMessage;
- throw new TargetParsingException(errorMessage);
+ throw new LabelSyntaxException(errorMessage);
}
return new RepositoryName(StringCanonicalizer.intern(name));
}
@@ -70,11 +70,11 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S
* Makes sure that name is a valid repository name and creates a new RepositoryName using it.
* @throws TargetParsingException if the name is invalid.
*/
- public static RepositoryName create(String name) throws TargetParsingException {
+ public static RepositoryName create(String name) throws LabelSyntaxException {
try {
return repositoryNameCache.get(name);
} catch (ExecutionException e) {
- Throwables.propagateIfInstanceOf(e.getCause(), TargetParsingException.class);
+ Throwables.propagateIfInstanceOf(e.getCause(), LabelSyntaxException.class);
throw new IllegalStateException("Failed to create RepositoryName from " + name, e);
}
}
@@ -97,11 +97,6 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S
return "workspace name must start with '@'";
}
- // "@" isn't a valid workspace name.
- if (name.length() == 1) {
- return "empty workspace name";
- }
-
// Check for any character outside of [/0-9A-Za-z_.-]. Try to evaluate the
// conditional quickly (by looking in decreasing order of character class
// likelihood).
@@ -174,11 +169,13 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S
public static final String DEFAULT_REPOSITORY = "";
public static final RepositoryName DEFAULT_REPOSITORY_NAME;
+ public static final RepositoryName MAIN_REPOSITORY_NAME;
static {
try {
DEFAULT_REPOSITORY_NAME = RepositoryName.create(DEFAULT_REPOSITORY);
- } catch (TargetParsingException e) {
+ MAIN_REPOSITORY_NAME = RepositoryName.create("@");
+ } catch (LabelSyntaxException e) {
throw new IllegalStateException(e);
}
}
@@ -205,7 +202,7 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S
throws IOException, ClassNotFoundException {
try {
packageId = new PackageIdentifier((String) in.readObject(), (PathFragment) in.readObject());
- } catch (TargetParsingException e) {
+ } catch (LabelSyntaxException e) {
throw new IOException("Error serializing package identifier: " + e.getMessage());
}
}
@@ -228,7 +225,7 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S
public static PackageIdentifier createInDefaultRepo(PathFragment name) {
try {
return new PackageIdentifier(DEFAULT_REPOSITORY, name);
- } catch (TargetParsingException e) {
+ } catch (LabelSyntaxException e) {
throw new IllegalArgumentException("could not create package identifier for " + name
+ ": " + e.getMessage());
}
@@ -243,7 +240,7 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S
/** The name of the package. Canonical (i.e. x.equals(y) <=> x==y). */
private final PathFragment pkgName;
- public PackageIdentifier(String repository, PathFragment pkgName) throws TargetParsingException {
+ public PackageIdentifier(String repository, PathFragment pkgName) throws LabelSyntaxException {
this(RepositoryName.create(repository), pkgName);
}
@@ -254,13 +251,15 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S
this.pkgName = Canonicalizer.fragments().intern(pkgName.normalize());
}
- public static PackageIdentifier parse(String input) throws TargetParsingException {
+ public static PackageIdentifier parse(String input) throws LabelSyntaxException {
String repo;
String packageName;
int packageStartPos = input.indexOf("//");
- if (packageStartPos > 0) {
+ if (input.startsWith("@") && packageStartPos > 0) {
repo = input.substring(0, packageStartPos);
packageName = input.substring(packageStartPos + 2);
+ } else if (input.startsWith("@")) {
+ throw new LabelSyntaxException("invalid package name '" + input + "'");
} else if (packageStartPos == 0) {
repo = PackageIdentifier.DEFAULT_REPOSITORY;
packageName = input.substring(2);
@@ -271,12 +270,12 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S
String error = RepositoryName.validate(repo);
if (error != null) {
- throw new TargetParsingException(error);
+ throw new LabelSyntaxException(error);
}
error = LabelValidator.validatePackageName(packageName);
if (error != null) {
- throw new TargetParsingException(error);
+ throw new LabelSyntaxException(error);
}
return new PackageIdentifier(repo, new PathFragment(packageName));
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ConstantRuleVisibility.java b/src/main/java/com/google/devtools/build/lib/packages/ConstantRuleVisibility.java
index bb64015fad..8d506937b8 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/ConstantRuleVisibility.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/ConstantRuleVisibility.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.packages;
import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.syntax.Label;
@@ -43,7 +44,7 @@ public class ConstantRuleVisibility implements RuleVisibility, Serializable {
PUBLIC_LABEL = Label.parseAbsolute("//visibility:public");
LEGACY_PUBLIC_LABEL = Label.parseAbsolute("//visibility:legacy_public");
PRIVATE_LABEL = Label.parseAbsolute("//visibility:private");
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new IllegalStateException();
}
}
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 cfb8143180..fdb63e262a 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
@@ -18,16 +18,15 @@ import com.google.common.base.Preconditions;
import com.google.common.base.Verify;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
-import com.google.devtools.build.lib.cmdline.TargetParsingException;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.events.StoredEventHandler;
import com.google.devtools.build.lib.packages.RuleFactory.InvalidRuleException;
import com.google.devtools.build.lib.syntax.Environment;
import com.google.devtools.build.lib.syntax.FuncallExpression;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.vfs.Path;
import java.util.Map;
@@ -36,9 +35,15 @@ import java.util.Map;
* This creates the //external package, where targets not homed in this repository can be bound.
*/
public class ExternalPackage extends Package {
- public static final String NAME = "external";
- public static final PackageIdentifier PACKAGE_IDENTIFIER =
- PackageIdentifier.createInDefaultRepo(NAME);
+ public static final PackageIdentifier PACKAGE_IDENTIFIER;
+
+ static {
+ try {
+ PACKAGE_IDENTIFIER = PackageIdentifier.parse("//external");
+ } catch (LabelSyntaxException e) {
+ throw new IllegalStateException();
+ }
+ }
private Map<RepositoryName, Rule> repositoryMap;
@@ -133,15 +138,16 @@ public class ExternalPackage extends Package {
*/
public Builder createAndAddRepositoryRule(RuleClass ruleClass, RuleClass bindRuleClass,
Map<String, Object> kwargs, FuncallExpression ast, Environment env)
- throws InvalidRuleException, NameConflictException, SyntaxException, InterruptedException {
+ throws InvalidRuleException, NameConflictException, LabelSyntaxException,
+ InterruptedException {
StoredEventHandler eventHandler = new StoredEventHandler();
Rule tempRule = RuleFactory.createRule(
this, ruleClass, kwargs, eventHandler, ast, ast.getLocation(), env);
addEvents(eventHandler.getEvents());
try {
repositoryMap.put(RepositoryName.create("@" + tempRule.getName()), tempRule);
- } catch (TargetParsingException e) {
- throw new SyntaxException(e.getMessage());
+ } catch (LabelSyntaxException e) {
+ throw new LabelSyntaxException(e.getMessage());
}
for (Map.Entry<String, Label> entry :
ruleClass.getExternalBindingsFunction().apply(tempRule).entrySet()) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/License.java b/src/main/java/com/google/devtools/build/lib/packages/License.java
index f4e554e2ff..98ed31d38b 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/License.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/License.java
@@ -20,13 +20,13 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableTable;
import com.google.common.collect.Sets;
import com.google.common.collect.Table;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import java.util.Collection;
import java.util.Collections;
@@ -209,7 +209,7 @@ public final class License {
try {
Label label = Label.parseAbsolute(str.substring("exception=".length()));
exceptions.add(label);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new LicenseParsingException(e.getMessage());
}
} else {
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 256aab09df..0fbc72681a 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
@@ -24,6 +24,7 @@ import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.collect.CollectionUtils;
import com.google.devtools.build.lib.collect.ImmutableSortedKeyMap;
@@ -36,7 +37,6 @@ import com.google.devtools.build.lib.packages.PackageDeserializer.PackageDeseria
import com.google.devtools.build.lib.packages.PackageFactory.Globber;
import com.google.devtools.build.lib.syntax.FuncallExpression;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.Canonicalizer;
import com.google.devtools.build.lib.vfs.Path;
@@ -586,7 +586,7 @@ public class Package implements Serializable {
throw new NoSuchTargetException(createLabel(targetName), "target '" + targetName
+ "' not declared in package '" + name + "'" + suffix + " defined by "
+ this.filename);
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new IllegalArgumentException(targetName);
}
}
@@ -594,9 +594,9 @@ public class Package implements Serializable {
/**
* Creates a label for a target inside this package.
*
- * @throws SyntaxException if the {@code targetName} is invalid
+ * @throws LabelSyntaxException if the {@code targetName} is invalid
*/
- public Label createLabel(String targetName) throws SyntaxException {
+ public Label createLabel(String targetName) throws LabelSyntaxException {
return Label.create(packageIdentifier, targetName);
}
@@ -841,7 +841,7 @@ public class Package implements Serializable {
try {
buildFileLabel = createLabel(filename.getBaseName());
addInputFile(buildFileLabel, Location.fromFile(filename));
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
// This can't actually happen.
throw new AssertionError("Package BUILD file has an illegal name: " + filename);
}
@@ -1105,7 +1105,7 @@ public class Package implements Serializable {
if (existing == null) {
try {
return addInputFile(createLabel(targetName), location);
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new IllegalArgumentException("FileTarget in package " + pkg.getName()
+ " has illegal name: " + targetName);
}
@@ -1142,9 +1142,9 @@ public class Package implements Serializable {
/**
* Creates a label for a target inside this package.
*
- * @throws SyntaxException if the {@code targetName} is invalid
+ * @throws LabelSyntaxException if the {@code targetName} is invalid
*/
- Label createLabel(String targetName) throws SyntaxException {
+ Label createLabel(String targetName) throws LabelSyntaxException {
return Label.create(pkg.getPackageIdentifier(), targetName);
}
@@ -1153,7 +1153,7 @@ public class Package implements Serializable {
*/
void addPackageGroup(String name, Collection<String> packages, Collection<Label> includes,
EventHandler eventHandler, Location location)
- throws NameConflictException, Label.SyntaxException {
+ throws NameConflictException, LabelSyntaxException {
PackageGroup group =
new PackageGroup(createLabel(name), pkg, packages, includes, eventHandler, location);
Target existing = targets.get(group.getName());
@@ -1190,7 +1190,7 @@ public class Package implements Serializable {
*/
void addEnvironmentGroup(String name, List<Label> environments, List<Label> defaults,
EventHandler eventHandler, Location location)
- throws NameConflictException, SyntaxException {
+ throws NameConflictException, LabelSyntaxException {
if (!checkForDuplicateLabels(environments, name, "environments", location, eventHandler)
|| !checkForDuplicateLabels(defaults, name, "defaults", location, eventHandler)) {
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 2f0715c139..9dbb7efdc4 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
@@ -23,8 +23,8 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.devtools.build.lib.cmdline.TargetParsingException;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.events.NullEventHandler;
@@ -40,7 +40,6 @@ import com.google.devtools.build.lib.syntax.FilesetEntry;
import com.google.devtools.build.lib.syntax.GlobCriteria;
import com.google.devtools.build.lib.syntax.GlobList;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -92,7 +91,7 @@ public class PackageDeserializer {
public Label load(String labelString) throws PackageDeserializationException {
try {
return Label.parseAbsolute(labelString);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new PackageDeserializationException("Invalid label: " + e.getMessage(), e);
}
}
@@ -160,7 +159,7 @@ public class PackageDeserializer {
deserializeLabels(packageGroupPb.getIncludedPackageGroupList()),
NullEventHandler.INSTANCE, // TODO(bazel-team): Handle errors properly
EmptyLocation.INSTANCE);
- } catch (Label.SyntaxException | Package.NameConflictException e) {
+ } catch (LabelSyntaxException | Package.NameConflictException e) {
throw new PackageDeserializationException(e);
}
}
@@ -183,7 +182,7 @@ public class PackageDeserializer {
context.packageBuilder.addRule(rule);
Preconditions.checkState(!rule.containsErrors());
- } catch (NameConflictException | SyntaxException e) {
+ } catch (NameConflictException | LabelSyntaxException e) {
throw new PackageDeserializationException(e);
}
}
@@ -452,7 +451,7 @@ public class PackageDeserializer {
builder = new Package.Builder(
new PackageIdentifier(packagePb.getRepository(), new PathFragment(packagePb.getName())),
null);
- } catch (TargetParsingException e) {
+ } catch (LabelSyntaxException e) {
throw new PackageDeserializationException(e);
}
StoredEventHandler eventHandler = new StoredEventHandler();
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 4fd5428153..1a7c376731 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
@@ -21,6 +21,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.LabelValidator;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.events.Event;
@@ -626,7 +627,7 @@ public final class PackageFactory {
context.pkgBuilder.addEnvironmentGroup(
name, environments, defaults, context.eventHandler, loc);
return Runtime.NONE;
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new EvalException(loc,
"environment group has invalid name: " + name + ": " + e.getMessage());
} catch (Package.NameConflictException e) {
@@ -819,7 +820,7 @@ public final class PackageFactory {
context.pkgBuilder.addPackageGroup(name, packages, includes, context.eventHandler,
ast.getLocation());
return Runtime.NONE;
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new EvalException(ast.getLocation(),
"package group has invalid name: " + name + ": " + e.getMessage());
} catch (Package.NameConflictException e) {
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 da1c80494c..48021697ca 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
@@ -27,6 +27,7 @@ import com.google.common.collect.LinkedListMultimap;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.Location;
@@ -36,7 +37,6 @@ import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.FuncallExpression;
import com.google.devtools.build.lib.syntax.GlobList;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.util.BinaryPredicate;
import java.util.Collection;
@@ -484,7 +484,7 @@ public final class Rule implements Target {
* will retain the relative order in which they were declared.
*/
void populateOutputFiles(EventHandler eventHandler, Package.Builder pkgBuilder)
- throws SyntaxException, InterruptedException {
+ throws LabelSyntaxException, InterruptedException {
Preconditions.checkState(outputFiles == null);
// Order is important here: implicit before explicit
outputFiles = Lists.newArrayList();
@@ -496,7 +496,7 @@ public final class Rule implements Target {
}
// Explicit output files are user-specified attributes of type OUTPUT.
- private void populateExplicitOutputFiles(EventHandler eventHandler) throws SyntaxException {
+ private void populateExplicitOutputFiles(EventHandler eventHandler) throws LabelSyntaxException {
NonconfigurableAttributeMapper nonConfigurableAttributes =
NonconfigurableAttributeMapper.of(this);
for (Attribute attribute : ruleClass.getAttributes()) {
@@ -525,7 +525,7 @@ public final class Rule implements Target {
for (String out : ruleClass.getImplicitOutputsFunction().getImplicitOutputs(attributeMap)) {
try {
addOutputFile(pkgBuilder.createLabel(out), eventHandler);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
reportError("illegal output file name '" + out + "' in rule "
+ getLabel(), eventHandler);
}
@@ -536,7 +536,7 @@ public final class Rule implements Target {
}
private void addLabelOutput(Attribute attribute, Label label, EventHandler eventHandler)
- throws SyntaxException {
+ throws LabelSyntaxException {
if (!label.getPackageIdentifier().equals(pkg.getPackageIdentifier())) {
throw new IllegalStateException("Label for attribute " + attribute
+ " should refer to '" + pkg.getName()
@@ -544,7 +544,7 @@ public final class Rule implements Target {
+ "' (label '" + label.getName() + "')");
}
if (label.getName().equals(".")) {
- throw new SyntaxException("output file name can't be equal '.'");
+ throw new LabelSyntaxException("output file name can't be equal '.'");
}
OutputFile outputFile = addOutputFile(label, eventHandler);
outputFileMap.put(attribute.getName(), outputFile);
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 1e7dd2a46f..34ff1aff55 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
@@ -29,6 +29,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Ordering;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition;
@@ -40,7 +41,6 @@ import com.google.devtools.build.lib.syntax.FragmentClassNameResolver;
import com.google.devtools.build.lib.syntax.FuncallExpression;
import com.google.devtools.build.lib.syntax.GlobList;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.syntax.Runtime;
import com.google.devtools.build.lib.util.StringUtil;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -1315,7 +1315,7 @@ public final class RuleClass {
*/
Rule createRuleWithLabel(Package.Builder pkgBuilder, Label ruleLabel,
Map<String, Object> attributeValues, EventHandler eventHandler, FuncallExpression ast,
- Location location) throws SyntaxException, InterruptedException {
+ Location location) throws LabelSyntaxException, InterruptedException {
Rule rule = pkgBuilder.newRuleWithLabel(ruleLabel, this, null, location);
createRuleCommon(rule, pkgBuilder, attributeValues, eventHandler, ast);
return rule;
@@ -1323,7 +1323,7 @@ public final class RuleClass {
private void createRuleCommon(Rule rule, Package.Builder pkgBuilder,
Map<String, Object> attributeValues, EventHandler eventHandler, FuncallExpression ast)
- throws SyntaxException, InterruptedException {
+ throws LabelSyntaxException, InterruptedException {
populateRuleAttributeValues(
rule, pkgBuilder, attributeValues, eventHandler, ast);
rule.populateOutputFiles(eventHandler, pkgBuilder);
@@ -1365,7 +1365,7 @@ public final class RuleClass {
Rule createRuleWithParsedAttributeValues(Label label,
Package.Builder pkgBuilder, Location ruleLocation,
Map<String, ParsedAttributeValue> attributeValues, EventHandler eventHandler)
- throws SyntaxException, InterruptedException {
+ throws LabelSyntaxException, InterruptedException {
Rule rule = pkgBuilder.newRuleWithLabel(label, this, null, ruleLocation);
rule.checkValidityPredicate(eventHandler);
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 f647c07cb4..1eb283485e 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
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.packages;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.Package.NameConflictException;
@@ -24,7 +25,6 @@ import com.google.devtools.build.lib.syntax.BaseFunction;
import com.google.devtools.build.lib.syntax.Environment;
import com.google.devtools.build.lib.syntax.FuncallExpression;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.syntax.UserDefinedFunction;
import com.google.devtools.build.lib.util.Pair;
@@ -98,7 +98,7 @@ public class RuleFactory {
// Test that this would form a valid label name -- in particular, this
// catches cases where Makefile variables $(foo) appear in "name".
label = pkgBuilder.createLabel(name);
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new InvalidRuleException("illegal rule name: " + name + ": " + e.getMessage());
}
boolean inWorkspaceFile =
@@ -115,7 +115,7 @@ public class RuleFactory {
try {
return ruleClass.createRuleWithLabel(
pkgBuilder, label, generator.attributes, eventHandler, ast, generator.location);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new RuleFactory.InvalidRuleException(ruleClass + " " + e.getMessage());
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Type.java b/src/main/java/com/google/devtools/build/lib/packages/Type.java
index b88c7a1f31..fa2ce679b8 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Type.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Type.java
@@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.packages.License.DistributionType;
import com.google.devtools.build.lib.packages.License.LicenseParsingException;
import com.google.devtools.build.lib.syntax.EvalException;
@@ -670,7 +671,7 @@ public abstract class Type<T> {
try {
return currentRule.getRelative(
STRING.convert(x, what, currentRule));
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new ConversionException("invalid label '" + x + "' in "
+ what + ": " + e.getMessage());
}
@@ -796,7 +797,7 @@ public abstract class Type<T> {
throw new ConversionException("label '" + value + "' is not in the current package");
}
return result;
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new ConversionException(
"illegal output file name '" + value + "' in rule " + currentRule + ": "
+ e.getMessage());
@@ -1043,7 +1044,7 @@ public abstract class Type<T> {
try {
defaultConditionLabel = Label.parseAbsolute(DEFAULT_CONDITION_KEY);
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new IllegalStateException(DEFAULT_CONDITION_KEY + " is not a valid label");
}
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 74def59324..a19b36bd18 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
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.packages;
import static com.google.devtools.build.lib.syntax.Runtime.NONE;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.LabelValidator;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.Location;
@@ -119,11 +120,11 @@ public class WorkspaceFactory {
builder.addBindRule(ruleClass, nameLabel,
actual == null ? null : Label.parseAbsolute(actual), loc);
} catch (RuleFactory.InvalidRuleException | Package.NameConflictException |
- Label.SyntaxException e) {
+ LabelSyntaxException e) {
throw new EvalException(loc, e.getMessage());
}
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new EvalException(loc, e.getMessage());
}
return NONE;
@@ -146,7 +147,7 @@ public class WorkspaceFactory {
RuleClass bindRuleClass = ruleFactory.getRuleClass("bind");
builder.createAndAddRepositoryRule(ruleClass, bindRuleClass, kwargs, ast, env);
} catch (RuleFactory.InvalidRuleException | Package.NameConflictException |
- Label.SyntaxException e) {
+ LabelSyntaxException e) {
throw new EvalException(ast.getLocation(), e.getMessage());
}
return NONE;
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/TargetPatternResolverUtil.java b/src/main/java/com/google/devtools/build/lib/pkgcache/TargetPatternResolverUtil.java
index a291150dda..c1794c0383 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/TargetPatternResolverUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/TargetPatternResolverUtil.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.pkgcache;
import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.LabelValidator;
import com.google.devtools.build.lib.cmdline.ResolvedTargets;
import com.google.devtools.build.lib.cmdline.TargetParsingException;
@@ -32,12 +33,12 @@ public final class TargetPatternResolverUtil {
// Utility class.
}
- // Parse 'label' as a Label, mapping Label.SyntaxException into
+ // Parse 'label' as a Label, mapping LabelSyntaxException into
// TargetParsingException.
public static Label label(String label) throws TargetParsingException {
try {
return Label.parseAbsolute(label);
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw invalidTarget(label, e.getMessage());
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java
index da7c3d9622..24cc3f2778 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java
@@ -19,6 +19,7 @@ import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.ResolvedTargets;
import com.google.devtools.build.lib.cmdline.TargetParsingException;
import com.google.devtools.build.lib.events.EventHandler;
@@ -339,7 +340,7 @@ public class BlazeQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
try {
addIfUniqueLabel(getSubincludeTarget(
subinclude.getLocalTargetLabel("BUILD"), pkg), seenLabels, dependentFiles);
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new AssertionError("BUILD should always parse as a target name", e);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
index 1945c45ddd..6171081fd6 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
@@ -26,6 +26,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.cmdline.TargetParsingException;
import com.google.devtools.build.lib.cmdline.TargetPattern;
@@ -327,7 +328,7 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target> {
try {
addIfUniqueLabel(getSubincludeTarget(
subinclude.getLocalTargetLabel("BUILD"), pkg), seenLabels, dependentFiles);
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new AssertionError("BUILD should always parse as a target name", e);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/query2/output/PreciseAspectResolver.java b/src/main/java/com/google/devtools/build/lib/query2/output/PreciseAspectResolver.java
index dee20c4a53..a9c9936365 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/output/PreciseAspectResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/output/PreciseAspectResolver.java
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.query2.output;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.LinkedListMultimap;
import com.google.common.collect.Multimap;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.packages.AspectDefinition;
@@ -119,7 +120,7 @@ public class PreciseAspectResolver implements AspectResolver {
// If the package is not found, just add its BUILD file, which is already done above.
// Hopefully this error is not raised when there is a syntax error in a subincluded file
// or something.
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new IllegalStateException(e);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java
index 2595cf9f52..066ac5254b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java
@@ -38,6 +38,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.RunUnder;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition;
@@ -115,7 +116,7 @@ public class SkylarkRuleClassFunctions {
public Label load(String from) throws Exception {
try {
return Label.parseAbsolute(from);
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new Exception(from);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
index c999e7fad7..1b9f786c02 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
@@ -38,13 +38,13 @@ import com.google.devtools.build.lib.analysis.config.BuildOptions;
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.config.PerLabelOptions;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.rules.cpp.CppConfigurationLoader.CppConfigurationParameters;
import com.google.devtools.build.lib.rules.cpp.FdoSupport.FdoException;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.syntax.SkylarkCallable;
import com.google.devtools.build.lib.syntax.SkylarkModule;
import com.google.devtools.build.lib.util.IncludeScanningUtil;
@@ -382,7 +382,7 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
this.dynamicRuntimeLibsLabel =
crosstoolTop.getRelative(toolchain.hasDynamicRuntimesFilegroup() ?
toolchain.getDynamicRuntimesFilegroup() : "dynamic-runtime-libs-" + targetCpu);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
// All of the above label.getRelative() calls are valid labels, and the crosstool_top
// was already checked earlier in the process.
throw new AssertionError(e);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationLoader.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationLoader.java
index 2ad010a89a..96b1add119 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationLoader.java
@@ -25,6 +25,7 @@ import com.google.devtools.build.lib.analysis.config.ConfigurationEnvironment;
import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactory;
import com.google.devtools.build.lib.analysis.config.FragmentOptions;
import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.packages.InputFile;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
import com.google.devtools.build.lib.packages.NoSuchTargetException;
@@ -34,7 +35,6 @@ import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig;
@@ -153,7 +153,7 @@ public class CppConfigurationLoader implements ConfigurationFragmentFactory {
throw new InvalidConfigurationException(
"The --fdo_optimize parameter you specified resolves to a file that does not exist");
}
- } catch (NoSuchPackageException | NoSuchTargetException | SyntaxException e) {
+ } catch (NoSuchPackageException | NoSuchTargetException | LabelSyntaxException e) {
throw new InvalidConfigurationException(e);
}
} else {
@@ -189,7 +189,7 @@ public class CppConfigurationLoader implements ConfigurationFragmentFactory {
} else {
try {
ccToolchainLabel = crosstoolTopLabel.getRelative("cc-compiler-" + toolchain.getTargetCpu());
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new InvalidConfigurationException(String.format(
"'%s' is not a valid CPU. It should only consist of characters valid in labels",
toolchain.getTargetCpu()));
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 0a628f333a..1e8b247475 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
@@ -30,6 +30,7 @@ import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.packages.RuleErrorConsumer;
import com.google.devtools.build.lib.packages.Type;
@@ -38,7 +39,6 @@ import com.google.devtools.build.lib.rules.cpp.CppCompilationContext.Builder;
import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
import com.google.devtools.build.lib.shell.ShellUtils;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.util.FileTypeSet;
import com.google.devtools.build.lib.util.IncludeScanningUtil;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -198,7 +198,7 @@ public class CppHelper {
return true;
}
}
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
// Quietly ignore and fall through.
}
linkopts.add(labelName);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
index 7915bb2916..ebb4e77767 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
@@ -24,11 +24,11 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration.LabelCon
import com.google.devtools.build.lib.analysis.config.CompilationMode;
import com.google.devtools.build.lib.analysis.config.FragmentOptions;
import com.google.devtools.build.lib.analysis.config.PerLabelOptions;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.HeadersCheckingMode;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.LibcTop;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.StripMode;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.util.OptionsUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode;
@@ -134,7 +134,7 @@ public class CppOptions extends FragmentOptions {
try {
Label label = Label.parseAbsolute(input).getRelative(LIBC_RELATIVE_LABEL);
return new LibcTop(label);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new OptionsParsingException(e.getMessage());
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java
index 15e91e2c67..22ae3ec0e1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java
@@ -25,6 +25,7 @@ import com.google.devtools.build.lib.analysis.RedirectChaser;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.analysis.config.ConfigurationEnvironment;
import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.packages.NoSuchThingException;
import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper;
import com.google.devtools.build.lib.packages.Package;
@@ -32,7 +33,6 @@ import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
@@ -210,7 +210,7 @@ public class CrosstoolConfigurationLoader {
return null;
}
path = env.getPath(containingPackage, CROSSTOOL_CONFIGURATION_FILENAME);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new InvalidConfigurationException(e);
} catch (NoSuchThingException e) {
// Handled later
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
index 737ab6da30..dfe87157cf 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
@@ -183,7 +183,7 @@ public class GenQuery implements RuleConfiguredTargetFactory {
for (Label scopePart : scopeLabels) {
SkyFunction.Environment env = context.getAnalysisEnvironment().getSkyframeEnv();
PackageValue packageNode =
- (PackageValue) env.getValue(PackageValue.key(scopePart.getPackageFragment()));
+ (PackageValue) env.getValue(PackageValue.key(scopePart.getPackageIdentifier()));
Preconditions.checkNotNull(
packageNode,
"Packages in transitive closure of scope '%s'"
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java
index 2151bffc2c..ffca84342f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java
@@ -19,11 +19,11 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.StrictDepsMode;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.syntax.SkylarkCallable;
import com.google.devtools.build.lib.syntax.SkylarkModule;
import com.google.devtools.common.options.TriState;
@@ -97,7 +97,7 @@ public final class JavaConfiguration extends Fragment {
try {
Label label = Label.parseAbsolute(s);
translationsBuilder.add(label);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new InvalidConfigurationException("Invalid translations target '" + s + "', make " +
"sure it uses correct absolute path syntax.", e);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
index 4b564a5e13..6b7a3536f3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
@@ -22,9 +22,9 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration.StrictDe
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.StrictDepsMode;
import com.google.devtools.build.lib.analysis.config.DefaultsPackage;
import com.google.devtools.build.lib.analysis.config.FragmentOptions;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.rules.java.JavaConfiguration.JavaClasspathMode;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.common.options.Converters.StringSetConverter;
import com.google.devtools.common.options.EnumConverter;
import com.google.devtools.common.options.Option;
@@ -362,7 +362,7 @@ public class JavaOptions extends FragmentOptions {
try {
Label label = Label.parseAbsolute(s);
result.add(label);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
// We ignore this exception here - it will cause an error message at a later time.
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java b/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java
index c6fff96b96..ecc013ab2d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java
@@ -23,6 +23,7 @@ import com.google.devtools.build.lib.analysis.config.ConfigurationEnvironment;
import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactory;
import com.google.devtools.build.lib.analysis.config.FragmentOptions;
import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
import com.google.devtools.build.lib.packages.NoSuchTargetException;
import com.google.devtools.build.lib.packages.RawAttributeMapper;
@@ -30,7 +31,6 @@ import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.List;
@@ -156,7 +156,7 @@ public final class JvmConfigurationLoader implements ConfigurationFragmentFactor
throw new InvalidConfigurationException(e.getMessage(), e);
} catch (NoSuchTargetException e) {
throw new InvalidConfigurationException("No such target: " + e.getMessage(), e);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new InvalidConfigurationException(e.getMessage(), e);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
index 130be53c92..1570d7f82e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
@@ -32,6 +32,7 @@ import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
import com.google.devtools.build.lib.analysis.actions.ParameterFileWriteAction;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
+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.packages.AspectDefinition;
@@ -44,7 +45,6 @@ import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider;
import com.google.devtools.build.lib.rules.java.Jvm;
import com.google.devtools.build.lib.rules.objc.J2ObjcSource.SourceType;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -83,7 +83,7 @@ public class J2ObjcAspect implements ConfiguredAspectFactory {
private static Label parseLabel(String from) {
try {
return Label.parseAbsolute(from);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new IllegalArgumentException(from);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentFunction.java
index d19da4bd11..b48c027004 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentFunction.java
@@ -22,13 +22,13 @@ import com.google.devtools.build.lib.analysis.config.ConfigurationEnvironment;
import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactory;
import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
import com.google.devtools.build.lib.analysis.config.PackageProviderForConfigurations;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
import com.google.devtools.build.lib.packages.NoSuchTargetException;
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.skyframe.ConfigurationFragmentValue.ConfigurationFragmentKey;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyFunctionException;
@@ -112,7 +112,7 @@ public class ConfigurationFragmentFunction implements SkyFunction {
Path result = pkg.getPackageDirectory().getRelative(fileName);
try {
loadedPackageProvider.addDependency(pkg, fileName);
- } catch (IOException | SyntaxException e) {
+ } catch (IOException | LabelSyntaxException e) {
return null;
}
return result;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
index cf0bf4ebc7..95fef27c7e 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
@@ -378,11 +378,11 @@ public class PackageFunction implements SkyFunction {
}
}
- if (packageName.equals(EXTERNAL_PACKAGE_NAME)) {
+ if (packageId.equals(ExternalPackage.PACKAGE_IDENTIFIER)) {
return getExternalPackage(env, packageLookupValue.getRoot());
}
PackageValue externalPackage = (PackageValue) env.getValue(
- PackageValue.key(PackageIdentifier.createInDefaultRepo(EXTERNAL_PACKAGE_NAME)));
+ PackageValue.key(ExternalPackage.PACKAGE_IDENTIFIER));
if (externalPackage == null) {
return null;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
index ad815e10ef..610971dafd 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
@@ -51,9 +51,10 @@ public class PackageLookupFunction implements SkyFunction {
public SkyValue compute(SkyKey skyKey, Environment env) throws PackageLookupFunctionException {
PathPackageLocator pkgLocator = PrecomputedValue.PATH_PACKAGE_LOCATOR.get(env);
PackageIdentifier packageKey = (PackageIdentifier) skyKey.argument();
- if (!packageKey.getRepository().isDefault()) {
+ if (!packageKey.getRepository().equals(PackageIdentifier.MAIN_REPOSITORY_NAME)
+ && !packageKey.getRepository().isDefault()) {
return computeExternalPackageLookupValue(skyKey, env, packageKey);
- } else if (packageKey.getPackageFragment().equals(new PathFragment(ExternalPackage.NAME))) {
+ } else if (packageKey.equals(ExternalPackage.PACKAGE_IDENTIFIER)) {
return computeWorkspaceLookupValue(env, packageKey);
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageValue.java
index f90df2d2b1..ade85a7727 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageValue.java
@@ -18,7 +18,6 @@ import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.packages.Package;
-import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.RootedPath;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
@@ -45,11 +44,6 @@ public class PackageValue implements SkyValue {
return "<PackageValue name=" + pkg.getName() + ">";
}
- @ThreadSafe
- public static SkyKey key(PathFragment pkgName) {
- return key(PackageIdentifier.createInDefaultRepo(pkgName));
- }
-
public static SkyKey key(PackageIdentifier pkgIdentifier) {
return new SkyKey(SkyFunctions.PACKAGE, pkgIdentifier);
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java
index 891a39c34c..051215d39c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.skyframe;
import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.cmdline.ResolvedTargets;
import com.google.devtools.build.lib.cmdline.TargetParsingException;
@@ -87,7 +88,7 @@ public class RecursivePackageProviderBackedTargetPatternResolver
return null;
}
return recursivePackageProvider.getTarget(eventHandler, label);
- } catch (Label.SyntaxException | NoSuchThingException e) {
+ } catch (LabelSyntaxException | NoSuchThingException e) {
return null;
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageLoaderWithValueEnvironment.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageLoaderWithValueEnvironment.java
index 64ee756562..80ccb1380e 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageLoaderWithValueEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageLoaderWithValueEnvironment.java
@@ -18,6 +18,7 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
import com.google.devtools.build.lib.analysis.config.PackageProviderForConfigurations;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
import com.google.devtools.build.lib.packages.NoSuchTargetException;
@@ -25,7 +26,6 @@ import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor.SkyframePackageLoader;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.vfs.RootedPath;
import com.google.devtools.build.skyframe.MemoizingEvaluator;
import com.google.devtools.build.skyframe.SkyFunction;
@@ -81,7 +81,7 @@ class SkyframePackageLoaderWithValueEnvironment implements
}
@Override
- public void addDependency(Package pkg, String fileName) throws SyntaxException, IOException {
+ public void addDependency(Package pkg, String fileName) throws LabelSyntaxException, IOException {
RootedPath fileRootedPath = RootedPath.toRootedPath(pkg.getSourceRoot(),
pkg.getNameFragment().getRelative(fileName));
FileValue result = (FileValue) env.getValue(FileValue.key(fileRootedPath));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java
index bcf56c4e96..d5c6b3956d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.skyframe;
import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
import com.google.devtools.build.lib.events.Event;
@@ -27,7 +28,6 @@ import com.google.devtools.build.lib.skyframe.ASTFileLookupValue.ASTLookupInputE
import com.google.devtools.build.lib.syntax.BuildFileAST;
import com.google.devtools.build.lib.syntax.Environment.Extension;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.lib.syntax.Mutability;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.SkyFunction;
@@ -160,7 +160,7 @@ public class SkylarkImportLookupFunction implements SkyFunction {
try {
// This code relies on PackageIdentifier.RepositoryName.toString()
return Label.parseAbsolute(repo + "//" + pkgName.getPathString() + ":" + fileInPkg);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new IllegalStateException(e);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java
index 1f665e0152..c91d27995c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java
@@ -17,6 +17,7 @@ import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.ResolvedTargets;
import com.google.devtools.build.lib.cmdline.ResolvedTargets.Builder;
import com.google.devtools.build.lib.cmdline.TargetParsingException;
@@ -26,7 +27,6 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.pkgcache.FilteringPolicies;
import com.google.devtools.build.lib.pkgcache.FilteringPolicy;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
@@ -69,7 +69,7 @@ public final class TargetPatternValue implements SkyValue {
private Label labelFromString(String labelString) {
try {
return Label.parseAbsolute(labelString);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new IllegalStateException(e);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java b/src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java
index cdd75d3d23..bbaf3b0834 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java
@@ -17,6 +17,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.hash.HashCode;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.Location;
@@ -97,7 +98,7 @@ public class BuildFileAST extends ASTNode {
try {
Label label = Label.parseAbsolute(((StringLiteral) arg).getValue());
result.add(label);
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
// Ignore. This will be reported when the BUILD file is actually evaluated.
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/CommaSeparatedPackageNameListConverter.java b/src/main/java/com/google/devtools/build/lib/syntax/CommaSeparatedPackageNameListConverter.java
index 5d5c59892c..78faf36e30 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/CommaSeparatedPackageNameListConverter.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/CommaSeparatedPackageNameListConverter.java
@@ -16,8 +16,8 @@ package com.google.devtools.build.lib.syntax;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.devtools.build.lib.cmdline.TargetParsingException;
import com.google.devtools.common.options.Converter;
import com.google.devtools.common.options.OptionsParsingException;
@@ -40,7 +40,7 @@ public class CommaSeparatedPackageNameListConverter
for (String s : SPACE_SPLITTER.split(input)) {
try {
list.add(PackageIdentifier.parse(s));
- } catch (TargetParsingException e) {
+ } catch (LabelSyntaxException e) {
throw new OptionsParsingException(e.getMessage());
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Label.java b/src/main/java/com/google/devtools/build/lib/syntax/Label.java
index c7994d9538..6c712c3ead 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Label.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Label.java
@@ -15,10 +15,10 @@ package com.google.devtools.build.lib.syntax;
import com.google.common.base.Preconditions;
import com.google.common.collect.ComparisonChain;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.LabelValidator;
import com.google.devtools.build.lib.cmdline.LabelValidator.BadLabelException;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.devtools.build.lib.cmdline.TargetParsingException;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.util.StringCanonicalizer;
@@ -42,15 +42,6 @@ import java.io.Serializable;
public final class Label implements Comparable<Label>, Serializable {
/**
- * Thrown by the parsing methods to indicate a bad label.
- */
- public static class SyntaxException extends Exception {
- public SyntaxException(String message) {
- super(message);
- }
- }
-
- /**
* Factory for Labels from absolute string form. e.g.
* <pre>
* //foo/bar
@@ -59,7 +50,7 @@ public final class Label implements Comparable<Label>, Serializable {
* {@literal @}foo//bar:baz
* </pre>
*/
- public static Label parseAbsolute(String absName) throws SyntaxException {
+ public static Label parseAbsolute(String absName) throws LabelSyntaxException {
String repo = PackageIdentifier.DEFAULT_REPOSITORY;
int packageStartPos = absName.indexOf("//");
if (packageStartPos > 0) {
@@ -71,8 +62,8 @@ public final class Label implements Comparable<Label>, Serializable {
validate(labelParts.getPackageName(), labelParts.getTargetName());
return new Label(new PackageIdentifier(repo, new PathFragment(labelParts.getPackageName())),
labelParts.getTargetName());
- } catch (BadLabelException | TargetParsingException e) {
- throw new SyntaxException(e.getMessage());
+ } catch (BadLabelException e) {
+ throw new LabelSyntaxException(e.getMessage());
}
}
@@ -86,7 +77,7 @@ public final class Label implements Comparable<Label>, Serializable {
public static Label parseAbsoluteUnchecked(String absName) {
try {
return parseAbsolute(absName);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
throw new IllegalArgumentException(e);
}
}
@@ -99,9 +90,9 @@ public final class Label implements Comparable<Label>, Serializable {
* {@link LabelValidator#validatePackageName}.
* @param targetName The name of the target within the package. Must be
* valid according to {@link LabelValidator#validateTargetName}.
- * @throws SyntaxException if either of the arguments was invalid.
+ * @throws LabelSyntaxException if either of the arguments was invalid.
*/
- public static Label create(String packageName, String targetName) throws SyntaxException {
+ public static Label create(String packageName, String targetName) throws LabelSyntaxException {
return new Label(packageName, targetName);
}
@@ -110,7 +101,7 @@ public final class Label implements Comparable<Label>, Serializable {
* to be created.
*/
public static Label create(PackageIdentifier packageId, String targetName)
- throws SyntaxException {
+ throws LabelSyntaxException {
return new Label(packageId, targetName);
}
@@ -131,10 +122,10 @@ public final class Label implements Comparable<Label>, Serializable {
* possible, because it is sometimes necessary to resolve a relative label before the package path
* is setup; in particular, before the tools/defaults package is created.
*
- * @throws SyntaxException if the resulting label is not valid
+ * @throws LabelSyntaxException if the resulting label is not valid
*/
public static Label parseCommandLineLabel(String label, PathFragment workspaceRelativePath)
- throws SyntaxException {
+ throws LabelSyntaxException {
Preconditions.checkArgument(!workspaceRelativePath.isAbsolute());
if (LabelValidator.isAbsolute(label)) {
return parseAbsolute(label);
@@ -154,11 +145,11 @@ public final class Label implements Comparable<Label>, Serializable {
* Validates the given target name and returns a canonical String instance if it is valid.
* Otherwise it throws a SyntaxException.
*/
- private static String canonicalizeTargetName(String name) throws SyntaxException {
+ private static String canonicalizeTargetName(String name) throws LabelSyntaxException {
String error = LabelValidator.validateTargetName(name);
if (error != null) {
error = "invalid target name '" + StringUtilities.sanitizeControlChars(name) + "': " + error;
- throw new SyntaxException(error);
+ throw new LabelSyntaxException(error);
}
// TODO(bazel-team): This should be an error, but we can't make it one for legacy reasons.
@@ -173,19 +164,22 @@ public final class Label implements Comparable<Label>, Serializable {
* Validates the given package name and returns a canonical PathFragment instance if it is valid.
* Otherwise it throws a SyntaxException.
*/
- private static PathFragment validate(String packageName, String name) throws SyntaxException {
- String error = LabelValidator.validatePackageName(packageName);
- if (error != null) {
- error = "invalid package name '" + packageName + "': " + error;
+ private static PackageIdentifier validate(String packageIdentifier, String name)
+ throws LabelSyntaxException {
+ String error = null;
+ try {
+ return PackageIdentifier.parse(packageIdentifier);
+ } catch (LabelSyntaxException e) {
+ error = e.getMessage();
+ error = "invalid package name '" + packageIdentifier + "': " + error;
// This check is just for a more helpful error message
// i.e. valid target name, invalid package name, colon-free label form
// used => probably they meant "//foo:bar.c" not "//foo/bar.c".
- if (packageName.endsWith("/" + name)) {
+ if (packageIdentifier.endsWith("/" + name)) {
error += " (perhaps you meant \":" + name + "\"?)";
}
- throw new SyntaxException(error);
+ throw new LabelSyntaxException(error);
}
- return new PathFragment(packageName);
}
/** The name and repository of the package. */
@@ -201,32 +195,24 @@ public final class Label implements Comparable<Label>, Serializable {
* bazillion tests that use invalid package names (taking advantage of the fact that calling
* Label(PathFragment, String) doesn't validate the package name).
*/
- private Label(String packageName, String name) throws SyntaxException {
- this(validate(packageName, name), name);
- }
-
- /**
- * Constructor from canonical valid package name and a target name. The target
- * name is checked for validity and a SyntaxException is throw if it isn't.
- */
- private Label(PathFragment packageName, String name) throws SyntaxException {
- this(PackageIdentifier.createInDefaultRepo(packageName), name);
+ private Label(String packageIdentifier, String name) throws LabelSyntaxException {
+ this(validate(packageIdentifier, name), name);
}
private Label(PackageIdentifier packageIdentifier, String name)
- throws SyntaxException {
+ throws LabelSyntaxException {
Preconditions.checkNotNull(packageIdentifier);
Preconditions.checkNotNull(name);
try {
this.packageIdentifier = packageIdentifier;
this.name = canonicalizeTargetName(name);
- } catch (SyntaxException e) {
+ } catch (LabelSyntaxException e) {
// This check is just for a more helpful error message
// i.e. valid target name, invalid package name, colon-free label form
// used => probably they meant "//foo:bar.c" not "//foo/bar.c".
if (packageIdentifier.getPackageFragment().getPathString().endsWith("/" + name)) {
- throw new SyntaxException(e.getMessage() + " (perhaps you meant \":" + name + "\"?)");
+ throw new LabelSyntaxException(e.getMessage() + " (perhaps you meant \":" + name + "\"?)");
}
throw e;
}
@@ -317,9 +303,9 @@ public final class Label implements Comparable<Label>, Serializable {
/**
* Returns a label in the same package as this label with the given target name.
*
- * @throws SyntaxException if {@code targetName} is not a valid target name
+ * @throws LabelSyntaxException if {@code targetName} is not a valid target name
*/
- public Label getLocalTargetLabel(String targetName) throws SyntaxException {
+ public Label getLocalTargetLabel(String targetName) throws LabelSyntaxException {
return new Label(packageIdentifier, targetName);
}
@@ -341,14 +327,14 @@ public final class Label implements Comparable<Label>, Serializable {
+ "Label(\"//foo/bar:baz\").relative(\":quux\") == Label(\"//foo/bar:quux\")\n"
+ "Label(\"//foo/bar:baz\").relative(\"//wiz:quux\") == Label(\"//wiz:quux\")\n"
+ "</pre>")
- public Label getRelative(String relName) throws SyntaxException {
+ public Label getRelative(String relName) throws LabelSyntaxException {
if (relName.length() == 0) {
- throw new SyntaxException("empty package-relative label");
+ throw new LabelSyntaxException("empty package-relative label");
}
if (LabelValidator.isAbsolute(relName)) {
return parseAbsolute(relName);
} else if (relName.equals(":")) {
- throw new SyntaxException("':' is not a valid package-relative label");
+ throw new LabelSyntaxException("':' is not a valid package-relative label");
} else if (relName.charAt(0) == ':') {
return getLocalTargetLabel(relName.substring(1));
} else {
@@ -372,7 +358,7 @@ public final class Label implements Comparable<Label>, Serializable {
return new Label(
new PackageIdentifier(packageIdentifier.getRepository(), relative.getPackageFragment()),
relative.getName());
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
// We are creating the new label from an existing one which is guaranteed to be valid, so
// this can't happen
throw new IllegalStateException(e);
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
index 97b04e67dd..2734e4ff6f 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
@@ -23,6 +23,7 @@ import com.google.common.base.Preconditions;
import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.Location;
@@ -646,7 +647,7 @@ class Parser {
Parser parser = new Parser(lexer, eventHandler, locator, parsingMode);
parser.addIncludedFiles(this.includedFiles);
list.addAll(parser.parseFileInput());
- } catch (Label.SyntaxException e) {
+ } catch (LabelSyntaxException e) {
reportError(location, "Invalid label '" + labelName + "'");
} catch (IOException e) {
reportError(location, "Include of '" + labelName + "' failed: " + e.getMessage());