Refactor getting dependencies for script files API

Deprecate KotlinScriptDefinition#getDependenciesFor
Expose dependencyResolver as a property
KotlinScriptExternalImportsProvider is the component clients should be asking for dependencies
This commit is contained in:
Pavel V. Talanov
2017-06-19 19:59:39 +03:00
parent ff391628de
commit 788eaf8a18
11 changed files with 132 additions and 101 deletions
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.parsing.KotlinParserDefinition
import org.jetbrains.kotlin.psi.KtScript
import kotlin.reflect.KClass
import kotlin.script.dependencies.KotlinScriptExternalDependencies
import kotlin.script.dependencies.ScriptDependenciesResolver
import kotlin.script.templates.standard.ScriptTemplateWithArgs
open class KotlinScriptDefinition(val template: KClass<out Any>) {
@@ -37,13 +38,20 @@ open class KotlinScriptDefinition(val template: KClass<out Any>) {
open val annotationsForSamWithReceivers: List<String>
get() = emptyList()
open fun <TF: Any> isScript(file: TF): Boolean =
open fun <TF : Any> isScript(file: TF): Boolean =
getFileName(file).endsWith(KotlinParserDefinition.STD_SCRIPT_EXT)
open fun getScriptName(script: KtScript): Name =
NameUtils.getScriptNameForFile(script.containingKtFile.name)
open fun <TF: Any> getDependenciesFor(file: TF, project: Project, previousDependencies: KotlinScriptExternalDependencies?): KotlinScriptExternalDependencies? = null
@Deprecated("Use dependencyResolver instead", level = DeprecationLevel.ERROR)
open fun <TF : Any> getDependenciesFor(file: TF, project: Project, previousDependencies: KotlinScriptExternalDependencies?): KotlinScriptExternalDependencies? = null
open val dependencyResolver: ScriptDependenciesResolver = EmptyDependencyResolver
open val acceptedAnnotations: List<KClass<out Annotation>> = emptyList()
private object EmptyDependencyResolver : ScriptDependenciesResolver
}
object StandardScriptDefinition : KotlinScriptDefinition(ScriptTemplateWithArgs::class)
@@ -22,7 +22,7 @@ import com.intellij.openapi.vfs.VirtualFile
import kotlin.script.dependencies.KotlinScriptExternalDependencies
interface KotlinScriptExternalImportsProvider {
fun <TF: Any> getExternalImports(file: TF): KotlinScriptExternalDependencies?
fun <TF: Any> getScriptDependencies(file: TF): KotlinScriptExternalDependencies?
companion object {
fun getInstance(project: Project): KotlinScriptExternalImportsProvider =
@@ -31,4 +31,4 @@ interface KotlinScriptExternalImportsProvider {
}
fun getScriptExternalDependencies(file: VirtualFile, project: Project): KotlinScriptExternalDependencies? =
KotlinScriptExternalImportsProvider.getInstance(project).getExternalImports(file)
KotlinScriptExternalImportsProvider.getInstance(project).getScriptDependencies(file)