From 1a8e8ba7a26d19cc96b80eeeb18aed90c766b0c8 Mon Sep 17 00:00:00 2001 From: Stiver Date: Sun, 17 Aug 2014 19:12:27 +0200 Subject: [PATCH] Fixed wrong order of static initializations (probably part of IDEA-127465) --- .../fernflower/main/InitializerProcessor.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/de/fernflower/main/InitializerProcessor.java b/src/de/fernflower/main/InitializerProcessor.java index 97a0e28..e0369cf 100644 --- a/src/de/fernflower/main/InitializerProcessor.java +++ b/src/de/fernflower/main/InitializerProcessor.java @@ -138,12 +138,17 @@ public class InitializerProcessor { AssignmentExprent asexpr = (AssignmentExprent)exprent; if(asexpr.getLeft().type == Exprent.EXPRENT_FIELD) { FieldExprent fexpr = (FieldExprent)asexpr.getLeft(); - if(fexpr.isStatic() && fexpr.getClassname().equals(cl.qualifiedName)) { - String keyField = InterpreterUtil.makeUniqueKey(fexpr.getName(), fexpr.getDescriptor().descriptorString); - if(!wrapper.getStaticFieldInitializers().containsKey(keyField)) { - wrapper.getStaticFieldInitializers().addWithKey(asexpr.getRight(), keyField); - firstdata.getExprents().remove(0); - found = true; + if(fexpr.isStatic() && fexpr.getClassname().equals(cl.qualifiedName) && + cl.hasField(fexpr.getName(), fexpr.getDescriptor().descriptorString)) { + + if(isExprentIndependent(asexpr.getRight(), meth)) { + + String keyField = InterpreterUtil.makeUniqueKey(fexpr.getName(), fexpr.getDescriptor().descriptorString); + if(!wrapper.getStaticFieldInitializers().containsKey(keyField)) { + wrapper.getStaticFieldInitializers().addWithKey(asexpr.getRight(), keyField); + firstdata.getExprents().remove(0); + found = true; + } } } }