From 749346b73bfa3bb4d43bb9daf189fe5546255319 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 27 Jul 2020 13:09:42 +0300 Subject: [PATCH] [FIR] Don't report duplicated errors on default accessor error type refs --- .../diagnostics/typeArgumentsNotAllowed.kt | 2 +- .../testData/resolve/typeParameterVsNested.kt | 4 +-- .../ErrorNodeDiagnosticCollectorComponent.kt | 5 ++++ .../diagnostics/tests/EnumEntryAsType.fir.kt | 4 +-- .../diagnostics/tests/PackageQualified.fir.kt | 8 +++--- ...invalidTypesInAnnotationConstructor.fir.kt | 2 +- .../errorTypesInDataClasses.fir.kt | 4 +-- .../functionAndProperty/withErrorTypes.fir.kt | 2 +- .../constructorOfUnsignedType.fir.kt | 14 +++++----- .../outerArgumentsRequired.fir.kt | 6 ++-- .../classifierFromCompanionObjectNew.fir.kt | 28 +++++++++---------- .../classifierFromCompanionObjectOld.fir.kt | 28 +++++++++---------- .../nestedClassesFromInterface.fir.kt | 8 +++--- .../inheritance/nestedCompanionClass.fir.kt | 8 +++--- .../scopes/inheritance/nestedFromJava.fir.kt | 8 +++--- .../typealias/inheritedNestedTypeAlias.kt | 2 +- .../javaStaticMembersViaTypeAlias.fir.kt | 10 +++---- .../localTypeAliasConstructor.fir.kt | 2 +- .../tests/variance/InvariantPosition.fir.kt | 10 +++---- .../InaccessibleInternalClass.fir.kt | 2 +- .../callableReferenceOnUnresolvedLHS.fir.kt | 2 +- .../testsWithStdLib/regression/kt37727.fir.kt | 2 +- 22 files changed, 83 insertions(+), 78 deletions(-) diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/typeArgumentsNotAllowed.kt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/typeArgumentsNotAllowed.kt index 85055733a6b..d3c15ddac4d 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/typeArgumentsNotAllowed.kt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/typeArgumentsNotAllowed.kt @@ -1,7 +1,7 @@ package rest abstract class Foo { - abstract val x: T + abstract val x: T abstract fun foo(): T } diff --git a/compiler/fir/analysis-tests/testData/resolve/typeParameterVsNested.kt b/compiler/fir/analysis-tests/testData/resolve/typeParameterVsNested.kt index fd699615f25..e652d43431d 100644 --- a/compiler/fir/analysis-tests/testData/resolve/typeParameterVsNested.kt +++ b/compiler/fir/analysis-tests/testData/resolve/typeParameterVsNested.kt @@ -9,9 +9,9 @@ abstract class My { abstract fun foo(arg: T) - abstract val y: My.T + abstract val y: My.T - abstract val z: test.My.T + abstract val z: test.My.T class Some : T() } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt index b268e873211..105e6f7e0dc 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticFactory0 import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.declarations.FirErrorFunction +import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor import org.jetbrains.kotlin.fir.diagnostics.* import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind.* import org.jetbrains.kotlin.fir.expressions.FirErrorExpression @@ -30,6 +31,10 @@ class ErrorNodeDiagnosticCollectorComponent(collector: AbstractDiagnosticCollect } override fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: CheckerContext) { + if (data.containingDeclarations.lastOrNull() is FirDefaultPropertyAccessor) { + // It always uses the same type ref as the corresponding property + return + } val source = errorTypeRef.source ?: return runCheck { reportFirDiagnostic(errorTypeRef.diagnostic, source, it) } } diff --git a/compiler/testData/diagnostics/tests/EnumEntryAsType.fir.kt b/compiler/testData/diagnostics/tests/EnumEntryAsType.fir.kt index b565259e877..28a15cecc40 100644 --- a/compiler/testData/diagnostics/tests/EnumEntryAsType.fir.kt +++ b/compiler/testData/diagnostics/tests/EnumEntryAsType.fir.kt @@ -7,9 +7,9 @@ enum class Color { } } -class MyColor(val x: Color.RED, y: Color.RED) : Color.RED { +class MyColor(val x: Color.RED, y: Color.RED) : Color.RED { - var z: Color.RED = Color.RED + var z: Color.RED = Color.RED set(arg: Color.RED) { z = arg } fun foo(arg: Color.RED): Color.RED = arg diff --git a/compiler/testData/diagnostics/tests/PackageQualified.fir.kt b/compiler/testData/diagnostics/tests/PackageQualified.fir.kt index 7c99db7eb3a..25eceb9424f 100644 --- a/compiler/testData/diagnostics/tests/PackageQualified.fir.kt +++ b/compiler/testData/diagnostics/tests/PackageQualified.fir.kt @@ -6,14 +6,14 @@ package foobar.a import java.* val a : java.util.List? = null - val a2 : util.List? = null - val a3 : LinkedList? = null + val a2 : util.List? = null + val a3 : LinkedList? = null // FILE: b.kt package foobar abstract class Foo() { - abstract val x : T + abstract val x : T } // FILE: b.kt @@ -21,7 +21,7 @@ package foobar.a import java.util.* val b : List? = a - val b1 : util.List? = a + val b1 : util.List? = a // FILE: b.kt package foobar diff --git a/compiler/testData/diagnostics/tests/annotations/invalidTypesInAnnotationConstructor.fir.kt b/compiler/testData/diagnostics/tests/annotations/invalidTypesInAnnotationConstructor.fir.kt index 76dab2f5243..067cdfb7506 100644 --- a/compiler/testData/diagnostics/tests/annotations/invalidTypesInAnnotationConstructor.fir.kt +++ b/compiler/testData/diagnostics/tests/annotations/invalidTypesInAnnotationConstructor.fir.kt @@ -34,7 +34,7 @@ annotation class Ann8(val p1: Array, val p4: Array) annotation class Ann9( - val error: Unresolved = Unresolved.VALUE + val error: Unresolved = Unresolved.VALUE ) diff --git a/compiler/testData/diagnostics/tests/dataClasses/errorTypesInDataClasses.fir.kt b/compiler/testData/diagnostics/tests/dataClasses/errorTypesInDataClasses.fir.kt index 4ebb861764b..31fd3657d41 100644 --- a/compiler/testData/diagnostics/tests/dataClasses/errorTypesInDataClasses.fir.kt +++ b/compiler/testData/diagnostics/tests/dataClasses/errorTypesInDataClasses.fir.kt @@ -1,6 +1,6 @@ // !DIAGNOSTICS: -UNUSED_VARIABLE -data class A(val i: Int, val j: G) -data class B(val i: G, val j: G) +data class A(val i: Int, val j: G) +data class B(val i: G, val j: G) fun fa(a: A) { diff --git a/compiler/testData/diagnostics/tests/duplicateJvmSignature/functionAndProperty/withErrorTypes.fir.kt b/compiler/testData/diagnostics/tests/duplicateJvmSignature/functionAndProperty/withErrorTypes.fir.kt index efd84d48fca..eeb6c493ae2 100644 --- a/compiler/testData/diagnostics/tests/duplicateJvmSignature/functionAndProperty/withErrorTypes.fir.kt +++ b/compiler/testData/diagnostics/tests/duplicateJvmSignature/functionAndProperty/withErrorTypes.fir.kt @@ -1,4 +1,4 @@ interface T { - val x: ErrorType + val x: ErrorType fun getX(): ErrorType1 } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/evaluate/inlineClasses/constructorOfUnsignedType.fir.kt b/compiler/testData/diagnostics/tests/evaluate/inlineClasses/constructorOfUnsignedType.fir.kt index 5b019bbfc18..2422a902cff 100644 --- a/compiler/testData/diagnostics/tests/evaluate/inlineClasses/constructorOfUnsignedType.fir.kt +++ b/compiler/testData/diagnostics/tests/evaluate/inlineClasses/constructorOfUnsignedType.fir.kt @@ -12,10 +12,10 @@ inline class ULong(private val l: Long) // FILE: test.kt -annotation class AnnoUB(val ub0: UByte, val ub1: UByte) -annotation class AnnoUS(val us0: UShort, val us1: UShort) -annotation class AnnoUI(val ui0: UInt, val ui1: UInt, val ui2: UInt, val ui3: UInt) -annotation class AnnoUL(val ul0: ULong, val ul1: ULong) +annotation class AnnoUB(val ub0: UByte, val ub1: UByte) +annotation class AnnoUS(val us0: UShort, val us1: UShort) +annotation class AnnoUI(val ui0: UInt, val ui1: UInt, val ui2: UInt, val ui3: UInt) +annotation class AnnoUL(val ul0: ULong, val ul1: ULong) const val ub0 = UByte(1) const val us0 = UShort(2) @@ -37,8 +37,8 @@ fun f2() {} @AnnoUL(ul0, ULong(5)) fun f3() {} -const val explicit: UInt = UInt(2) +const val explicit: UInt = UInt(2) -const val nullable: UInt? = UInt(3) +const val nullable: UInt? = UInt(3) -annotation class NullableAnno(val u: UInt?) \ No newline at end of file +annotation class NullableAnno(val u: UInt?) \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/generics/innerClasses/outerArgumentsRequired.fir.kt b/compiler/testData/diagnostics/tests/generics/innerClasses/outerArgumentsRequired.fir.kt index e97ffda4092..42bb8ff7e83 100644 --- a/compiler/testData/diagnostics/tests/generics/innerClasses/outerArgumentsRequired.fir.kt +++ b/compiler/testData/diagnostics/tests/generics/innerClasses/outerArgumentsRequired.fir.kt @@ -15,9 +15,9 @@ class A { val y: B.C? = null val z: B.D? = null - val c: C? = null - val d: D? = null + val c: C? = null + val d: D? = null - val innerMost: Innermost? = null + val innerMost: Innermost? = null } } diff --git a/compiler/testData/diagnostics/tests/objects/kt21515/classifierFromCompanionObjectNew.fir.kt b/compiler/testData/diagnostics/tests/objects/kt21515/classifierFromCompanionObjectNew.fir.kt index f4c55925430..5aecac4f342 100644 --- a/compiler/testData/diagnostics/tests/objects/kt21515/classifierFromCompanionObjectNew.fir.kt +++ b/compiler/testData/diagnostics/tests/objects/kt21515/classifierFromCompanionObjectNew.fir.kt @@ -72,28 +72,28 @@ class C : O.B() { val n: FromCompanionC? = null // INVISIBLE: direct superclasses themselves. - val a: A? = null - val b: B? = null + val a: A? = null + val b: B? = null // DEPRECATED: Classifiers from companions of direct superclasses - val e: FromCompanionA? = null - val f: FromCompanionB? = null + val e: FromCompanionA? = null + val f: FromCompanionB? = null // INVISIBLE: "cousin" supertypes themselves - val g: Alpha? = null - val h: Beta? = null - val i: Gamma? = null + val g: Alpha? = null + val h: Beta? = null + val i: Gamma? = null // DEPRECATED: classifiers from "cousin" superclasses - val k: FromAlpha? = null - val l: FromBeta? = null - val m: FromGamma? = null + val k: FromAlpha? = null + val l: FromBeta? = null + val m: FromGamma? = null // INVISIBLE: We don't see classifiers from companions of "cousin" superclasses - val o: FromCompanionAlpha? = null - val p: FromCompanionBeta? = null - val q: FromCompanionGamma? = null + val o: FromCompanionAlpha? = null + val p: FromCompanionBeta? = null + val q: FromCompanionGamma? = null // DEPRECATED: Classifiers from supertypes of our own companion - val r: FromDelta? = null + val r: FromDelta? = null } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/objects/kt21515/classifierFromCompanionObjectOld.fir.kt b/compiler/testData/diagnostics/tests/objects/kt21515/classifierFromCompanionObjectOld.fir.kt index a3ec54538f5..f69f0f0d677 100644 --- a/compiler/testData/diagnostics/tests/objects/kt21515/classifierFromCompanionObjectOld.fir.kt +++ b/compiler/testData/diagnostics/tests/objects/kt21515/classifierFromCompanionObjectOld.fir.kt @@ -71,28 +71,28 @@ class C : O.B() { val n: FromCompanionC? = null // INVISIBLE: direct superclasses themselves. - val a: A? = null - val b: B? = null + val a: A? = null + val b: B? = null // DEPRECATED: Classifiers from companions of direct superclasses - val e: FromCompanionA? = null - val f: FromCompanionB? = null + val e: FromCompanionA? = null + val f: FromCompanionB? = null // INVISIBLE: "cousin" supertypes themselves - val g: Alpha? = null - val h: Beta? = null - val i: Gamma? = null + val g: Alpha? = null + val h: Beta? = null + val i: Gamma? = null // DEPRECATED: classifiers from "cousin" superclasses - val k: FromAlpha? = null - val l: FromBeta? = null - val m: FromGamma? = null + val k: FromAlpha? = null + val l: FromBeta? = null + val m: FromGamma? = null // INVISIBLE: We don't see classifiers from companions of "cousin" superclasses - val o: FromCompanionAlpha? = null - val p: FromCompanionBeta? = null - val q: FromCompanionGamma? = null + val o: FromCompanionAlpha? = null + val p: FromCompanionBeta? = null + val q: FromCompanionGamma? = null // DEPRECATED: Classifiers from supertypes of our own companion - val r: FromDelta? = null + val r: FromDelta? = null } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/nestedClassesFromInterface.fir.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedClassesFromInterface.fir.kt index 425199e54f3..ff7ad53b3a3 100644 --- a/compiler/testData/diagnostics/tests/scopes/inheritance/nestedClassesFromInterface.fir.kt +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedClassesFromInterface.fir.kt @@ -9,19 +9,19 @@ interface B { } class X: A { - val a: A_ = A_() + val a: A_ = A_() val b: A.A_ = A.A_() companion object { - val a: A_ = A_() + val a: A_ = A_() } } class Y: B { - val a: B_ = B_() + val a: B_ = B_() val b: B.B_ = B.B_() companion object { - val b: B_ = B_() + val b: B_ = B_() } } diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClass.fir.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClass.fir.kt index ecf6f1eb430..470190514c4 100644 --- a/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClass.fir.kt +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClass.fir.kt @@ -7,14 +7,14 @@ open class A { } class C: A() { - val b: B = null!! + val b: B = null!! init { B() } object O { - val b: B = null!! + val b: B = null!! init { B() @@ -22,7 +22,7 @@ class C: A() { } class K { - val b: B = null!! + val b: B = null!! init { B() @@ -30,7 +30,7 @@ class C: A() { } inner class I { - val b: B = null!! + val b: B = null!! init { B() diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/nestedFromJava.fir.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedFromJava.fir.kt index 8271dcb6922..82214b4ced2 100644 --- a/compiler/testData/diagnostics/tests/scopes/inheritance/nestedFromJava.fir.kt +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedFromJava.fir.kt @@ -23,7 +23,7 @@ public class C extends B implements A { // FILE: 1.kt class X: A { - val a_s: A_S = null!! + val a_s: A_S = null!! init { A_S() @@ -32,7 +32,7 @@ class X: A { } object xD { - val a_: A_S = null!! + val a_: A_S = null!! init { A_S() @@ -66,7 +66,7 @@ class Y: B() { } class Z: C() { - val a_s: A_S = null!! + val a_s: A_S = null!! val b_: B_ = null!! val b_s: B_S = null!! @@ -77,7 +77,7 @@ class Z: C() { } object X { - val a_s: A_S = null!! + val a_s: A_S = null!! val b_: B_ = null!! val b_s: B_S = null!! diff --git a/compiler/testData/diagnostics/tests/typealias/inheritedNestedTypeAlias.kt b/compiler/testData/diagnostics/tests/typealias/inheritedNestedTypeAlias.kt index d962dbfe289..9264d084b56 100644 --- a/compiler/testData/diagnostics/tests/typealias/inheritedNestedTypeAlias.kt +++ b/compiler/testData/diagnostics/tests/typealias/inheritedNestedTypeAlias.kt @@ -16,6 +16,6 @@ class Derived : Base() { val x1: InnerCell = InnerCell(42) val x2: Base.InnerCell = InnerCell(42) - val test1: CT = Cell(42) + val test1: CT = Cell(42) val test2: Base.CT = Cell(42) } diff --git a/compiler/testData/diagnostics/tests/typealias/javaStaticMembersViaTypeAlias.fir.kt b/compiler/testData/diagnostics/tests/typealias/javaStaticMembersViaTypeAlias.fir.kt index f43ca000422..764b7764724 100644 --- a/compiler/testData/diagnostics/tests/typealias/javaStaticMembersViaTypeAlias.fir.kt +++ b/compiler/testData/diagnostics/tests/typealias/javaStaticMembersViaTypeAlias.fir.kt @@ -33,11 +33,11 @@ val seeAlsoDerivedFoo: String = JDerived.foo() // Referencing nested classes via type alias should be prohibited // (in type position and in expression position) -val testNested1: JT.Nested = JT.Nested() -val testNested2: KT.Nested = KT.Nested() -val testNested3: IT.Nested = IT.Nested() -val testInner1: JT.Inner = JT.Inner() -val testInner2: KT.Inner = KT.Inner() +val testNested1: JT.Nested = JT.Nested() +val testNested2: KT.Nested = KT.Nested() +val testNested3: IT.Nested = IT.Nested() +val testInner1: JT.Inner = JT.Inner() +val testInner2: KT.Inner = KT.Inner() fun testNestedAsTypeArgument1(x: List) {} fun testNestedAsTypeArgument2(x: List) {} fun testNestedAsTypeArgument3(x: List) {} diff --git a/compiler/testData/diagnostics/tests/typealias/localTypeAliasConstructor.fir.kt b/compiler/testData/diagnostics/tests/typealias/localTypeAliasConstructor.fir.kt index e0628eca641..ceae5b8a258 100644 --- a/compiler/testData/diagnostics/tests/typealias/localTypeAliasConstructor.fir.kt +++ b/compiler/testData/diagnostics/tests/typealias/localTypeAliasConstructor.fir.kt @@ -4,7 +4,7 @@ class Cell(val x: TC) fun id(x: T): T { typealias C = Cell - class Local(val cell: C) + class Local(val cell: C) val cx = C(x) val c: C = Local(cx).cell return c.x diff --git a/compiler/testData/diagnostics/tests/variance/InvariantPosition.fir.kt b/compiler/testData/diagnostics/tests/variance/InvariantPosition.fir.kt index 1cc43674b4b..e687c65f6d6 100644 --- a/compiler/testData/diagnostics/tests/variance/InvariantPosition.fir.kt +++ b/compiler/testData/diagnostics/tests/variance/InvariantPosition.fir.kt @@ -38,10 +38,10 @@ interface Test { var neOk22: Inv var neOk23: Inv - var neOk30: Pair - var neOk31: Pair - var neOk32: Inv + var neOk30: Pair + var neOk31: Pair + var neOk32: Inv var neOk33: Inv<> - var neOk34: Inv - var neOk35: Inv + var neOk34: Inv + var neOk35: Inv } \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithStdLib/InaccessibleInternalClass.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/InaccessibleInternalClass.fir.kt index d8bfab4b7d0..008d94b0fbb 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/InaccessibleInternalClass.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/InaccessibleInternalClass.fir.kt @@ -10,6 +10,6 @@ package kotlin.sequences import p.* interface I { - val v1: FilteringSequence + val v1: FilteringSequence val v2: IndexingSequence } diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/callableReference/callableReferenceOnUnresolvedLHS.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/callableReference/callableReferenceOnUnresolvedLHS.fir.kt index f7b4d61a233..fe69d690b37 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/callableReference/callableReferenceOnUnresolvedLHS.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/callableReference/callableReferenceOnUnresolvedLHS.fir.kt @@ -3,7 +3,7 @@ interface Inv class Impl : Inv -class Scope(private val implClass: j.Class) { +class Scope(private val implClass: j.Class) { fun foo(c: Collection) { val hm = c.asSequence() .filter(implClass::isInstance) diff --git a/compiler/testData/diagnostics/testsWithStdLib/regression/kt37727.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/regression/kt37727.fir.kt index 5b05fba3a02..f9ddcacc329 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/regression/kt37727.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/regression/kt37727.fir.kt @@ -1,4 +1,4 @@ -data class A(val x: Set = setOf()) { +data class A(val x: Set = setOf()) { fun with(x: Set? = null) { A(x ?: this.x) }