< prev index next >

src/java.base/share/classes/java/lang/reflect/Field.java

Print this page
@@ -78,11 +78,11 @@
      // This is guaranteed to be interned by the VM in the 1.4
      // reflection implementation
      private final String              name;
      private final Class<?>            type;
      private final int                 modifiers;
-     private final boolean             trustedFinal;
+     private final int                 flags;
      // Generics and annotations support
      private final transient String    signature;
      private final byte[]              annotations;
  
      /**

@@ -128,20 +128,20 @@
      @SuppressWarnings("deprecation")
      Field(Class<?> declaringClass,
            String name,
            Class<?> type,
            int modifiers,
-           boolean trustedFinal,
+           int flags,
            int slot,
            String signature,
            byte[] annotations)
      {
          this.clazz = declaringClass;
          this.name = name;
          this.type = type;
          this.modifiers = modifiers;
-         this.trustedFinal = trustedFinal;
+         this.flags = flags;
          this.slot = slot;
          this.signature = signature;
          this.annotations = annotations;
      }
  

@@ -159,11 +159,11 @@
          // objects be fabricated for each reflective call on Class
          // objects.)
          if (this.root != null)
              throw new IllegalArgumentException("Can not copy a non-root Field");
  
-         Field res = new Field(clazz, name, type, modifiers, trustedFinal, slot, signature, annotations);
+         Field res = new Field(clazz, name, type, modifiers, flags, slot, signature, annotations);
          res.root = this;
          // Might as well eagerly propagate this if already present
          res.fieldAccessor = fieldAccessor;
          res.overrideFieldAccessor = overrideFieldAccessor;
          res.genericInfo = genericInfo;

@@ -238,10 +238,12 @@
      }
  
      /**
       * {@return an unmodifiable set of the {@linkplain AccessFlag
       * access flags} for this field, possibly empty}
+      * The {@code AccessFlags} may depend on the class file format version of the class.
+      *
       * @see #getModifiers()
       * @jvms 4.5 Fields
       * @since 20
       */
      @Override

@@ -808,10 +810,11 @@
       *     open} to the caller's module.</li>
       *     </ol>
       * </li>
       * <li>{@code D} is not a {@linkplain Class#isRecord() record class}.</li>
       * <li>{@code D} is not a {@linkplain Class#isHidden() hidden class}.</li>
+      * <li>{@code D} is not a {@linkplain Class#isValue() value class}.</li>
       * <li>The field is non-static.</li>
       * </ul>
       *
       * <p>If any of the above conditions is not met, this method throws an
       * {@code IllegalAccessException}.

@@ -1348,12 +1351,19 @@
      @Override
      /* package-private */ Field getRoot() {
          return root;
      }
  
+     private static final int TRUST_FINAL     = 0x0010;
+     private static final int NULL_RESTRICTED = 0x0020;
+ 
      /* package-private */ boolean isTrustedFinal() {
-         return trustedFinal;
+         return (flags & TRUST_FINAL) == TRUST_FINAL;
+     }
+ 
+     /* package-private */ boolean isNullRestricted() {
+         return (flags & NULL_RESTRICTED) == NULL_RESTRICTED;
      }
  
      /**
       * {@inheritDoc}
       *
< prev index next >