Reverse the order of java_toolchain.compatible_with and java_toolchain.package_configuration javacopts

to allow package_configuration to override compatible_with javacopts.

PiperOrigin-RevId: 203396587
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
index db528fc..e887829 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
@@ -20,7 +20,6 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
-import com.google.common.collect.Streams;
 import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.analysis.AnalysisEnvironment;
@@ -431,25 +430,21 @@
   /** Computes javacopts for the current rule. */
   private ImmutableList<String> computeJavacOpts(Collection<String> extraRuleJavacOpts) {
     return ImmutableList.<String>builder()
-        .addAll(computeToolchainJavacOpts(ruleContext, javaToolchain))
+        .addAll(javaToolchain.getJavacOptions())
         .addAll(extraRuleJavacOpts)
+        .addAll(computePerPackageJavacOpts(ruleContext, javaToolchain))
         .addAll(ruleContext.getExpander().withDataLocations().tokenized("javacopts"))
         .build();
   }
 
-  /**
-   * Returns the toolchain javacopts for the current rule, including global defaults as well as any
-   * per-package configuration.
-   */
-  public static ImmutableList<String> computeToolchainJavacOpts(
+  /** Returns the per-package configured javacopts. */
+  public static ImmutableList<String> computePerPackageJavacOpts(
       RuleContext ruleContext, JavaToolchainProvider toolchain) {
-    return Streams.concat(
-            toolchain.getJavacOptions().stream(),
-            toolchain
-                .packageConfiguration()
-                .stream()
-                .filter(p -> p.matches(ruleContext.getLabel()))
-                .flatMap(p -> p.javacopts().stream()))
+    return toolchain
+        .packageConfiguration()
+        .stream()
+        .filter(p -> p.matches(ruleContext.getLabel()))
+        .flatMap(p -> p.javacopts().stream())
         .collect(toImmutableList());
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java
index 802d86c..0bab58e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java
@@ -448,12 +448,13 @@
             .setSourcePathEntries(sourcepathEntries)
             .setJavacOpts(
                 ImmutableList.<String>builder()
-                    .addAll(
-                        JavaCommon.computeToolchainJavacOpts(
-                            skylarkRuleContext.getRuleContext(), toolchainProvider))
+                    .addAll(toolchainProvider.getJavacOptions())
                     .addAll(
                         javaSemantics.getCompatibleJavacOptions(
                             skylarkRuleContext.getRuleContext(), toolchainProvider))
+                    .addAll(
+                        JavaCommon.computePerPackageJavacOpts(
+                            skylarkRuleContext.getRuleContext(), toolchainProvider))
                     .addAll(javacOpts)
                     .build());