On Apr 3, 2013, at 12:52 PM, Jeroen Frijters <jer...@sumatra.nl> wrote:
> Thanks for this. This is a really great change. > > I reviewed the changes and my only comment is that there is a typo in > java/lang/reflect/Field.java ("scurity"). Thanks! > Somewhat unrelated (but relevant for my implementation of CallerSensitive), > but would it be possible to mark java.lang.Runtime as final, or at least make > the CallerSensitive methods final? > > The interaction between CallerSensitive and method overriding is non trivial, > so IMO it is best avoided. That is very true. We are working on separating those two patterns. Making Runtime and/or Runtime.load* final is an API change, which is harder to do than an implementation change. Given that Runtime.<init> is private, it seems to me that there is no way to execute an override of those load methods, even if one could (deviously) load a subclass into the JVM. It would be valid behavior, I think, for the JVM to quietly refuse to override them, because there would be no way to observe the refusal. Note that the technique of a private <init> method is the recommended way to prevent instantiation of subclasses, and is used throughout the JDK. This should be sufficient to prevent undesired interactions with @CS and overrides. What do you think? — John