55 super(name_index, 2 + Info.length() * classes.length); 56 this.number_of_classes = classes.length; 57 this.classes = classes; 58 } 59 60 public <R, D> R accept(Visitor<R, D> visitor, D data) { 61 return visitor.visitInnerClasses(this, data); 62 } 63 64 public final int number_of_classes; 65 public final Info[] classes; 66 67 public static class Info { 68 Info(ClassReader cr) throws IOException { 69 inner_class_info_index = cr.readUnsignedShort(); 70 outer_class_info_index = cr.readUnsignedShort(); 71 inner_name_index = cr.readUnsignedShort(); 72 inner_class_access_flags = new AccessFlags(cr.readUnsignedShort()); 73 } 74 75 public CONSTANT_Class_info getInnerClassInfo(ConstantPool constant_pool) throws ConstantPoolException { 76 if (inner_class_info_index == 0) 77 return null; 78 return constant_pool.getClassInfo(inner_class_info_index); 79 } 80 81 public CONSTANT_Class_info getOuterClassInfo(ConstantPool constant_pool) throws ConstantPoolException { 82 if (outer_class_info_index == 0) 83 return null; 84 return constant_pool.getClassInfo(outer_class_info_index); 85 } 86 87 public String getInnerName(ConstantPool constant_pool) throws ConstantPoolException { 88 if (inner_name_index == 0) 89 return null; 90 return constant_pool.getUTF8Value(inner_name_index); 91 } 92 93 public static int length() { 94 return 8; | 55 super(name_index, 2 + Info.length() * classes.length); 56 this.number_of_classes = classes.length; 57 this.classes = classes; 58 } 59 60 public <R, D> R accept(Visitor<R, D> visitor, D data) { 61 return visitor.visitInnerClasses(this, data); 62 } 63 64 public final int number_of_classes; 65 public final Info[] classes; 66 67 public static class Info { 68 Info(ClassReader cr) throws IOException { 69 inner_class_info_index = cr.readUnsignedShort(); 70 outer_class_info_index = cr.readUnsignedShort(); 71 inner_name_index = cr.readUnsignedShort(); 72 inner_class_access_flags = new AccessFlags(cr.readUnsignedShort()); 73 } 74 75 public Info(int inner_class_info_index, int outer_class_info_index, int inner_name_index, AccessFlags inner_class_access_flags) { 76 this.inner_class_info_index = inner_class_info_index; 77 this.outer_class_info_index = outer_class_info_index; 78 this.inner_name_index = inner_name_index; 79 this.inner_class_access_flags = inner_class_access_flags; 80 } 81 82 public CONSTANT_Class_info getInnerClassInfo(ConstantPool constant_pool) throws ConstantPoolException { 83 if (inner_class_info_index == 0) 84 return null; 85 return constant_pool.getClassInfo(inner_class_info_index); 86 } 87 88 public CONSTANT_Class_info getOuterClassInfo(ConstantPool constant_pool) throws ConstantPoolException { 89 if (outer_class_info_index == 0) 90 return null; 91 return constant_pool.getClassInfo(outer_class_info_index); 92 } 93 94 public String getInnerName(ConstantPool constant_pool) throws ConstantPoolException { 95 if (inner_name_index == 0) 96 return null; 97 return constant_pool.getUTF8Value(inner_name_index); 98 } 99 100 public static int length() { 101 return 8; |