diff --git a/src/org/jetbrains/java/decompiler/main/InitializerProcessor.java b/src/org/jetbrains/java/decompiler/main/InitializerProcessor.java index d9a0a3d..e1363d8 100644 --- a/src/org/jetbrains/java/decompiler/main/InitializerProcessor.java +++ b/src/org/jetbrains/java/decompiler/main/InitializerProcessor.java @@ -124,7 +124,7 @@ public class InitializerProcessor { RootStatement root = meth.root; StructClass cl = wrapper.getClassStruct(); - + boolean isInterface = cl.hasModifier(CodeConstants.ACC_INTERFACE); Statement firstdata = findFirstData(root); if (firstdata != null) { while (!firstdata.getExprents().isEmpty()) { @@ -139,7 +139,8 @@ public class InitializerProcessor { if (fexpr.isStatic() && fexpr.getClassname().equals(cl.qualifiedName) && cl.hasField(fexpr.getName(), fexpr.getDescriptor().descriptorString)) { - if (isExprentIndependent(asexpr.getRight(), meth)) { + // interfaces fields should always be initialized inline + if (isInterface || isExprentIndependent(asexpr.getRight(), meth)) { String keyField = InterpreterUtil.makeUniqueKey(fexpr.getName(), fexpr.getDescriptor().descriptorString); if (!wrapper.getStaticFieldInitializers().containsKey(keyField)) { diff --git a/test/org/jetbrains/java/decompiler/SingleClassesTest.java b/test/org/jetbrains/java/decompiler/SingleClassesTest.java index c5bcf8c..180428d 100644 --- a/test/org/jetbrains/java/decompiler/SingleClassesTest.java +++ b/test/org/jetbrains/java/decompiler/SingleClassesTest.java @@ -83,6 +83,7 @@ public class SingleClassesTest { @Test public void testMethodReferenceLetterClass() { doTest("pkg/TestMethodReferenceLetterClass"); } @Test public void testMemberAnnotations() { doTest("pkg/TestMemberAnnotations"); } @Test public void testStaticNameClash() { doTest("pkg/TestStaticNameClash"); } + @Test public void testInterfaceWithObject() { doTest("pkg/TestInterfaceWithObject"); } protected void doTest(String testFile, String... companionFiles) { ConsoleDecompiler decompiler = fixture.getDecompiler(); @@ -107,7 +108,7 @@ public class SingleClassesTest { File decompiledFile = new File(fixture.getTargetDir(), testName + ".java"); assertTrue(decompiledFile.isFile()); File referenceFile = new File(fixture.getTestDataDir(), "results/" + testName + ".dec"); - assertTrue(referenceFile.isFile()); + assertTrue("Expecting " + referenceFile.getAbsolutePath() + " to be a file", referenceFile.isFile()); assertFilesEqual(referenceFile, decompiledFile); } @@ -129,4 +130,4 @@ public class SingleClassesTest { return files; } -} \ No newline at end of file +} diff --git a/testData/classes/pkg/TestInterfaceWithObject.class b/testData/classes/pkg/TestInterfaceWithObject.class new file mode 100644 index 0000000..614da5e Binary files /dev/null and b/testData/classes/pkg/TestInterfaceWithObject.class differ diff --git a/testData/results/TestInterfaceWithObject.dec b/testData/results/TestInterfaceWithObject.dec new file mode 100644 index 0000000..5afeed6 --- /dev/null +++ b/testData/results/TestInterfaceWithObject.dec @@ -0,0 +1,8 @@ +package pkg; + +import java.math.BigDecimal; + +public interface TestInterfaceWithObject { + BigDecimal BUGS_IN_THE_DECOMPILER = BigDecimal.ZERO; +} + diff --git a/testData/src/pkg/TestInterfaceWithObject.java b/testData/src/pkg/TestInterfaceWithObject.java new file mode 100644 index 0000000..4653d70 --- /dev/null +++ b/testData/src/pkg/TestInterfaceWithObject.java @@ -0,0 +1,13 @@ +package pkg; + +import java.math.BigDecimal; + +/** + * @author Alexandru-Constantin Bledea + * @since March 06, 2016 + */ +public interface TestInterfaceWithObject { + + BigDecimal BUGS_IN_THE_DECOMPILER = BigDecimal.ZERO; + +}