SafeVarargs classfile encoding (original) (raw)
Joe Darcy joe.darcy at oracle.com
Fri Jan 21 12:03:53 PST 2011
- Previous message: SafeVarargs classfile encoding
- Next message: try-with-resources and null resource
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Rémi Forax wrote:
On 01/21/2011 08:34 PM, Joe Darcy wrote:
Rémi Forax wrote:
On 01/21/2011 07:50 PM, Joe Darcy wrote:
Hi Rémi.
A few comments, in the entirety of the "jdk" repository, there were a total of five methods where it was appropriate to add this annotation, which is not a very high density! For Coin, to keep the features small, we're avoiding JVM changes and defining a new attribute is a JVM changes of sorts. Here is the JVM spec change: [snip] The size of the JVM change is not the problem; the fact that potentially all class file consuming tools would need to know about the attribute is. No because it's an empty attribute. I will be ignored by classfile reader, and copied by classfile read/writer. see section 4.7.1 of the VM spec.
Tools like pack200 would have to be updated to know to preserve the attribute as opposed to dropping it on the floor, etc.
Additionally, this would be a new kind of side-effect of annotating a method. I don't understand your point here. SafeVarargs doesn't alter the semantics of a method for the VM, like Deprecated or Synthetic which are already defined as attribute.
Perhaps other than @Deprecated (I'm not going to look up to verify the situation right now), there is no case where putting an annotation on a method has the side-effect of altering the generated class file in a way other than having the annotation represented in the class file, if appropriate.
Using an annotation to store this information avoids the need to add a new core reflection API to access it, Method.isSafeVarargs, etc. Why SafeVarargs need to be visible using reflection API ? Why should the information be excluded? This annotation is a statement about the semantics of the method. This annotation doesn't alter the runtime semantics of a method.
However the annotation is an assertion about the runtime semantics of a method, an assertion someone introspecting on the method may be interested in knowing.
-Joe
- Previous message: SafeVarargs classfile encoding
- Next message: try-with-resources and null resource
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]