diff --git a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCNameUtilities.kt b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCNameUtilities.kt index edfc705cb42..540958af45b 100644 --- a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCNameUtilities.kt +++ b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCNameUtilities.kt @@ -75,7 +75,8 @@ object FirNativeObjCNameUtilities { context: CheckerContext, reporter: DiagnosticReporter ) { - val overriddenSymbols = firTypeScope.retrieveDirectOverriddenOf(memberSymbol).map { it.originalForSubstitutionOverride ?: it } + val overriddenSymbols = + firTypeScope.retrieveDirectOverriddenOf(memberSymbol).map { it.unwrapSubstitutionOverrides() } if (overriddenSymbols.isEmpty()) return val objCNames = overriddenSymbols.map { it.getFirstBaseSymbol(context).getObjCNames(context.session) } if (!objCNames.allNamesEquals()) { @@ -96,7 +97,7 @@ object FirNativeObjCNameUtilities { val session = context.session val ownScope = containingClassLookupTag()?.toSymbol(session)?.fullyExpandedClass(session)?.unsubstitutedScope(context) ?: return this - val overriddenMemberSymbols = ownScope.retrieveDirectOverriddenOf(this).map { it.originalForSubstitutionOverride ?: it } + val overriddenMemberSymbols = ownScope.retrieveDirectOverriddenOf(this).map { it.unwrapSubstitutionOverrides() } return if (overriddenMemberSymbols.isEmpty()) this else overriddenMemberSymbols.first().getFirstBaseSymbol(context) } diff --git a/compiler/testData/diagnostics/nativeTests/objCName6.kt b/compiler/testData/diagnostics/nativeTests/objCName6.kt new file mode 100644 index 00000000000..a513afe5d4d --- /dev/null +++ b/compiler/testData/diagnostics/nativeTests/objCName6.kt @@ -0,0 +1,21 @@ +// FIR_IDENTICAL +// FILE: kotlin.kt +@file:OptIn(kotlin.experimental.ExperimentalObjCName::class) + +fun interface AutoCloseable { + @ObjCName("close") fun close() +} + +interface BaseStream> : AutoCloseable { + override fun close() +} + +interface Stream : BaseStream> {} + +open class TerminatableStream> { + @ObjCName("close") open fun close() {} +} + +class StreamImpl : TerminatableStream>, Stream { + constructor() : super() {} +} \ No newline at end of file diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/DiagnosticsNativeTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/DiagnosticsNativeTestGenerated.java index 81bbb204da6..901faa7acf7 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/DiagnosticsNativeTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/DiagnosticsNativeTestGenerated.java @@ -108,6 +108,12 @@ public class DiagnosticsNativeTestGenerated extends AbstractDiagnosticsNativeTes runTest("compiler/testData/diagnostics/nativeTests/objCName5.kt"); } + @Test + @TestMetadata("objCName6.kt") + public void testObjCName6() { + runTest("compiler/testData/diagnostics/nativeTests/objCName6.kt"); + } + @Test @TestMetadata("objCNameWIthDifferentSwiftName.kt") public void testObjCNameWIthDifferentSwiftName() { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/FirLightTreeOldFrontendNativeDiagnosticsTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/FirLightTreeOldFrontendNativeDiagnosticsTestGenerated.java index 50270801692..c68ac7c1b76 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/FirLightTreeOldFrontendNativeDiagnosticsTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/FirLightTreeOldFrontendNativeDiagnosticsTestGenerated.java @@ -112,6 +112,12 @@ public class FirLightTreeOldFrontendNativeDiagnosticsTestGenerated extends Abstr runTest("compiler/testData/diagnostics/nativeTests/objCName5.kt"); } + @Test + @TestMetadata("objCName6.kt") + public void testObjCName6() { + runTest("compiler/testData/diagnostics/nativeTests/objCName6.kt"); + } + @Test @TestMetadata("objCNameWIthDifferentSwiftName.kt") public void testObjCNameWIthDifferentSwiftName() { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/FirPsiOldFrontendNativeDiagnosticsTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/FirPsiOldFrontendNativeDiagnosticsTestGenerated.java index 6f0f1eeea79..11ef8cd3691 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/FirPsiOldFrontendNativeDiagnosticsTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/FirPsiOldFrontendNativeDiagnosticsTestGenerated.java @@ -112,6 +112,12 @@ public class FirPsiOldFrontendNativeDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/nativeTests/objCName5.kt"); } + @Test + @TestMetadata("objCName6.kt") + public void testObjCName6() { + runTest("compiler/testData/diagnostics/nativeTests/objCName6.kt"); + } + @Test @TestMetadata("objCNameWIthDifferentSwiftName.kt") public void testObjCNameWIthDifferentSwiftName() {