summaryrefslogtreecommitdiffstats
path: root/src/org/jetbrains/java/decompiler/struct/attr/StructInnerClassesAttribute.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/jetbrains/java/decompiler/struct/attr/StructInnerClassesAttribute.java')
-rw-r--r--src/org/jetbrains/java/decompiler/struct/attr/StructInnerClassesAttribute.java78
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;
}
}