diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index 7dba4fceac3..ecbf816c01d 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -11899,6 +11899,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/funInterface/intersectionTypeToFunInterfaceConversion.kt"); } + @TestMetadata("irrelevantPrivateDeclarations.kt") + public void testIrrelevantPrivateDeclarations() throws Exception { + runTest("compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt"); + } + @TestMetadata("multimodule.kt") public void testMultimodule() throws Exception { runTest("compiler/testData/codegen/box/funInterface/multimodule.kt"); @@ -29075,6 +29080,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/sam/inlinedSamWrapper.kt"); } + @TestMetadata("irrelevantStaticProperty.kt") + public void testIrrelevantStaticProperty() throws Exception { + runTest("compiler/testData/codegen/box/sam/irrelevantStaticProperty.kt"); + } + @TestMetadata("kt17091.kt") public void testKt17091() throws Exception { runTest("compiler/testData/codegen/box/sam/kt17091.kt"); diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt index d0c8e83958d..a01ac7eb86b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt @@ -91,7 +91,8 @@ class IrOverridingUtil( is IrProperty -> { fakeOverrideBuilder.propertyOverriddenSymbols[this] = value.map { it as? IrPropertySymbol ?: error("Unexpected property overridden symbol: $it") } - this.getter!!.overriddenSymbols = value.map { (it.owner as IrProperty).getter!!.symbol } + val getter = this.getter ?: error("Property has no getter: ${render()}") + getter.overriddenSymbols = value.map { (it.owner as IrProperty).getter!!.symbol } this.setter?.let { setter -> setter.overriddenSymbols = value.mapNotNull { (it.owner as IrProperty).setter?.symbol } } @@ -162,10 +163,12 @@ class IrOverridingUtil( val superClass = superType.getClass() ?: error("Unexpected super type: $superType") superClass.declarations .filterIsInstance() - .filter { it !in overriddenMembers } - .map { overridenMember -> - val fakeOverride = fakeOverrideBuilder.fakeOverrideMember(superType, overridenMember, clazz) - originals[fakeOverride] = overridenMember + .filterNot { + it in overriddenMembers || it.isStaticMember || DescriptorVisibilities.isPrivate(it.visibility) + } + .map { overriddenMember -> + val fakeOverride = fakeOverrideBuilder.fakeOverrideMember(superType, overriddenMember, clazz) + originals[fakeOverride] = overriddenMember originalSuperTypes[fakeOverride] = superType fakeOverride } @@ -179,6 +182,16 @@ class IrOverridingUtil( return fakeOverrides } + private val IrOverridableMember.isStaticMember: Boolean + get() = when (this) { + is IrFunction -> + dispatchReceiverParameter == null + is IrProperty -> + backingField?.isStatic == true || + getter?.let { it.dispatchReceiverParameter == null } == true + else -> error("Unknown overridable member: ${render()}") + } + private fun generateOverridesInFunctionGroup( membersFromSupertypes: List, membersFromCurrent: List, diff --git a/compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt b/compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt new file mode 100644 index 00000000000..6aba80b51f6 --- /dev/null +++ b/compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt @@ -0,0 +1,24 @@ +fun interface A { + fun invoke(s: String) + + private fun privateFun() {} + private var privateProperty: String + get() = "" + set(value) {} + + companion object { + fun s(a: A) { + a.invoke("OK") + } + } +} + +fun test(f: (String) -> Unit) { + A.s(f) +} + +fun box(): String { + var result = "Fail" + test { result = it } + return result +} diff --git a/compiler/testData/codegen/box/sam/irrelevantStaticProperty.kt b/compiler/testData/codegen/box/sam/irrelevantStaticProperty.kt new file mode 100644 index 00000000000..0354e323bb4 --- /dev/null +++ b/compiler/testData/codegen/box/sam/irrelevantStaticProperty.kt @@ -0,0 +1,29 @@ +// TARGET_BACKEND: JVM +// JVM_TARGET: 1.8 +// FILE: box.kt + +fun test(f: (String) -> Unit) { + A.s(f) +} + +fun box(): String { + var result = "Fail" + test { result = it } + return result +} + +// FILE: A.java + +public interface A { + void f(T t); + + A N = new A() { + @Override + public void f(final Object object) { + } + }; + + static void s(A a) { + a.f("OK"); + } +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 3c5f1162308..d034681ab38 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -13294,6 +13294,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/funInterface/intersectionTypeToFunInterfaceConversion.kt"); } + @TestMetadata("irrelevantPrivateDeclarations.kt") + public void testIrrelevantPrivateDeclarations() throws Exception { + runTest("compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt"); + } + @TestMetadata("multimodule.kt") public void testMultimodule() throws Exception { runTest("compiler/testData/codegen/box/funInterface/multimodule.kt"); @@ -30841,6 +30846,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/sam/inlinedSamWrapper.kt"); } + @TestMetadata("irrelevantStaticProperty.kt") + public void testIrrelevantStaticProperty() throws Exception { + runTest("compiler/testData/codegen/box/sam/irrelevantStaticProperty.kt"); + } + @TestMetadata("kt17091.kt") public void testKt17091() throws Exception { runTest("compiler/testData/codegen/box/sam/kt17091.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 0faec63e919..71bd2b3ed5e 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -13294,6 +13294,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/funInterface/intersectionTypeToFunInterfaceConversion.kt"); } + @TestMetadata("irrelevantPrivateDeclarations.kt") + public void testIrrelevantPrivateDeclarations() throws Exception { + runTest("compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt"); + } + @TestMetadata("multimodule.kt") public void testMultimodule() throws Exception { runTest("compiler/testData/codegen/box/funInterface/multimodule.kt"); @@ -28475,6 +28480,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/sam/inlinedSamWrapper.kt"); } + @TestMetadata("irrelevantStaticProperty.kt") + public void testIrrelevantStaticProperty() throws Exception { + runTest("compiler/testData/codegen/box/sam/irrelevantStaticProperty.kt"); + } + @TestMetadata("kt17091.kt") public void testKt17091() throws Exception { runTest("compiler/testData/codegen/box/sam/kt17091.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index e211723ed85..d430711b631 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -11899,6 +11899,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/funInterface/intersectionTypeToFunInterfaceConversion.kt"); } + @TestMetadata("irrelevantPrivateDeclarations.kt") + public void testIrrelevantPrivateDeclarations() throws Exception { + runTest("compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt"); + } + @TestMetadata("multimodule.kt") public void testMultimodule() throws Exception { runTest("compiler/testData/codegen/box/funInterface/multimodule.kt"); @@ -29075,6 +29080,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/sam/inlinedSamWrapper.kt"); } + @TestMetadata("irrelevantStaticProperty.kt") + public void testIrrelevantStaticProperty() throws Exception { + runTest("compiler/testData/codegen/box/sam/irrelevantStaticProperty.kt"); + } + @TestMetadata("kt17091.kt") public void testKt17091() throws Exception { runTest("compiler/testData/codegen/box/sam/kt17091.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index 3bcb9a6de01..94edfe2f408 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -10224,6 +10224,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/funInterface/intersectionTypeToFunInterfaceConversion.kt"); } + @TestMetadata("irrelevantPrivateDeclarations.kt") + public void testIrrelevantPrivateDeclarations() throws Exception { + runTest("compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt"); + } + @TestMetadata("multimodule.kt") public void testMultimodule() throws Exception { runTest("compiler/testData/codegen/box/funInterface/multimodule.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index 00d03c436a7..293938cfe35 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -10224,6 +10224,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/funInterface/intersectionTypeToFunInterfaceConversion.kt"); } + @TestMetadata("irrelevantPrivateDeclarations.kt") + public void testIrrelevantPrivateDeclarations() throws Exception { + runTest("compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt"); + } + @TestMetadata("multimodule.kt") public void testMultimodule() throws Exception { runTest("compiler/testData/codegen/box/funInterface/multimodule.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 7b7156966ae..1d9b1f8af2d 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -10224,6 +10224,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/funInterface/intersectionTypeToFunInterfaceConversion.kt"); } + @TestMetadata("irrelevantPrivateDeclarations.kt") + public void testIrrelevantPrivateDeclarations() throws Exception { + runTest("compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt"); + } + @TestMetadata("multimodule.kt") public void testMultimodule() throws Exception { runTest("compiler/testData/codegen/box/funInterface/multimodule.kt");