diff --git a/compiler/fir/analysis-tests/testData/resolve/asImports.txt b/compiler/fir/analysis-tests/testData/resolve/asImports.txt index e4b0a5fa27d..5bbe15cf1ef 100644 --- a/compiler/fir/analysis-tests/testData/resolve/asImports.txt +++ b/compiler/fir/analysis-tests/testData/resolve/asImports.txt @@ -10,7 +10,7 @@ FILE: A.kt } FILE: main.kt public final fun test_1(): R|kotlin/Unit| { - lval a: = #() + lval a: R|ERROR CLASS: Unresolved name: A| = #() lval b: R|foo/A| = R|foo/A.A|() lval c: R|foo/A| = #() } diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/typeArgumentsNotAllowed.txt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/typeArgumentsNotAllowed.txt index c00ebee9d92..40bcc35998d 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/typeArgumentsNotAllowed.txt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/typeArgumentsNotAllowed.txt @@ -22,10 +22,10 @@ FILE: typeArgumentsNotAllowed.kt } } - public final val a: = Q|rest|.# - public get(): - public final val b: = Q|rest/Best|.# - public get(): + public final val a: R|ERROR CLASS: Unresolved name: MyClass| = Q|rest|.# + public get(): R|ERROR CLASS: Unresolved name: MyClass| + public final val b: R|ERROR CLASS: Unresolved name: MyClass| = Q|rest/Best|.# + public get(): R|ERROR CLASS: Unresolved name: MyClass| public final class B : R|kotlin/Any| { public constructor(): R|rest/B| { super() diff --git a/compiler/fir/analysis-tests/testData/resolve/exhaustiveness_enumJava.txt b/compiler/fir/analysis-tests/testData/resolve/exhaustiveness_enumJava.txt index f3b8d19e300..e178354ee1b 100644 --- a/compiler/fir/analysis-tests/testData/resolve/exhaustiveness_enumJava.txt +++ b/compiler/fir/analysis-tests/testData/resolve/exhaustiveness_enumJava.txt @@ -1,6 +1,6 @@ FILE: main.kt public final fun test_1(e: R|JavaEnum|): R|kotlin/Unit| { - lval a: = when (R|/e|) { + lval a: R|ERROR CLASS: Unresolved name: plus| = when (R|/e|) { ==($subj$, Q|JavaEnum|.R|/JavaEnum.A|) -> { Int(1) } @@ -9,7 +9,7 @@ FILE: main.kt } } .#(Int(0)) - lval b: = when (R|/e|) { + lval b: R|ERROR CLASS: Unresolved name: plus| = when (R|/e|) { ==($subj$, Q|JavaEnum|.R|/JavaEnum.A|) -> { Int(1) } @@ -44,7 +44,7 @@ FILE: main.kt .R|kotlin/Int.plus|(Int(0)) } public final fun test_2(e: R|JavaEnum?|): R|kotlin/Unit| { - lval a: = when (R|/e|) { + lval a: R|ERROR CLASS: Unresolved name: plus| = when (R|/e|) { ==($subj$, Q|JavaEnum|.R|/JavaEnum.A|) -> { Int(1) } diff --git a/compiler/fir/analysis-tests/testData/resolve/exhaustiveness_sealedSubClass.txt b/compiler/fir/analysis-tests/testData/resolve/exhaustiveness_sealedSubClass.txt index 84a38448b6a..1e4580f5d2f 100644 --- a/compiler/fir/analysis-tests/testData/resolve/exhaustiveness_sealedSubClass.txt +++ b/compiler/fir/analysis-tests/testData/resolve/exhaustiveness_sealedSubClass.txt @@ -77,7 +77,7 @@ FILE: exhaustiveness_sealedSubClass.kt .R|kotlin/Int.plus|(Int(0)) } public final fun test_2(e: R|A|): R|kotlin/Unit| { - lval a: = when (R|/e|) { + lval a: R|ERROR CLASS: Unresolved name: plus| = when (R|/e|) { ($subj$ is R|D|) -> { Int(1) } @@ -86,7 +86,7 @@ FILE: exhaustiveness_sealedSubClass.kt } } .#(Int(0)) - lval b: = when (R|/e|) { + lval b: R|ERROR CLASS: Unresolved name: plus| = when (R|/e|) { ($subj$ is R|B|) -> { Int(1) } @@ -98,7 +98,7 @@ FILE: exhaustiveness_sealedSubClass.kt } } .#(Int(0)) - lval c: = when (R|/e|) { + lval c: R|ERROR CLASS: Unresolved name: plus| = when (R|/e|) { ($subj$ is R|B|) -> { Int(1) } @@ -107,7 +107,7 @@ FILE: exhaustiveness_sealedSubClass.kt } } .#(Int(0)) - lval d: = when (R|/e|) { + lval d: R|ERROR CLASS: Unresolved name: plus| = when (R|/e|) { ($subj$ is R|C|) -> { Int(1) } diff --git a/compiler/fir/analysis-tests/testData/resolve/expresssions/CallBasedInExpressionGenerator.txt b/compiler/fir/analysis-tests/testData/resolve/expresssions/CallBasedInExpressionGenerator.txt index e2d481f68c6..88de595fbbc 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/CallBasedInExpressionGenerator.txt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/CallBasedInExpressionGenerator.txt @@ -29,8 +29,8 @@ FILE: CallBasedInExpressionGenerator.kt public final val codegen: R|org/jetbrains/kotlin/codegen/range/inExpression/ExpressionCodegen| = R|/codegen| public get(): R|org/jetbrains/kotlin/codegen/range/inExpression/ExpressionCodegen| - private final val resolvedCall: = R|/operatorReference|.#(R|/codegen|.#) - private get(): + private final val resolvedCall: R|ERROR CLASS: Unresolved name: getResolvedCallWithAssert| = R|/operatorReference|.#(R|/codegen|.#) + private get(): R|ERROR CLASS: Unresolved name: getResolvedCallWithAssert| private final val isInverted: R|kotlin/Boolean| = ==(R|/operatorReference|.#(), #.#) private get(): R|kotlin/Boolean| @@ -75,7 +75,7 @@ FILE: CallBasedInExpressionGenerator.kt } private final fun invokeFunction(v: R|org/jetbrains/kotlin/codegen/range/inExpression/InstructionAdapter|): R|kotlin/Unit| { - lval result: = this@R|org/jetbrains/kotlin/codegen/range/inExpression/CallBasedInExpressionGenerator|.R|org/jetbrains/kotlin/codegen/range/inExpression/CallBasedInExpressionGenerator.codegen|.#(this@R|org/jetbrains/kotlin/codegen/range/inExpression/CallBasedInExpressionGenerator|.R|org/jetbrains/kotlin/codegen/range/inExpression/CallBasedInExpressionGenerator.resolvedCall|.#, this@R|org/jetbrains/kotlin/codegen/range/inExpression/CallBasedInExpressionGenerator|.R|org/jetbrains/kotlin/codegen/range/inExpression/CallBasedInExpressionGenerator.resolvedCall|, #()) + lval result: R|ERROR CLASS: Unresolved name: invokeFunction| = this@R|org/jetbrains/kotlin/codegen/range/inExpression/CallBasedInExpressionGenerator|.R|org/jetbrains/kotlin/codegen/range/inExpression/CallBasedInExpressionGenerator.codegen|.#(this@R|org/jetbrains/kotlin/codegen/range/inExpression/CallBasedInExpressionGenerator|.R|org/jetbrains/kotlin/codegen/range/inExpression/CallBasedInExpressionGenerator.resolvedCall|.#, this@R|org/jetbrains/kotlin/codegen/range/inExpression/CallBasedInExpressionGenerator|.R|org/jetbrains/kotlin/codegen/range/inExpression/CallBasedInExpressionGenerator.resolvedCall|, #()) R|/result|.#(R|/result|.#, R|/result|.#, R|/v|) } diff --git a/compiler/fir/analysis-tests/testData/resolve/expresssions/access.txt b/compiler/fir/analysis-tests/testData/resolve/expresssions/access.txt index fa2f219769f..5b203daae18 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/access.txt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/access.txt @@ -57,7 +57,7 @@ FILE: access.kt lval a: R|kotlin/Int| = Int(10) lval b: R|kotlin/Int| = R|/a| lval d: R|kotlin/String| = String() - lval c: = # + lval c: R|ERROR CLASS: Unresolved name: c| = # #() local final fun bcd(): R|kotlin/Unit| { } diff --git a/compiler/fir/analysis-tests/testData/resolve/expresssions/baseQualifier.txt b/compiler/fir/analysis-tests/testData/resolve/expresssions/baseQualifier.txt index e39cdbce985..5331a3118a3 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/baseQualifier.txt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/baseQualifier.txt @@ -29,7 +29,7 @@ FILE: Test.kt lval bbd: R|BB.D| = Q|BB.D| lval aac: R|AA.C| = Q|AA.C| Q|JavaClass|.R|/JavaClass.bar|() - lval errC: = Q|BB|.# - lval errBarViaBB: = Q|BB|.#() - lval errBarViaAA: = Q|AA|.#() + lval errC: R|ERROR CLASS: Unresolved name: C| = Q|BB|.# + lval errBarViaBB: R|ERROR CLASS: Unresolved name: bar| = Q|BB|.#() + lval errBarViaAA: R|ERROR CLASS: Unresolved name: bar| = Q|AA|.#() } diff --git a/compiler/fir/analysis-tests/testData/resolve/expresssions/companion.txt b/compiler/fir/analysis-tests/testData/resolve/expresssions/companion.txt index 27b77514e9a..cfae09ebedd 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/companion.txt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/companion.txt @@ -47,5 +47,5 @@ FILE: companion.kt Q|B|.R|/B.Companion.baz|() lval x: R|kotlin/String| = Q|A|.R|/A.Companion.D| lval y: R|kotlin/String| = Q|B|.R|/B.Companion.C| - lval z: = Q|B|.# + lval z: R|ERROR CLASS: Unresolved name: D| = Q|B|.# } diff --git a/compiler/fir/analysis-tests/testData/resolve/expresssions/localObjects.txt b/compiler/fir/analysis-tests/testData/resolve/expresssions/localObjects.txt index da21a3d6171..06684582e0d 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/localObjects.txt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/localObjects.txt @@ -40,5 +40,5 @@ FILE: localObjects.kt Q|B|.R|/B.foo|() } - public final val bb: = #.#() - public get(): + public final val bb: R|ERROR CLASS: Unresolved name: foo| = #.#() + public get(): R|ERROR CLASS: Unresolved name: foo| diff --git a/compiler/fir/analysis-tests/testData/resolve/expresssions/nestedObjects.txt b/compiler/fir/analysis-tests/testData/resolve/expresssions/nestedObjects.txt index 1658ffdabfc..fafa5ab1e23 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/nestedObjects.txt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/nestedObjects.txt @@ -25,7 +25,7 @@ FILE: nestedObjects.kt } } - public final val err: = Q|B|.#.# - public get(): + public final val err: R|ERROR CLASS: Unresolved name: B| = Q|B|.#.# + public get(): R|ERROR CLASS: Unresolved name: B| public final val correct: R|A.B.A| = Q|A.B.A| public get(): R|A.B.A| diff --git a/compiler/fir/analysis-tests/testData/resolve/nested/inner.txt b/compiler/fir/analysis-tests/testData/resolve/nested/inner.txt index 85dbfd9adbe..f69193dc99a 100644 --- a/compiler/fir/analysis-tests/testData/resolve/nested/inner.txt +++ b/compiler/fir/analysis-tests/testData/resolve/nested/inner.txt @@ -41,7 +41,7 @@ FILE: inner.kt public final fun test(): R|kotlin/Unit| { lval o: R|Owner| = R|/Owner.Owner|() R|/o|.R|/Owner.foo|() - lval err: = Q|Owner|.#() + lval err: R|ERROR CLASS: Unresolved name: Inner| = Q|Owner|.#() R|/err|.#() lval i: R|Owner.Inner| = R|/o|.R|/Owner.Inner.Inner|() R|/i|.R|/Owner.Inner.gau|() diff --git a/compiler/fir/analysis-tests/testData/resolve/nestedClassContructor.txt b/compiler/fir/analysis-tests/testData/resolve/nestedClassContructor.txt index 0c47ccc57b1..ae96f816ddf 100644 --- a/compiler/fir/analysis-tests/testData/resolve/nestedClassContructor.txt +++ b/compiler/fir/analysis-tests/testData/resolve/nestedClassContructor.txt @@ -35,7 +35,7 @@ FILE: nestedClassContructor.kt public final fun foo(): R|kotlin/Unit| { lval a: R|A| = R|/A.A|() lval ac: R|A.C| = Q|A|.R|/A.C.C|() - lval c: = #() + lval c: R|ERROR CLASS: Unresolved name: C| = #() } } diff --git a/compiler/fir/analysis-tests/testData/resolve/problems/multipleJavaClassesInOneFile.txt b/compiler/fir/analysis-tests/testData/resolve/problems/multipleJavaClassesInOneFile.txt index b58e7b2cd16..0ce35a2e3ce 100644 --- a/compiler/fir/analysis-tests/testData/resolve/problems/multipleJavaClassesInOneFile.txt +++ b/compiler/fir/analysis-tests/testData/resolve/problems/multipleJavaClassesInOneFile.txt @@ -1,5 +1,5 @@ FILE: main.kt public final fun test(): R|kotlin/Unit| { lval some: R|Some| = R|/Some.Some|() - lval another: = #() + lval another: R|ERROR CLASS: Unresolved name: Another| = #() } diff --git a/compiler/fir/analysis-tests/testData/resolve/properties/javaAccessorConversion.txt b/compiler/fir/analysis-tests/testData/resolve/properties/javaAccessorConversion.txt index 79d58c33d0e..74283bc868c 100644 --- a/compiler/fir/analysis-tests/testData/resolve/properties/javaAccessorConversion.txt +++ b/compiler/fir/analysis-tests/testData/resolve/properties/javaAccessorConversion.txt @@ -1,15 +1,15 @@ FILE: main.kt public final fun test_1(x: R|A|): R|kotlin/Unit| { lval str1: R|ft!| = R|/x|.R|/A.vmParameters| - lval str2: = R|/x|.# + lval str2: R|ERROR CLASS: Unresolved name: vMParameters| = R|/x|.# } public final fun test_2(x: R|B|): R|kotlin/Unit| { lval int: R|ft!| = R|/x|.R|/B.vmParameters| - lval error: = R|/x|.# + lval error: R|ERROR CLASS: Unresolved name: vMParameters| = R|/x|.# } public final fun test_3(x: R|C|): R|kotlin/Unit| { - lval error: = R|/x|.# - lval int: = R|/x|.# + lval error: R|ERROR CLASS: Ambiguity: vmParameters, [/C.vmParameters, /C.vmParameters]| = R|/x|.# + lval int: R|ERROR CLASS: Unresolved name: vMParameters| = R|/x|.# } public final class Foo : R|kotlin/Any| { public constructor(): R|Foo| { 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 82ea99d968a..479ff7c370f 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 @@ -12,10 +12,7 @@ import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector 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.FirConstructor import org.jetbrains.kotlin.fir.declarations.FirErrorFunction -import org.jetbrains.kotlin.fir.declarations.FirProperty -import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor import org.jetbrains.kotlin.fir.diagnostics.* import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind.* @@ -39,16 +36,7 @@ class ErrorNodeDiagnosticCollectorComponent(collector: AbstractDiagnosticCollect // It always uses the same type ref as the corresponding property return } - is FirConstructor -> if (lastContainingDeclaration.source?.kind is FirFakeSourceElementKind) { - // Implicit primary constructor uses the same type ref as the corresponding property - return - } - is FirValueParameter -> if (lastContainingDeclaration.source?.kind is FirFakeSourceElementKind) { - // Value parameter of default setter uses the same type ref as the corresponding property - return - } - is FirProperty -> if (lastContainingDeclaration.source?.kind is FirFakeSourceElementKind) { - // Properties of implicit primary constructor uses the same type ref as the corresponding value parameter + else -> if (lastContainingDeclaration?.source?.kind is FirFakeSourceElementKind) { return } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt index a58506f083e..f8a137f3313 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt @@ -867,7 +867,15 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor is FirImplicitTypeRef -> buildErrorTypeRef { diagnostic = ConeSimpleDiagnostic("No result type for initializer", DiagnosticKind.InferenceError) } - else -> resultType + else -> { + buildResolvedTypeRef { + type = resultType.coneType + annotations.addAll(resultType.annotations) + resultType.source.psi?.let { + source = FirFakeSourceElement(it, FirFakeSourceElementKind.PropertyFromParameter) + } + } + } } variable.transformReturnTypeRef( transformer, @@ -879,7 +887,17 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor is FirImplicitTypeRef -> buildErrorTypeRef { diagnostic = ConeSimpleDiagnostic("No result type for getter", DiagnosticKind.InferenceError) } - else -> resultType + else -> { + resultType?.let { + buildResolvedTypeRef { + type = resultType.coneType + annotations.addAll(resultType.annotations) + resultType.source.psi?.let { + source = FirFakeSourceElement(it, FirFakeSourceElementKind.PropertyFromParameter) + } + } + } + } } variable.transformReturnTypeRef( transformer, diff --git a/compiler/testData/diagnostics/tests/cast/bare/ToErrorType.fir.kt b/compiler/testData/diagnostics/tests/cast/bare/ToErrorType.fir.kt index 712d6c3091a..f7957c26bd5 100644 --- a/compiler/testData/diagnostics/tests/cast/bare/ToErrorType.fir.kt +++ b/compiler/testData/diagnostics/tests/cast/bare/ToErrorType.fir.kt @@ -1,6 +1,6 @@ class P fun foo(p: P): Any { - val v = p as G + val v = p as G return v } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/classObjects/typeParametersInAnnonymousObject.fir.kt b/compiler/testData/diagnostics/tests/classObjects/typeParametersInAnnonymousObject.fir.kt index c58aeec33cd..e9f346c80c5 100644 --- a/compiler/testData/diagnostics/tests/classObjects/typeParametersInAnnonymousObject.fir.kt +++ b/compiler/testData/diagnostics/tests/classObjects/typeParametersInAnnonymousObject.fir.kt @@ -20,7 +20,7 @@ val x = object> { fun case_4() { val x = object { - fun test() = 10 as T + fun test() = 10 as T } val y = x.test() // type y is T diff --git a/compiler/testData/diagnostics/tests/classObjects/typeParametersInAnnonymousObject_after.fir.kt b/compiler/testData/diagnostics/tests/classObjects/typeParametersInAnnonymousObject_after.fir.kt index 18815708e9f..c07d58c4067 100644 --- a/compiler/testData/diagnostics/tests/classObjects/typeParametersInAnnonymousObject_after.fir.kt +++ b/compiler/testData/diagnostics/tests/classObjects/typeParametersInAnnonymousObject_after.fir.kt @@ -20,7 +20,7 @@ val x = object> { fun case_4() { val x = object { - fun test() = 10 as T + fun test() = 10 as T } val y = x.test() // type y is T diff --git a/compiler/testData/diagnostics/tests/dataClasses/errorTypesInDataClasses.fir.kt b/compiler/testData/diagnostics/tests/dataClasses/errorTypesInDataClasses.fir.kt index 8f64ee8bab3..214862adfa0 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/resolve/noCandidates/resolvedToClassifier.fir.kt b/compiler/testData/diagnostics/tests/resolve/noCandidates/resolvedToClassifier.fir.kt index e8523a23f44..27bed3b5177 100644 --- a/compiler/testData/diagnostics/tests/resolve/noCandidates/resolvedToClassifier.fir.kt +++ b/compiler/testData/diagnostics/tests/resolve/noCandidates/resolvedToClassifier.fir.kt @@ -14,6 +14,6 @@ fun test() { } fun bar() { - val typeParameter_as_val = T + val typeParameter_as_val = T val typeParameter_as_fun = T() }