From f775778efa782b8f34595577753eb92efb239dfb Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Fri, 18 Nov 2022 18:04:33 +0100 Subject: [PATCH] [Analysis API FIR] fix containing declaration for value parameter now it should also work for non-source declarations --- .../KtFirSymbolContainingDeclarationProvider.kt | 3 +-- .../impl/base/test/cases/components/testUtils.kt | 13 +++++++++++++ .../delegation.txt | 3 ++- .../intersectionOverride.txt | 1 + .../subsitutionOverride.txt | 3 +++ .../propertyWithAnnotations.pretty.txt | 2 +- 6 files changed, 21 insertions(+), 4 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolContainingDeclarationProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolContainingDeclarationProvider.kt index a4e3f239c2e..9181db0e229 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolContainingDeclarationProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolContainingDeclarationProvider.kt @@ -54,8 +54,7 @@ internal class KtFirSymbolContainingDeclarationProvider( } is KtValueParameterSymbol -> { - // todo that does not work for parameters not from source, corresponding info should be added to the fir tree - getParentSymbolByPsi() + firSymbolBuilder.callableBuilder.buildCallableSymbol(symbol.firSymbol.fir.containingFunctionSymbol) } is KtCallableSymbol -> { diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/testUtils.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/testUtils.kt index 0b22b473845..bf40e44649d 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/testUtils.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/testUtils.kt @@ -152,6 +152,7 @@ internal fun KtAnalysisSession.compareCalls(call1: KtCall, call2: KtCall): Int { context(KtAnalysisSession) internal fun renderScopeWithParentDeclarations(scope: KtScope): String = prettyPrint { fun KtSymbol.qualifiedNameString() = when (this) { + is KtConstructorSymbol -> " ${containingClassIdIfNonLocal?.asString()}" is KtClassLikeSymbol -> classIdIfNonLocal!!.asString() is KtCallableSymbol -> callableIdIfNonLocal!!.toString() else -> error("unknown symbol $this") @@ -179,5 +180,17 @@ internal fun renderScopeWithParentDeclarations(scope: KtScope): String = prettyP } } } + + if (symbol is KtFunctionLikeSymbol && symbol.valueParameters.isNotEmpty()) { + appendLine() + withIndent { + printCollection(symbol.valueParameters, separator = "\n") { typeParameter -> + val containingDeclarationForValueParameter = typeParameter.getContainingSymbol() + append(typeParameter.render(renderingOptions)) + append(" from ") + append(containingDeclarationForValueParameter?.qualifiedNameString()) + } + } + } } } \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationByDelegatedMemberScope/delegation.txt b/analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationByDelegatedMemberScope/delegation.txt index b3b9950798c..7074268c62c 100644 --- a/analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationByDelegatedMemberScope/delegation.txt +++ b/analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationByDelegatedMemberScope/delegation.txt @@ -4,4 +4,5 @@ fun y() fromClass BB val c: Int fromClass BB -constructor(a: A) fromClass BB \ No newline at end of file +constructor(a: A) fromClass BB + a: A from BB \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationFromMemberScope/intersectionOverride.txt b/analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationFromMemberScope/intersectionOverride.txt index 758afcff8d8..edc6f4fde47 100644 --- a/analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationFromMemberScope/intersectionOverride.txt +++ b/analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationFromMemberScope/intersectionOverride.txt @@ -2,6 +2,7 @@ fun foo() fromClass Y T from /Y.foo fun equals(other: Any?): Boolean fromClass kotlin/Any + other: Any? from kotlin/Any.equals fun hashCode(): Int fromClass kotlin/Any diff --git a/analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationFromMemberScope/subsitutionOverride.txt b/analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationFromMemberScope/subsitutionOverride.txt index 74c321dd46f..401510c8877 100644 --- a/analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationFromMemberScope/subsitutionOverride.txt +++ b/analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationFromMemberScope/subsitutionOverride.txt @@ -1,13 +1,16 @@ fun foo1(t: Int): Int fromClass Y S from /Y.foo1 + t: Int from /Y.foo1 fun foo2(t: Int) fromClass Y Q from /Y.foo2 + t: Int from /Y.foo2 fun foo3() fromClass X U from /X.foo3 fun equals(other: Any?): Boolean fromClass kotlin/Any + other: Any? from kotlin/Any.equals fun hashCode(): Int fromClass kotlin/Any diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/propertyWithAnnotations.pretty.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/propertyWithAnnotations.pretty.txt index 95042adef1b..a036d6b2734 100644 --- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/propertyWithAnnotations.pretty.txt +++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/propertyWithAnnotations.pretty.txt @@ -4,4 +4,4 @@ var prop: kotlin.Int @GetAnnotation get() @SetAnnotation - set(@setparam:SetparamAnnotation value: kotlin.Int) \ No newline at end of file + set(@SetparamAnnotation value: kotlin.Int) \ No newline at end of file