[FIR] Don't render Any? upper bounds of type parameters

This commit is contained in:
Dmitriy Novozhilov
2019-07-24 14:06:52 +03:00
committed by Mikhail Glukhikh
parent 7245475196
commit 6c26fc1943
2 changed files with 14 additions and 3 deletions
@@ -1,5 +1,5 @@
public open class Max : R|kotlin/Any| {
public open fun <T : R|kotlin/Any|?, R|kotlin/Comparable<T>|?> max(p0: R|kotlin/collections/Collection<T>|?): R|T|
public open fun <T : R|kotlin/Comparable<T>|?> max(p0: R|kotlin/collections/Collection<T>|?): R|T|
public constructor(): R|test/Max|
@@ -16,7 +16,9 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirLoopJump
import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.types.*
@@ -25,6 +27,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.utils.Printer
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
fun FirElement.renderWithType(): String = buildString {
append(this@renderWithType)
@@ -461,9 +464,17 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
}
typeParameter.variance.renderVariance()
print(typeParameter.name)
if (typeParameter.bounds.isNotEmpty()) {
val meaningfulBounds = typeParameter.bounds.filter {
if (it !is FirResolvedTypeRef) return@filter true
if (!it.type.isNullable) return@filter true
val type = it.type as? ConeLookupTagBasedType ?: return@filter true
type.lookupTag.safeAs<ConeClassLikeLookupTag>()?.classId != StandardClassIds.Any
}
if (meaningfulBounds.isNotEmpty()) {
print(" : ")
typeParameter.bounds.renderSeparated()
meaningfulBounds.renderSeparated()
}
}