[Java resolution] make it possible to provide custom source element for JavaElement

This is needed to allow using PSI pointers in IDE in JavaElement.
`JavaElement`s are reused between read actions,
so underlying PSI elements might be invalidated when using hard PSI references

^KT-58194
This commit is contained in:
Ilya Kirillov
2023-05-08 17:49:54 +02:00
committed by Space Team
parent a41d36edba
commit c114cb67cb
31 changed files with 330 additions and 148 deletions
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.fir.java.modality
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.load.java.structure.JavaClass
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
import org.jetbrains.kotlin.load.java.structure.impl.source.JavaElementSourceFactory
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name
@@ -46,7 +47,7 @@ internal class KtFirPsiJavaClassSymbol(
/**
* [javaClass] is used to defer some properties to the compiler's view of a Java class.
*/
private val javaClass: JavaClass = JavaClassImpl(psi)
private val javaClass: JavaClass = JavaClassImpl(JavaElementSourceFactory.getInstance(analysisSession.project).createPsiSource(psi))
override val name: Name = withValidityAssertion { javaClass.name }