AccessibleObject.setAccessible() backward compatibility

Remi Forax forax at
Fri Sep 11 17:15:35 UTC 2015

There are two changes to setAccessible that make migration to the module universe hard.

The first one is that setAccessible() is now declared final which is a binary incompatible change so it breaks Guava two projects of mine.

The second change is that now setAccessible() is now CallerSensitive and throw an exception if the AccessibleObject is not visible from the caller class.
While this change may improve the security, it's a backward incompatible change is not strictly required to support modules it's more an enhancement of the current security model and i don't think it's a good idea to mix it with the introduction of the module support. More philosophically, every libraries that propose an abstraction that hide underlying dirts provides an escape hatch, the reflection API is one of such hatch of Java the language allowing to bypass the typechecker and the security sandbox. Trying to close the hatch will just make people to open holes in the nearby wall with hacks that are less secure and that may even compromise the integrity of the plateform.


More information about the jpms-spec-observers mailing list