mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 23:04:50 +02:00
8225054: Compiler implementation for records
8225052: javax.lang.model support for records 8225053: Preview APIs support for records 8225055: Javadoc for records 8226314: com.sun.source support for records 8227113: Specification for java.lang.Record 8233526: JVM support for records Implement records in the compiler and the JVM, including serialization, reflection and APIs support Co-authored-by: Brian Goetz <brian.goetz@oracle.com> Co-authored-by: Maurizio Cimadamore <maurizio.cimadamore@oracle.com> Co-authored-by: Harold Seigel <harold.seigel@oracle.com> Co-authored-by: Joe Darcy <joe.darcy@oracle.com> Co-authored-by: Jonathan Gibbons <jonathan.gibbons@oracle.com> Co-authored-by: Chris Hegarty <chris.hegarty@oracle.com> Co-authored-by: Jan Lahoda <jan.lahoda@oracle.com> Reviewed-by: mcimadamore, briangoetz, alanb, darcy, chegar, jrose, jlahoda, coleenp, dholmes, lfoltan, mchung, sadayapalam, hannesw, sspitsyn
This commit is contained in:
parent
0a375cfa2d
commit
827e5e3226
351 changed files with 24958 additions and 6395 deletions
|
@ -46,6 +46,7 @@ import java.lang.reflect.Member;
|
|||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.lang.reflect.Proxy;
|
||||
import java.lang.reflect.RecordComponent;
|
||||
import java.lang.reflect.Type;
|
||||
import java.lang.reflect.TypeVariable;
|
||||
import java.lang.constant.Constable;
|
||||
|
@ -2259,6 +2260,68 @@ public final class Class<T> implements java.io.Serializable,
|
|||
return copyFields(privateGetDeclaredFields(false));
|
||||
}
|
||||
|
||||
/**
|
||||
* {@preview Associated with records, a preview feature of the Java language.
|
||||
*
|
||||
* This method is associated with <i>records</i>, a preview
|
||||
* feature of the Java language. Preview features
|
||||
* may be removed in a future release, or upgraded to permanent
|
||||
* features of the Java language.}
|
||||
*
|
||||
* Returns an array containing {@code RecordComponent} objects reflecting all the
|
||||
* declared record components of the record represented by this {@code Class} object.
|
||||
* The components are returned in the same order that they are declared in the
|
||||
* record header.
|
||||
*
|
||||
* @return The array of {@code RecordComponent} objects representing all the
|
||||
* record components of this record. The array is empty if this class
|
||||
* is not a record, or if this class is a record with no components.
|
||||
* @throws SecurityException
|
||||
* If a security manager, <i>s</i>, is present and any of the
|
||||
* following conditions is met:
|
||||
*
|
||||
* <ul>
|
||||
*
|
||||
* <li> the caller's class loader is not the same as the
|
||||
* class loader of this class and invocation of
|
||||
* {@link SecurityManager#checkPermission
|
||||
* s.checkPermission} method with
|
||||
* {@code RuntimePermission("accessDeclaredMembers")}
|
||||
* denies access to the declared methods within this class
|
||||
*
|
||||
* <li> the caller's class loader is not the same as or an
|
||||
* ancestor of the class loader for the current class and
|
||||
* invocation of {@link SecurityManager#checkPackageAccess
|
||||
* s.checkPackageAccess()} denies access to the package
|
||||
* of this class
|
||||
*
|
||||
* </ul>
|
||||
*
|
||||
* @jls 8.10 Record Types
|
||||
* @since 14
|
||||
*/
|
||||
@jdk.internal.PreviewFeature(feature=jdk.internal.PreviewFeature.Feature.RECORDS,
|
||||
essentialAPI=false)
|
||||
@SuppressWarnings("preview")
|
||||
@CallerSensitive
|
||||
public RecordComponent[] getRecordComponents() {
|
||||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null) {
|
||||
checkMemberAccess(sm, Member.DECLARED, Reflection.getCallerClass(), true);
|
||||
}
|
||||
if (isPrimitive() || isArray()) {
|
||||
return new RecordComponent[0];
|
||||
}
|
||||
Object[] recordComponents = getRecordComponents0();
|
||||
if (recordComponents == null || recordComponents.length == 0) {
|
||||
return new RecordComponent[0];
|
||||
}
|
||||
RecordComponent[] result = new RecordComponent[recordComponents.length];
|
||||
for (int i = 0; i < recordComponents.length; i++) {
|
||||
result[i] = (RecordComponent)recordComponents[i];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array containing {@code Method} objects reflecting all the
|
||||
|
@ -3417,6 +3480,8 @@ public final class Class<T> implements java.io.Serializable,
|
|||
private native Method[] getDeclaredMethods0(boolean publicOnly);
|
||||
private native Constructor<T>[] getDeclaredConstructors0(boolean publicOnly);
|
||||
private native Class<?>[] getDeclaredClasses0();
|
||||
private native Object[] getRecordComponents0();
|
||||
private native boolean isRecord0();
|
||||
|
||||
/**
|
||||
* Helper method to get the method name from arguments.
|
||||
|
@ -3525,6 +3590,29 @@ public final class Class<T> implements java.io.Serializable,
|
|||
this.getSuperclass() == java.lang.Enum.class;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@preview Associated with records, a preview feature of the Java language.
|
||||
*
|
||||
* This method is associated with <i>records</i>, a preview
|
||||
* feature of the Java language. Preview features
|
||||
* may be removed in a future release, or upgraded to permanent
|
||||
* features of the Java language.}
|
||||
*
|
||||
* Returns {@code true} if and only if this class is a record class.
|
||||
* It returns {@code false} otherwise. Note that class {@link Record} is not a
|
||||
* record type and thus invoking this method on class {@link java.lang.Record}
|
||||
* returns {@code false}.
|
||||
*
|
||||
* @return true if and only if this class is a record class
|
||||
* @jls 8.10 Record Types
|
||||
* @since 14
|
||||
*/
|
||||
@jdk.internal.PreviewFeature(feature=jdk.internal.PreviewFeature.Feature.RECORDS,
|
||||
essentialAPI=false)
|
||||
public boolean isRecord() {
|
||||
return isRecord0();
|
||||
}
|
||||
|
||||
// Fetches the factory for reflective objects
|
||||
private static ReflectionFactory getReflectionFactory() {
|
||||
if (reflectionFactory == null) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue