[java-decompiler] fixes enum constant initializer decompilation (IDEA-154547)

This commit is contained in:
Roman Shevchenko
2016-04-11 21:42:48 +02:00
parent a57e42690b
commit 1ac2304d60
6 changed files with 26 additions and 18 deletions

View File

@@ -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);