From a0f4c674f5f1664e9c8c522ec1b29d1a4e4cc2b8 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Thu, 17 Nov 2022 07:55:22 +0100 Subject: [PATCH] [AA] KtCallableReceiverRenderer: add annotations renderer ^KT-54417 --- .../renderers/KtAnnotationUseSiteTargetRenderer.kt | 5 ++++- .../callables/KtCallableReceiverRenderer.kt | 13 ++++++++++--- .../functionWithReceiverAnnotation.pretty.txt | 2 +- .../propertyWithReceiverAnnotation.pretty.txt | 2 +- ...functionReceiverParameter.descriptors.pretty.txt | 2 +- ...propertyReceiverParameter.descriptors.pretty.txt | 2 +- 6 files changed, 18 insertions(+), 8 deletions(-) diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/base/annotations/renderers/KtAnnotationUseSiteTargetRenderer.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/base/annotations/renderers/KtAnnotationUseSiteTargetRenderer.kt index 8be4527f903..178872c5b29 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/base/annotations/renderers/KtAnnotationUseSiteTargetRenderer.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/base/annotations/renderers/KtAnnotationUseSiteTargetRenderer.kt @@ -35,8 +35,9 @@ public interface KtAnnotationUseSiteTargetRenderer { public object WITH_NON_DEFAULT_USE_SITE : KtAnnotationUseSiteTargetRenderer { context(KtAnalysisSession, KtAnnotationRenderer) override fun renderUseSiteTarget(annotation: KtAnnotationApplication, owner: KtAnnotated, printer: PrettyPrinter) { - if (owner !is KtCallableSymbol) return val print = when (owner) { + is KtReceiverParameterSymbol -> true + !is KtCallableSymbol -> return is KtAnonymousFunctionSymbol -> true is KtConstructorSymbol -> true is KtFunctionSymbol -> true @@ -52,7 +53,9 @@ public interface KtAnnotationUseSiteTargetRenderer { is KtLocalVariableSymbol -> true is KtKotlinPropertySymbol -> annotation.useSiteTarget != AnnotationUseSiteTarget.PROPERTY is KtSyntheticJavaPropertySymbol -> annotation.useSiteTarget != AnnotationUseSiteTarget.PROPERTY + else -> return } + if (print) { WITH_USES_SITE.renderUseSiteTarget(annotation, owner, printer) } diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/renderers/callables/KtCallableReceiverRenderer.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/renderers/callables/KtCallableReceiverRenderer.kt index 4f3b8ea4f6b..d372afa30ff 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/renderers/callables/KtCallableReceiverRenderer.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/renderers/callables/KtCallableReceiverRenderer.kt @@ -17,9 +17,16 @@ public interface KtCallableReceiverRenderer { public object AS_TYPE_WITH_IN_APPROXIMATION : KtCallableReceiverRenderer { context(KtAnalysisSession, KtDeclarationRenderer) - override fun renderReceiver(symbol: KtReceiverParameterSymbol, printer: PrettyPrinter) { - val receiverType = declarationTypeApproximator.approximateType(symbol.type, Variance.IN_VARIANCE) - typeRenderer.renderType(receiverType, printer) + override fun renderReceiver(symbol: KtReceiverParameterSymbol, printer: PrettyPrinter): Unit = printer { + " ".separated( + { + annotationRenderer.renderAnnotations(symbol, printer) + }, + { + val receiverType = declarationTypeApproximator.approximateType(symbol.type, Variance.IN_VARIANCE) + typeRenderer.renderType(receiverType, printer) + }, + ) } } } diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/functionWithReceiverAnnotation.pretty.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/functionWithReceiverAnnotation.pretty.txt index 33ce30fa3d8..51b809fea33 100644 --- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/functionWithReceiverAnnotation.pretty.txt +++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/functionWithReceiverAnnotation.pretty.txt @@ -1 +1 @@ -fun @ReceiverTypeAnnotation kotlin.Int.foo() \ No newline at end of file +fun @receiver:ReceiverAnnotation @ReceiverTypeAnnotation kotlin.Int.foo() \ No newline at end of file diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/propertyWithReceiverAnnotation.pretty.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/propertyWithReceiverAnnotation.pretty.txt index 2cf64df2849..91b2ebadfff 100644 --- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/propertyWithReceiverAnnotation.pretty.txt +++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/propertyWithReceiverAnnotation.pretty.txt @@ -1,2 +1,2 @@ -val @ReceiverTypeAnnotation kotlin.Long.prop: kotlin.Boolean +val @receiver:ReceiverAnnotation @ReceiverTypeAnnotation kotlin.Long.prop: kotlin.Boolean get() \ No newline at end of file diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/functionReceiverParameter.descriptors.pretty.txt b/analysis/analysis-api/testData/symbols/symbolByReference/functionReceiverParameter.descriptors.pretty.txt index 33ce30fa3d8..51b809fea33 100644 --- a/analysis/analysis-api/testData/symbols/symbolByReference/functionReceiverParameter.descriptors.pretty.txt +++ b/analysis/analysis-api/testData/symbols/symbolByReference/functionReceiverParameter.descriptors.pretty.txt @@ -1 +1 @@ -fun @ReceiverTypeAnnotation kotlin.Int.foo() \ No newline at end of file +fun @receiver:ReceiverAnnotation @ReceiverTypeAnnotation kotlin.Int.foo() \ No newline at end of file diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/propertyReceiverParameter.descriptors.pretty.txt b/analysis/analysis-api/testData/symbols/symbolByReference/propertyReceiverParameter.descriptors.pretty.txt index 2cf64df2849..91b2ebadfff 100644 --- a/analysis/analysis-api/testData/symbols/symbolByReference/propertyReceiverParameter.descriptors.pretty.txt +++ b/analysis/analysis-api/testData/symbols/symbolByReference/propertyReceiverParameter.descriptors.pretty.txt @@ -1,2 +1,2 @@ -val @ReceiverTypeAnnotation kotlin.Long.prop: kotlin.Boolean +val @receiver:ReceiverAnnotation @ReceiverTypeAnnotation kotlin.Long.prop: kotlin.Boolean get() \ No newline at end of file