aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/cmdline
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/cmdline')
-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
2 files changed, 40 insertions, 17 deletions
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));