[FIR] Fix Disappeared NULLABLE_TYPE_IN_CLASS_LITERAL_LHS
^KT-59970 Fixed
This commit is contained in:
committed by
Space Team
parent
1c395ef0df
commit
69d2b94a68
+4
-4
@@ -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.
|
// 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 markedNullable = source.getChild(QUEST, depth = 1) != null
|
||||||
|
val resolvedFullyExpandedType = argument.resolvedType.fullyExpandedType(context.session)
|
||||||
val isNullable = markedNullable ||
|
val isNullable = markedNullable ||
|
||||||
(argument as? FirResolvedQualifier)?.isNullableLHSForCallableReference == true ||
|
(argument as? FirResolvedQualifier)?.isNullableLHSForCallableReference == true ||
|
||||||
argument.resolvedType.isMarkedNullable ||
|
resolvedFullyExpandedType.isMarkedNullable ||
|
||||||
argument.resolvedType.isNullableTypeParameter(context.session.typeContext)
|
resolvedFullyExpandedType.isNullableTypeParameter(context.session.typeContext)
|
||||||
if (isNullable) {
|
if (isNullable) {
|
||||||
if (argument.canBeDoubleColonLHSAsType) {
|
if (argument.canBeDoubleColonLHSAsType) {
|
||||||
reporter.reportOn(source, FirErrors.NULLABLE_TYPE_IN_CLASS_LITERAL_LHS, context)
|
reporter.reportOn(source, FirErrors.NULLABLE_TYPE_IN_CLASS_LITERAL_LHS, context)
|
||||||
@@ -77,8 +78,7 @@ object FirClassLiteralChecker : FirGetClassCallChecker() {
|
|||||||
|
|
||||||
if (argument !is FirResolvedQualifier) return
|
if (argument !is FirResolvedQualifier) return
|
||||||
// TODO, KT-59835: differentiate RESERVED_SYNTAX_IN_CALLABLE_REFERENCE_LHS
|
// TODO, KT-59835: differentiate RESERVED_SYNTAX_IN_CALLABLE_REFERENCE_LHS
|
||||||
if (argument.typeArguments.isNotEmpty() && !argument.resolvedType.fullyExpandedType(context.session)
|
if (argument.typeArguments.isNotEmpty() && !resolvedFullyExpandedType.isAllowedInClassLiteral(context)) {
|
||||||
.isAllowedInClassLiteral(context)) {
|
|
||||||
val symbol = argument.symbol
|
val symbol = argument.symbol
|
||||||
symbol?.lazyResolveToPhase(FirResolvePhase.TYPES)
|
symbol?.lazyResolveToPhase(FirResolvePhase.TYPES)
|
||||||
@OptIn(SymbolInternals::class)
|
@OptIn(SymbolInternals::class)
|
||||||
|
|||||||
@@ -2,11 +2,11 @@ typealias TString = String
|
|||||||
fun f1() = TString::class
|
fun f1() = TString::class
|
||||||
|
|
||||||
typealias TNullableString = String?
|
typealias TNullableString = String?
|
||||||
fun f2() = TNullableString::class
|
fun f2() = <!NULLABLE_TYPE_IN_CLASS_LITERAL_LHS!>TNullableString::class<!>
|
||||||
|
|
||||||
typealias TNullableTString = TString?
|
typealias TNullableTString = TString?
|
||||||
typealias TTNullableTString = TNullableTString
|
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 {
|
inline fun <reified T> f4(b: Boolean): Any {
|
||||||
<!TOPLEVEL_TYPEALIASES_ONLY!>typealias X = <!TYPEALIAS_SHOULD_EXPAND_TO_CLASS!>T<!><!>
|
<!TOPLEVEL_TYPEALIASES_ONLY!>typealias X = <!TYPEALIAS_SHOULD_EXPAND_TO_CLASS!>T<!><!>
|
||||||
|
|||||||
Reference in New Issue
Block a user