Use Label.parseAbsolute() to determine whether command line options that can take absolute paths and labels are labels.
This makes them work with labels not in the main repository (i.e. @repo//pkg:target). The alternative would have been to simply add .startsWith("@"), but why try to parse labels in a lame and limited way if we can do the right thing.
--
MOS_MIGRATED_REVID=103934380
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 c231e81..03f6884 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
@@ -158,14 +158,10 @@
}
public static Label parseOptionalLabel(String value) {
- if (value.startsWith("//")) {
- try {
- return Label.parseAbsolute(value);
- } catch (LabelSyntaxException e) {
- // We ignore this exception here - it will cause an error message at a later time.
- return null;
- }
- } else {
+ try {
+ return Label.parseAbsolute(value);
+ } 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 673b312..4ce0349 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
@@ -112,7 +112,7 @@
}
private static Label parseOptionalLabel(String value) {
- if ((value != null) && value.startsWith("//")) {
+ if (value != null) {
try {
return Label.parseAbsolute(value);
} catch (LabelSyntaxException e) {
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 34b95aa..70c4fb2 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
@@ -77,11 +77,15 @@
return null;
}
- if (!forceLegacy && javaHome.startsWith("//")) {
- return createDefault(env, javaHome, cpu);
- } else {
- return createLegacy(javaHome);
+ if (!forceLegacy) {
+ try {
+ return createDefault(env, javaHome, cpu);
+ } catch (LabelSyntaxException e) {
+ // Try again with legacy
+ }
}
+
+ return createLegacy(javaHome);
}
@Override
@@ -96,7 +100,7 @@
@Nullable
private Jvm createDefault(ConfigurationEnvironment lookup, String javaHome, String cpu)
- throws InvalidConfigurationException {
+ throws InvalidConfigurationException, LabelSyntaxException {
try {
Label label = Label.parseAbsolute(javaHome);
label = RedirectChaser.followRedirects(lookup, label, "jdk");
@@ -157,8 +161,6 @@
throw new InvalidConfigurationException(e.getMessage(), e);
} catch (NoSuchTargetException e) {
throw new InvalidConfigurationException("No such target: " + e.getMessage(), e);
- } catch (LabelSyntaxException e) {
- throw new InvalidConfigurationException(e.getMessage(), e);
}
}