FIR Preserve nullability of ConeErrorType when possible
This commit is contained in:
committed by
Space Team
parent
217550d10e
commit
16644c1a3b
@@ -9,6 +9,10 @@ interface ConeDiagnostic {
|
|||||||
val reason: String
|
val reason: String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface ConeDiagnosticWithNullability : ConeDiagnostic {
|
||||||
|
val isNullable: Boolean
|
||||||
|
}
|
||||||
|
|
||||||
class ConeStubDiagnostic(val original: ConeDiagnostic) : ConeDiagnostic {
|
class ConeStubDiagnostic(val original: ConeDiagnostic) : ConeDiagnostic {
|
||||||
override val reason: String get() = original.reason
|
override val reason: String get() = original.reason
|
||||||
}
|
}
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.types
|
package org.jetbrains.kotlin.fir.types
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
|
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.ConeClassLikeLookupTag
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||||
@@ -50,7 +51,9 @@ class ConeErrorType(
|
|||||||
get() = ConeClassLikeErrorLookupTag(ClassId.fromString("<error>"))
|
get() = ConeClassLikeErrorLookupTag(ClassId.fromString("<error>"))
|
||||||
|
|
||||||
override val nullability: ConeNullability
|
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 equals(other: Any?) = this === other
|
||||||
override fun hashCode(): Int = System.identityHashCode(this)
|
override fun hashCode(): Int = System.identityHashCode(this)
|
||||||
|
|||||||
+3
-1
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirElement
|
|||||||
import org.jetbrains.kotlin.fir.contracts.description.ConeContractDescriptionElement
|
import org.jetbrains.kotlin.fir.contracts.description.ConeContractDescriptionElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirVariable
|
import org.jetbrains.kotlin.fir.declarations.FirVariable
|
||||||
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
|
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.diagnostics.ConeDiagnosticWithSource
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirOperation
|
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"
|
override val reason: String get() = "Symbol not found for $classId"
|
||||||
}
|
}
|
||||||
|
|
||||||
class ConeUnresolvedTypeQualifierError(val qualifiers: List<FirQualifierPart>, val isNullable: Boolean) : ConeUnresolvedError {
|
class ConeUnresolvedTypeQualifierError(val qualifiers: List<FirQualifierPart>, override val isNullable: Boolean)
|
||||||
|
: ConeUnresolvedError, ConeDiagnosticWithNullability {
|
||||||
override val qualifier: String get() = qualifiers.joinToString(separator = ".") { it.name.asString() }
|
override val qualifier: String get() = qualifiers.joinToString(separator = ".") { it.name.asString() }
|
||||||
override val reason: String get() = "Symbol not found for $qualifier${if (isNullable) "?" else ""}"
|
override val reason: String get() = "Symbol not found for $qualifier${if (isNullable) "?" else ""}"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user