hotspot/src/share/vm/classfile/classFileParser.hpp
changeset 13728 882756847a04
parent 13391 30245956af37
child 13973 cb904e0b6a45
child 13952 e3cf184080bc
--- a/hotspot/src/share/vm/classfile/classFileParser.hpp	Fri Aug 31 16:39:35 2012 -0700
+++ b/hotspot/src/share/vm/classfile/classFileParser.hpp	Sat Sep 01 13:25:18 2012 -0400
@@ -62,15 +62,15 @@
   Symbol*    _generic_signature;
   char*      _sde_buffer;
   int        _sde_length;
-  typeArrayHandle _inner_classes;
-  typeArrayHandle _annotations;
+  Array<u2>* _inner_classes;
+  AnnotationArray* _annotations;
 
   void set_class_synthetic_flag(bool x)           { _synthetic_flag = x; }
   void set_class_sourcefile(Symbol* x)            { _sourcefile = x; }
   void set_class_generic_signature(Symbol* x)     { _generic_signature = x; }
   void set_class_sde_buffer(char* x, int len)     { _sde_buffer = x; _sde_length = len; }
-  void set_class_inner_classes(typeArrayHandle x) { _inner_classes = x; }
-  void set_class_annotations(typeArrayHandle x)   { _annotations = x; }
+  void set_class_inner_classes(Array<u2>* x)      { _inner_classes = x; }
+  void set_class_annotations(AnnotationArray* x)  { _annotations = x; }
   void init_parsed_class_attributes() {
     _synthetic_flag = false;
     _sourcefile = NULL;
@@ -140,54 +140,63 @@
   void set_stream(ClassFileStream* st)             { _stream = st; }
 
   // Constant pool parsing
-  void parse_constant_pool_entries(Handle class_loader,
+  void parse_constant_pool_entries(ClassLoaderData* loader_data,
                                    constantPoolHandle cp, int length, TRAPS);
 
-  constantPoolHandle parse_constant_pool(Handle class_loader, TRAPS);
+  constantPoolHandle parse_constant_pool(ClassLoaderData* loader_data, TRAPS);
 
   // Interface parsing
-  objArrayHandle parse_interfaces(constantPoolHandle cp,
+  Array<Klass*>* parse_interfaces(constantPoolHandle cp,
                                   int length,
-                                  Handle class_loader,
+                                    ClassLoaderData* loader_data,
                                   Handle protection_domain,
                                   Symbol* class_name,
                                   TRAPS);
+  void record_defined_class_dependencies(instanceKlassHandle defined_klass, TRAPS);
 
   // Field parsing
-  void parse_field_attributes(constantPoolHandle cp, u2 attributes_count,
+  void parse_field_attributes(ClassLoaderData* loader_data,
+                              constantPoolHandle cp, u2 attributes_count,
                               bool is_static, u2 signature_index,
                               u2* constantvalue_index_addr,
                               bool* is_synthetic_addr,
                               u2* generic_signature_index_addr,
-                              typeArrayHandle* field_annotations,
+                              AnnotationArray** field_annotations,
                               FieldAnnotationCollector* parsed_annotations,
                               TRAPS);
-  typeArrayHandle parse_fields(Symbol* class_name,
+  Array<u2>* parse_fields(ClassLoaderData* loader_data,
+                          Symbol* class_name,
                                constantPoolHandle cp, bool is_interface,
                                FieldAllocationCount *fac,
-                               objArrayHandle* fields_annotations,
+                          Array<AnnotationArray*>** fields_annotations,
                                u2* java_fields_count_ptr, TRAPS);
 
   // Method parsing
-  methodHandle parse_method(constantPoolHandle cp, bool is_interface,
+  methodHandle parse_method(ClassLoaderData* loader_data,
+                            constantPoolHandle cp,
+                            bool is_interface,
                             AccessFlags* promoted_flags,
-                            typeArrayHandle* method_annotations,
-                            typeArrayHandle* method_parameter_annotations,
-                            typeArrayHandle* method_default_annotations,
+                            AnnotationArray** method_annotations,
+                            AnnotationArray** method_parameter_annotations,
+                            AnnotationArray** method_default_annotations,
                             TRAPS);
-  objArrayHandle parse_methods (constantPoolHandle cp, bool is_interface,
+  Array<Method*>* parse_methods(ClassLoaderData* loader_data,
+                                  constantPoolHandle cp,
+                                  bool is_interface,
                                 AccessFlags* promoted_flags,
                                 bool* has_final_method,
-                                objArrayOop* methods_annotations_oop,
-                                objArrayOop* methods_parameter_annotations_oop,
-                                objArrayOop* methods_default_annotations_oop,
+                                  Array<AnnotationArray*>** methods_annotations,
+                                  Array<AnnotationArray*>** methods_parameter_annotations,
+                                  Array<AnnotationArray*>** methods_default_annotations,
                                 TRAPS);
-  typeArrayHandle sort_methods (objArrayHandle methods,
-                                objArrayHandle methods_annotations,
-                                objArrayHandle methods_parameter_annotations,
-                                objArrayHandle methods_default_annotations,
+  Array<int>* sort_methods(ClassLoaderData* loader_data,
+                           Array<Method*>* methods,
+                           Array<AnnotationArray*>* methods_annotations,
+                           Array<AnnotationArray*>* methods_parameter_annotations,
+                           Array<AnnotationArray*>* methods_default_annotations,
                                 TRAPS);
-  u2* parse_exception_table(u4 code_length, u4 exception_table_length,
+  u2* parse_exception_table(ClassLoaderData* loader_data,
+                            u4 code_length, u4 exception_table_length,
                             constantPoolHandle cp, TRAPS);
   void parse_linenumber_table(
       u4 code_attribute_length, u4 code_length,
@@ -199,26 +208,30 @@
                                constantPoolHandle cp, TRAPS);
   void parse_type_array(u2 array_length, u4 code_length, u4* u1_index, u4* u2_index,
                         u1* u1_array, u2* u2_array, constantPoolHandle cp, TRAPS);
-  typeArrayOop parse_stackmap_table(u4 code_attribute_length, TRAPS);
+  Array<u1>* parse_stackmap_table(ClassLoaderData* loader_data, u4 code_attribute_length, TRAPS);
 
   // Classfile attribute parsing
   void parse_classfile_sourcefile_attribute(constantPoolHandle cp, TRAPS);
-  void parse_classfile_source_debug_extension_attribute(constantPoolHandle cp, int length, TRAPS);
-  u2   parse_classfile_inner_classes_attribute(u1* inner_classes_attribute_start,
+  void parse_classfile_source_debug_extension_attribute(constantPoolHandle cp,
+                                                        int length, TRAPS);
+  u2   parse_classfile_inner_classes_attribute(ClassLoaderData* loader_data,
+                                               u1* inner_classes_attribute_start,
                                                bool parsed_enclosingmethod_attribute,
                                                u2 enclosing_method_class_index,
                                                u2 enclosing_method_method_index,
                                                constantPoolHandle cp,
                                                TRAPS);
-  void parse_classfile_attributes(constantPoolHandle cp,
+  void parse_classfile_attributes(ClassLoaderData* loader_data,
+                                  constantPoolHandle cp,
                                   ClassAnnotationCollector* parsed_annotations,
                                   TRAPS);
   void parse_classfile_synthetic_attribute(constantPoolHandle cp, TRAPS);
   void parse_classfile_signature_attribute(constantPoolHandle cp, TRAPS);
-  void parse_classfile_bootstrap_methods_attribute(constantPoolHandle cp, u4 attribute_length, TRAPS);
+  void parse_classfile_bootstrap_methods_attribute(ClassLoaderData* loader_data, constantPoolHandle cp, u4 attribute_length, TRAPS);
 
   // Annotations handling
-  typeArrayHandle assemble_annotations(u1* runtime_visible_annotations,
+  AnnotationArray* assemble_annotations(ClassLoaderData* loader_data,
+                                        u1* runtime_visible_annotations,
                                        int runtime_visible_annotations_length,
                                        u1* runtime_invisible_annotations,
                                        int runtime_invisible_annotations_length, TRAPS);
@@ -238,8 +251,9 @@
                      int* nonstatic_oop_offsets,
                      unsigned int* nonstatic_oop_counts);
   void set_precomputed_flags(instanceKlassHandle k);
-  objArrayHandle compute_transitive_interfaces(instanceKlassHandle super,
-                                               objArrayHandle local_ifs, TRAPS);
+  Array<Klass*>* compute_transitive_interfaces(ClassLoaderData* loader_data,
+                                                 instanceKlassHandle super,
+                                                 Array<Klass*>* local_ifs, TRAPS);
 
   // Format checker methods
   void classfile_parse_error(const char* msg, TRAPS);
@@ -326,7 +340,7 @@
   void patch_constant_pool(constantPoolHandle cp, int index, Handle patch, TRAPS);
 
   // Wrapper for constantTag.is_klass_[or_]reference.
-  // In older versions of the VM, klassOops cannot sneak into early phases of
+  // In older versions of the VM, Klass*s cannot sneak into early phases of
   // constant pool construction, but in later versions they can.
   // %%% Let's phase out the old is_klass_reference.
   bool is_klass_reference(constantPoolHandle cp, int index) {
@@ -339,7 +353,7 @@
   // Constructor
   ClassFileParser(ClassFileStream* st) { set_stream(st); }
 
-  // Parse .class file and return new klassOop. The klassOop is not hooked up
+  // Parse .class file and return new Klass*. The Klass* is not hooked up
   // to the system dictionary or any other structures, so a .class file can
   // be loaded several times if desired.
   // The system dictionary hookup is done by the caller.