On Jun 21, 2017, at 6:55 AM, Daniel Heidinga <daniel_heidi...@ca.ibm.com> wrote:
> 
> >  AI: John - send out javadoc to EG
> > derived class := Class.derivedClassFactory(Class mainClass, T userData, 
> > String name)
>  
> In the spirit of the usual "5 min before the meeting" ritual action item 
> panic, I'm trying to review the javadoc for this and can't seem to find it.  
> Can it be sent again?
>  

Apologies; here it is, 10 min before the meeting.

diff --git a/src/java.base/share/classes/java/lang/Class.java 
b/src/java.base/share/classes/java/lang/Class.java
--- a/src/java.base/share/classes/java/lang/Class.java
+++ b/src/java.base/share/classes/java/lang/Class.java
@@ -681,6 +681,65 @@
     public native boolean isPrimitive();
 
     /**
+     * Determines if the specified {@code Class} object is the
+     * primary representative of an underlying class file.
+     * Array and primitive classes are never primaries.
+     * Other reference type constants of the form {@code X.class}
+     * are always primaries.
+     * Value type mirrors are never primaries; their corresponding
+     * box reference types are primaries.
+     *
+     * @return true if and only if this class is the primary
+     * representative of its underlying class file
+     */
+    @HotSpotIntrinsicCandidate
+    public native boolean isPrimary();
+
+    /**
+     * Obtains the primary class corresponding to the specified
+     * {@code Class} object, if this class is a secondary class
+     * derived from a primary class
+     * If this class object is a primary class, it returns the
+     * same class object.
+     * <em>TBD:</em>An array type returns the primary class
+     * of its component type.  A primitive type returns the
+     * corresponding wrapper type.  A value type returns the
+     * primary class of its box type.  A specialized generic
+     * returns the primary class of its template type.
+     * <em>OR, an non-total version:</em>Primitive and array classes
+     * do not have associated primary classes; they return
+     * {@code null} for this query.
+     *
+     * @return the primary representative of the underlying class file
+     */
+    @HotSpotIntrinsicCandidate
+    public native Class<?> getPrimaryClass();
+
+    /**
+     * Creates a new non-primary class for the given primary.
+     * This is an internal factory for non-primary classes.
+     * The user is expected to perform relevant interning,
+     * and manage the type of the user-data component.
+     * @param primary the primary class for the new secondary
+     * @param name arbitrary name string, to be the name of the new secondary
+     * @param userData arbitrary reference to associate with the new secondary
+     * @return a fresh secondary class
+     * @throws IllegalArgumentException if the first argument is not a primary 
class
+     */
+    /*non-public*/
+    @HotSpotIntrinsicCandidate
+    static native Class<?> makeSecondaryClass(Class<?> primary, String name, 
Object userData);
+
+    /**
+     * Extract the user-data provided when the given secondary class
+     * was created by the {@code makeSecondaryClass} factory.
+     * Returns {@code null} if it was not created by that factory.
+     */
+    /*non-public*/
+    @HotSpotIntrinsicCandidate
+    native Object getSecondaryUserData();
+
+    /**
      * Returns true if this {@code Class} object represents an annotation
      * type.  Note that if this method returns true, {@link #isInterface()}
      * would also return true, as all annotation types are also interfaces.


Reply via email to