JDK 14 RFR of JDK-8202385: Annotation to mark serial-related fields and methods
Jonathan Gibbons
jonathan.gibbons at oracle.com
Mon Jul 15 18:50:45 UTC 2019
Generally, the current idiom in JDK API docs is to use a link beginning
"{@docRoot}/../specs/....." such as
"{@docRoot}/../specs/serialization/index.html"
-- Jon
On 07/13/2019 01:16 PM, Joe Darcy wrote:
> PS I've uploaded an updated an iteration of the webrev
>
> http://cr.openjdk.java.net/~darcy/8202385.4/
>
> to address. the syntactic concerns previously raised. I added
>
> ...defined by the <cite>Java Object Serialization
> Specification</cite>...
>
> which is the current name of the document and is similar to the style
> of reference made in java.io.Serializable. Offhand, I didn't know of
> the correct idiom to refer to the document as a working hyperlink, but
> would be switch to that idiom.
>
> Cheers,
>
> -Joe
>
> On 7/12/2019 8:19 PM, Joe Darcy wrote:
>> Hi Roger,
>>
>> On 7/12/2019 1:31 PM, Roger Riggs wrote:
>>> Hi Joe,
>>>
>>> As an annotation on a field or method, this is a use site annotation.
>>
>>
>> It is an annotation intended for the declarations of fields and
>> methods of Serializable types.
>>
>>
>>> From the description, the checks that could be added would only be done
>>> if the annotation was present and the annotation is a tag for existing
>>> fields and methods that are part of the serialization spec.
>>
>>
>> Right; the annotation is semantically only applicable to the fields
>> and methods associated with the serialization system.
>>
>>
>>>
>>> The signatures of the fields and methods can be known to the
>>> compiler independent
>>> of the annotation and produce the same warnings.
>>> So this looks like a case of trying to have belt and suspenders.
>>>
>>> If the checks are not done when the annotation is not present, then
>>> it will still be
>>> the case that incorrect or misused fields and methods will still
>>> escape detection.
>>>
>>> Though the details of the compiler check are outside of the scope of
>>> this annotation,
>>> it seems unclear whether the annotation is necessary.
>>
>> I have a prototype annotation processor to implement checks for
>>
>> JDK-8202056: Expand serial warning to check for bad overloads of
>> serial-related methods and ineffectual fields
>>
>> The current version of the processor does not assume the presence of
>> java.io.Serial. The summarize the existing checking methodology:
>>
>> If a type is Serialiazable and a field or method has a name
>> matching the names of one of the special fields or methods to
>> serialization, check that the field or method has the required
>> modifiers, type, and, the the case of methods, parameter types and
>> exception types.
>>
>> That is all well and good and represents a large fraction of the
>> checking of interest. However, it does not catch a mis-declaration
>> like "readobject" instead of "readObject". One could argue that
>> sufficiently thorough testing should catch that kind of error;
>> however, my impression is that thoroughness of testing is rare in
>> practice. I don't think it would be reasonable for javac to have some
>> kind of Hamming distance
>> (https://en.wikipedia.org/wiki/Hamming_distance) check between the
>> name of fields/methods and the name of the serialization related
>> fields methods to try to catch such mis-declarations. An annotation
>> like java.io.Serial is intended to allow the programmer to indicate
>> "yes, this is supposed to be one of the serialization related fields
>> or methods" and enable the compile to perform checks against that
>> category of error.
>>
>>
>>>
>>> Can the name of the annotation be more descriptive?
>>> Just "Serial" seems a bit too simple and does not have a strong
>>> binding to the Serialization classes and specification.
>>> Alternatives:
>>> SerialMetadata
>>> SerialControl
>>> SerialFunction
>>
>> From the earlier design iterations "Serial" was chosen to be
>> evocative of the "@serial" javadoc tag.
>>
>> Thanks,
>>
>> -Joe
>>
>>>
>>>
>>> 39: There should be a reference to the serialization specification
>>> for the definition
>>> of the fields and methods to make it clear where the authoritative
>>> identification is spec'd.
>>>
>>> 73-75: Please align the <ul> and </ul> tags on separate lines with
>>> matching indentation.
>>>
>>> 77: Extra leading space.
>>>
>>> Regards, Roger
>>>
>>> On 7/9/19 7:14 PM, Joe Darcy wrote:
>>>> Hello,
>>>>
>>>> Returning to some old work [1], please review the addition of a
>>>> java.io.Serial annotation type for JDK 14 to mark serial-related
>>>> fields and methods:
>>>>
>>>> webrev: http://cr.openjdk.java.net/~darcy/8202385.3/
>>>> CSR: https://bugs.openjdk.java.net/browse/JDK-8217698
>>>>
>>>> Thanks,
>>>>
>>>> -Joe
>>>>
>>>> [1] Previous review threads:
>>>>
>>>> http://mail.openjdk.java.net/pipermail/core-libs-dev/2018-May/053055.html
>>>>
>>>>
>>>> http://mail.openjdk.java.net/pipermail/core-libs-dev/2018-August/054801.html
>>>>
>>>>
>>>
More information about the core-libs-dev
mailing list