diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt index 72bd18a722c..ba0fcf9541b 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt @@ -48,8 +48,10 @@ class InterfaceImplBodyCodegen( get() = (v as InterfaceImplClassBuilder).isAnythingGenerated override fun generateDeclaration() { + val codegenFlags = ACC_PUBLIC or ACC_FINAL or ACC_SUPER + val flags = if (state.classBuilderMode == ClassBuilderMode.LIGHT_CLASSES) codegenFlags or ACC_STATIC else codegenFlags v.defineClass( - myClass.psiOrParent, state.classFileVersion, ACC_PUBLIC or ACC_FINAL or ACC_SUPER, + myClass.psiOrParent, state.classFileVersion, flags, typeMapper.mapDefaultImpls(descriptor).internalName, null, "java/lang/Object", ArrayUtil.EMPTY_STRING_ARRAY ) diff --git a/compiler/testData/asJava/lightClasses/ExtendingInterfaceWithDefaultImpls.java b/compiler/testData/asJava/lightClasses/ExtendingInterfaceWithDefaultImpls.java index 43f385c121a..c47bff51b76 100644 --- a/compiler/testData/asJava/lightClasses/ExtendingInterfaceWithDefaultImpls.java +++ b/compiler/testData/asJava/lightClasses/ExtendingInterfaceWithDefaultImpls.java @@ -2,11 +2,11 @@ public interface B extends p.A { @org.jetbrains.annotations.NotNull java.lang.String b(); - final class DefaultImpls { + static final class DefaultImpls { @org.jetbrains.annotations.NotNull public static java.lang.String b(p.B $this) { /* compiled code */ } @org.jetbrains.annotations.NotNull public static java.lang.String a(p.B $this) { /* compiled code */ } } -} +} \ No newline at end of file diff --git a/compiler/testData/asJava/lightClasses/compilationErrors/PrivateInTrait.java b/compiler/testData/asJava/lightClasses/compilationErrors/PrivateInTrait.java index d6b60283f92..a3325709b84 100644 --- a/compiler/testData/asJava/lightClasses/compilationErrors/PrivateInTrait.java +++ b/compiler/testData/asJava/lightClasses/compilationErrors/PrivateInTrait.java @@ -1,5 +1,5 @@ public interface PrivateInTrait { - final class DefaultImpls { + static final class DefaultImpls { private static java.lang.String getNn(PrivateInTrait $this) { /* compiled code */ } private static void setNn(PrivateInTrait $this, java.lang.String value) { /* compiled code */ } diff --git a/compiler/tests-common/org/jetbrains/kotlin/asJava/LightClassTestCommon.kt b/compiler/tests-common/org/jetbrains/kotlin/asJava/LightClassTestCommon.kt index dfd2e523f45..c319b13e148 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/asJava/LightClassTestCommon.kt +++ b/compiler/tests-common/org/jetbrains/kotlin/asJava/LightClassTestCommon.kt @@ -64,5 +64,5 @@ object LightClassTestCommon { // Actual text for light class is generated with ClsElementImpl.appendMirrorText() that can find empty DefaultImpl inner class in stubs // for all interfaces. This inner class can't be used in Java as it generally is not seen from light classes built from Kotlin sources. // It is also omitted during classes generation in backend so it also absent in light classes built from compiled code. - fun removeEmptyDefaultImpls(text: String) : String = text.replace("\n final class DefaultImpls {\n }\n", "") + fun removeEmptyDefaultImpls(text: String) : String = text.replace("\n static final class DefaultImpls {\n }\n", "") } \ No newline at end of file