RFR(m): 8140281 deprecate Optional.get()
Peter Levart
peter.levart at gmail.com
Wed May 11 07:05:47 UTC 2016
On 05/11/2016 02:44 AM, Stuart Marks wrote:
> On 4/28/16 7:23 PM, Martin Buchholz wrote:
>> No opinion on Optional.get() itself, but here's an opinion on the high
>> cost of deprecation.
>>
>> If you deprecate the API today, and I have a library that is already
>> using the API, then I should add a @SuppressWarning("deprecation")
>> today and keep it there until the number of people using pre-jdk9 is
>> insignificant, when I can finally rename it. How long is that? These
>> days, I estimate at least 10 years. But even 20 years is quite
>> possible.
>
> Hi Martin,
>
> Finally getting back to this.
>
> Thanks for this observation on the cost of deprecation. I think there
> are several things going on here.
>
> One is how long such annotations need to live in the source base. I
> see the concern but I'm not sure where you're getting your lifetime
> numbers. Certainly there's a support lifetime for old JDK releases.
> I'm hearing about various systems migrating away from Java 7 now, and
> that's five years old. There are still various things that need to
> support Java 6 (ten years old), but I think this is exacerbated by the
> abnormally long gap between 6 and 7.
>
> But, continuing the scenario, suppose something is deprecated in JDK
> 9, and you add @SuppressWarnings to shut off the new warnings it
> generates. You can't migrate to the replacement API introduced in JDK
> 9, since you still have to support JDK 6, 7, and 8, so you have to
> leave @SW in until you drop support for 8, which might not be for many
> years. Is that the source of your concern? I'm kind of guessing here.
>
> An additional problem with @SuppressWarnings("deprecation"), and its
> companion command-line option -Xlint:-deprecation, is that it's too
> broad a brush. They shut of *all* deprecation warnings, at least, for
> the scope of code to which they're applied. If @SW is added to
> suppress deprecation warnings on X, and later on Y is deprecated,
> deprecation warnings on uses of Y will also get suppressed. That's
> likely a problem.
>
> It seems to me that when we're talking about costs of deprecation, the
> main issue is how to manage warnings, in code bases that support
> multiple releases, and when different things are deprecated in
> different releases. Is it really about warnings? Or is there some
> other cost that we should be thinking about as well?
Couldn't this new @Deprecated.since annotation attribute play a role
here? For example, if you are building with JDK 9 javac, but specify
-release 8 option, then you don't get deprecation warning for methods
annotated with @Deprecated(since = "9").
Regards, Peter
>
> s'marks
More information about the core-libs-dev
mailing list