[FIR] Fix Disappeared NULLABLE_TYPE_IN_CLASS_LITERAL_LHS

^KT-59970 Fixed
This commit is contained in:
Vladimir Sukharev
2023-10-09 18:06:26 +02:00
committed by Space Team
parent 1c395ef0df
commit 69d2b94a68
2 changed files with 6 additions and 6 deletions
@@ -50,10 +50,11 @@ object FirClassLiteralChecker : FirGetClassCallChecker() {
//
// Only the 2nd example is valid, and we want to check if token type QUEST doesn't exist at the same level as COLONCOLON.
val markedNullable = source.getChild(QUEST, depth = 1) != null
val resolvedFullyExpandedType = argument.resolvedType.fullyExpandedType(context.session)
val isNullable = markedNullable ||
(argument as? FirResolvedQualifier)?.isNullableLHSForCallableReference == true ||
argument.resolvedType.isMarkedNullable ||
argument.resolvedType.isNullableTypeParameter(context.session.typeContext)
resolvedFullyExpandedType.isMarkedNullable ||
resolvedFullyExpandedType.isNullableTypeParameter(context.session.typeContext)
if (isNullable) {
if (argument.canBeDoubleColonLHSAsType) {
reporter.reportOn(source, FirErrors.NULLABLE_TYPE_IN_CLASS_LITERAL_LHS, context)
@@ -77,8 +78,7 @@ object FirClassLiteralChecker : FirGetClassCallChecker() {
if (argument !is FirResolvedQualifier) return
// TODO, KT-59835: differentiate RESERVED_SYNTAX_IN_CALLABLE_REFERENCE_LHS
if (argument.typeArguments.isNotEmpty() && !argument.resolvedType.fullyExpandedType(context.session)
.isAllowedInClassLiteral(context)) {
if (argument.typeArguments.isNotEmpty() && !resolvedFullyExpandedType.isAllowedInClassLiteral(context)) {
val symbol = argument.symbol
symbol?.lazyResolveToPhase(FirResolvePhase.TYPES)
@OptIn(SymbolInternals::class)
@@ -2,11 +2,11 @@ typealias TString = String
fun f1() = TString::class
typealias TNullableString = String?
fun f2() = TNullableString::class
fun f2() = <!NULLABLE_TYPE_IN_CLASS_LITERAL_LHS!>TNullableString::class<!>
typealias TNullableTString = TString?
typealias TTNullableTString = TNullableTString
fun f3() = TTNullableTString::class
fun f3() = <!NULLABLE_TYPE_IN_CLASS_LITERAL_LHS!>TTNullableTString::class<!>
inline fun <reified T> f4(b: Boolean): Any {
<!TOPLEVEL_TYPEALIASES_ONLY!>typealias X = <!TYPEALIAS_SHOULD_EXPAND_TO_CLASS!>T<!><!>