[light classes] move script creation logic to KotlinLightClassFactory
^KT-53097
This commit is contained in:
@@ -110,7 +110,7 @@ class CliKotlinAsJavaSupport(
|
||||
|
||||
override fun getLightClass(classOrObject: KtClassOrObject): KtLightClass? = KotlinLightClassFactory.createClass(classOrObject)
|
||||
|
||||
override fun getLightClassForScript(script: KtScript): KtLightClassForScript? = KtLightClassForScript.create(script)
|
||||
override fun getLightClassForScript(script: KtScript): KtLightClassForScript? = KotlinLightClassFactory.createScript(script)
|
||||
|
||||
override fun findClassOrObjectDeclarations(fqName: FqName, searchScope: GlobalSearchScope): Collection<KtClassOrObject> {
|
||||
return ResolveSessionUtils.getClassDescriptorsByFqName(traceHolder.module, fqName).mapNotNull {
|
||||
|
||||
+21
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtCodeFragment
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtScript
|
||||
|
||||
object KotlinLightClassFactory {
|
||||
fun createClass(classOrObject: KtClassOrObject): KtLightClassForSourceDeclaration? =
|
||||
@@ -77,4 +78,24 @@ object KotlinLightClassFactory {
|
||||
createUltraLightClassForFacade(manager, facadeClassFqName, listOf(file)) ?: error { "Unable to create UL class for facade" }
|
||||
}
|
||||
}
|
||||
|
||||
fun createScript(script: KtScript): KtLightClassForScript? =
|
||||
CachedValuesManager.getCachedValue(script) {
|
||||
CachedValueProvider.Result.create(
|
||||
createScriptNoCache(script),
|
||||
KotlinModificationTrackerService.getInstance(script.project).outOfBlockModificationTracker,
|
||||
)
|
||||
}
|
||||
|
||||
fun createScriptNoCache(script: KtScript): KtLightClassForScript? {
|
||||
val containingFile = script.containingFile
|
||||
if (containingFile is KtCodeFragment) {
|
||||
// Avoid building light classes for code fragments
|
||||
return null
|
||||
}
|
||||
|
||||
return LightClassGenerationSupport.getInstance(script.project).run {
|
||||
createUltraLightClassForScript(script)
|
||||
}
|
||||
}
|
||||
}
|
||||
-28
@@ -9,18 +9,13 @@ import com.intellij.psi.*
|
||||
import com.intellij.psi.impl.PsiSuperMethodImplUtil
|
||||
import com.intellij.psi.impl.light.LightEmptyImplementsList
|
||||
import com.intellij.psi.impl.light.LightModifierList
|
||||
import com.intellij.psi.util.CachedValueProvider
|
||||
import com.intellij.psi.util.CachedValuesManager
|
||||
import com.intellij.util.IncorrectOperationException
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService
|
||||
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
||||
import org.jetbrains.kotlin.asJava.elements.FakeFileForLightClass
|
||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtCodeFragment
|
||||
import org.jetbrains.kotlin.psi.KtScript
|
||||
import javax.swing.Icon
|
||||
|
||||
@@ -157,27 +152,4 @@ abstract class KtLightClassForScript(val script: KtScript) : KtLightClassBase(sc
|
||||
}
|
||||
|
||||
override fun toString() = "${KtLightClassForScript::class.java.simpleName}:${script.fqName}"
|
||||
|
||||
companion object {
|
||||
fun create(script: KtScript): KtLightClassForScript? =
|
||||
CachedValuesManager.getCachedValue(script) {
|
||||
CachedValueProvider.Result
|
||||
.create(
|
||||
createNoCache(script),
|
||||
KotlinModificationTrackerService.getInstance(script.project).outOfBlockModificationTracker,
|
||||
)
|
||||
}
|
||||
|
||||
fun createNoCache(script: KtScript): KtLightClassForScript? {
|
||||
val containingFile = script.containingFile
|
||||
if (containingFile is KtCodeFragment) {
|
||||
// Avoid building light classes for code fragments
|
||||
return null
|
||||
}
|
||||
|
||||
return LightClassGenerationSupport.getInstance(script.project).run {
|
||||
createUltraLightClassForScript(script)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -489,7 +489,7 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor
|
||||
|
||||
val containingBlock = classOrObject.parent as? KtBlockExpression
|
||||
val containingScript = containingBlock?.parent as? KtScript
|
||||
containingScript?.let { return KtLightClassForScript.create(it) }
|
||||
containingScript?.let { return KotlinLightClassFactory.createScript(it) }
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user