--- /dev/null 2019-07-24 16:12:24.284000000 -0700 +++ new/src/java.base/share/classes/java/io/Serial.java 2019-08-06 12:53:39.985000999 -0700 @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package java.io; + +import java.lang.annotation.*; + +/** + * Indicates that an annotated field or method is part of the {@linkplain + * Serializable serialization mechanism} defined by the + * Java Object Serialization Specification. This + * annotation type is intended to allow compile-time checking of + * serialization-related declarations, analogous to the checking + * enabled by the {@link java.lang.Override} annotation type to + * validate method overriding. {@code Serializable} classes are encouraged to + * use @Serial annotations to help a compiler catch + * mis-declared serialization-related fields and methods, + * mis-declarations that my otherwise be difficult to detect. + * + *

Specifically, annotations of this type should be + * applied to serialization-related methods and fields in classes + * declared to be {@code Serializable}. The five serialization-related + * methods are: + * + *

+ * + * The two serialization-related fields are: + * + * + * + * Compilers are encouraged to validate that a method or field marked with a + * @Serial annotation is one of the defined serialization-related + * methods or fields declared in a meaningful context and issue a warning + * if that is not the case. + * + *

It is a semantic error to apply this annotation to other fields or methods, including: + *

+ * + * Note that serialization mechanism accesses its designated fields + * and methods reflectively and those fields and methods may appear + * otherwise unused in a {@code Serializable} class. + * + * @see Serializable + * @see Externalizable + */ +@Target({ElementType.METHOD, ElementType.FIELD}) +@Retention(RetentionPolicy.SOURCE) +public @interface Serial {}