< prev index next >

src/java.base/share/classes/java/lang/Module.java

Print this page
*** 270,13 ***
      /**
       * Returns {@code true} if this module can access
       * <a href="foreign/package-summary.html#restricted"><em>restricted</em></a> methods.
       *
       * @return {@code true} if this module can access <em>restricted</em> methods.
!      * @since 20
       */
-     @PreviewFeature(feature = PreviewFeature.Feature.FOREIGN)
      public boolean isNativeAccessEnabled() {
          Module target = moduleForNativeAccess();
          return EnableNativeAccess.isNativeAccessEnabled(target);
      }
  
--- 270,12 ---
      /**
       * Returns {@code true} if this module can access
       * <a href="foreign/package-summary.html#restricted"><em>restricted</em></a> methods.
       *
       * @return {@code true} if this module can access <em>restricted</em> methods.
!      * @since 22
       */
      public boolean isNativeAccessEnabled() {
          Module target = moduleForNativeAccess();
          return EnableNativeAccess.isNativeAccessEnabled(target);
      }
  

*** 307,28 ***
      private Module moduleForNativeAccess() {
          return isNamed() ? this : ALL_UNNAMED_MODULE;
      }
  
      // This is invoked from Reflection.ensureNativeAccess
!     void ensureNativeAccess(Class<?> owner, String methodName) {
          // The target module whose enableNativeAccess flag is ensured
          Module target = moduleForNativeAccess();
          if (!EnableNativeAccess.isNativeAccessEnabled(target)) {
              if (ModuleBootstrap.hasEnableNativeAccessFlag()) {
                  throw new IllegalCallerException("Illegal native access from: " + this);
              }
              if (EnableNativeAccess.trySetEnableNativeAccess(target)) {
                  // warn and set flag, so that only one warning is reported per module
                  String cls = owner.getName();
                  String mtd = cls + "::" + methodName;
!                 String mod = isNamed() ? "module " + getName() : "the unnamed module";
                  String modflag = isNamed() ? getName() : "ALL-UNNAMED";
                  System.err.printf("""
                          WARNING: A restricted method in %s has been called
!                         WARNING: %s has been called by %s
!                         WARNING: Use --enable-native-access=%s to avoid a warning for this module
!                         %n""", cls, mtd, mod, modflag);
              }
          }
      }
  
      /**
--- 306,31 ---
      private Module moduleForNativeAccess() {
          return isNamed() ? this : ALL_UNNAMED_MODULE;
      }
  
      // This is invoked from Reflection.ensureNativeAccess
!     void ensureNativeAccess(Class<?> owner, String methodName, Class<?> currentClass) {
          // The target module whose enableNativeAccess flag is ensured
          Module target = moduleForNativeAccess();
          if (!EnableNativeAccess.isNativeAccessEnabled(target)) {
              if (ModuleBootstrap.hasEnableNativeAccessFlag()) {
                  throw new IllegalCallerException("Illegal native access from: " + this);
              }
              if (EnableNativeAccess.trySetEnableNativeAccess(target)) {
                  // warn and set flag, so that only one warning is reported per module
                  String cls = owner.getName();
                  String mtd = cls + "::" + methodName;
!                 String mod = isNamed() ? "module " + getName() : "an unnamed module";
                  String modflag = isNamed() ? getName() : "ALL-UNNAMED";
+                 String caller = currentClass != null ?
+                         " by " + currentClass.getName() : "";
                  System.err.printf("""
                          WARNING: A restricted method in %s has been called
!                         WARNING: %s has been called%s in %s
!                         WARNING: Use --enable-native-access=%s to avoid a warning for callers in this module
!                         WARNING: Restricted methods will be blocked in a future release unless native access is enabled
+                         %n""", cls, mtd, caller, mod, modflag);
              }
          }
      }
  
      /**
< prev index next >