diff options
Diffstat (limited to 'src/org/jetbrains/java/decompiler/struct/attr/StructInnerClassesAttribute.java')
-rw-r--r-- | src/org/jetbrains/java/decompiler/struct/attr/StructInnerClassesAttribute.java | 78 |
1 files changed, 39 insertions, 39 deletions
diff --git a/src/org/jetbrains/java/decompiler/struct/attr/StructInnerClassesAttribute.java b/src/org/jetbrains/java/decompiler/struct/attr/StructInnerClassesAttribute.java index 14ecd36..5969487 100644 --- a/src/org/jetbrains/java/decompiler/struct/attr/StructInnerClassesAttribute.java +++ b/src/org/jetbrains/java/decompiler/struct/attr/StructInnerClassesAttribute.java @@ -17,56 +17,56 @@ package org.jetbrains.java.decompiler.struct.attr; import org.jetbrains.java.decompiler.struct.consts.ConstantPool; +import java.io.DataInputStream; +import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class StructInnerClassesAttribute extends StructGeneralAttribute { - private List<int[]> classentries = new ArrayList<int[]>(); - - private List<String[]> stringentries = new ArrayList<String[]>(); - - public void initContent(ConstantPool pool) { - - name = ATTRIBUTE_INNER_CLASSES; - - int length = 2 + (((info[0] & 0xFF) << 8) | (info[1] & 0xFF)) * 8; - int i = 2; - - while (i < length) { - - int[] arr = new int[4]; - for (int j = 0; j < 4; j++) { - arr[j] = ((info[i] & 0xFF) << 8) | (info[i + 1] & 0xFF); - i += 2; + private List<int[]> classEntries; + private List<String[]> stringEntries; + + @Override + public void initContent(ConstantPool pool) throws IOException { + DataInputStream data = stream(); + + int len = data.readUnsignedShort(); + if (len > 0) { + classEntries = new ArrayList<int[]>(len); + stringEntries = new ArrayList<String[]>(len); + + for (int i = 0; i < len; i++) { + int[] classEntry = new int[4]; + for (int j = 0; j < 4; j++) { + classEntry[j] = data.readUnsignedShort(); + } + classEntries.add(classEntry); + + // inner name, enclosing class, original simple name + String[] stringEntry = new String[3]; + stringEntry[0] = pool.getPrimitiveConstant(classEntry[0]).getString(); + if (classEntry[1] != 0) { + stringEntry[1] = pool.getPrimitiveConstant(classEntry[1]).getString(); + } + if (classEntry[2] != 0) { + stringEntry[2] = pool.getPrimitiveConstant(classEntry[2]).getString(); + } + stringEntries.add(stringEntry); } - - classentries.add(arr); } - - for (int[] entry : classentries) { - - String[] arr = new String[3]; - // inner name - arr[0] = pool.getPrimitiveConstant(entry[0]).getString(); - //enclosing class - if (entry[1] != 0) { - arr[1] = pool.getPrimitiveConstant(entry[1]).getString(); - } - // original simple name - if (entry[2] != 0) { - arr[2] = pool.getPrimitiveConstant(entry[2]).getString(); - } - - stringentries.add(arr); + else { + classEntries = Collections.emptyList(); + stringEntries = Collections.emptyList(); } } - public List<int[]> getClassentries() { - return classentries; + public List<int[]> getClassEntries() { + return classEntries; } - public List<String[]> getStringentries() { - return stringentries; + public List<String[]> getStringEntries() { + return stringEntries; } } |