diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/KtScript.java b/compiler/frontend/src/org/jetbrains/kotlin/psi/KtScript.java index 41c3ec3d7c0..1eb87ae56c4 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/KtScript.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/KtScript.java @@ -30,6 +30,19 @@ import java.util.List; public class KtScript extends KtNamedDeclarationStub implements KtDeclarationContainer { + private KotlinScriptDefinition kotlinScriptDefinitionField = null; + private boolean kotlinScriptDefinitionInitialized = false; + + // make it a simple lazy value after converting to kotlin + private KotlinScriptDefinition getKotlinScriptDefinition() { + if (!kotlinScriptDefinitionInitialized) { + kotlinScriptDefinitionField = GetScriptDefinitionKt.getScriptDefinition(getContainingKtFile()); + kotlinScriptDefinitionInitialized = true; + assert kotlinScriptDefinitionField != null : "Should not parse a script without definition"; + } + return kotlinScriptDefinitionField; + } + public KtScript(@NotNull ASTNode node) { super(node); } @@ -46,10 +59,7 @@ public class KtScript extends KtNamedDeclarationStub implement return stub.getFqName(); } KtFile containingKtFile = getContainingKtFile(); - KotlinScriptDefinition kotlinScriptDefinition = - GetScriptDefinitionKt.getScriptDefinition(containingKtFile); - assert kotlinScriptDefinition != null : "Should not parse a script without definition"; - return containingKtFile.getPackageFqName().child(kotlinScriptDefinition.getScriptName(this)); + return containingKtFile.getPackageFqName().child(getKotlinScriptDefinition().getScriptName(this)); } @Override diff --git a/compiler/frontend/src/org/jetbrains/kotlin/script/scriptConfig.kt b/compiler/frontend/src/org/jetbrains/kotlin/script/scriptConfig.kt index 3acd8f55f13..fab232bf6d6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/script/scriptConfig.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/script/scriptConfig.kt @@ -36,8 +36,8 @@ fun isScriptDefinitionConfigFile(file: java.io.File) = file.isFile && file.name. fun isScriptDefinitionConfigFile(file: com.intellij.openapi.vfs.VirtualFile) = !file.isDirectory && file.name.endsWith(org.jetbrains.kotlin.script.SCRIPT_CONFIG_FILE_EXTENSION) fun loadScriptConfigsFromProjectRoot(projectRoot: java.io.File): List = - projectRoot.walk().filter(::isScriptDefinitionConfigFile).toList() - .flatMap { loadScriptConfigs(it) } + projectRoot.listFiles { it -> isScriptDefinitionConfigFile(it) }.toList() + .flatMap { loadScriptConfigs(it) } fun loadScriptConfigs(configFile: File): List = JDOMUtil.loadDocument(configFile).rootElement.children.mapNotNull {