[Analysis API FIR] fix containing declaration for value parameter

now it should also work for non-source declarations
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 a4e3f23..9181db0 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 @@
             }
 
             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 0b22b47..bf40e44 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 @@
 context(KtAnalysisSession)
 internal fun renderScopeWithParentDeclarations(scope: KtScope): String = prettyPrint {
     fun KtSymbol.qualifiedNameString() = when (this) {
+        is KtConstructorSymbol -> "<constructor> ${containingClassIdIfNonLocal?.asString()}"
         is KtClassLikeSymbol -> classIdIfNonLocal!!.asString()
         is KtCallableSymbol -> callableIdIfNonLocal!!.toString()
         else -> error("unknown symbol $this")
@@ -179,5 +180,17 @@
                 }
             }
         }
+
+        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 b3b9950..7074268 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 @@
 
 val c: Int fromClass BB
 
-constructor(a: A<Int>) fromClass BB
\ No newline at end of file
+constructor(a: A<Int>) fromClass BB
+  a: A<Int> from <constructor> 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 758afcf..edc6f4f 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 @@
   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 74c321d..401510c 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 <S> foo1(t: Int): Int fromClass Y
   S from /Y.foo1
+  t: Int from /Y.foo1
 
 fun <Q> foo2(t: Int) fromClass Y
   Q from /Y.foo2
+  t: Int from /Y.foo2
 
 fun <U> 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 95042ad..a036d6b 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 @@
   @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