On Jun 21, 2017, at 6:55 AM, Daniel Heidinga <[email protected]> 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.