@Supported design issues
mark.reinhold at oracle.com
mark.reinhold at oracle.com
Tue Mar 19 20:09:01 UTC 2013
2013/3/15 17:16 -0400, joe.darcy at oracle.com:
> On 03/15/2013 02:12 PM, mark.reinhold at oracle.com wrote:
>> ...
>>
>> What I'm trying to understand is, for a JDK API that's @Supported(true)
>> in one or more releases, what's the recommended protocol for removing
>> it? Perhaps something like this?
>>
>> @Supported(true)
>> @Supported(true) @Deprecated
>> @Supported(false)
>> <gone>
>>
>> (Time flows downward.)
>>
>> Or does @Supported(false) happen when @Deprecated is applied?
>>
>> Or will usage vary?
>
> The general threshold we've been using to apply @Deprecated is that a
> API must be actively harmful rather than just ill-advised. However, a
> few methods have been deprecated in Java SE 8 because they are slated
> for removal in 9 as part of modularization.
>
> I would favor a shorter sequence of either
>
> @Supported(true)
> @Supported(false) @Deprecated
> <gone>
>
> or even just
>
> @Supported(true)
> @Supported(false)
> <gone>
>
> since using the API may not be harmful per se, other than risky in the
> sense the API is going away in the future.
Agreed -- that's the key distinction: "Harmful" != "going away".
>>> ...
>>>
>>> Since types have a more concrete existence then packages, I regard the
>>> jdk.Supported information on package-info files to have a higher mixture
>>> of informative versus normative sentiment compared to the annotation on
>>> types.
>>
>> If we're going to go to the trouble of defining an annotation for this,
>> and then sprinkle that annotation throughout our code, shouldn't we give
>> it as precise a meaning as possible? It'd be a shame for @Supported (or
>> whatever it turns out to be) to have no more authoritative value than,
>> say, the @since javadoc tag.
>
> The main point I was making here is that package-info information has a
> less concrete existence than information about types, because, for
> example, it is possible to configure a build so that multiple
> package-info files exist for the same package (the jdk docs build gives
> a warning about this situation for some XML-processing code).
Ah, yes, there's that wrinkle. I still think, though, that we should
strive to give these new annotations as precise a semantics as possible,
and also use them as precisely as possible.
>>> ...
>>>
>>> Since any jdk.Supported annotations applied to types are more localized
>>> and more specific ("*this* type is or is not supported / stable / etc.")
>>> it is both easier for JDK developers to made incremental changes to the
>>> JDK code base and is it also easier for users of those types to see what
>>> is going on since any inspection of the types can reveal the annotation
>>> value.
>>
>> Agreed, but I was trying to understand how the annotation-based system
>> would be harder to "cirvumvent", at either compile time or run time.
>
> It is harder to plead ignorance of the supported status of the API since
> any inspection of it can reveal the annotation whereas a single change
> in the javac command line can silence all ct.sym warnings.
Okay. I took the word "cirvumvent" to mean that you had some additional
automatic enforcement mechanism in mind.
- Mark
More information about the core-libs-dev
mailing list