hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java
changeset 12231 6a9cfc59a18a
parent 11440 dea12ec80745
child 12369 48fd3da4025c
equal deleted inserted replaced
12112:56e3093129dc 12231:6a9cfc59a18a
   357     public static final int innerClassInnerNameOffset = 2;
   357     public static final int innerClassInnerNameOffset = 2;
   358     public static final int innerClassAccessFlagsOffset = 3;
   358     public static final int innerClassAccessFlagsOffset = 3;
   359     public static final int innerClassNextOffset = 4;
   359     public static final int innerClassNextOffset = 4;
   360   };
   360   };
   361 
   361 
       
   362   public static interface EnclosingMethodAttributeOffset {
       
   363     public static final int enclosing_method_class_index_offset = 0;
       
   364     public static final int enclosing_method_method_index_offset = 1;
       
   365     public static final int enclosing_method_attribute_size = 2;
       
   366   };
       
   367 
   362   // refer to compute_modifier_flags in VM code.
   368   // refer to compute_modifier_flags in VM code.
   363   public long computeModifierFlags() {
   369   public long computeModifierFlags() {
   364     long access = getAccessFlags();
   370     long access = getAccessFlags();
   365     // But check if it happens to be member class.
   371     // But check if it happens to be member class.
   366     TypeArray innerClassList = getInnerClasses();
   372     TypeArray innerClassList = getInnerClasses();
   367     int length = ( innerClassList == null)? 0 : (int) innerClassList.getLength();
   373     int length = ( innerClassList == null)? 0 : (int) innerClassList.getLength();
   368     if (length > 0) {
   374     if (length > 0) {
   369        if (Assert.ASSERTS_ENABLED) {
   375        if (Assert.ASSERTS_ENABLED) {
   370           Assert.that(length % InnerClassAttributeOffset.innerClassNextOffset == 0, "just checking");
   376           Assert.that(length % InnerClassAttributeOffset.innerClassNextOffset == 0 ||
       
   377                       length % InnerClassAttributeOffset.innerClassNextOffset == EnclosingMethodAttributeOffset.enclosing_method_attribute_size,
       
   378                       "just checking");
   371        }
   379        }
   372        for (int i = 0; i < length; i += InnerClassAttributeOffset.innerClassNextOffset) {
   380        for (int i = 0; i < length; i += InnerClassAttributeOffset.innerClassNextOffset) {
       
   381           if (i == length - EnclosingMethodAttributeOffset.enclosing_method_attribute_size) {
       
   382               break;
       
   383           }
   373           int ioff = innerClassList.getShortAt(i +
   384           int ioff = innerClassList.getShortAt(i +
   374                          InnerClassAttributeOffset.innerClassInnerClassInfoOffset);
   385                          InnerClassAttributeOffset.innerClassInnerClassInfoOffset);
   375           // 'ioff' can be zero.
   386           // 'ioff' can be zero.
   376           // refer to JVM spec. section 4.7.5.
   387           // refer to JVM spec. section 4.7.5.
   377           if (ioff != 0) {
   388           if (ioff != 0) {
   417   private boolean isInInnerClasses(Symbol sym, boolean includeLocals) {
   428   private boolean isInInnerClasses(Symbol sym, boolean includeLocals) {
   418     TypeArray innerClassList = getInnerClasses();
   429     TypeArray innerClassList = getInnerClasses();
   419     int length = ( innerClassList == null)? 0 : (int) innerClassList.getLength();
   430     int length = ( innerClassList == null)? 0 : (int) innerClassList.getLength();
   420     if (length > 0) {
   431     if (length > 0) {
   421        if (Assert.ASSERTS_ENABLED) {
   432        if (Assert.ASSERTS_ENABLED) {
   422          Assert.that(length % InnerClassAttributeOffset.innerClassNextOffset == 0, "just checking");
   433          Assert.that(length % InnerClassAttributeOffset.innerClassNextOffset == 0 ||
       
   434                      length % InnerClassAttributeOffset.innerClassNextOffset == EnclosingMethodAttributeOffset.enclosing_method_attribute_size,
       
   435                      "just checking");
   423        }
   436        }
   424        for (int i = 0; i < length; i += InnerClassAttributeOffset.innerClassNextOffset) {
   437        for (int i = 0; i < length; i += InnerClassAttributeOffset.innerClassNextOffset) {
       
   438          if (i == length - EnclosingMethodAttributeOffset.enclosing_method_attribute_size) {
       
   439              break;
       
   440          }
   425          int ioff = innerClassList.getShortAt(i +
   441          int ioff = innerClassList.getShortAt(i +
   426                         InnerClassAttributeOffset.innerClassInnerClassInfoOffset);
   442                         InnerClassAttributeOffset.innerClassInnerClassInfoOffset);
   427          // 'ioff' can be zero.
   443          // 'ioff' can be zero.
   428          // refer to JVM spec. section 4.7.5.
   444          // refer to JVM spec. section 4.7.5.
   429          if (ioff != 0) {
   445          if (ioff != 0) {