[Analysis API] Rewrite PsiMember.callableSymbol for constructors

Before that change, the method returned null for constructors.
This is because NamedClassSymbol.combinedDeclaredMemberScope.callables doesn't contain constructor symbols.

^KT-70243 fixed
diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KaFirJavaInteroperabilityComponent.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KaFirJavaInteroperabilityComponent.kt
index 3f20415..a8f673e 100644
--- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KaFirJavaInteroperabilityComponent.kt
+++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KaFirJavaInteroperabilityComponent.kt
@@ -316,11 +316,16 @@
     override val PsiMember.callableSymbol: KaCallableSymbol?
         get() = withValidityAssertion {
             if (this !is PsiMethod && this !is PsiField) return null
-            val name = name?.let(Name::identifier) ?: return null
             val containingClass = containingClass ?: return null
             val classSymbol = containingClass.namedClassSymbol ?: return null
             return with(analysisSession) {
-                classSymbol.combinedDeclaredMemberScope.callables(name).firstOrNull { it.psi == this@callableSymbol }
+                val combinedMemberScope = classSymbol.combinedDeclaredMemberScope
+                if ((this@callableSymbol as? PsiMethod)?.isConstructor == true) {
+                    combinedMemberScope.constructors.firstOrNull { it.psi == this@callableSymbol }
+                } else {
+                    val name = name?.let(Name::identifier) ?: return null
+                    combinedMemberScope.callables(name).firstOrNull { it.psi == this@callableSymbol }
+                }
             }
         }
 
diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated.java
index 554cb45..655031b 100644
--- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated.java
+++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated.java
@@ -46,6 +46,12 @@
   }
 
   @Test
+  @TestMetadata("javaConstructor.kt")
+  public void testJavaConstructor() {
+    runTest("analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaConstructor.kt");
+  }
+
+  @Test
   @TestMetadata("javaField.kt")
   public void testJavaField() {
     runTest("analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaField.kt");
diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated.java
index 553bba2..f3116fd 100644
--- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated.java
+++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated.java
@@ -46,6 +46,12 @@
   }
 
   @Test
+  @TestMetadata("javaConstructor.kt")
+  public void testJavaConstructor() {
+    runTest("analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaConstructor.kt");
+  }
+
+  @Test
   @TestMetadata("javaField.kt")
   public void testJavaField() {
     runTest("analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaField.kt");
diff --git a/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaConstructor.kt b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaConstructor.kt
new file mode 100644
index 0000000..8dd31c8
--- /dev/null
+++ b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaConstructor.kt
@@ -0,0 +1,13 @@
+// FILE: main.kt
+fun some() {
+    JavaCla<caret>ss(5)
+}
+
+// FILE: JavaClass.java
+public class JavaClass {
+    public Integer count = 0;
+
+    JavaClass(int _count) {
+        count = _count;
+    }
+}
diff --git a/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaConstructor.pretty.txt b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaConstructor.pretty.txt
new file mode 100644
index 0000000..64cd4af
--- /dev/null
+++ b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaConstructor.pretty.txt
@@ -0,0 +1 @@
+constructor(_count: kotlin.Int)
diff --git a/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaConstructor.txt b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaConstructor.txt
new file mode 100644
index 0000000..c4c1d94
--- /dev/null
+++ b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaConstructor.txt
@@ -0,0 +1,56 @@
+KaConstructorSymbol:
+  annotations: []
+  callableId: null
+  compilerVisibility: PackageVisibility
+  containingClassId: JavaClass
+  contextReceivers: []
+  hasStableParameterNames: false
+  isActual: false
+  isExpect: false
+  isExtension: false
+  isPrimary: false
+  location: CLASS
+  modality: FINAL
+  origin: JAVA_SOURCE
+  receiverParameter: null
+  returnType: KaUsualClassType:
+    annotations: []
+    typeArguments: []
+    type: JavaClass
+  typeParameters: []
+  valueParameters: [
+    KaValueParameterSymbol:
+      annotations: []
+      callableId: null
+      compilerVisibility: Public
+      contextReceivers: []
+      generatedPrimaryConstructorProperty: null
+      hasDefaultValue: false
+      isActual: false
+      isCrossinline: false
+      isExpect: false
+      isExtension: false
+      isImplicitLambdaParameter: false
+      isNoinline: false
+      isVal: true
+      isVararg: false
+      location: LOCAL
+      modality: FINAL
+      name: _count
+      origin: JAVA_SOURCE
+      receiverParameter: null
+      returnType: KaUsualClassType:
+        annotations: []
+        typeArguments: []
+        type: kotlin/Int
+      visibility: PUBLIC
+      getContainingFileSymbol: null
+      getContainingJvmClassName: JavaClass
+      getContainingModule: KaSourceModule "Sources of main"
+      deprecationStatus: null
+  ]
+  visibility: PACKAGE_PRIVATE
+  getContainingFileSymbol: null
+  getContainingJvmClassName: JavaClass
+  getContainingModule: KaSourceModule "Sources of main"
+  deprecationStatus: null