Fixes after refactoring the API

This commit is contained in:
Ilya Chernikov
2018-03-26 19:38:16 +02:00
parent 1f0cac50d2
commit ae2af238fa
13 changed files with 63 additions and 54 deletions
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.scripting.compiler.plugin
import com.intellij.openapi.fileTypes.LanguageFileType
import kotlinx.coroutines.experimental.runBlocking
import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.NameUtils
@@ -16,13 +15,14 @@ import kotlin.reflect.KClass
import kotlin.reflect.KType
import kotlin.script.experimental.api.ScriptCompileConfigurationParams
import kotlin.script.experimental.api.ScriptDefinition
import kotlin.script.experimental.api.resultOrNull
import kotlin.script.experimental.api.ScriptDefinitionProperties
import kotlin.script.experimental.dependencies.DependenciesResolver
import kotlin.script.experimental.jvm.impl.BridgeDependenciesResolver
class KotlinScriptDefinitionAdapterFromNewAPI(val scriptDefinition: ScriptDefinition) : KotlinScriptDefinition(scriptDefinition.baseClass) {
class KotlinScriptDefinitionAdapterFromNewAPI(val scriptDefinition: ScriptDefinition) :
KotlinScriptDefinition(scriptDefinition.compilationConfigurator.defaultConfiguration[ScriptCompileConfigurationParams.baseClass]) {
override val name: String get() = scriptDefinition.selector.name
override val name: String get() = scriptDefinition.properties[ScriptDefinitionProperties.name]
// TODO: consider creating separate type (subtype? for kotlin scripts)
override val fileType: LanguageFileType = KotlinFileType.INSTANCE
@@ -30,29 +30,28 @@ class KotlinScriptDefinitionAdapterFromNewAPI(val scriptDefinition: ScriptDefini
override val annotationsForSamWithReceivers: List<String>
get() = emptyList()
private val scriptFileExtensionWithDot =
"." + (scriptDefinition.properties.getOrNull(ScriptDefinitionProperties.fileExtension) ?: "kts")
override fun isScript(fileName: String): Boolean =
fileName.endsWith("." + scriptDefinition.selector.fileExtension)
fileName.endsWith(scriptFileExtensionWithDot)
override fun getScriptName(script: KtScript): Name {
val fileBasedName = NameUtils.getScriptNameForFile(script.containingKtFile.name)
return Name.identifier(scriptDefinition.selector.makeScriptName(fileBasedName.identifier))
return Name.identifier(fileBasedName.identifier.removeSuffix(scriptFileExtensionWithDot))
}
override val dependencyResolver: DependenciesResolver by lazy {
BridgeDependenciesResolver(scriptDefinition.configurator)
BridgeDependenciesResolver(scriptDefinition.compilationConfigurator)
}
override val acceptedAnnotations: List<KClass<out Annotation>> by lazy {
runBlocking {
scriptDefinition.configurator.baseConfiguration(null)
}.resultOrNull()?.getOrNull(ScriptCompileConfigurationParams.updateConfigurationOnAnnotations)?.toList()
?: emptyList()
scriptDefinition.compilationConfigurator.defaultConfiguration.getOrNull(ScriptCompileConfigurationParams.updateConfigurationOnAnnotations)?.toList()
?: emptyList()
}
override val implicitReceivers: List<KType> by lazy {
runBlocking {
scriptDefinition.configurator.baseConfiguration(null)
}.resultOrNull()?.getOrNull(ScriptCompileConfigurationParams.scriptSignature)?.providedDeclarations?.implicitReceivers
scriptDefinition.compilationConfigurator.defaultConfiguration.getOrNull(ScriptCompileConfigurationParams.scriptSignature)?.providedDeclarations?.implicitReceivers
?: emptyList()
}
}
@@ -20,6 +20,8 @@ import java.io.File
import java.io.IOException
import java.net.URLClassLoader
import java.util.jar.JarFile
import kotlin.script.experimental.api.ScriptingEnvironment
import kotlin.script.experimental.api.ScriptingEnvironmentParams
import kotlin.script.experimental.definitions.ScriptDefinitionFromAnnotatedBaseClass
class ScriptingCompilerConfigurationExtension(val project: MockProject) : CompilerConfigurationExtension {
@@ -124,7 +126,9 @@ fun configureScriptDefinitions(
val cls = classloader.loadClass(template)
val def =
if (cls.annotations.firstIsInstanceOrNull<kotlin.script.experimental.annotations.KotlinScript>() != null) {
KotlinScriptDefinitionAdapterFromNewAPI(ScriptDefinitionFromAnnotatedBaseClass(cls.kotlin))
KotlinScriptDefinitionAdapterFromNewAPI(
ScriptDefinitionFromAnnotatedBaseClass(ScriptingEnvironment(ScriptingEnvironmentParams.baseClass to cls.kotlin))
)
} else {
KotlinScriptDefinitionFromAnnotatedTemplate(cls.kotlin, scriptResolverEnv)
}