Reorganize files and folders in the scripting plugin

This commit is contained in:
Ilya Chernikov
2019-02-15 12:27:38 +01:00
parent adb4d264ec
commit 336f43dbf2
40 changed files with 114 additions and 61 deletions
@@ -10,19 +10,15 @@ import com.intellij.mock.MockProject
import com.intellij.openapi.fileTypes.FileTypeRegistry
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.scripting.legacy.CliScriptDependenciesProvider
import org.jetbrains.kotlin.scripting.legacy.CliScriptReportSink
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.extensions.CompilerConfigurationExtension
import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension
import org.jetbrains.kotlin.script.ScriptDefinitionProvider
import org.jetbrains.kotlin.script.ScriptDependenciesProvider
import org.jetbrains.kotlin.script.ScriptReportSink
import org.jetbrains.kotlin.script.StandardScriptDefinition
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.ScriptDefinitionsFromClasspathDiscoverySource
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.loadScriptTemplatesFromClasspath
import org.jetbrains.kotlin.scripting.legacy.CliScriptDefinitionProvider
import java.io.File
@@ -96,28 +92,6 @@ class ScriptingCompilerConfigurationExtension(val project: MockProject) : Compil
}
}
class ScriptingCompilerConfigurationComponentRegistrar : ComponentRegistrar {
override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
CompilerConfigurationExtension.registerExtension(project, ScriptingCompilerConfigurationExtension(project))
val scriptDefinitionProvider = CliScriptDefinitionProvider()
project.registerService(ScriptDefinitionProvider::class.java, scriptDefinitionProvider)
project.registerService(
ScriptDependenciesProvider::class.java,
CliScriptDependenciesProvider(project)
)
SyntheticResolveExtension.registerExtension(project, ScriptingResolveExtension())
val messageCollector = configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
if (messageCollector != null) {
project.registerService(ScriptReportSink::class.java,
CliScriptReportSink(messageCollector)
)
}
}
}
fun configureScriptDefinitions(
scriptTemplates: List<String>,
configuration: CompilerConfiguration,
@@ -1,9 +1,9 @@
/*
* Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.scripting.compiler.plugin
package org.jetbrains.kotlin.scripting.compiler.plugin.definitions
import com.intellij.openapi.fileTypes.LanguageFileType
import org.jetbrains.kotlin.idea.KotlinFileType
@@ -1,14 +1,9 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.scripting.compiler.plugin
package org.jetbrains.kotlin.scripting.compiler.plugin.definitions
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
@@ -1,9 +1,9 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.scripting.compiler.plugin
package org.jetbrains.kotlin.scripting.compiler.plugin.definitions
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
@@ -136,7 +136,12 @@ internal fun loadScriptTemplatesFromClasspath(
else buildSequence {
// trying the direct classloading from baseClassloader first, since this is the most performant variant
val (initialLoadedDefinitions, initialNotFoundTemplates) = scriptTemplates.partitionMapNotNull {
loadScriptDefinition(baseClassLoader, it, scriptResolverEnv, messageCollector)
loadScriptDefinition(
baseClassLoader,
it,
scriptResolverEnv,
messageCollector
)
}
initialLoadedDefinitions.forEach {
yield(it)
@@ -144,7 +149,8 @@ internal fun loadScriptTemplatesFromClasspath(
// then searching the remaining templates in the supplied classpath
var remainingTemplates = initialNotFoundTemplates
val classpathAndLoader = LazyClasspathWithClassLoader(baseClassLoader) { classpath + dependenciesClasspath }
val classpathAndLoader =
LazyClasspathWithClassLoader(baseClassLoader) { classpath + dependenciesClasspath }
for (dep in classpath) {
if (remainingTemplates.isEmpty()) break
@@ -161,7 +167,10 @@ internal fun loadScriptTemplatesFromClasspath(
else -> {
// assuming that invalid classpath entries will be reported elsewhere anyway, so do not spam user with additional warnings here
messageCollector.report(CompilerMessageSeverity.LOGGING, "Configure scripting: Unknown classpath entry $dep")
DefinitionsLoadPartitionResult(listOf(), remainingTemplates)
DefinitionsLoadPartitionResult(
listOf(),
remainingTemplates
)
}
}
if (loadedDefinitions.isNotEmpty()) {
@@ -202,7 +211,13 @@ private inline fun List<String>.partitionLoadDefinitions(
for (definitionName in this) {
val classBytes = getBytes(definitionName)
val definition = classBytes?.let {
loadScriptDefinition(it, definitionName, classpathAndLoader, scriptResolverEnv, messageCollector)
loadScriptDefinition(
it,
definitionName,
classpathAndLoader,
scriptResolverEnv,
messageCollector
)
}
when {
definition != null -> loaded.add(definition)
@@ -242,7 +257,12 @@ private fun loadScriptDefinition(
for (ann in anns) {
var def: KotlinScriptDefinition? = null
if (ann.name == KotlinScript::class.simpleName) {
def = LazyScriptDefinitionFromDiscoveredClass(anns, templateClassName, classpathAndLoader.classpath, messageCollector)
def = LazyScriptDefinitionFromDiscoveredClass(
anns,
templateClassName,
classpathAndLoader.classpath,
messageCollector
)
} else if (ann.name == ScriptTemplateDefinition::class.simpleName) {
val templateClass = classpathAndLoader.classLoader.loadClass(templateClassName).kotlin
def = KotlinScriptDefinitionFromAnnotatedTemplate(templateClass, scriptResolverEnv, classpathAndLoader.classpath)
@@ -1,9 +1,9 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.scripting.compiler.plugin
package org.jetbrains.kotlin.scripting.compiler.plugin.definitions
import org.jetbrains.org.objectweb.asm.*
@@ -0,0 +1,47 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.scripting.compiler.plugin
import com.intellij.mock.MockProject
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.extensions.CompilerConfigurationExtension
import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension
import org.jetbrains.kotlin.script.ScriptDefinitionProvider
import org.jetbrains.kotlin.script.ScriptDependenciesProvider
import org.jetbrains.kotlin.script.ScriptReportSink
import org.jetbrains.kotlin.scripting.legacy.CliScriptDefinitionProvider
import org.jetbrains.kotlin.scripting.legacy.CliScriptDependenciesProvider
import org.jetbrains.kotlin.scripting.legacy.CliScriptReportSink
class ScriptingCompilerConfigurationComponentRegistrar : ComponentRegistrar {
override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
CompilerConfigurationExtension.registerExtension(project,
ScriptingCompilerConfigurationExtension(
project
)
)
val scriptDefinitionProvider = CliScriptDefinitionProvider()
project.registerService(ScriptDefinitionProvider::class.java, scriptDefinitionProvider)
project.registerService(
ScriptDependenciesProvider::class.java,
CliScriptDependenciesProvider(project)
)
SyntheticResolveExtension.registerExtension(project,
ScriptingResolveExtension()
)
val messageCollector = configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
if (messageCollector != null) {
project.registerService(
ScriptReportSink::class.java,
CliScriptReportSink(messageCollector)
)
}
}
}
@@ -20,6 +20,9 @@ import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoot
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.SCRIPT_DEFINITION_MARKERS_PATH
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.discoverScriptTemplatesInClasspath
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.loadScriptTemplatesFromClasspath
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestCaseWithTmpdir
@@ -130,7 +133,12 @@ class ScriptingCompilerPluginTest : TestCaseWithTmpdir() {
}
val lazyDefsSeq =
discoverScriptTemplatesInClasspath(listOf(defsOut), this::class.java.classLoader, emptyMap(), messageCollector)
discoverScriptTemplatesInClasspath(
listOf(defsOut),
this::class.java.classLoader,
emptyMap(),
messageCollector
)
assertTrue(messageCollector.messages.isEmpty()) {
"Unexpected messages from discovery sequence (should be empty):\n$messageCollector"
@@ -196,7 +204,12 @@ class ScriptingCompilerPluginTest : TestCaseWithTmpdir() {
messageCollector.clear()
discoverScriptTemplatesInClasspath(listOf(defsOut), this::class.java.classLoader, emptyMap(), messageCollector).toList()
discoverScriptTemplatesInClasspath(
listOf(defsOut),
this::class.java.classLoader,
emptyMap(),
messageCollector
).toList()
assertTrue(
messageCollector.messages.isNotEmpty()