[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:
committed by
Space Team
parent
a41d36edba
commit
c114cb67cb
@@ -17,10 +17,12 @@
|
||||
package org.jetbrains.kotlin.load.java
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiPackage
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||
import org.jetbrains.kotlin.load.java.structure.JavaPackage
|
||||
import org.jetbrains.kotlin.load.java.structure.impl.JavaPackageImpl
|
||||
import org.jetbrains.kotlin.load.java.structure.impl.source.JavaElementSourceFactory
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.resolve.jvm.KotlinJavaPsiFacade
|
||||
import javax.inject.Inject
|
||||
@@ -49,7 +51,17 @@ class JavaClassFinderImpl : AbstractJavaClassFinder() {
|
||||
}
|
||||
|
||||
override fun findPackage(fqName: FqName, mayHaveAnnotations: Boolean): JavaPackage? {
|
||||
return javaFacade.findPackage(fqName.asString(), javaSearchScope)?.let { JavaPackageImpl(it, javaSearchScope, mayHaveAnnotations) }
|
||||
return javaFacade.findPackage(fqName.asString(), javaSearchScope)
|
||||
?.let { createJavaPackage(it, mayHaveAnnotations) }
|
||||
}
|
||||
|
||||
private fun createJavaPackage(
|
||||
psiPackage: PsiPackage,
|
||||
mayHaveAnnotations: Boolean,
|
||||
): JavaPackageImpl {
|
||||
val project = javaFacade.project
|
||||
val sourceFactory = JavaElementSourceFactory.getInstance(project)
|
||||
return JavaPackageImpl(sourceFactory.createPsiSource(psiPackage), javaSearchScope, mayHaveAnnotations)
|
||||
}
|
||||
|
||||
override fun knownClassNamesInPackage(packageFqName: FqName): Set<String>? {
|
||||
|
||||
+7
-2
@@ -27,10 +27,11 @@ import org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryClassSigna
|
||||
import org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryJavaAnnotation
|
||||
import org.jetbrains.kotlin.load.java.structure.impl.classFiles.ClassifierResolutionContext
|
||||
import org.jetbrains.kotlin.load.java.structure.impl.convert
|
||||
import org.jetbrains.kotlin.load.java.structure.impl.source.JavaElementSourceFactory
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.resolve.jvm.KotlinCliJavaFileManager
|
||||
import org.jetbrains.org.objectweb.asm.*
|
||||
import org.jetbrains.kotlin.utils.compact
|
||||
import org.jetbrains.org.objectweb.asm.*
|
||||
import org.jetbrains.org.objectweb.asm.Opcodes.ACC_TRANSITIVE
|
||||
import java.io.IOException
|
||||
|
||||
@@ -59,7 +60,11 @@ class JavaModuleInfo(
|
||||
Exports(FqName(packageName), statement.moduleNames)
|
||||
}
|
||||
},
|
||||
psiJavaModule.annotations.convert(::JavaAnnotationImpl)
|
||||
psiJavaModule.annotations.convert {
|
||||
JavaAnnotationImpl(
|
||||
JavaElementSourceFactory.getInstance(psiJavaModule.project).createPsiSource(it)
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
fun read(file: VirtualFile, javaFileManager: KotlinCliJavaFileManager, searchScope: GlobalSearchScope): JavaModuleInfo? {
|
||||
|
||||
Reference in New Issue
Block a user