On 02/08/16 18:12, Paul Benedict wrote:
> Correct me if wrong, but it seems there is no universal way to flag
> something as compiler/tool generated. My take away from Alex's comments
> is that ACC_SYNTHETIC is very much concerned with
> implicitness/explicitness... but why? I still don't understand why it
> *must* be concerned anything like that. I'd just like to state that
> definition sounds overloaded to me.

There is indeed no way to flag something as compiler/tool generated. The
thread I cited was about exactly that. AOP (you may or not remember what
that that tool did but it doesn't really matter) was flagging generated
methods as synthetic and the explanation I received when this led to
subsequent errors was that this was invalid; such flagging is the
prerogative of the compiler for its own narrowly defined (and, as Alex
was so keen to point out, quite well-defined) purposes. You may want
that flag to mean something else but it doesn't. You may argue that it
ought mean something else but that is not going to happen unless i) you
can arrive at a consensus that this meaning is better than the current
one and, crucially, ii) you can guarantee that changing javac and other
tools to adopt your new meaning is not going to cause legacy problems.

> Furthermore, I think the definition of ACC_MANDATED is overloaded too.
> If the JLS mandates a construct, it must be in the class file -- yet why
> does the means matter? I prose the flag should mean no more than a
> mandate. It's mandated so it must exist -- how it got there is
> irrelevant to me with regard to this flag.

As above?

> So doesn't anyone (Alex? Andrew?) find value in universally specifying
> something was generated? That's what I thought ACC_SYNTHETIC could be
> used for. If there is pushback on this idea, is there a universal way
> that I have neglected to see?

I am sure it /might/ be useful to be able to specify this but I have not
actually found a need for it myself. Rather than hijacking SYNTHETIC I
suggest it would be much better to introduce a new GENERATED
class/method attribute indicating that the relevant object was generated
by a bytecode transformer tool (possibly with associated data
identifying the tool and, perhaps, its version). In the case of a method
it would also be useful if the attribute could be used to record
modification of bytecode (or at least injection) by detailing specific
bytecode segments introduced by a tool. Of course, this would require
bytecode transformer tools to update such indices (underlying libraries
like ASM or Javassist might be able to help with that).

regards,


Andrew Dinn
-----------
Senior Principal Software Engineer
Red Hat UK Ltd
Registered in England and Wales under Company Registration No. 03798903
Directors: Michael Cunningham, Michael ("Mike") O'Neill, Eric Shander

Reply via email to