diff --git a/src/org/jetbrains/java/decompiler/main/ClassWriter.java b/src/org/jetbrains/java/decompiler/main/ClassWriter.java index 527c607fff..7f363decfa 100644 --- a/src/org/jetbrains/java/decompiler/main/ClassWriter.java +++ b/src/org/jetbrains/java/decompiler/main/ClassWriter.java @@ -641,6 +641,15 @@ private void writeClassDefinition(ClassNode node, TextBuffer buffer, int indent) } } + // Classes defined inside of interfaces are implicitly public/static (JLS 9.5 Member Type Declarations) + if ( + node.type == ClassNode.Type.MEMBER && + (node.parent.getWrapper().getClassStruct().getAccessFlags() & CodeConstants.ACC_INTERFACE) != 0 + ) { + flags &= ~CodeConstants.ACC_PUBLIC; + flags &= ~CodeConstants.ACC_STATIC; + } + if (interceptor != null) { String oldName = interceptor.getOldName(cl.qualifiedName); appendRenameComment(buffer, oldName, MType.CLASS, indent); diff --git a/testData/results/pkg/MoreAnnotations.dec b/testData/results/pkg/MoreAnnotations.dec index c8a0826dde..23a6492d9f 100644 --- a/testData/results/pkg/MoreAnnotations.dec +++ b/testData/results/pkg/MoreAnnotations.dec @@ -95,11 +95,11 @@ public @interface MoreAnnotations { Class[] classArray() default {CharSequence.class, String.class, StringBuilder.class}; - public @interface NestedAnnotation { + @interface NestedAnnotation { String value() default "MyString"; } - public static enum TestEnum { + enum TestEnum { FirstValue, SecondValue; } diff --git a/testData/results/pkg/TestGenericSubclassTypes.dec b/testData/results/pkg/TestGenericSubclassTypes.dec index d74a351c17..2525e41fcc 100644 --- a/testData/results/pkg/TestGenericSubclassTypes.dec +++ b/testData/results/pkg/TestGenericSubclassTypes.dec @@ -15,14 +15,14 @@ public interface TestGenericSubclassTypes { return i -> i;// 27 } - public static class Constant implements TestGenericSubclassTypes.Numerical { + class Constant implements TestGenericSubclassTypes.Numerical { @Override public int get(T in) { return 1;// 16 } } - public interface Numerical { + interface Numerical { int get(T var1); } } diff --git a/testData/results/pkg/TestInterfaceSubclass.dec b/testData/results/pkg/TestInterfaceSubclass.dec index 0685fa328b..6322bf736f 100644 --- a/testData/results/pkg/TestInterfaceSubclass.dec +++ b/testData/results/pkg/TestInterfaceSubclass.dec @@ -5,11 +5,11 @@ public interface TestInterfaceSubclass { int doOtherThing(); - public abstract static class AbstractClass implements TestInterfaceSubclass { + abstract class AbstractClass implements TestInterfaceSubclass { public abstract double doDoubleThing(); } - public static class Multiple extends TestInterfaceSubclass.AbstractClass implements TestInterfaceSubclass { + class Multiple extends TestInterfaceSubclass.AbstractClass implements TestInterfaceSubclass { @Override public void doThing() { System.out.println("Hello");// 29 @@ -26,7 +26,7 @@ public interface TestInterfaceSubclass { } } - public static class Subclass implements TestInterfaceSubclass { + class Subclass implements TestInterfaceSubclass { @Override public void doThing() { System.out.println("Hi");// 12 diff --git a/testData/results/pkg/TestInterfaceSuper.dec b/testData/results/pkg/TestInterfaceSuper.dec index a0f749f196..5f64cb52c3 100644 --- a/testData/results/pkg/TestInterfaceSuper.dec +++ b/testData/results/pkg/TestInterfaceSuper.dec @@ -4,7 +4,7 @@ public interface TestInterfaceSuper { default void defaultMethod() { }// 4 - public static class Impl implements TestInterfaceSuper { + class Impl implements TestInterfaceSuper { @Override public void defaultMethod() { TestInterfaceSuper.super.defaultMethod();// 8 diff --git a/testData/results/pkg/TestRecordPatterns6.dec b/testData/results/pkg/TestRecordPatterns6.dec index 4447f14220..f746983fad 100644 --- a/testData/results/pkg/TestRecordPatterns6.dec +++ b/testData/results/pkg/TestRecordPatterns6.dec @@ -25,13 +25,13 @@ public class TestRecordPatterns6 { } sealed interface I permits TestRecordPatterns6.I.R1, TestRecordPatterns6.I.R2, TestRecordPatterns6.I.R3 { - public record R1(Object o) implements TestRecordPatterns6.I { + record R1(Object o) implements TestRecordPatterns6.I { } - public record R2(int i) implements TestRecordPatterns6.I { + record R2(int i) implements TestRecordPatterns6.I { } - public record R3(String s) implements TestRecordPatterns6.I { + record R3(String s) implements TestRecordPatterns6.I { } } }