On Mon, 28 Feb 2022 18:20:13 GMT, ExE Boss <[email protected]> wrote:

>> It does because of the AccessFlags.MODULE constant.
>
>> It does because of the AccessFlags.MODULE constant.
> 
> But that’s exactly what the unqualified `MODULE` identifier refers to, and 
> there’s no other bare `MODULE` identifier in scope that would shadow the 
> `AccessFlag.MODULE` constant from the POV of `AccessFlag.LocationToFlags`.

This is just implementation detail, but I think the reverse mapping from 
Location to AccessFlag(s) could be established implicitly during the 
initialization of the AccessFlag enum since it is only used from within code of 
that enum class. Like this:


Index: src/java.base/share/classes/java/lang/reflect/AccessFlag.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/java.base/share/classes/java/lang/reflect/AccessFlag.java 
b/src/java.base/share/classes/java/lang/reflect/AccessFlag.java
--- a/src/java.base/share/classes/java/lang/reflect/AccessFlag.java     
(revision 1498060544413cb67de8b1a82fbbf15d388d62c3)
+++ b/src/java.base/share/classes/java/lang/reflect/AccessFlag.java     (date 
1646651355828)
@@ -26,8 +26,13 @@
 package java.lang.reflect;
 
 import java.util.Collections;
+import java.util.EnumMap;
+import java.util.EnumSet;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Function;
+
 import static java.util.Map.entry;
 
 /**
@@ -248,6 +253,14 @@
         this.mask = mask;
         this.sourceModifier = sourceModifier;
         this.locations = locations;
+        for (var location : locations) {
+            LocationToFlags.MAP.computeIfAbsent(location, new Function<>() {
+                @Override
+                public Set<AccessFlag> apply(Location location) {
+                    return EnumSet.noneOf(AccessFlag.class);
+                }
+            }).add(this);
+        }
     }
 
     /**
@@ -283,7 +296,7 @@
      */
     public static Set<AccessFlag> maskToAccessFlags(int mask, Location 
location) {
         Set<AccessFlag> result = java.util.EnumSet.noneOf(AccessFlag.class);
-        for (var accessFlag : LocationToFlags.locationToFlags.get(location)) {
+        for (var accessFlag : LocationToFlags.MAP.get(location)) {
             int accessMask = accessFlag.mask();
             if ((mask &  accessMask) != 0) {
                 result.add(accessFlag);
@@ -363,34 +376,7 @@
     }
 
     private static class LocationToFlags {
-        private static Map<Location, Set<AccessFlag>> locationToFlags =
-            Map.ofEntries(entry(Location.CLASS,
-                                Set.of(PUBLIC, FINAL, SUPER,
-                                       INTERFACE, ABSTRACT,
-                                       SYNTHETIC, ANNOTATION,
-                                       ENUM, AccessFlag.MODULE)),
-                          entry(Location.FIELD,
-                                Set.of(PUBLIC, PRIVATE, PROTECTED,
-                                       STATIC, FINAL, VOLATILE,
-                                       TRANSIENT, SYNTHETIC, ENUM)),
-                          entry(Location.METHOD,
-                                Set.of(PUBLIC, PRIVATE, PROTECTED,
-                                       STATIC, FINAL, SYNCHRONIZED,
-                                       BRIDGE, VARARGS, NATIVE,
-                                       ABSTRACT, STRICT, SYNTHETIC)),
-                          entry(Location.INNER_CLASS,
-                                Set.of(PUBLIC, PRIVATE, PROTECTED,
-                                       STATIC, FINAL, INTERFACE, ABSTRACT,
-                                       SYNTHETIC, ANNOTATION, ENUM)),
-                          entry(Location.METHOD_PARAMETER,
-                                Set.of(FINAL, SYNTHETIC, MANDATED)),
-                          entry(Location.MODULE,
-                                Set.of(OPEN, SYNTHETIC, MANDATED)),
-                          entry(Location.MODULE_REQUIRES,
-                                Set.of(TRANSITIVE, STATIC_PHASE, SYNTHETIC, 
MANDATED)),
-                          entry(Location.MODULE_EXPORTS,
-                                Set.of(SYNTHETIC, MANDATED)),
-                          entry(Location.MODULE_OPENS,
-                                Set.of(SYNTHETIC, MANDATED)));
+        private static final Map<Location, Set<AccessFlag>> MAP =
+            new EnumMap<>(Location.class);
     }
 }

-------------

PR: https://git.openjdk.java.net/jdk/pull/7445

Reply via email to