Optimize script definitions handling
Loading script configs only from project root dir Optimize script definition retrieval in the KtScript
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user