FIR IDE: allow using some light classes stuff from EDT :(
IJ Platform can call light classes methods from EDT from random places
This commit is contained in:
+4
-1
@@ -39,6 +39,8 @@ import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||
import org.jetbrains.kotlin.asJava.classes.cannotModify
|
||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||
import org.jetbrains.kotlin.idea.frontend.api.HackToForceAllowRunningAnalyzeOnEDT
|
||||
import org.jetbrains.kotlin.idea.frontend.api.hackyAllowRunningOnEdt
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.concurrent.locks.ReentrantLock
|
||||
import org.jetbrains.kotlin.trackers.createProjectWideOutOfBlockModificationTracker
|
||||
@@ -51,9 +53,10 @@ abstract class FirLightClassBase protected constructor(manager: PsiManager) : Li
|
||||
get() = invalidAccess()
|
||||
|
||||
private class FirLightClassesLazyCreator(private val project: Project) : KotlinClassInnerStuffCache.LazyCreator() {
|
||||
@OptIn(HackToForceAllowRunningAnalyzeOnEDT::class)
|
||||
override fun <T : Any> get(initializer: () -> T, dependencies: List<Any>): Lazy<T> = lazyPub {
|
||||
PsiCachedValueImpl(PsiManager.getInstance(project)) {
|
||||
CachedValueProvider.Result.create(initializer(), dependencies)
|
||||
CachedValueProvider.Result.create(hackyAllowRunningOnEdt(initializer) , dependencies)
|
||||
}.value ?: error("initializer cannot return null")
|
||||
}
|
||||
}
|
||||
|
||||
+4
-1
@@ -19,8 +19,10 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
|
||||
import org.jetbrains.kotlin.idea.asJava.*
|
||||
import org.jetbrains.kotlin.idea.frontend.api.HackToForceAllowRunningAnalyzeOnEDT
|
||||
import org.jetbrains.kotlin.idea.frontend.api.analyze
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.analyzeWithSymbolAsContext
|
||||
import org.jetbrains.kotlin.idea.frontend.api.hackyAllowRunningOnEdt
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtCommonSymbolModality
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolVisibility
|
||||
@@ -44,7 +46,8 @@ fun getOrCreateFirLightClass(classOrObject: KtClassOrObject): KtLightClass? =
|
||||
)
|
||||
}
|
||||
|
||||
fun createFirLightClassNoCache(classOrObject: KtClassOrObject): KtLightClass? {
|
||||
@OptIn(HackToForceAllowRunningAnalyzeOnEDT::class)
|
||||
fun createFirLightClassNoCache(classOrObject: KtClassOrObject): KtLightClass? = hackyAllowRunningOnEdt {
|
||||
|
||||
val containingFile = classOrObject.containingFile
|
||||
if (containingFile is KtCodeFragment) {
|
||||
|
||||
Reference in New Issue
Block a user