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);
     }
   }