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 {
|
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) {
|
public KtScript(@NotNull ASTNode node) {
|
||||||
super(node);
|
super(node);
|
||||||
}
|
}
|
||||||
@@ -46,10 +59,7 @@ public class KtScript extends KtNamedDeclarationStub<KotlinScriptStub> implement
|
|||||||
return stub.getFqName();
|
return stub.getFqName();
|
||||||
}
|
}
|
||||||
KtFile containingKtFile = getContainingKtFile();
|
KtFile containingKtFile = getContainingKtFile();
|
||||||
KotlinScriptDefinition kotlinScriptDefinition =
|
return containingKtFile.getPackageFqName().child(getKotlinScriptDefinition().getScriptName(this));
|
||||||
GetScriptDefinitionKt.getScriptDefinition(containingKtFile);
|
|
||||||
assert kotlinScriptDefinition != null : "Should not parse a script without definition";
|
|
||||||
return containingKtFile.getPackageFqName().child(kotlinScriptDefinition.getScriptName(this));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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 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> =
|
fun loadScriptConfigsFromProjectRoot(projectRoot: java.io.File): List<org.jetbrains.kotlin.script.KotlinScriptConfig> =
|
||||||
projectRoot.walk().filter(::isScriptDefinitionConfigFile).toList()
|
projectRoot.listFiles { it -> isScriptDefinitionConfigFile(it) }.toList()
|
||||||
.flatMap { loadScriptConfigs(it) }
|
.flatMap { loadScriptConfigs(it) }
|
||||||
|
|
||||||
fun loadScriptConfigs(configFile: File): List<KotlinScriptConfig> =
|
fun loadScriptConfigs(configFile: File): List<KotlinScriptConfig> =
|
||||||
JDOMUtil.loadDocument(configFile).rootElement.children.mapNotNull {
|
JDOMUtil.loadDocument(configFile).rootElement.children.mapNotNull {
|
||||||
|
|||||||
Reference in New Issue
Block a user