Optimize script definitions handling

Loading script configs only from project root dir
Optimize script definition retrieval in the KtScript
This commit is contained in:
Ilya Chernikov
2016-06-06 16:43:11 +02:00
parent 656fcc9775
commit 3393d7b7d2
2 changed files with 16 additions and 6 deletions
@@ -30,6 +30,19 @@ import java.util.List;
public class KtScript extends KtNamedDeclarationStub<KotlinScriptStub> 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<KotlinScriptStub> 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
@@ -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<org.jetbrains.kotlin.script.KotlinScriptConfig> =
projectRoot.walk().filter(::isScriptDefinitionConfigFile).toList()
.flatMap { loadScriptConfigs(it) }
projectRoot.listFiles { it -> isScriptDefinitionConfigFile(it) }.toList()
.flatMap { loadScriptConfigs(it) }
fun loadScriptConfigs(configFile: File): List<KotlinScriptConfig> =
JDOMUtil.loadDocument(configFile).rootElement.children.mapNotNull {