s/or perfectly will look like it's broken to all its users/or perfectly *good
code *will look like it's broken to all its users

(the problem of organizing your family babysitter calendar while also
typing an email)

-Tim


On Thu, Jun 13, 2019 at 8:45 PM Tim Boudreau <niftin...@gmail.com> wrote:

>
>
> On Thu, Jun 13, 2019 at 2:22 PM Jan Lahoda <lah...@gmail.com> wrote:
>
>> On Thu, Jun 13, 2019 at 7:29 PM Tim Boudreau <niftin...@gmail.com> wrote:
>>
>> I believe I know what problem this is supposed to solve, and I don't think
>> it is related to what you are describing. The problem is rather this:
>> imagine someone has written an annotation processor for JDK 8, with the
>> knowledge of the JDK 8 Java lang model. That's good. Now, in some future
>> version of Java, the model is enhanced to cover the language features. It
>> is unclear whether the processor can handle the new model correctly or
>> not.
>> It may (and it is easily imaginable) pass vacuously, which may mean the
>> compilation may pass without any errors or warnings, but the processor
>> didn't do what it was supposed to do (e.g. create a META-INF/services
>> registration). That is a fairly bad situation, IMO: no warning, but
>> incorrect output produced.
>>
>> In other words, the Processor.getSupportedSourceVersion() returns the
>> highest model version the processor can safely handle.
>>
>> Maybe the exact implementation of this check could be better, but I don't
>> think we could say it is "useless".
>>
>
> Oh, I understand the reasoning.  But the Java language model is API or it
> isn't?  If javac goes and changes it and breaks a lot of annotation
> processors, I think enough users of them would scream bloody murder that
> that change would be unlikely to make it into the JDK.  I've written enough
> annotation processors that I will certainly be one of them.
>
> Seriously, what this implies is that, if you are an annotation processor
> author, you didn't know it but you are married to making a pointless update
> to your annotation processor with every JDK release until the day you die,
> or perfectly will look like it's broken to all its users.  That's insane.
>
> Is there a real world example of this happening?  If not, then this is a
> "but someday, somebody might need this" feature, and we both know those are
> a bad idea.
>
> Here's how supportedSourceVersions() *should* be used by javac:  Not as a
> "this annotation processor may be broken, warn the user" notification, but
> as a signal to javac *that it needs to expose the model to that
> annotation processor using the API available to javac in the JDK of that
> source version.*  In other words, this should be a hint to javac about
> the types the annotation processor expects;  and perhaps deprecate / delete
> compatibility layers for older JDKs on a schedule.  Making this the
> annotation processor author's problem, or worse, the annotation processor
> user's problem, is the worst possible solution.
>
> If the compiler is going to break its API, it should not be other people's
> problem to deal with it.  And it certainly shouldn't be making people jump
> through hoops to fix warnings that it *might have* when it actually
> hasn't.
>
> So, yeah, I get the reasoning, but it is the wrong solution to a problem
> that has yet to actually exist, yelling at people to do something because
> it might.
>
> -Tim
>
>
>

-- 
http://timboudreau.com

Reply via email to