[FIR] Set Java constructor source to Java class's when it's implicit

When there are no declared constructors in Java class, make
javaConstructor's source element point to the class declaration,
making it possible to navigate from constructor's invocation there.

^KTIJ-22360 Fixed
This commit is contained in:
Artem Vasilev
2022-11-17 13:18:30 +00:00
committed by Space Team
parent f05fe1d46d
commit 02484baf07
@@ -640,7 +640,7 @@ abstract class FirJavaFacade(
): FirJavaConstructor { ): FirJavaConstructor {
val constructorSymbol = FirConstructorSymbol(constructorId) val constructorSymbol = FirConstructorSymbol(constructorId)
return buildJavaConstructor { return buildJavaConstructor {
source = javaConstructor?.toSourceElement() source = javaConstructor?.toSourceElement() ?: javaClass.toSourceElement(KtFakeSourceElementKind.ImplicitConstructor)
this.moduleData = moduleData this.moduleData = moduleData
isFromSource = javaClass.isFromSource isFromSource = javaClass.isFromSource
symbol = constructorSymbol symbol = constructorSymbol
@@ -687,9 +687,7 @@ abstract class FirJavaFacade(
moduleData: FirModuleData, moduleData: FirModuleData,
): FirJavaConstructor { ): FirJavaConstructor {
return buildJavaConstructor { return buildJavaConstructor {
source = (javaClass as? JavaElementImpl<*>) source = javaClass.toSourceElement(KtFakeSourceElementKind.ImplicitConstructor)
?.psi
?.toKtPsiSourceElement(KtFakeSourceElementKind.ImplicitConstructor) as? KtFakeSourceElement
this.moduleData = moduleData this.moduleData = moduleData
isFromSource = javaClass.isFromSource isFromSource = javaClass.isFromSource
symbol = FirConstructorSymbol(constructorId) symbol = FirConstructorSymbol(constructorId)