| 1 9 package com.vladium.jcd.cls.attribute; 10 11 import java.io.IOException ; 12 import java.util.ArrayList ; 13 import java.util.List ; 14 15 import com.vladium.jcd.lib.UDataInputStream; 16 import com.vladium.jcd.lib.UDataOutputStream; 17 18 22 public 23 final class InnerClassesAttribute_info extends Attribute_info 24 { 25 27 29 public boolean makesClassNested (final int class_index, final int [] nestedAccessFlags) 30 { 31 if (class_index > 0) 32 { 33 35 for (int i = 0, iLimit = size (); i < iLimit; ++ i) 36 { 37 final InnerClass_info info = get (i); 38 39 if (info.m_inner_class_index == class_index) 40 { 41 nestedAccessFlags [0] = info.m_inner_access_flags; 42 return true; 43 } 44 } 45 } 46 47 return false; 48 } 49 50 59 public final InnerClass_info get (final int offset) 60 { 61 return (InnerClass_info) m_classes.get (offset); 62 } 63 64 67 public final int size () 68 { 69 return m_classes.size (); 70 } 71 72 public final long length () 73 { 74 return 8 + (m_classes.size () << 3); } 76 77 79 public void accept (final IAttributeVisitor visitor, final Object ctx) 80 { 81 visitor.visit (this, ctx); 82 } 83 84 public String toString () 85 { 86 final StringBuffer s = new StringBuffer ("InnerClassesAttribute_info: [attribute_name_index = " + m_name_index + ", attribute_length = " + length () + "]\n"); 87 88 for (int l = 0; l < size (); ++ l) 89 { 90 s.append (" " + get (l)); 91 s.append ("\n"); } 93 94 return s.toString (); 95 } 96 97 99 102 public Object clone () 103 { 104 final InnerClassesAttribute_info _clone = (InnerClassesAttribute_info) super.clone (); 105 106 final List classes = m_classes; 107 108 final int class_count = classes.size (); _clone.m_classes = new ArrayList (class_count); 111 for (int e = 0; e < class_count; ++ e) 112 { 113 _clone.m_classes.add (((InnerClass_info) classes.get (e)).clone ()); 114 } 115 116 return _clone; 117 } 118 119 121 public void writeInClassFormat (final UDataOutputStream out) throws IOException  122 { 123 super.writeInClassFormat (out); 124 125 final List classes = m_classes; 126 127 final int class_count = classes.size (); out.writeU2 (class_count); 129 130 for (int l = 0; l < class_count; ++ l) 131 { 132 ((InnerClass_info) classes.get (l)).writeInClassFormat (out); 133 } 134 } 135 136 138 140 141 InnerClassesAttribute_info (final int attribute_name_index, final long attribute_length, 142 final UDataInputStream bytes) 143 throws IOException  144 { 145 super (attribute_name_index, attribute_length); 146 147 final int class_count = bytes.readU2 (); 148 final List classes = new ArrayList (class_count); 149 150 for (int i = 0; i < class_count; ++ i) 151 { 152 classes.add (new InnerClass_info (bytes)); 153 } 154 155 m_classes = classes; 156 } 157 158 160 161 private List m_classes; 163 } | Popular Tags |