New incompatible flag to disable PACKAGE_NAME and REPOSITORY_NAME.

RELNOTES[INC]:
  Variables PACKAGE_NAME and REPOSITORY_NAME are deprecated in favor of
  functions `package_name()` and `repository_name()`.
  https://docs.bazel.build/versions/master/skylark/lib/native.html#package_name

PiperOrigin-RevId: 190657188
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
index dce457b..25fc689 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
@@ -1331,7 +1331,13 @@
       throws NoSuchPackageException, InterruptedException {
     Package externalPkg = newExternalPackageBuilder(
         buildFile.getRelative(Label.WORKSPACE_FILE_NAME), "TESTING").build();
-    return createPackageForTesting(packageId, externalPkg, buildFile, locator, eventHandler);
+    return createPackageForTesting(
+        packageId,
+        externalPkg,
+        buildFile,
+        locator,
+        eventHandler,
+        SkylarkSemantics.DEFAULT_SEMANTICS);
   }
 
   /**
@@ -1344,7 +1350,8 @@
       Package externalPkg,
       Path buildFile,
       CachingPackageLocator locator,
-      ExtendedEventHandler eventHandler)
+      ExtendedEventHandler eventHandler,
+      SkylarkSemantics semantics)
       throws NoSuchPackageException, InterruptedException {
     String error =
         LabelValidator.validatePackageName(packageId.getPackageFragment().getPathString());
@@ -1372,7 +1379,7 @@
                 /*imports=*/ ImmutableMap.<String, Extension>of(),
                 /*skylarkFileDependencies=*/ ImmutableList.<Label>of(),
                 /*defaultVisibility=*/ ConstantRuleVisibility.PUBLIC,
-                SkylarkSemantics.DEFAULT_SEMANTICS,
+                semantics,
                 globber)
             .build();
     for (Postable post : result.getPosts()) {
@@ -1544,8 +1551,10 @@
     }
 
     pkgEnv.setupDynamic(PKG_CONTEXT, context);
-    pkgEnv.setupDynamic(Runtime.PKG_NAME, packageId.getPackageFragment().getPathString());
-    pkgEnv.setupDynamic(Runtime.REPOSITORY_NAME, packageId.getRepository().toString());
+    if (!pkgEnv.getSemantics().incompatiblePackageNameIsAFunction()) {
+      pkgEnv.setupDynamic(Runtime.PKG_NAME, packageId.getPackageFragment().getPathString());
+      pkgEnv.setupDynamic(Runtime.REPOSITORY_NAME, packageId.getRepository().toString());
+    }
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java
index 9056342..21d5c49 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java
@@ -52,6 +52,7 @@
     codedOut.writeBoolNoTag(semantics.incompatibleDisallowThreeArgVardef());
     codedOut.writeBoolNoTag(semantics.incompatibleDisallowToplevelIfStatement());
     codedOut.writeBoolNoTag(semantics.incompatibleNewActionsApi());
+    codedOut.writeBoolNoTag(semantics.incompatiblePackageNameIsAFunction());
     codedOut.writeBoolNoTag(semantics.incompatibleRemoveNativeGitRepository());
     codedOut.writeBoolNoTag(semantics.incompatibleRemoveNativeHttpArchive());
     codedOut.writeBoolNoTag(semantics.incompatibleStringIsNotIterable());
@@ -73,6 +74,7 @@
     builder.incompatibleDisallowThreeArgVardef(codedIn.readBool());
     builder.incompatibleDisallowToplevelIfStatement(codedIn.readBool());
     builder.incompatibleNewActionsApi(codedIn.readBool());
