diff --git a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/diagnostics/ConeDiagnostic.kt b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/diagnostics/ConeDiagnostic.kt index a8b5cb5ce46..fe5f698e853 100644 --- a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/diagnostics/ConeDiagnostic.kt +++ b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/diagnostics/ConeDiagnostic.kt @@ -9,6 +9,10 @@ interface ConeDiagnostic { val reason: String } +interface ConeDiagnosticWithNullability : ConeDiagnostic { + val isNullable: Boolean +} + class ConeStubDiagnostic(val original: ConeDiagnostic) : ConeDiagnostic { override val reason: String get() = original.reason } \ No newline at end of file diff --git a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/ConeTypes.kt b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/ConeTypes.kt index 37492c88910..1bf16aee517 100644 --- a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/ConeTypes.kt +++ b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/ConeTypes.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.types import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnosticWithNullability import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl @@ -50,7 +51,9 @@ class ConeErrorType( get() = ConeClassLikeErrorLookupTag(ClassId.fromString("")) override val nullability: ConeNullability - get() = ConeNullability.UNKNOWN + get() = if (diagnostic is ConeDiagnosticWithNullability) { + if (diagnostic.isNullable) ConeNullability.NULLABLE else ConeNullability.NOT_NULL + } else ConeNullability.UNKNOWN override fun equals(other: Any?) = this === other override fun hashCode(): Int = System.identityHashCode(this) diff --git a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/diagnostics/ConeDiagnostics.kt b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/diagnostics/ConeDiagnostics.kt index be2f29b3280..6051fe4959e 100644 --- a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/diagnostics/ConeDiagnostics.kt +++ b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/diagnostics/ConeDiagnostics.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.contracts.description.ConeContractDescriptionElement import org.jetbrains.kotlin.fir.declarations.FirVariable import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnosticWithNullability import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnosticWithSource import org.jetbrains.kotlin.fir.expressions.FirConstExpression import org.jetbrains.kotlin.fir.expressions.FirOperation @@ -58,7 +59,8 @@ class ConeUnresolvedSymbolError(val classId: ClassId) : ConeUnresolvedError { override val reason: String get() = "Symbol not found for $classId" } -class ConeUnresolvedTypeQualifierError(val qualifiers: List, val isNullable: Boolean) : ConeUnresolvedError { +class ConeUnresolvedTypeQualifierError(val qualifiers: List, override val isNullable: Boolean) + : ConeUnresolvedError, ConeDiagnosticWithNullability { override val qualifier: String get() = qualifiers.joinToString(separator = ".") { it.name.asString() } override val reason: String get() = "Symbol not found for $qualifier${if (isNullable) "?" else ""}" }