diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConflictsHelpers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConflictsHelpers.kt index 150daf27e68..e7260c17bf8 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConflictsHelpers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConflictsHelpers.kt @@ -129,8 +129,10 @@ private fun groupTopLevelByName(declarations: List): Map>> = hashMapOf() fun collectClassMembers(klass: FirRegularClass) { @@ -184,6 +186,7 @@ class FirDeclarationInspector( * | constructors of classes | X | | | | | * | properties | | | X | X | X | */ + @OptIn(SymbolInternals::class) @Suppress("GrazieInspection") fun collectTopLevel(file: FirFile, packageMemberScope: FirPackageMemberScope) { @@ -224,11 +227,10 @@ class FirDeclarationInspector( if (conflictingSymbol.classKind == ClassKind.OBJECT || conflictingSymbol.classKind == ClassKind.ENUM_ENTRY) return conflictingSymbol.lazyResolveToPhase(FirResolvePhase.STATUS) - @OptIn(SymbolInternals::class) val classWithSameName = conflictingSymbol.fir - classWithSameName.declarations.filterIsInstance().forEach { constructor -> - val ctorRepresentation = FirRedeclarationPresenter.represent(constructor, classWithSameName) - collect(group.simpleFunctions, conflictingSymbol = constructor.symbol, conflictingPresentation = ctorRepresentation) + classWithSameName.unsubstitutedScope(context).processDeclaredConstructors { constructor -> + val ctorRepresentation = FirRedeclarationPresenter.represent(constructor.fir, classWithSameName) + collect(group.simpleFunctions, conflictingSymbol = constructor, conflictingPresentation = ctorRepresentation) } } } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirConflictsDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirConflictsDeclarationChecker.kt index b1398750519..d04f2f6d71d 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirConflictsDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirConflictsDeclarationChecker.kt @@ -27,7 +27,7 @@ object FirConflictsDeclarationChecker : FirBasicDeclarationChecker() { override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { when (declaration) { is FirFile -> { - val inspector = FirDeclarationInspector(context.sessionHolder.session) + val inspector = FirDeclarationInspector(context) checkFile(declaration, inspector, context) reportConflicts(reporter, context, inspector.declarationConflictingSymbols) } @@ -35,7 +35,7 @@ object FirConflictsDeclarationChecker : FirBasicDeclarationChecker() { if (declaration.source?.kind !is KtFakeSourceElementKind) { checkForLocalRedeclarations(declaration.typeParameters, context, reporter) } - val inspector = FirDeclarationInspector(context.sessionHolder.session) + val inspector = FirDeclarationInspector(context) inspector.collectClassMembers(declaration) reportConflicts(reporter, context, inspector.declarationConflictingSymbols) } diff --git a/compiler/testData/diagnostics/tests/overload/ConstructorVsFunOverload.fir.kt b/compiler/testData/diagnostics/tests/overload/ConstructorVsFunOverload.fir.kt index 02af6a37797..017df6c37dc 100644 --- a/compiler/testData/diagnostics/tests/overload/ConstructorVsFunOverload.fir.kt +++ b/compiler/testData/diagnostics/tests/overload/ConstructorVsFunOverload.fir.kt @@ -1,5 +1,13 @@ // constructor vs. fun overload +// FILE: J.java +package constructorVsFun; + +public class J { + public J(String s) {} +} + +// FILE: test.kt package constructorVsFun class a() { } @@ -26,4 +34,6 @@ class Rtyu { companion object { class ololo() { } } -} \ No newline at end of file +} + +fun J(s: String) { } diff --git a/compiler/testData/diagnostics/tests/overload/ConstructorVsFunOverload.kt b/compiler/testData/diagnostics/tests/overload/ConstructorVsFunOverload.kt index 9d6a424734f..97b61a9557e 100644 --- a/compiler/testData/diagnostics/tests/overload/ConstructorVsFunOverload.kt +++ b/compiler/testData/diagnostics/tests/overload/ConstructorVsFunOverload.kt @@ -1,5 +1,13 @@ // constructor vs. fun overload +// FILE: J.java +package constructorVsFun; + +public class J { + public J(String s) {} +} + +// FILE: test.kt package constructorVsFun class a() { } @@ -26,4 +34,6 @@ class Rtyu { companion object { class ololo() { } } -} \ No newline at end of file +} + +fun J(s: String) { } diff --git a/compiler/testData/diagnostics/tests/overload/ConstructorVsFunOverload.txt b/compiler/testData/diagnostics/tests/overload/ConstructorVsFunOverload.txt index 0836efcfe8c..b6d8943f150 100644 --- a/compiler/testData/diagnostics/tests/overload/ConstructorVsFunOverload.txt +++ b/compiler/testData/diagnostics/tests/overload/ConstructorVsFunOverload.txt @@ -1,8 +1,16 @@ package package constructorVsFun { + public fun J(/*0*/ s: kotlin.String): kotlin.Unit public fun a(): kotlin.Int + public open class J { + public constructor J(/*0*/ s: kotlin.String!) + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + public final class Rtyu { public constructor Rtyu() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean