FIR Java: use definitely not-null types for type parameters

We support & use ConeDefinitelyNotNullType more properly here
This commit is contained in:
Mikhail Glukhikh
2019-11-12 11:51:16 +03:00
parent 63f38bb28a
commit bd70daa3d1
13 changed files with 94 additions and 13 deletions
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.resolve.toTypeProjection
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
@@ -116,6 +117,16 @@ private fun coneFlexibleOrSimpleType(
upperBound: ConeLookupTagBasedType
): ConeKotlinType {
if (AbstractStrictEqualityTypeChecker.strictEqualTypes(session.typeContext, lowerBound, upperBound)) {
val lookupTag = lowerBound.lookupTag
if (lookupTag is ConeTypeParameterLookupTag && !lowerBound.isMarkedNullable) {
if (lookupTag.typeParameterSymbol.fir.bounds.any {
val type = (it as FirResolvedTypeRef).type
type is ConeTypeParameterType || type.isNullable
}
) {
return ConeDefinitelyNotNullType.create(lowerBound)
}
}
return lowerBound
}
return ConeFlexibleType(lowerBound, upperBound)