< prev index next >

src/hotspot/share/classfile/classFileParser.hpp

Print this page

        

@@ -96,10 +96,12 @@
   Array<u2>* _fields;
   Array<Method*>* _methods;
   Array<u2>* _inner_classes;
   Array<u2>* _nest_members;
   u2 _nest_host;
+  Array<u2>* _record_params;
+  Array<u2>* _permitted_subtypes;
   Array<InstanceKlass*>* _local_interfaces;
   Array<InstanceKlass*>* _transitive_interfaces;
   Annotations* _combined_annotations;
   AnnotationArray* _annotations;
   AnnotationArray* _type_annotations;

@@ -150,10 +152,11 @@
   u2 _minor_version;
   u2 _this_class_index;
   u2 _super_class_index;
   u2 _itfs_len;
   u2 _java_fields_count;
+  int _record_params_count;
 
   bool _need_verify;
   bool _relax_verify;
 
   bool _has_nonstatic_concrete_methods;

@@ -185,11 +188,11 @@
   void set_class_generic_signature_index(u2 x) { _generic_signature_index = x; }
   void set_class_sde_buffer(const char* x, int len)  { _sde_buffer = x; _sde_length = len; }
 
   void create_combined_annotations(TRAPS);
   void apply_parsed_class_attributes(InstanceKlass* k);  // update k
-  void apply_parsed_class_metadata(InstanceKlass* k, int fields_count, TRAPS);
+  void apply_parsed_class_metadata(InstanceKlass* k, int fields_count, int record_params_count, TRAPS);
   void clear_class_metadata();
 
   // Constant pool parsing
   void parse_constant_pool_entries(const ClassFileStream* const stream,
                                    ConstantPool* cp,

@@ -285,10 +288,20 @@
 
   u2 parse_classfile_nest_members_attribute(const ClassFileStream* const cfs,
                                             const u1* const nest_members_attribute_start,
                                             TRAPS);
 
+  u2 parse_classfile_permitted_subtypes_attribute(const ClassFileStream* const cfs,
+                                            const u1* const permitted_subtypes_attribute_start,
+                                            TRAPS);
+
+  void parse_classfile_record_attribute(const ClassFileStream* const cfs,
+                                        const u1* const record_attribute_start,
+                                        ConstantPool* cp,
+                                        int* const record_params_count_ptr,
+                                        TRAPS);
+
   void parse_classfile_attributes(const ClassFileStream* const cfs,
                                   ConstantPool* cp,
                                   ClassAnnotationCollector* parsed_annotations,
                                   TRAPS);
 

@@ -485,10 +498,13 @@
                      const FieldAllocationCount* fac,
                      const ClassAnnotationCollector* parsed_annotations,
                      FieldLayoutInfo* info,
                      TRAPS);
 
+   // check that the current class is not extending a final class or interface
+   void check_subtyping(TRAPS);
+
    void update_class_name(Symbol* new_name);
 
  public:
   ClassFileParser(ClassFileStream* stream,
                   Symbol* name,
< prev index next >