This is an early review of changes to better model JVM access flags, that is 
"modifiers" like public, protected, etc. but explicitly at a VM level.

Language level modifiers and JVM level access flags are closely related, but 
distinct. There are concepts that overlap in the two domains (public, private, 
etc.), others that only have a language-level modifier (sealed), and still 
others that only have an access flag (synthetic).

The existing java.lang.reflect.Modifier class is inadequate to model these 
subtleties. For example, the bit positions used by access flags on different 
kinds of elements overlap (such as "volatile" for fields and "bridge" for 
methods. Just having a raw integer does not provide sufficient context to 
decode the corresponding language-level string. Methods like 
Modifier.methodModifiers() were introduced to cope with this situation.

With additional modifiers and flags on the horizon with projects like Valhalla, 
addressing the existent modeling deficiency now ahead of time is reasonable 
before further strain is introduced.

This PR in its current form is meant to give the overall shape of the API. It 
is missing implementations to map from, say, method modifiers to access flags, 
taking into account overlaps in bit positions.

The CSR https://bugs.openjdk.java.net/browse/JDK-8281660 will be filled in once 
the API is further along.

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

Commit messages:
 - JDK-8266670: Better modeling of modifiers in core reflection

Changes: https://git.openjdk.java.net/jdk/pull/7445/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=7445&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8266670
  Stats: 345 lines in 6 files changed: 345 ins; 0 del; 0 mod
  Patch: https://git.openjdk.java.net/jdk/pull/7445.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/7445/head:pull/7445

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

Reply via email to