src/share/vm/oops/annotations.hpp

Wed, 17 Jul 2013 18:06:29 -0400

author
jiangli
date
Wed, 17 Jul 2013 18:06:29 -0400
changeset 5421
825e6cb66923
parent 4572
927a311d00f9
child 6876
710a3c8b516e
permissions
-rw-r--r--

8020309: Eliminate InstanceKlass::_cached_class_file_len.
Summary: Use JvmtiCachedClassFileData.
Reviewed-by: iklam, sspitsyn, dcubed

     1 /*
     2  * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  *
    15  * You should have received a copy of the GNU General Public License version
    16  * 2 along with this work; if not, write to the Free Software Foundation,
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18  *
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    22  *
    23  */
    25 #ifndef SHARE_VM_OOPS_ANNOTATIONS_HPP
    26 #define SHARE_VM_OOPS_ANNOTATIONS_HPP
    28 #include "oops/metadata.hpp"
    29 #include "runtime/handles.hpp"
    30 #include "utilities/array.hpp"
    31 #include "utilities/exceptions.hpp"
    32 #include "utilities/globalDefinitions.hpp"
    35 class ClassLoaderData;
    36 class outputStream;
    37 class KlassSizeStats;
    39 typedef Array<u1> AnnotationArray;
    41 // Class to hold the various types of annotations. The only metadata that points
    42 // to this is InstanceKlass, or another Annotations instance if this is a
    43 // a type_annotation instance.
    45 class Annotations: public MetaspaceObj {
    47   // Annotations for this class, or null if none.
    48   AnnotationArray*             _class_annotations;
    49   // Annotation objects (byte arrays) for fields, or null if no annotations.
    50   // Indices correspond to entries (not indices) in fields array.
    51   Array<AnnotationArray*>*     _fields_annotations;
    52   // Type annotations for this class, or null if none.
    53   AnnotationArray*             _class_type_annotations;
    54   Array<AnnotationArray*>*     _fields_type_annotations;
    56  public:
    57   // Allocate instance of this class
    58   static Annotations* allocate(ClassLoaderData* loader_data, TRAPS);
    60   static void free_contents(ClassLoaderData* loader_data, Array<AnnotationArray*>* p);
    61   void deallocate_contents(ClassLoaderData* loader_data);
    62   DEBUG_ONLY(bool on_stack() { return false; })  // for template
    64   // Sizing (in words)
    65   static int size()    { return sizeof(Annotations) / wordSize; }
    66 #if INCLUDE_SERVICES
    67   void collect_statistics(KlassSizeStats *sz) const;
    68 #endif
    70   // Constructor to initialize to null
    71   Annotations() : _class_annotations(NULL),
    72                   _fields_annotations(NULL),
    73                   _class_type_annotations(NULL),
    74                   _fields_type_annotations(NULL) {}
    76   AnnotationArray* class_annotations() const                       { return _class_annotations; }
    77   Array<AnnotationArray*>* fields_annotations() const              { return _fields_annotations; }
    78   AnnotationArray* class_type_annotations() const                  { return _class_type_annotations; }
    79   Array<AnnotationArray*>* fields_type_annotations() const         { return _fields_type_annotations; }
    81   void set_class_annotations(AnnotationArray* md)                     { _class_annotations = md; }
    82   void set_fields_annotations(Array<AnnotationArray*>* md)            { _fields_annotations = md; }
    83   void set_class_type_annotations(AnnotationArray* cta)               { _class_type_annotations = cta; }
    84   void set_fields_type_annotations(Array<AnnotationArray*>* fta)      { _fields_type_annotations = fta; }
    86   // Turn metadata annotations into a Java heap object (oop)
    87   static typeArrayOop make_java_array(AnnotationArray* annotations, TRAPS);
    89   bool is_klass() const { return false; }
    90  private:
    91   static julong count_bytes(Array<AnnotationArray*>* p);
    92  public:
    93   const char* internal_name() const { return "{constant pool}"; }
    94 #ifndef PRODUCT
    95   void print_on(outputStream* st) const;
    96 #endif
    97   void print_value_on(outputStream* st) const;
    98 };
    99 #endif // SHARE_VM_OOPS_ANNOTATIONS_HPP

mercurial