diff --git a/src/org/jetbrains/java/decompiler/main/InitializerProcessor.java b/src/org/jetbrains/java/decompiler/main/InitializerProcessor.java index fe1a4f7..206b669 100644 --- a/src/org/jetbrains/java/decompiler/main/InitializerProcessor.java +++ b/src/org/jetbrains/java/decompiler/main/InitializerProcessor.java @@ -117,7 +117,8 @@ public class InitializerProcessor { StructClass cl = wrapper.getClassStruct(); Statement firstData = Statements.findFirstData(root); if (firstData != null) { - boolean isInterface = cl.hasModifier(CodeConstants.ACC_INTERFACE); + boolean inlineInitializers = cl.hasModifier(CodeConstants.ACC_INTERFACE) || cl.hasModifier(CodeConstants.ACC_ENUM); + while (!firstData.getExprents().isEmpty()) { Exprent exprent = firstData.getExprents().get(0); @@ -131,8 +132,7 @@ public class InitializerProcessor { cl.hasField(fExpr.getName(), fExpr.getDescriptor().descriptorString)) { // interfaces fields should always be initialized inline - if (isInterface || isExprentIndependent(assignExpr.getRight(), method)) { - + if (inlineInitializers || isExprentIndependent(assignExpr.getRight(), method)) { String keyField = InterpreterUtil.makeUniqueKey(fExpr.getName(), fExpr.getDescriptor().descriptorString); if (!wrapper.getStaticFieldInitializers().containsKey(keyField)) { wrapper.getStaticFieldInitializers().addWithKey(assignExpr.getRight(), keyField); diff --git a/testData/classes/pkg/TestEnum$2.class b/testData/classes/pkg/TestEnum$2.class index 99faf41..3dedba7 100644 Binary files a/testData/classes/pkg/TestEnum$2.class and b/testData/classes/pkg/TestEnum$2.class differ diff --git a/testData/classes/pkg/TestEnum$Type.class b/testData/classes/pkg/TestEnum$Type.class new file mode 100644 index 0000000..1e27737 Binary files /dev/null and b/testData/classes/pkg/TestEnum$Type.class differ diff --git a/testData/classes/pkg/TestEnum.class b/testData/classes/pkg/TestEnum.class index 01c6082..036f3e6 100644 Binary files a/testData/classes/pkg/TestEnum.class and b/testData/classes/pkg/TestEnum.class differ diff --git a/testData/results/TestEnum.dec b/testData/results/TestEnum.dec index 06649c0..6fabfae 100644 --- a/testData/results/TestEnum.dec +++ b/testData/results/TestEnum.dec @@ -6,8 +6,8 @@ public enum TestEnum { public void m() { }// 22 }, - E3("-"), - E4("+") { + E3("-", TestEnum.Type.ODD), + E4("+", TestEnum.Type.EVEN) { public void m() { }// 27 }; @@ -15,14 +15,19 @@ public enum TestEnum { private String s; public void m() { - }// 30 + }// 32 private TestEnum() { - this("?");// 34 + this("?", (TestEnum.Type)null);// 36 } - private TestEnum(@Deprecated String var3) { - this.s = var3;// 35 + private TestEnum(@Deprecated String var3, TestEnum.Type var4) { + this.s = var3;// 37 + } + + private static enum Type { + ODD, + EVEN; } } @@ -46,10 +51,11 @@ class 'pkg/TestEnum' { method ' (Ljava/lang/String;I)V' { 3 20 5 20 - 8 21 + 6 20 + 9 21 } - method ' (Ljava/lang/String;ILjava/lang/String;)V' { + method ' (Ljava/lang/String;ILjava/lang/String;Lpkg/TestEnum$Type;)V' { 8 24 b 25 } @@ -58,6 +64,6 @@ class 'pkg/TestEnum' { Lines mapping: 22 <-> 7 27 <-> 12 -30 <-> 18 -34 <-> 21 -35 <-> 25 +32 <-> 18 +36 <-> 21 +37 <-> 25 diff --git a/testData/src/pkg/TestEnum.java b/testData/src/pkg/TestEnum.java index 43fab48..e474d34 100644 --- a/testData/src/pkg/TestEnum.java +++ b/testData/src/pkg/TestEnum.java @@ -21,16 +21,18 @@ public enum TestEnum { @Override public void m() { } }, - E3("-"), - E4("+") { + E3("-", Type.ODD), + E4("+", Type.EVEN) { @Override public void m() { } }; + private enum Type {ODD, EVEN} + public void m() { } private String s; - private TestEnum() { this("?"); } - private TestEnum(@Deprecated String s) { this.s = s; } + private TestEnum() { this("?", null); } + private TestEnum(@Deprecated String s, Type t) { this.s = s; } }