diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
index 55c8a4a..0252a45 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
@@ -62,7 +62,7 @@
       checkCallPathInWhitelistedPackages(
           environment.getSemantics(),
           location,
-          environment.getCallerLabel().getPackageFragment().toString());
+          environment.getGlobals().getLabel().getPackageName());
     }
     return JavaInfoBuildHelper.getInstance()
         .create(
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
index bd9048d..f3390af 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
@@ -2041,8 +2041,8 @@
 
   @Test
   public void testIncompatibleDisallowLegacyJavaInfoWithFlag() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disallow_legacy_javainfo");
     setSkylarkSemanticsOptions(
+        "--incompatible_disallow_legacy_javainfo",
         "--experimental_java_common_create_provider_enabled_packages=java/test");
     scratch.file(
         "java/test/custom_rule.bzl",
@@ -2070,6 +2070,78 @@
     assertThat(getConfiguredTarget("//java/test:custom")).isNotNull();
   }
 
+  @Test
+  public void testIncompatibleDisallowLegacyJavaInfoOtherPackageWithFlag() throws Exception {
+    setSkylarkSemanticsOptions(
+        "--incompatible_disallow_legacy_javainfo",
+        "--experimental_java_common_create_provider_enabled_packages=java/package");
+    scratch.file(
+        "java/package/custom_rule.bzl",
+        "def _impl(ctx):",
+        "  jar = ctx.file.jar",
+        "  java_common.create_provider(",
+        "      compile_time_jars = [jar],",
+        "      transitive_compile_time_jars = [jar],",
+        "      runtime_jars = [jar],",
+        "      use_ijar = False,",
+        "  )",
+        "custom_rule = rule(",
+        "  implementation = _impl,",
+        "  attrs = {",
+        "    'jar': attr.label(allow_files = True, single_file = True),",
+        "  }",
+        ")");
+    scratch.file(
+        "java/package/BUILD",
+        "load('//third_party/bazel_skylib:bzl_library.bzl', 'bzl_library')",
+        "bzl_library(name = 'custom_rule', srcs = ['custom_rule.bzl'])");
+    scratch.file(
+        "java/otherpackage/BUILD",
+        "load('//java/package:custom_rule.bzl', 'custom_rule')",
+        "custom_rule(",
+        "  name = 'custom',",
+        "  jar = 'lib.jar'",
+        ")");
+    assertThat(getConfiguredTarget("//java/otherpackage:custom")).isNotNull();
+  }
+
+  @Test
+  public void testIncompatibleDisallowLegacyJavaInfoOtherPackageFailsWithFlag() throws Exception {
+    setSkylarkSemanticsOptions(
+        "--incompatible_disallow_legacy_javainfo",
+        "--experimental_java_common_create_provider_enabled_packages=java/otherpackage");
+    scratch.file(
+        "java/package/custom_rule.bzl",
+        "def _impl(ctx):",
+        "  jar = ctx.file.jar",
+        "  java_common.create_provider(",
+        "      compile_time_jars = [jar],",
+        "      transitive_compile_time_jars = [jar],",
+        "      runtime_jars = [jar],",
+        "      use_ijar = False,",
+        "  )",
+        "custom_rule = rule(",
+        "  implementation = _impl,",
+        "  attrs = {",
+        "    'jar': attr.label(allow_files = True, single_file = True),",
+        "  }",
+        ")");
+    scratch.file(
+        "java/package/BUILD",
+        "load('//third_party/bazel_skylib:bzl_library.bzl', 'bzl_library')",
+        "bzl_library(name = 'custom_rule', srcs = ['custom_rule.bzl'])");
+    checkError(
+        "java/otherpackage",
+        "custom",
+        "java_common.create_provider is deprecated and cannot be used when "
+            + "--incompatible_disallow_legacy_javainfo is set.",
+        "load('//java/package:custom_rule.bzl', 'custom_rule')",
+        "custom_rule(",
+        "  name = 'custom',",
+        "  jar = 'lib.jar'",
+        ")");
+  }
+
   private static boolean javaCompilationArgsHaveTheSameParent(
       JavaCompilationArgsProvider args, JavaCompilationArgsProvider otherArgs) {
     if (!nestedSetsOfArtifactHaveTheSameParent(
