diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index 0889b704ee0..f9b80c1e453 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -1137,6 +1137,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/suppressInWhen.kt"); } + @Test + @TestMetadata("suspendFunAndPrivateJava.kt") + public void testSuspendFunAndPrivateJava() throws Exception { + runTest("compiler/testData/diagnostics/tests/suspendFunAndPrivateJava.kt"); + } + @Test @TestMetadata("SyntaxErrorInTestHighlighting.kt") public void testSyntaxErrorInTestHighlighting() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index b2b2e434b49..078709b44f2 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -1137,6 +1137,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/suppressInWhen.kt"); } + @Test + @TestMetadata("suspendFunAndPrivateJava.kt") + public void testSuspendFunAndPrivateJava() throws Exception { + runTest("compiler/testData/diagnostics/tests/suspendFunAndPrivateJava.kt"); + } + @Test @TestMetadata("SyntaxErrorInTestHighlighting.kt") public void testSyntaxErrorInTestHighlighting() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index 135993c4223..28cee641e89 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -1137,6 +1137,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/suppressInWhen.kt"); } + @Test + @TestMetadata("suspendFunAndPrivateJava.kt") + public void testSuspendFunAndPrivateJava() throws Exception { + runTest("compiler/testData/diagnostics/tests/suspendFunAndPrivateJava.kt"); + } + @Test @TestMetadata("SyntaxErrorInTestHighlighting.kt") public void testSyntaxErrorInTestHighlighting() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index da98cdb8ac6..2ca3a9815cc 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -1137,6 +1137,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/suppressInWhen.kt"); } + @Test + @TestMetadata("suspendFunAndPrivateJava.kt") + public void testSuspendFunAndPrivateJava() throws Exception { + runTest("compiler/testData/diagnostics/tests/suspendFunAndPrivateJava.kt"); + } + @Test @TestMetadata("SyntaxErrorInTestHighlighting.kt") public void testSyntaxErrorInTestHighlighting() throws Exception { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImplementationMismatchChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImplementationMismatchChecker.kt index 4ceb3829949..2a2fc1fa835 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImplementationMismatchChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImplementationMismatchChecker.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.impl.deduplicating import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.diagnostics.reportOn +import org.jetbrains.kotlin.fir.analysis.checkers.isVisibleInClass import org.jetbrains.kotlin.fir.containingClassLookupTag import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.FirRegularClass @@ -188,6 +189,21 @@ object FirImplementationMismatchChecker : FirClassChecker() { reporter.reportOn(containingClass.source, FirErrors.VAR_OVERRIDDEN_BY_VAL_BY_DELEGATION, symbol, overriddenVar, context) } + private fun FirTypeScope.collectFunctionsNamed(name: Name, containingClass: FirClass): List { + val allFunctions = mutableListOf() + + processFunctionsByName(name) { sym -> + when (sym) { + is FirIntersectionOverrideFunctionSymbol -> sym.intersections.mapNotNullTo(allFunctions) { it as? FirNamedFunctionSymbol } + else -> allFunctions.add(sym) + } + } + + return allFunctions.filter { + it.isVisibleInClass(containingClass.symbol) + } + } + private fun checkConflictingMembers( containingClass: FirClass, context: CheckerContext, @@ -195,13 +211,7 @@ object FirImplementationMismatchChecker : FirClassChecker() { scope: FirTypeScope, name: Name ) { - val allFunctions = mutableListOf() - scope.processFunctionsByName(name) { sym -> - when (sym) { - is FirIntersectionOverrideFunctionSymbol -> sym.intersections.mapNotNullTo(allFunctions) { it as? FirNamedFunctionSymbol } - else -> allFunctions.add(sym) - } - } + val allFunctions = scope.collectFunctionsNamed(name, containingClass) val sameArgumentGroups = allFunctions.groupBy { function -> buildList { diff --git a/compiler/testData/diagnostics/tests/suspendFunAndPrivateJava.kt b/compiler/testData/diagnostics/tests/suspendFunAndPrivateJava.kt new file mode 100644 index 00000000000..9ef9f480074 --- /dev/null +++ b/compiler/testData/diagnostics/tests/suspendFunAndPrivateJava.kt @@ -0,0 +1,13 @@ +// FIR_IDENTICAL +// ISSUE: KT-61076 +// FILE: InspectionApplicationBase.java + +public class InspectionApplicationBase { + private String loadInspectionProfile() { return ""; } +} + +// FILE: Main.kt + +class QodanaInspectionApplication: InspectionApplicationBase() { + suspend fun loadInspectionProfile(): String = "" +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 4aaa9039cba..828da040dfb 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -1137,6 +1137,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/suppressInWhen.kt"); } + @Test + @TestMetadata("suspendFunAndPrivateJava.kt") + public void testSuspendFunAndPrivateJava() throws Exception { + runTest("compiler/testData/diagnostics/tests/suspendFunAndPrivateJava.kt"); + } + @Test @TestMetadata("SyntaxErrorInTestHighlighting.kt") public void testSyntaxErrorInTestHighlighting() throws Exception {