From 6c26fc19436b5799a276b1c476074f39cbddae2d Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Wed, 24 Jul 2019 14:06:52 +0300 Subject: [PATCH] [FIR] Don't render `Any?` upper bounds of type parameters --- .../fromLoadJava/library/Max.txt | 2 +- .../src/org/jetbrains/kotlin/fir/FirRenderer.kt | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/compiler/fir/resolve/testData/loadCompiledKotlin/fromLoadJava/library/Max.txt b/compiler/fir/resolve/testData/loadCompiledKotlin/fromLoadJava/library/Max.txt index 60abaf444ca..b6ec605492a 100644 --- a/compiler/fir/resolve/testData/loadCompiledKotlin/fromLoadJava/library/Max.txt +++ b/compiler/fir/resolve/testData/loadCompiledKotlin/fromLoadJava/library/Max.txt @@ -1,5 +1,5 @@ public open class Max : R|kotlin/Any| { - public open fun |?> max(p0: R|kotlin/collections/Collection|?): R|T| + public open fun |?> max(p0: R|kotlin/collections/Collection|?): R|T| public constructor(): R|test/Max| diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt index f49cdea2610..0a0e127e3eb 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt @@ -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()?.classId != StandardClassIds.Any + } + + if (meaningfulBounds.isNotEmpty()) { print(" : ") - typeParameter.bounds.renderSeparated() + meaningfulBounds.renderSeparated() } }