Make script infrastructure providers optional

This commit is contained in:
Ilya Chernikov
2019-02-04 14:49:51 +01:00
parent 0732b48701
commit 89fc7eba95
10 changed files with 51 additions and 40 deletions
@@ -30,6 +30,9 @@ import java.util.List;
public class KtScript extends KtNamedDeclarationStub<KotlinScriptStub> implements KtDeclarationContainer {
public KotlinScriptDefinition getKotlinScriptDefinition() {
ScriptDefinitionProvider definitionsProvider = ScriptDefinitionProvider.Companion.getInstance(getProject());
if (definitionsProvider == null) {
throw new IllegalStateException("Unable to use KtScript: ScriptDefinitionProvider is not configured.");
}
KotlinScriptDefinition definition = definitionsProvider.findScriptDefinition(getContainingKtFile().getName());
return definition != null ? definition : definitionsProvider.getDefaultScriptDefinition();
}
@@ -37,7 +37,7 @@ interface ScriptDefinitionProvider {
fun getKnownFilenameExtensions(): Sequence<String>
companion object {
fun getInstance(project: Project): ScriptDefinitionProvider =
fun getInstance(project: Project): ScriptDefinitionProvider? =
ServiceManager.getService(project, ScriptDefinitionProvider::class.java)
}
}
@@ -51,7 +51,7 @@ fun findScriptDefinition(file: VirtualFile, project: Project): KotlinScriptDefin
return null
}
val scriptDefinitionProvider = ScriptDefinitionProvider.getInstance(project)
val scriptDefinitionProvider = ScriptDefinitionProvider.getInstance(project) ?: return null
val psiFile = PsiManager.getInstance(project).findFile(file)
if (psiFile != null) {
if (psiFile !is KtFile) return null
@@ -27,7 +27,7 @@ interface ScriptDependenciesProvider {
fun getScriptDependencies(file: PsiFile) = getScriptDependencies(file.virtualFile ?: file.originalFile.virtualFile)
companion object {
fun getInstance(project: Project): ScriptDependenciesProvider =
fun getInstance(project: Project): ScriptDependenciesProvider? =
ServiceManager.getService(project, ScriptDependenciesProvider::class.java)
}
}