diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliKotlinAsJavaSupport.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliKotlinAsJavaSupport.kt index 2a3fd73f632..8adaa5e5555 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliKotlinAsJavaSupport.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliKotlinAsJavaSupport.kt @@ -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 { return ResolveSessionUtils.getClassDescriptorsByFqName(traceHolder.module, fqName).mapNotNull { diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KotlinLightClassFactory.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KotlinLightClassFactory.kt index 2be4f189053..361168d0500 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KotlinLightClassFactory.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KotlinLightClassFactory.kt @@ -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) + } + } } \ No newline at end of file diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForScript.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForScript.kt index 91dc5361819..e5f96452bcc 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForScript.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForScript.kt @@ -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) - } - } - } } diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt index 496aad155e2..2e1a9085a08 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt @@ -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 }