diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/conflictingOverloads.kt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/conflictingOverloads.kt index dde780a5ce9..249d4fba563 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/conflictingOverloads.kt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/conflictingOverloads.kt @@ -8,17 +8,17 @@ fun test() {} fun test(z: Int, c: Char) {} -open class A { +open class A { open fun rest(s: String) {} open val u = 20 -} +} -class A { +class A { -} +} -class B : A { +class B : A { override fun rest(s: String) {} fun rest(s: String) {} @@ -26,17 +26,17 @@ fun test(z: Int, c: Char) {} fun rest(l: Long) {} override val u = 310 -} +} -interface B +interface B -enum class B +enum class B -val u = 10 -val u = 20 +val u = 10 +val u = 20 -typealias TA = A -typealias TA = B +typealias TA = A +typealias TA = B typealias BA = A @@ -52,7 +52,7 @@ fun lol(a: Array) {} class M { companion object {} - val Companion = object : Any {} + val Companion = object : Any {} } fun B.foo() {} diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/sealedSupertype.kt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/sealedSupertype.kt index 722d2e4dfbf..57d9216714e 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/sealedSupertype.kt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/sealedSupertype.kt @@ -2,7 +2,7 @@ sealed class A -class B : A() +class B : A() interface C : A @@ -30,7 +30,7 @@ sealed class P { class K : P() -object B { +object B { class I : P() } diff --git a/compiler/fir/analysis-tests/testData/resolve/expresssions/objectVsProperty.kt b/compiler/fir/analysis-tests/testData/resolve/expresssions/objectVsProperty.kt index 2f741aa3133..8037deae390 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/objectVsProperty.kt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/objectVsProperty.kt @@ -1,6 +1,6 @@ -object A +object A -val A = 10 +val A = 10 fun foo() = A diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantSetterParameterTypeChecker.kt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantSetterParameterTypeChecker.kt index 779a40a56b3..924d58c56d9 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantSetterParameterTypeChecker.kt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantSetterParameterTypeChecker.kt @@ -2,15 +2,15 @@ @Target(AnnotationTarget.VALUE_PARAMETER) annotation class Ann -var x: Int +var x: Int get() = 1 - set(@Ann private x) { } + set(@Ann private x) { } -var x: String = "" +var x: String = "" set(param: String) { field = "$param " - } + } class My { var y: Int = 1 @@ -25,4 +25,4 @@ class My { set(param) { field = !param } -} \ No newline at end of file +} diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.kt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.kt index 388747a4a71..d5de656cbb4 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.kt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.kt @@ -10,11 +10,11 @@ internal inline fun internal() { f() } -class C { +class C { internal val z = object { fun foo() = 13 } -} +} class Foo2< T1, @@ -26,12 +26,12 @@ class Foo2< internal inner class B } -public class C { +public class C { public val foo: Int = 0 public fun bar() {} -} +} open class D { protected open fun willRemainProtected() { diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems.kt index c9b730ba127..8956e799a0f 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems.kt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems.kt @@ -13,7 +13,7 @@ fun test() { val Any.bar get() = "456" val String.bar get() = "987" -val t = "".bar +val t = "".bar val p = Pair(0, "") @@ -21,4 +21,4 @@ open class Base(val x: T) class Derived : Base(10) val xx = Derived().x + 1 -val t = throw AssertionError("") \ No newline at end of file +val t = throw AssertionError("") diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index 64bbac125fa..0d17759b2b1 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -714,7 +714,10 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { val CONFLICTING_OVERLOADS by error(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) { parameter>("conflictingOverloads") } - val REDECLARATION by error { + val REDECLARATION by error(PositioningStrategy.NAME_IDENTIFIER) { + parameter>("conflictingDeclarations") + } + val PACKAGE_OR_CLASSIFIER_REDECLARATION by error(PositioningStrategy.ACTUAL_DECLARATION_NAME) { parameter>("conflictingDeclarations") } val METHOD_OF_ANY_IMPLEMENTED_IN_INTERFACE by error() diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index 06032f0ae9b..08e0790e39a 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -394,7 +394,8 @@ object FirErrors { // Redeclarations val MANY_COMPANION_OBJECTS by error0(SourceElementPositioningStrategies.COMPANION_OBJECT) val CONFLICTING_OVERLOADS by error1>>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) - val REDECLARATION by error1>>() + val REDECLARATION by error1>>(SourceElementPositioningStrategies.NAME_IDENTIFIER) + val PACKAGE_OR_CLASSIFIER_REDECLARATION by error1>>(SourceElementPositioningStrategies.ACTUAL_DECLARATION_NAME) val METHOD_OF_ANY_IMPLEMENTED_IN_INTERFACE by error0() // Invalid local declarations diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirConflictsChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirConflictsChecker.kt index 85d135b8c5d..9fce7229be8 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirConflictsChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirConflictsChecker.kt @@ -5,15 +5,21 @@ package org.jetbrains.kotlin.fir.analysis.checkers.declaration +import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.diagnostics.PositioningStrategies import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.analysis.checkers.FirDeclarationInspector import org.jetbrains.kotlin.fir.analysis.checkers.FirDeclarationPresenter import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors +import org.jetbrains.kotlin.fir.analysis.diagnostics.SourceElementPositioningStrategies import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.declarations.utils.isCompanion +import org.jetbrains.kotlin.fir.declarations.utils.isInner import org.jetbrains.kotlin.fir.resolve.firProvider +import org.jetbrains.kotlin.fir.resolve.getOuterClass import org.jetbrains.kotlin.fir.scopes.PACKAGE_MEMBER import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol @@ -21,9 +27,13 @@ import org.jetbrains.kotlin.fir.symbols.SymbolInternals import org.jetbrains.kotlin.fir.symbols.ensureResolved import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol +import org.jetbrains.kotlin.fir.util.ListMultimap import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.name.SpecialNames.UNDERSCORE_FOR_UNUSED_VAR import org.jetbrains.kotlin.utils.SmartSet object FirConflictsChecker : FirBasicDeclarationChecker() { @@ -197,7 +207,8 @@ object FirConflictsChecker : FirBasicDeclarationChecker() { } } } - else -> {} + else -> { + } } if (declarationName != null) { session.lookupTracker?.recordLookup( @@ -216,14 +227,25 @@ object FirConflictsChecker : FirBasicDeclarationChecker() { else -> return } - inspector.declarationConflictingSymbols.forEach { (declaration, symbols) -> - when { - symbols.isEmpty() -> {} - declaration is FirSimpleFunction || declaration is FirConstructor -> { - reporter.reportOn(declaration.source, FirErrors.CONFLICTING_OVERLOADS, symbols, context) - } - else -> { - reporter.reportOn(declaration.source, FirErrors.REDECLARATION, symbols, context) + inspector.declarationConflictingSymbols.forEach { (conflictingDeclaration, symbols) -> + val source = conflictingDeclaration.source + if (source != null && symbols.isNotEmpty()) { + when (conflictingDeclaration) { + is FirSimpleFunction, + is FirConstructor -> { + reporter.reportOn(source, FirErrors.CONFLICTING_OVERLOADS, symbols, context) + } + else -> { + val factory = if (conflictingDeclaration is FirClassLikeDeclaration && + getOuterClass(conflictingDeclaration, context.session) == null && + symbols.any { it is FirClassLikeSymbol<*> } + ) { + FirErrors.PACKAGE_OR_CLASSIFIER_REDECLARATION + } else { + FirErrors.REDECLARATION + } + reporter.reportOn(source, factory, symbols, context) + } } } } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt index 1f9b31fa3a8..88970b4b6db 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt @@ -187,6 +187,21 @@ object LightTreePositioningStrategies { } } + val ACTUAL_DECLARATION_NAME: LightTreePositioningStrategy = object : LightTreePositioningStrategy() { + override fun mark( + node: LighterASTNode, + startOffset: Int, + endOffset: Int, + tree: FlyweightCapableTreeStructure + ): List { + val nameIdentifier = tree.nameIdentifier(node) + if (nameIdentifier != null) { + return markElement(nameIdentifier, startOffset, endOffset, tree, node) + } + return DEFAULT.mark(node, startOffset, endOffset, tree) + } + } + val DECLARATION_SIGNATURE: LightTreePositioningStrategy = object : LightTreePositioningStrategy() { override fun mark( node: LighterASTNode, @@ -725,7 +740,7 @@ object LightTreePositioningStrategies { if (node.tokenType == KtNodeTypes.LABEL_QUALIFIER) { return super.mark(node, startOffset, endOffset - 1, tree) } - return super.mark(node, startOffset, endOffset, tree) + return DEFAULT.mark(node, startOffset, endOffset, tree) } } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt index 9ba5f9e3ac4..3a25bc1b7cc 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt @@ -278,8 +278,12 @@ object SourceElementPositioningStrategies { FirPsiPositioningStrategies.UNREACHABLE_CODE ) + val ACTUAL_DECLARATION_NAME = SourceElementPositioningStrategy( + LightTreePositioningStrategies.ACTUAL_DECLARATION_NAME, + PositioningStrategies.ACTUAL_DECLARATION_NAME + ) + // TODO - val ACTUAL_DECLARATION_NAME = DEFAULT val INCOMPATIBLE_DECLARATION = DEFAULT val NOT_SUPPORTED_IN_INLINE_MOST_RELEVANT = SourceElementPositioningStrategy( diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt index edde64654f3..7a6e3ef49ca 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt @@ -502,7 +502,7 @@ fun getOuterClassAndActualTypeParametersCount(klass: FirRegularClass, session: F return Pair(outerClass, result) } -fun getOuterClass(klass: FirRegularClass, session: FirSession): FirRegularClass? { +fun getOuterClass(klass: FirClassLikeDeclaration, session: FirSession): FirRegularClass? { val classId = klass.symbol.classId val parentId = classId.relativeClassName.parent() if (!parentId.isRoot) { diff --git a/compiler/testData/cli/jvm/firMultiplatformCompilationWithError.out b/compiler/testData/cli/jvm/firMultiplatformCompilationWithError.out index 9794674e865..2805fee94f1 100644 --- a/compiler/testData/cli/jvm/firMultiplatformCompilationWithError.out +++ b/compiler/testData/cli/jvm/firMultiplatformCompilationWithError.out @@ -11,10 +11,10 @@ compiler or generated code. Use it at your own risk! warning: ATTENTION! This build uses in-dev FIR: -Xuse-fir -compiler/testData/cli/jvm/firMultiplatformCompilationWithError/jvm.kt:1:1: error: actual class 'A' has no corresponding members for expected class members: +compiler/testData/cli/jvm/firMultiplatformCompilationWithError/jvm.kt:1:18: error: actual class 'A' has no corresponding members for expected class members: /A.foo actual interface A -^ + ^ COMPILATION_ERROR diff --git a/compiler/testData/diagnostics/tests/classObjects/classObjectRedeclaration.fir.kt b/compiler/testData/diagnostics/tests/classObjects/classObjectRedeclaration.fir.kt deleted file mode 100644 index 1136f288fc8..00000000000 --- a/compiler/testData/diagnostics/tests/classObjects/classObjectRedeclaration.fir.kt +++ /dev/null @@ -1,20 +0,0 @@ -// !DIAGNOSTICS: -DUPLICATE_CLASS_NAMES -package test - -class A { - object Companion - - companion object -} - -class B { - companion object Named - - object Named -} - -class C { - class Named - - companion object Named -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/classObjects/classObjectRedeclaration.kt b/compiler/testData/diagnostics/tests/classObjects/classObjectRedeclaration.kt index 2e688e71480..1e360f98ebb 100644 --- a/compiler/testData/diagnostics/tests/classObjects/classObjectRedeclaration.kt +++ b/compiler/testData/diagnostics/tests/classObjects/classObjectRedeclaration.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -DUPLICATE_CLASS_NAMES package test diff --git a/compiler/testData/diagnostics/tests/dataClasses/repeatedProperties.fir.kt b/compiler/testData/diagnostics/tests/dataClasses/repeatedProperties.fir.kt index 01c1f9aead0..a45b44265a0 100644 --- a/compiler/testData/diagnostics/tests/dataClasses/repeatedProperties.fir.kt +++ b/compiler/testData/diagnostics/tests/dataClasses/repeatedProperties.fir.kt @@ -1,9 +1,9 @@ -data class A1(val x: Int, val y: String, val x: Int) { +data class A1(val x: Int, val y: String, val x: Int) { val z = "" } -data class A2(val x: Int, val y: String) { - val x = "" +data class A2(val x: Int, val y: String) { + val x = "" } data class A3(val :Int, val : Int) diff --git a/compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/classObject.fir.kt b/compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/classObject.fir.kt deleted file mode 100644 index 51abf600c1a..00000000000 --- a/compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/classObject.fir.kt +++ /dev/null @@ -1,5 +0,0 @@ -class C { - companion object {} - - val Companion = C -} diff --git a/compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/classObject.kt b/compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/classObject.kt index 7cb3dde5a54..172d1a17778 100644 --- a/compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/classObject.kt +++ b/compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/classObject.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL class C { companion object {} diff --git a/compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/classObjectCopiedFieldObject.fir.kt b/compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/classObjectCopiedFieldObject.fir.kt index f7e865b27d5..96a551dc0ef 100644 --- a/compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/classObjectCopiedFieldObject.fir.kt +++ b/compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/classObjectCopiedFieldObject.fir.kt @@ -1,8 +1,8 @@ class B { - companion object A { + companion object A { } - val A = this + val A = this } class C { diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDefaultValuesInAnnotationViaTypealias.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDefaultValuesInAnnotationViaTypealias.fir.kt index b61579ea250..d2a8d82dd4e 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDefaultValuesInAnnotationViaTypealias.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDefaultValuesInAnnotationViaTypealias.fir.kt @@ -45,4 +45,4 @@ actual annotation class Foo5 actual annotation class Foo6(val s: String = "value") -actual typealias Foo7 = Bar2 +actual typealias Foo7 = Bar2 diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDifferentConstructors.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDifferentConstructors.fir.kt index 3affe50a99f..d0f2570445e 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDifferentConstructors.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDifferentConstructors.fir.kt @@ -34,9 +34,9 @@ actual class Foo1(val s: String) actual class Foo2(val p: String = "value", i: Int) actual typealias Foo3 = JavaFoo -actual class Bar1(val s: String) -actual class Bar2(val p: String = "value", i: Int) -actual typealias Bar3 = JavaBar +actual class Bar1(val s: String) +actual class Bar2(val p: String = "value", i: Int) +actual typealias Bar3 = JavaBar actual class Bar4(val s: String) { constructor() : this("") } diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/expectDeclarationWithWeakIncompatibilities.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/expectDeclarationWithWeakIncompatibilities.fir.kt index 04562c0e29e..e7ea59d4d0c 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/expectDeclarationWithWeakIncompatibilities.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/expectDeclarationWithWeakIncompatibilities.fir.kt @@ -23,6 +23,6 @@ interface Foo1 fun foo2(): Int = 0 -actual class Foo3 +actual class Foo3 -class Foo3 +class Foo3 diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/nestedClassesWithErrors.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/nestedClassesWithErrors.fir.kt index 5431aebb3bf..094c389f403 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/nestedClassesWithErrors.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/nestedClassesWithErrors.fir.kt @@ -39,7 +39,7 @@ actual class C { actual inner class I } -actual class D +actual class D actual class E { class N diff --git a/compiler/testData/diagnostics/tests/multiplatform/implDynamic.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/implDynamic.fir.kt index 799d38c08d1..ab745196cff 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/implDynamic.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/implDynamic.fir.kt @@ -18,7 +18,7 @@ expect class Foo { // TODO: do not suppress UNSUPPORTED once JS files in multi-platform tests are analyzed with JS analyzer facade -actual class Foo { +actual class Foo { actual constructor(p: dynamic) {} actual fun f1(s: dynamic): dynamic = null!! @@ -26,4 +26,4 @@ expect class Foo { actual fun f2(s: dynamic): MutableMap = null!! actual fun > f3(t: T): dynamic = null!! -} +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/inlineClasses/expectActualInlineClass.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/inlineClasses/expectActualInlineClass.fir.kt index ed45beb8df1..dfb2e466e3e 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/inlineClasses/expectActualInlineClass.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/inlineClasses/expectActualInlineClass.fir.kt @@ -20,7 +20,7 @@ expect inline class NonInlineActual(val x: Int) actual inline class Foo1(val x: Int) { actual fun bar(): String = "Hello" } -actual inline class Foo2(val x: String) +actual inline class Foo2(val x: String) actual inline class Foo3 actual inline class NonInlineExpect(val x: Int) diff --git a/compiler/testData/diagnostics/tests/overload/ConflictingOverloadsIdenticalValsInClass.fir.kt b/compiler/testData/diagnostics/tests/overload/ConflictingOverloadsIdenticalValsInClass.fir.kt deleted file mode 100644 index 2ca7e2c8faf..00000000000 --- a/compiler/testData/diagnostics/tests/overload/ConflictingOverloadsIdenticalValsInClass.fir.kt +++ /dev/null @@ -1,4 +0,0 @@ -class Aaa() { - val a = 1 - val a = 1 -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/overload/ConflictingOverloadsIdenticalValsInClass.kt b/compiler/testData/diagnostics/tests/overload/ConflictingOverloadsIdenticalValsInClass.kt index 1aec18caa64..ab03558dd98 100644 --- a/compiler/testData/diagnostics/tests/overload/ConflictingOverloadsIdenticalValsInClass.kt +++ b/compiler/testData/diagnostics/tests/overload/ConflictingOverloadsIdenticalValsInClass.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL class Aaa() { val a = 1 val a = 1 diff --git a/compiler/testData/diagnostics/tests/overload/ConflictingOverloadsValsDifferentTypeInClass.fir.kt b/compiler/testData/diagnostics/tests/overload/ConflictingOverloadsValsDifferentTypeInClass.fir.kt deleted file mode 100644 index 876bcfe753b..00000000000 --- a/compiler/testData/diagnostics/tests/overload/ConflictingOverloadsValsDifferentTypeInClass.fir.kt +++ /dev/null @@ -1,4 +0,0 @@ -class Aaa() { - val a = 1 - val a = "" -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/overload/ConflictingOverloadsValsDifferentTypeInClass.kt b/compiler/testData/diagnostics/tests/overload/ConflictingOverloadsValsDifferentTypeInClass.kt index 44872ce40b8..6aa020e8e3f 100644 --- a/compiler/testData/diagnostics/tests/overload/ConflictingOverloadsValsDifferentTypeInClass.kt +++ b/compiler/testData/diagnostics/tests/overload/ConflictingOverloadsValsDifferentTypeInClass.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL class Aaa() { val a = 1 val a = "" diff --git a/compiler/testData/diagnostics/tests/redeclarations/ClassRedeclarationInDifferentFiles.fir.kt b/compiler/testData/diagnostics/tests/redeclarations/ClassRedeclarationInDifferentFiles.fir.kt deleted file mode 100644 index bd4419cd9f3..00000000000 --- a/compiler/testData/diagnostics/tests/redeclarations/ClassRedeclarationInDifferentFiles.fir.kt +++ /dev/null @@ -1,12 +0,0 @@ -// FIR_IDE_IGNORE -// FILE: f1.kt -package test - -class A -class F1 - -// FILE: f2.kt -package test - -class A -class F2 \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/redeclarations/ClassRedeclarationInDifferentFiles.kt b/compiler/testData/diagnostics/tests/redeclarations/ClassRedeclarationInDifferentFiles.kt index b374beefba0..bc4c9bd9d9b 100644 --- a/compiler/testData/diagnostics/tests/redeclarations/ClassRedeclarationInDifferentFiles.kt +++ b/compiler/testData/diagnostics/tests/redeclarations/ClassRedeclarationInDifferentFiles.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FIR_IDE_IGNORE // FILE: f1.kt package test diff --git a/compiler/testData/diagnostics/tests/redeclarations/ConflictingExtensionProperties.fir.kt b/compiler/testData/diagnostics/tests/redeclarations/ConflictingExtensionProperties.fir.kt deleted file mode 100644 index 0641d9932d6..00000000000 --- a/compiler/testData/diagnostics/tests/redeclarations/ConflictingExtensionProperties.fir.kt +++ /dev/null @@ -1,4 +0,0 @@ -package foo - -val Int.foo: Int get() = 2 -val Int.foo: Int get() = 3 diff --git a/compiler/testData/diagnostics/tests/redeclarations/ConflictingExtensionProperties.kt b/compiler/testData/diagnostics/tests/redeclarations/ConflictingExtensionProperties.kt index 6e3a6e2b70e..f5aa901b29b 100644 --- a/compiler/testData/diagnostics/tests/redeclarations/ConflictingExtensionProperties.kt +++ b/compiler/testData/diagnostics/tests/redeclarations/ConflictingExtensionProperties.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL package foo val Int.foo: Int get() = 2 diff --git a/compiler/testData/diagnostics/tests/redeclarations/PropertyAndInnerClass.fir.kt b/compiler/testData/diagnostics/tests/redeclarations/PropertyAndInnerClass.fir.kt deleted file mode 100644 index 2e7f81b2f2c..00000000000 --- a/compiler/testData/diagnostics/tests/redeclarations/PropertyAndInnerClass.fir.kt +++ /dev/null @@ -1,13 +0,0 @@ -public class A() { - public val FOO: String = "test" - - public class FOO() { } -} - -public class B() { - companion object { - public val FOO: String = "test" - - public class FOO() { } - } -} diff --git a/compiler/testData/diagnostics/tests/redeclarations/PropertyAndInnerClass.kt b/compiler/testData/diagnostics/tests/redeclarations/PropertyAndInnerClass.kt index e12816b85f7..2fecea991db 100644 --- a/compiler/testData/diagnostics/tests/redeclarations/PropertyAndInnerClass.kt +++ b/compiler/testData/diagnostics/tests/redeclarations/PropertyAndInnerClass.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL public class A() { public val FOO: String = "test" diff --git a/compiler/testData/diagnostics/tests/redeclarations/RedeclarationInDefaultObject.fir.kt b/compiler/testData/diagnostics/tests/redeclarations/RedeclarationInDefaultObject.fir.kt deleted file mode 100644 index fafb3741ebb..00000000000 --- a/compiler/testData/diagnostics/tests/redeclarations/RedeclarationInDefaultObject.fir.kt +++ /dev/null @@ -1,6 +0,0 @@ -class A { - companion object B { - class G - val G = 1 - } -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/redeclarations/RedeclarationInDefaultObject.kt b/compiler/testData/diagnostics/tests/redeclarations/RedeclarationInDefaultObject.kt index 856d17914a8..d3720d45bdc 100644 --- a/compiler/testData/diagnostics/tests/redeclarations/RedeclarationInDefaultObject.kt +++ b/compiler/testData/diagnostics/tests/redeclarations/RedeclarationInDefaultObject.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL class A { companion object B { class G diff --git a/compiler/testData/diagnostics/tests/redeclarations/RedeclarationInMultiFile.fir.kt b/compiler/testData/diagnostics/tests/redeclarations/RedeclarationInMultiFile.fir.kt deleted file mode 100644 index 676291d6c5d..00000000000 --- a/compiler/testData/diagnostics/tests/redeclarations/RedeclarationInMultiFile.fir.kt +++ /dev/null @@ -1,9 +0,0 @@ -// FILE: a.kt -val a : Int = 1 -fun f() { -} - -// FILE: b.kt -val a : Int = 1 -fun f() { -} diff --git a/compiler/testData/diagnostics/tests/redeclarations/RedeclarationInMultiFile.kt b/compiler/testData/diagnostics/tests/redeclarations/RedeclarationInMultiFile.kt index fafba886a28..e76c61628bd 100644 --- a/compiler/testData/diagnostics/tests/redeclarations/RedeclarationInMultiFile.kt +++ b/compiler/testData/diagnostics/tests/redeclarations/RedeclarationInMultiFile.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FILE: a.kt val a : Int = 1 fun f() { diff --git a/compiler/testData/diagnostics/tests/redeclarations/Redeclarations.fir.kt b/compiler/testData/diagnostics/tests/redeclarations/Redeclarations.fir.kt index c4def7ab452..c27ff56d29f 100644 --- a/compiler/testData/diagnostics/tests/redeclarations/Redeclarations.fir.kt +++ b/compiler/testData/diagnostics/tests/redeclarations/Redeclarations.fir.kt @@ -1,14 +1,14 @@ // FILE: a.kt package redeclarations - object A { + object A { val x : Int = 0 val A = 1 } - class A {} + class A {} - val A = 1 + val A = 1 // FILE: b.kt package redeclarations.A diff --git a/compiler/testData/diagnostics/tests/redeclarations/RedeclarationsInObjects.fir.kt b/compiler/testData/diagnostics/tests/redeclarations/RedeclarationsInObjects.fir.kt deleted file mode 100644 index dd67dab11f3..00000000000 --- a/compiler/testData/diagnostics/tests/redeclarations/RedeclarationsInObjects.fir.kt +++ /dev/null @@ -1,9 +0,0 @@ -// !DIAGNOSTICS: -DUPLICATE_CLASS_NAMES -// KT-3525 -object B { - class C - class C - - val a : Int = 1 - val a : Int = 1 -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/redeclarations/RedeclarationsInObjects.kt b/compiler/testData/diagnostics/tests/redeclarations/RedeclarationsInObjects.kt index 7469947ed69..94e0f99846d 100644 --- a/compiler/testData/diagnostics/tests/redeclarations/RedeclarationsInObjects.kt +++ b/compiler/testData/diagnostics/tests/redeclarations/RedeclarationsInObjects.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -DUPLICATE_CLASS_NAMES // KT-3525 object B { diff --git a/compiler/testData/diagnostics/tests/redeclarations/RedeclaringPrivateToFile.fir.kt b/compiler/testData/diagnostics/tests/redeclarations/RedeclaringPrivateToFile.fir.kt index 938236dd0c0..08b2df68909 100644 --- a/compiler/testData/diagnostics/tests/redeclarations/RedeclaringPrivateToFile.fir.kt +++ b/compiler/testData/diagnostics/tests/redeclarations/RedeclaringPrivateToFile.fir.kt @@ -8,7 +8,7 @@ private fun validFun() {} private val validVal = 1 private fun invalidFun0() {} -private val invalidProp0 = 1 +private val invalidProp0 = 1 // NB invalidFun0 and invalidProp0 are conflicting overloads, since the following is an ambiguity: fun useInvalidFun0() = invalidFun0() @@ -36,7 +36,7 @@ private val validVal = 1 private fun invalidFun0() {} -private val invalidProp0 = 1 +private val invalidProp0 = 1 internal fun invalidFun3() {} internal fun invalidFun4() {} diff --git a/compiler/testData/diagnostics/tests/redeclarations/TopLevelPropertyVsClassifier.fir.kt b/compiler/testData/diagnostics/tests/redeclarations/TopLevelPropertyVsClassifier.fir.kt index 35619073911..364c7d0402b 100644 --- a/compiler/testData/diagnostics/tests/redeclarations/TopLevelPropertyVsClassifier.fir.kt +++ b/compiler/testData/diagnostics/tests/redeclarations/TopLevelPropertyVsClassifier.fir.kt @@ -1,13 +1,13 @@ -val Test1 = null -class Test1 +val Test1 = null +class Test1 -val Test2 = null -interface Test2 +val Test2 = null +interface Test2 -val Test3 = null -object Test3 +val Test3 = null +object Test3 -val Test4 = null -class Test4 -interface Test4 -object Test4 \ No newline at end of file +val Test4 = null +class Test4 +interface Test4 +object Test4 \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/redeclarations/TypeAliasVsClass.fir.kt b/compiler/testData/diagnostics/tests/redeclarations/TypeAliasVsClass.fir.kt deleted file mode 100644 index 3f2237e17a2..00000000000 --- a/compiler/testData/diagnostics/tests/redeclarations/TypeAliasVsClass.fir.kt +++ /dev/null @@ -1,18 +0,0 @@ -// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -TOPLEVEL_TYPEALIASES_ONLY -// FILE: file1.kt -class SomeClass - -typealias SomeClass = Any -typealias SomeClass = Any -typealias SomeClass = Any - -class Outer { - class Nested - - typealias Nested = Any - typealias Nested = Any - typealias Nested = Any -} - -// FILE: file2.kt -typealias SomeClass = Any diff --git a/compiler/testData/diagnostics/tests/redeclarations/TypeAliasVsClass.kt b/compiler/testData/diagnostics/tests/redeclarations/TypeAliasVsClass.kt index 09cab9f306e..c62bb7c6264 100644 --- a/compiler/testData/diagnostics/tests/redeclarations/TypeAliasVsClass.kt +++ b/compiler/testData/diagnostics/tests/redeclarations/TypeAliasVsClass.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -TOPLEVEL_TYPEALIASES_ONLY // FILE: file1.kt class SomeClass diff --git a/compiler/testData/diagnostics/tests/redeclarations/TypeAliasVsProperty.fir.kt b/compiler/testData/diagnostics/tests/redeclarations/TypeAliasVsProperty.fir.kt index 0f13bcbbeca..20f9a58ebce 100644 --- a/compiler/testData/diagnostics/tests/redeclarations/TypeAliasVsProperty.fir.kt +++ b/compiler/testData/diagnostics/tests/redeclarations/TypeAliasVsProperty.fir.kt @@ -1,13 +1,13 @@ // !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -TOPLEVEL_TYPEALIASES_ONLY // FILE: file1.kt -typealias Test = String +typealias Test = String -val Test = 42 +val Test = 42 class Outer { - typealias Test = String + typealias Test = String - val Test = 42 + val Test = 42 } typealias Test2 = String diff --git a/compiler/testData/diagnostics/tests/redeclarations/kt2438.fir.kt b/compiler/testData/diagnostics/tests/redeclarations/kt2438.fir.kt deleted file mode 100644 index b580e859b03..00000000000 --- a/compiler/testData/diagnostics/tests/redeclarations/kt2438.fir.kt +++ /dev/null @@ -1,22 +0,0 @@ -// !DIAGNOSTICS: -DUPLICATE_CLASS_NAMES -//KT-2438 Prohibit inner classes with the same name - -package kt2438 - -class B { - class C - class C -} - - - -class A { - class B - - companion object { - class B - class B - } - - class B -} diff --git a/compiler/testData/diagnostics/tests/redeclarations/kt2438.kt b/compiler/testData/diagnostics/tests/redeclarations/kt2438.kt index efb790f6394..2952251a5fe 100644 --- a/compiler/testData/diagnostics/tests/redeclarations/kt2438.kt +++ b/compiler/testData/diagnostics/tests/redeclarations/kt2438.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -DUPLICATE_CLASS_NAMES //KT-2438 Prohibit inner classes with the same name diff --git a/compiler/testData/diagnostics/tests/redeclarations/kt470.fir.kt b/compiler/testData/diagnostics/tests/redeclarations/kt470.fir.kt deleted file mode 100644 index b8732450a9e..00000000000 --- a/compiler/testData/diagnostics/tests/redeclarations/kt470.fir.kt +++ /dev/null @@ -1,37 +0,0 @@ -val a : Int = 1 -val a : Int = 1 -val a : Int = 1 - -val b : Int = 1 -val b : Int = 1 -val b : Int = 1 -val b : Int = 1 - -fun foo() {} // and here too -fun foo() {} // and here -fun foo() {} // and here -fun foo() {} // and here - -fun bar() {} // and here -fun bar() {} // and here -fun bar() {} // and here - -class A { - val a : Int = 1 - val a : Int = 1 - val a : Int = 1 - - val b : Int = 1 - val b : Int = 1 - val b : Int = 1 - val b : Int = 1 - - fun foo() {} // and here too - fun foo() {} // and here - fun foo() {} // and here - fun foo() {} // and here - - fun bar() {} // and here - fun bar() {} // and here - fun bar() {} // and here -} diff --git a/compiler/testData/diagnostics/tests/redeclarations/kt470.kt b/compiler/testData/diagnostics/tests/redeclarations/kt470.kt index f8c5fff6abe..de123fb873f 100644 --- a/compiler/testData/diagnostics/tests/redeclarations/kt470.kt +++ b/compiler/testData/diagnostics/tests/redeclarations/kt470.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL val a : Int = 1 val a : Int = 1 val a : Int = 1 diff --git a/compiler/testData/diagnostics/tests/regressions/Jet11.fir.kt b/compiler/testData/diagnostics/tests/regressions/Jet11.fir.kt deleted file mode 100644 index 5f95d00270d..00000000000 --- a/compiler/testData/diagnostics/tests/regressions/Jet11.fir.kt +++ /dev/null @@ -1,4 +0,0 @@ -// JET-11 Redeclaration & Forward reference for classes cause an exception -open class NoC -class NoC1 : NoC() -open class NoC diff --git a/compiler/testData/diagnostics/tests/regressions/Jet11.kt b/compiler/testData/diagnostics/tests/regressions/Jet11.kt index fa244c155c8..bcecdb49690 100644 --- a/compiler/testData/diagnostics/tests/regressions/Jet11.kt +++ b/compiler/testData/diagnostics/tests/regressions/Jet11.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // JET-11 Redeclaration & Forward reference for classes cause an exception open class NoC class NoC1 : NoC() diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/redeclarationsOfConstructorsIgnored.fir.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/redeclarationsOfConstructorsIgnored.fir.kt deleted file mode 100644 index 6df18e93ac3..00000000000 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/redeclarationsOfConstructorsIgnored.fir.kt +++ /dev/null @@ -1,11 +0,0 @@ -class A -class A { - constructor() -} - -class B -class Outer { - class B { - constructor() - } -} diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/redeclarationsOfConstructorsIgnored.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/redeclarationsOfConstructorsIgnored.kt index 8391b02d6e3..7bf761fedb2 100644 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/redeclarationsOfConstructorsIgnored.kt +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/redeclarationsOfConstructorsIgnored.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL class A class A { constructor() diff --git a/compiler/testData/diagnostics/tests/typealias/privateInFile.fir.kt b/compiler/testData/diagnostics/tests/typealias/privateInFile.fir.kt index b4a94971e0f..333368c030a 100644 --- a/compiler/testData/diagnostics/tests/typealias/privateInFile.fir.kt +++ b/compiler/testData/diagnostics/tests/typealias/privateInFile.fir.kt @@ -19,5 +19,5 @@ private val test1co: C.Companion = TA() private val test2co = TA -private class C -private typealias TA = Int +private class C +private typealias TA = Int diff --git a/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.4.fir.kt b/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.4.fir.kt index 1a0e11e0205..335f474483d 100644 --- a/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.4.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.4.fir.kt @@ -54,9 +54,9 @@ class Case2() { * TESTCASE NUMBER: 3 * NOTE: check abstract member cannot be accessed directly */ -class Case3(override val boo: String) : BaseCase3() { +class Case3(override val boo: String) : BaseCase3() { override val zoo: String = super.foo() - override val boo: String = super.boo + override val boo: String = super.boo override val value: String = super.zoo val hoo: String = super.zoo diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt index 3425811e6c4..f4d214b854d 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -1929,6 +1929,15 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } + add(FirErrors.PACKAGE_OR_CLASSIFIER_REDECLARATION) { firDiagnostic -> + PackageOrClassifierRedeclarationImpl( + firDiagnostic.a.map { firBasedSymbol -> + firSymbolBuilder.buildSymbol(firBasedSymbol.fir) + }, + firDiagnostic as FirPsiDiagnostic, + token, + ) + } add(FirErrors.METHOD_OF_ANY_IMPLEMENTED_IN_INTERFACE) { firDiagnostic -> MethodOfAnyImplementedInInterfaceImpl( firDiagnostic as FirPsiDiagnostic, diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt index 23079e14913..681f861b8e0 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt @@ -1369,11 +1369,16 @@ sealed class KtFirDiagnostic : KtDiagnosticWithPsi { abstract val conflictingOverloads: List } - abstract class Redeclaration : KtFirDiagnostic() { + abstract class Redeclaration : KtFirDiagnostic() { override val diagnosticClass get() = Redeclaration::class abstract val conflictingDeclarations: List } + abstract class PackageOrClassifierRedeclaration : KtFirDiagnostic() { + override val diagnosticClass get() = PackageOrClassifierRedeclaration::class + abstract val conflictingDeclarations: List + } + abstract class MethodOfAnyImplementedInInterface : KtFirDiagnostic() { override val diagnosticClass get() = MethodOfAnyImplementedInInterface::class } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index a21849eb1a7..d83652959da 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -2187,7 +2187,15 @@ internal class RedeclarationImpl( override val conflictingDeclarations: List, firDiagnostic: FirPsiDiagnostic, override val token: ValidityToken, -) : KtFirDiagnostic.Redeclaration(), KtAbstractFirDiagnostic { +) : KtFirDiagnostic.Redeclaration(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic) +} + +internal class PackageOrClassifierRedeclarationImpl( + override val conflictingDeclarations: List, + firDiagnostic: FirPsiDiagnostic, + override val token: ValidityToken, +) : KtFirDiagnostic.PackageOrClassifierRedeclaration(), KtAbstractFirDiagnostic { override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic) }