From ba359fb296423c125b7e92973c857ecb26f03244 Mon Sep 17 00:00:00 2001 From: Tianyu Geng Date: Thu, 7 Oct 2021 10:56:09 -0700 Subject: [PATCH] FIR IDE: render captured type --- .../api/fir/renderer/ConeTypeIdeRenderer.kt | 9 +++++++-- .../fir/components/AbstractGetSuperTypesTest.kt | 3 ++- .../KtSymbolDeclarationRendererProvider.kt | 2 +- .../components/getSuperTypes/contravariant.txt | 14 +++++++------- .../components/getSuperTypes/covariant.txt | 14 +++++++------- .../testData/components/getSuperTypes/star.txt | 14 +++++++------- 6 files changed, 31 insertions(+), 25 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/renderer/ConeTypeIdeRenderer.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/renderer/ConeTypeIdeRenderer.kt index 8424aef2fea..ec23bc466ce 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/renderer/ConeTypeIdeRenderer.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/renderer/ConeTypeIdeRenderer.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.analysis.api.fir.renderer +import org.jetbrains.kotlin.analysis.api.components.KtTypeRendererOptions +import org.jetbrains.kotlin.analysis.low.level.api.fir.api.tryCollectDesignation import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.containingClass import org.jetbrains.kotlin.fir.containingClassForLocal @@ -20,8 +22,6 @@ import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.LookupTagInternals import org.jetbrains.kotlin.fir.types.* -import org.jetbrains.kotlin.analysis.low.level.api.fir.api.tryCollectDesignation -import org.jetbrains.kotlin.analysis.api.components.KtTypeRendererOptions import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.renderer.render @@ -86,6 +86,11 @@ internal class ConeTypeIdeRenderer( renderAnnotationList(annotations) append(renderFlexibleType(renderType(type.lowerBound), renderType(type.upperBound))) } + is ConeCapturedType -> { + renderAnnotationList(annotations) + append(type.render()) + renderNullability(type.type) + } else -> appendError("Unexpected cone type ${type::class.qualifiedName}") } } diff --git a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/AbstractGetSuperTypesTest.kt b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/AbstractGetSuperTypesTest.kt index f48bffd1225..d497c5cd6a3 100644 --- a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/AbstractGetSuperTypesTest.kt +++ b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/AbstractGetSuperTypesTest.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.analysis.api.fir.components import org.jetbrains.kotlin.analysis.api.analyse +import org.jetbrains.kotlin.analysis.api.components.KtTypeRendererOptions import org.jetbrains.kotlin.analysis.api.fir.executeOnPooledThreadInReadAction import org.jetbrains.kotlin.analysis.api.fir.test.framework.AbstractHLApiSingleFileTest import org.jetbrains.kotlin.analysis.api.types.KtType @@ -31,7 +32,7 @@ abstract class AbstractGetSuperTypesTest : AbstractHLApiSingleFileTest() { fun List.print(name: String) { appendLine(name) for (type in this) { - appendLine(type.render()) + appendLine(type.render(KtTypeRendererOptions.DEFAULT)) } appendLine() } diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtSymbolDeclarationRendererProvider.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtSymbolDeclarationRendererProvider.kt index 6cdde8dc717..9472b043a73 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtSymbolDeclarationRendererProvider.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtSymbolDeclarationRendererProvider.kt @@ -30,7 +30,7 @@ public data class KtTypeRendererOptions( * When `true` will render as `UnresolvedQualifier` * When `false` will render as "ERROR_TYPE " */ - public val renderUnresolvedTypeAsResolved: Boolean = true + public val renderUnresolvedTypeAsResolved: Boolean = true, ) { public companion object { public val DEFAULT: KtTypeRendererOptions = KtTypeRendererOptions() diff --git a/analysis/analysis-api/testData/components/getSuperTypes/contravariant.txt b/analysis/analysis-api/testData/components/getSuperTypes/contravariant.txt index 03d38bb288a..633d59f3ac2 100644 --- a/analysis/analysis-api/testData/components/getSuperTypes/contravariant.txt +++ b/analysis/analysis-api/testData/components/getSuperTypes/contravariant.txt @@ -1,17 +1,17 @@ [direct super types] -kotlin.collections.List> -kotlin.collections.MutableCollection> +kotlin.collections.List +kotlin.collections.MutableCollection [approximated direct super types] kotlin.collections.List kotlin.collections.MutableCollection [all super types] -kotlin.collections.List> -kotlin.collections.MutableCollection> -kotlin.collections.Collection> -kotlin.collections.MutableIterable> -kotlin.collections.Iterable> +kotlin.collections.List +kotlin.collections.MutableCollection +kotlin.collections.Collection +kotlin.collections.MutableIterable +kotlin.collections.Iterable kotlin.Any [approximated all super types] diff --git a/analysis/analysis-api/testData/components/getSuperTypes/covariant.txt b/analysis/analysis-api/testData/components/getSuperTypes/covariant.txt index 43ae2145549..c7bf8877b83 100644 --- a/analysis/analysis-api/testData/components/getSuperTypes/covariant.txt +++ b/analysis/analysis-api/testData/components/getSuperTypes/covariant.txt @@ -1,17 +1,17 @@ [direct super types] -kotlin.collections.List> -kotlin.collections.MutableCollection> +kotlin.collections.List +kotlin.collections.MutableCollection [approximated direct super types] kotlin.collections.List kotlin.collections.MutableCollection [all super types] -kotlin.collections.List> -kotlin.collections.MutableCollection> -kotlin.collections.Collection> -kotlin.collections.MutableIterable> -kotlin.collections.Iterable> +kotlin.collections.List +kotlin.collections.MutableCollection +kotlin.collections.Collection +kotlin.collections.MutableIterable +kotlin.collections.Iterable kotlin.Any [approximated all super types] diff --git a/analysis/analysis-api/testData/components/getSuperTypes/star.txt b/analysis/analysis-api/testData/components/getSuperTypes/star.txt index 2f68e17165a..99d5c2cf515 100644 --- a/analysis/analysis-api/testData/components/getSuperTypes/star.txt +++ b/analysis/analysis-api/testData/components/getSuperTypes/star.txt @@ -1,17 +1,17 @@ [direct super types] -kotlin.collections.List> -kotlin.collections.MutableCollection> +kotlin.collections.List +kotlin.collections.MutableCollection [approximated direct super types] kotlin.collections.List kotlin.collections.MutableCollection [all super types] -kotlin.collections.List> -kotlin.collections.MutableCollection> -kotlin.collections.Collection> -kotlin.collections.MutableIterable> -kotlin.collections.Iterable> +kotlin.collections.List +kotlin.collections.MutableCollection +kotlin.collections.Collection +kotlin.collections.MutableIterable +kotlin.collections.Iterable kotlin.Any [approximated all super types]