+    builder.incompatiblePackageNameIsAFunction(codedIn.readBool());
     builder.incompatibleRemoveNativeGitRepository(codedIn.readBool());
     builder.incompatibleRemoveNativeHttpArchive(codedIn.readBool());
     builder.incompatibleStringIsNotIterable(codedIn.readBool());
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java
index afb730c..0030129 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java
@@ -169,6 +169,19 @@
   public boolean incompatibleNewActionsApi;
 
   @Option(
+    name = "incompatible_package_name_is_a_function",
+    defaultValue = "false",
+    category = "incompatible changes",
+    documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
+    effectTags = {OptionEffectTag.UNKNOWN},
+    metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE},
+    help =
+        "If set to true, the values PACKAGE_NAME and REPOSITORY_NAME are not available. "
+            + "Use the package_name() or repository_name() functions instead."
+  )
+  public boolean incompatiblePackageNameIsAFunction;
+
+  @Option(
     name = "incompatible_remove_native_git_repository",
     defaultValue = "false",
     category = "incompatible changes",
@@ -229,6 +242,7 @@
         .incompatibleDisallowThreeArgVardef(incompatibleDisallowThreeArgVardef)
         .incompatibleDisallowToplevelIfStatement(incompatibleDisallowToplevelIfStatement)
         .incompatibleNewActionsApi(incompatibleNewActionsApi)
+        .incompatiblePackageNameIsAFunction(incompatiblePackageNameIsAFunction)
         .incompatibleRemoveNativeGitRepository(incompatibleRemoveNativeGitRepository)
         .incompatibleRemoveNativeHttpArchive(incompatibleRemoveNativeHttpArchive)
         .incompatibleStringIsNotIterable(incompatibleStringIsNotIterable)
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Identifier.java b/src/main/java/com/google/devtools/build/lib/syntax/Identifier.java
index e201a0e..419cc99 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Identifier.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Identifier.java
@@ -96,6 +96,26 @@
     if (name.equals("$error$")) {
       return new EvalException(getLocation(), "contains syntax error(s)", true);
     }
+
+    if (name.equals("PACKAGE_NAME")) {
+      return new EvalException(
+          getLocation(),
+          "The value 'PACKAGE_NAME' has been removed in favor of 'package_name()', "
+              + "please use the latter ("
+              + "https://docs.bazel.build/versions/master/skylark/lib/native.html#package_name). "
+              + "You can temporarily allow the old name "
+              + "by using --incompatiblePackageNameIsAFunction=false");
+    }
+    if (name.equals("REPOSITORY_NAME")) {
+      return new EvalException(
+          getLocation(),
+          "The value 'REPOSITORY_NAME' has been removed in favor of 'repository_name()', "
+              + "please use the latter ("
+              + "https://docs.bazel.build/versions/master/skylark/lib/native.html#repository_name)."
+              + " You can temporarily allow the old name "
+              + "by using --incompatiblePackageNameIsAFunction=false");
+    }
+
     String suggestion = SpellChecker.didYouMean(name, symbols);
     return new EvalException(getLocation(), "name '" + name + "' is not defined" + suggestion);
   }
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
index 05208dc..46f3f1a 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
@@ -40,17 +40,31 @@
 
   // <== Add new options here in alphabetic order ==>
   public abstract boolean incompatibleBzlDisallowLoadAfterStatement();
+
   public abstract boolean incompatibleDepsetIsNotIterable();
+
   public abstract boolean incompatibleDepsetUnion();
+
   public abstract boolean incompatibleDisableGlobTracking();
+
   public abstract boolean incompatibleDisableObjcProviderResources();
+
   public abstract boolean incompatibleDisallowDictPlus();
+
   public abstract boolean incompatibleDisallowThreeArgVardef();
+
   public abstract boolean incompatibleDisallowToplevelIfStatement();
+
   public abstract boolean incompatibleNewActionsApi();
+
+  public abstract boolean incompatiblePackageNameIsAFunction();
+
   public abstract boolean incompatibleRemoveNativeGitRepository();
+
   public abstract boolean incompatibleRemoveNativeHttpArchive();
+
   public abstract boolean incompatibleStringIsNotIterable();
+
   public abstract boolean internalSkylarkFlagTestCanary();
 
   /** Returns a {@link Builder} initialized with the values of this instance. */
@@ -77,6 +91,7 @@
           .incompatibleDisallowThreeArgVardef(false)
           .incompatibleDisallowToplevelIfStatement(true)
           .incompatibleNewActionsApi(false)
+          .incompatiblePackageNameIsAFunction(false)
           .incompatibleRemoveNativeGitRepository(false)
           .incompatibleRemoveNativeHttpArchive(false)
           .incompatibleStringIsNotIterable(false)
@@ -89,17 +104,31 @@
 
     // <== Add new options here in alphabetic order ==>
     public abstract Builder incompatibleBzlDisallowLoadAfterStatement(boolean value);
+
     public abstract Builder incompatibleDepsetIsNotIterable(boolean value);
+
     public abstract Builder incompatibleDepsetUnion(boolean value);
+
     public abstract Builder incompatibleDisableGlobTracking(boolean value);
+
     public abstract Builder incompatibleDisableObjcProviderResources(boolean value);
+
     public abstract Builder incompatibleDisallowDictPlus(boolean value);
+
     public abstract Builder incompatibleDisallowThreeArgVardef(boolean value);
+
     public abstract Builder incompatibleDisallowToplevelIfStatement(boolean value);
+
     public abstract Builder incompatibleNewActionsApi(boolean value);
+
+    public abstract Builder incompatiblePackageNameIsAFunction(boolean value);
+
     public abstract Builder incompatibleRemoveNativeGitRepository(boolean value);
+
     public abstract Builder incompatibleRemoveNativeHttpArchive(boolean value);
+
     public abstract Builder incompatibleStringIsNotIterable(boolean value);
+
     public abstract Builder internalSkylarkFlagTestCanary(boolean value);
 
     public abstract SkylarkSemantics build();