RuleContext.Builder: expose Starlark semantics

For various verification tasks in build(), the RuleContext.Builder passes
itself as context. Verifications can, however, depend on the Skylark semantics
to know which incompatible changes (e.g., to visibility) have to be taken into account.

Change-Id: I68af3a03fd99eff40484e1525e551fe6859f6aa6
PiperOrigin-RevId: 277304553
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 58b946c..2c02e71 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -96,6 +96,7 @@
 import com.google.devtools.build.lib.packages.Type.LabelClass;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import com.google.devtools.build.lib.util.OS;
 import com.google.devtools.build.lib.util.OrderedSetMultimap;
@@ -1955,6 +1956,14 @@
     }
 
     /**
+     * Expose the Starlark semantics that governs the building of this rule (and the rest of the
+     * build)
+     */
+    public StarlarkSemantics getStarlarkSemantics() throws InterruptedException {
+      return env.getSkylarkSemantics();
+    }
+
+    /**
      * Returns a rule class name suitable for log messages, including an aspect name if applicable.
      */
     public String getRuleClassNameForLogging() {