SLC: use proper source PSI for no-arg constructor
If no-arg constructor stems from the primary constructor
(e.g., when all arguments have a default value), that primary
constructor should be used as source PSI.
Otherwise, i.e., literally default constructor, the containing class is
the source PSI.
^KT-70491 fixed
diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt
index 7e4dd46..6bf2432 100644
--- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt
+++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt
@@ -168,7 +168,11 @@
val primaryConstructor = constructors.singleOrNull { it.isPrimary }
if (primaryConstructor != null && shouldGenerateNoArgOverload(primaryConstructor, constructors)) {
result.add(
- noArgConstructor(primaryConstructor.compilerVisibility.externalDisplayName, METHOD_INDEX_FOR_NO_ARG_OVERLOAD_CTOR)
+ noArgConstructor(
+ primaryConstructor.compilerVisibility.externalDisplayName,
+ primaryConstructor.sourcePsiSafe(),
+ METHOD_INDEX_FOR_NO_ARG_OVERLOAD_CTOR
+ )
)
}
}
@@ -198,14 +202,15 @@
else -> PsiModifier.PUBLIC
}
- return noArgConstructor(visibility, METHOD_INDEX_FOR_DEFAULT_CTOR)
+ return noArgConstructor(visibility, classOrObject, METHOD_INDEX_FOR_DEFAULT_CTOR)
}
private fun SymbolLightClassBase.noArgConstructor(
visibility: String,
+ declaration: KtDeclaration?,
methodIndex: Int,
): KtLightMethod = SymbolLightNoArgConstructor(
- kotlinOrigin?.let {
+ declaration?.let {
LightMemberOriginForDeclaration(
originalElement = it,
originKind = JvmDeclarationOriginKind.OTHER,
diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/defaultParameterValueOff.fir.txt b/plugins/kapt3/kapt3-compiler/testData/converter/defaultParameterValueOff.fir.txt
index dede3b6..b2fa288 100644
--- a/plugins/kapt3/kapt3-compiler/testData/converter/defaultParameterValueOff.fir.txt
+++ b/plugins/kapt3/kapt3-compiler/testData/converter/defaultParameterValueOff.fir.txt
@@ -34,7 +34,7 @@
/**
* public final class Foo : kotlin/Any {
*
- * // signature: <init>(ZBCCSIJFDLjava/lang/String;[I[J[D[Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Class;LEm;[LEm;)V
+ * // signature: <init>(ZBCCSIJFDLjava/lang/String;[I[J[DLkotlin/Array;Ljava/lang/Class;Lkotlin/Array;LEm;Lkotlin/Array;)V
* public constructor(z: kotlin/Boolean (* = ... *), b: kotlin/Byte (* = ... *), c: kotlin/Char (* = ... *), c2: kotlin/Char (* = ... *), sh: kotlin/Short (* = ... *), i: kotlin/Int (* = ... *), l: kotlin/Long (* = ... *), f: kotlin/Float (* = ... *), d: kotlin/Double (* = ... *), s: kotlin/String (* = ... *), iarr: kotlin/IntArray (* = ... *), larr: kotlin/LongArray (* = ... *), darr: kotlin/DoubleArray (* = ... *), sarr: kotlin/Array<kotlin/String> (* = ... *), cl: java/lang/Class<*> (* = ... *), clarr: kotlin/Array<java/lang/Class<*>> (* = ... *), em: Em (* = ... *), emarr: kotlin/Array<Em> (* = ... *))
*
* // signature: foo(I)V
diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/defaultParameterValueOn.fir.txt b/plugins/kapt3/kapt3-compiler/testData/converter/defaultParameterValueOn.fir.txt
index 6a2c315..0d5767a 100644
--- a/plugins/kapt3/kapt3-compiler/testData/converter/defaultParameterValueOn.fir.txt
+++ b/plugins/kapt3/kapt3-compiler/testData/converter/defaultParameterValueOn.fir.txt
@@ -34,7 +34,7 @@
/**
* public final class Foo : kotlin/Any {
*
- * // signature: <init>(ZBCCSIJFDLjava/lang/String;[I[J[D[Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Class;LEm;[LEm;)V
+ * // signature: <init>(ZBCCSIJFDLjava/lang/String;[I[J[DLkotlin/Array;Ljava/lang/Class;Lkotlin/Array;LEm;Lkotlin/Array;)V
* public constructor(z: kotlin/Boolean (* = ... *), b: kotlin/Byte (* = ... *), c: kotlin/Char (* = ... *), c2: kotlin/Char (* = ... *), sh: kotlin/Short (* = ... *), i: kotlin/Int (* = ... *), l: kotlin/Long (* = ... *), f: kotlin/Float (* = ... *), d: kotlin/Double (* = ... *), s: kotlin/String (* = ... *), iarr: kotlin/IntArray (* = ... *), larr: kotlin/LongArray (* = ... *), darr: kotlin/DoubleArray (* = ... *), sarr: kotlin/Array<kotlin/String> (* = ... *), cl: java/lang/Class<*> (* = ... *), clarr: kotlin/Array<java/lang/Class<*>> (* = ... *), em: Em (* = ... *), emarr: kotlin/Array<Em> (* = ... *))
*
* // signature: foo(I)V