Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit f3d1a44

Browse files
committedNov 4, 2020
Move compilation configuration to a separate artifact
1 parent 0f75fa1 commit f3d1a44

File tree

17 files changed

+140
-68
lines changed

17 files changed

+140
-68
lines changed
 

‎docs/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
# Kotlin kernel for IPython/Jupyter
88

9-
[Kotlin](https://kotlinlang.org/) (1.4.30-dev-2139) kernel for [Jupyter](https://jupyter.org).
9+
[Kotlin](https://kotlinlang.org/) (1.4.30-dev-2247) kernel for [Jupyter](https://jupyter.org).
1010

1111
Beta version. Tested with Jupyter Notebook 6.0.3, Jupyter Lab 1.2.6 and Jupyter Console 6.1.0
1212
on Windows, Ubuntu Linux and MacOS. Using with Jupyter Console frontend is problematic now because of

‎gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# kotlinVersion=1.4.255-SNAPSHOT
2-
kotlinVersion=1.4.30-dev-2139
2+
kotlinVersion=1.4.30-dev-2247
33
kotlinLanguageLevel=1.4
44
jvmTarget=1.8
55

‎jupyter-lib/kotlin-jupyter-api/build.gradle.kts

+6
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ repositories {
2020
dependencies {
2121
implementation(kotlin("stdlib"))
2222
implementation(kotlin("reflect"))
23+
implementation(kotlin("scripting-common"))
24+
implementation(kotlin("scripting-compiler-embeddable"))
25+
implementation(kotlin("scripting-dependencies"))
26+
implementation(kotlin("scripting-jvm"))
27+
28+
compileOnly(kotlin("scripting-compiler-impl"))
2329

2430
api("com.beust:klaxon:$klaxonVersion")
2531

‎jupyter-lib/src/main/kotlin/jupyter/kotlin/results.kt ‎jupyter-lib/kotlin-jupyter-api/src/main/kotlin/org/jetbrains/kotlin/jupyter/config/annotations.kt

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
@file:Suppress("unused")
2-
package jupyter.kotlin
1+
package org.jetbrains.kotlin.jupyter.config
32

43
import org.jetbrains.kotlin.jupyter.api.CodeExecution
54
import org.jetbrains.kotlin.jupyter.api.Notebook
@@ -17,7 +16,6 @@ annotation class DependsOn(val value: String = "")
1716
@Repeatable
1817
@Retention(AnnotationRetention.SOURCE)
1918
annotation class Repository(val value: String = "")
20-
2119
abstract class ScriptTemplateWithDisplayHelpers(
2220
val notebook: Notebook<*>,
2321
) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package org.jetbrains.kotlin.jupyter.config
2+
3+
import org.jetbrains.kotlin.scripting.resolve.skipExtensionsResolutionForImplicitsExceptInnermost
4+
import java.io.File
5+
import kotlin.script.experimental.api.KotlinType
6+
import kotlin.script.experimental.api.RefineConfigurationBuilder
7+
import kotlin.script.experimental.api.ScriptCompilationConfiguration
8+
import kotlin.script.experimental.api.baseClass
9+
import kotlin.script.experimental.api.compilerOptions
10+
import kotlin.script.experimental.api.defaultImports
11+
import kotlin.script.experimental.api.fileExtension
12+
import kotlin.script.experimental.api.hostConfiguration
13+
import kotlin.script.experimental.api.implicitReceivers
14+
import kotlin.script.experimental.api.refineConfiguration
15+
import kotlin.script.experimental.host.withDefaultsFrom
16+
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
17+
import kotlin.script.experimental.jvm.jvm
18+
import kotlin.script.experimental.jvm.updateClasspath
19+
20+
fun getCompilationConfiguration(
21+
scriptClasspath: List<File> = emptyList(),
22+
scriptReceivers: List<Any> = emptyList(),
23+
jvmTargetVersion: String = "1.8",
24+
refinementAction: RefineConfigurationBuilder.() -> Unit = {}
25+
): ScriptCompilationConfiguration {
26+
return ScriptCompilationConfiguration {
27+
hostConfiguration.update { it.withDefaultsFrom(defaultJvmScriptingHostConfiguration) }
28+
baseClass.put(KotlinType(ScriptTemplateWithDisplayHelpers::class))
29+
fileExtension.put("jupyter.kts")
30+
31+
val classImports = listOf(
32+
DependsOn::class,
33+
Repository::class,
34+
ScriptTemplateWithDisplayHelpers::class,
35+
).map { it.java.name }
36+
defaultImports(classImports + defaultGlobalImports)
37+
38+
jvm {
39+
updateClasspath(scriptClasspath)
40+
}
41+
refineConfiguration(refinementAction)
42+
43+
val receiversTypes = scriptReceivers.map { KotlinType(it.javaClass.canonicalName) }
44+
implicitReceivers(receiversTypes)
45+
skipExtensionsResolutionForImplicitsExceptInnermost(receiversTypes)
46+
47+
compilerOptions(
48+
"-jvm-target",
49+
jvmTargetVersion,
50+
"-no-stdlib"
51+
)
52+
}
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.jetbrains.kotlin.jupyter.config
2+
3+
import kotlin.script.experimental.dependencies.RepositoryCoordinates
4+
5+
val defaultRepositories = arrayOf(
6+
"https://jcenter.bintray.com/",
7+
"https://repo.maven.apache.org/maven2/",
8+
"https://jitpack.io/",
9+
).map(::RepositoryCoordinates)
10+
11+
val defaultGlobalImports = listOf(
12+
"kotlin.math.*",
13+
"org.jetbrains.kotlin.jupyter.api.*",
14+
)

‎kotlin-jupyter-plugin/build.gradle.kts

+3
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@ plugins {
44
}
55

66
repositories {
7+
jcenter()
78
mavenCentral()
89
}
910

1011
dependencies {
1112
implementation(project(":kotlin-jupyter-deps"))
13+
14+
implementation("khttp:khttp:1.0.0")
1215
}
1316

1417
gradlePlugin {

‎kotlin-jupyter-plugin/src/main/kotlin/org/jetbrains/kotlin/jupyter/build/util.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@ fun readProperties(propertiesFile: Path): Map<String, String> =
3939

4040
fun <T> Project.getOrInitProperty(name: String, initializer: () -> T): T {
4141
@Suppress("UNCHECKED_CAST")
42-
return (if (extra.has(name)) extra[name] as? T else null) ?: {
42+
return (if (extra.has(name)) extra[name] as? T else null) ?: run {
4343
val value = initializer()
4444
extra[name] = value
4545
value
46-
}()
46+
}
4747
}
4848

4949
fun Project.getFlag(propertyName: String, default: Boolean = false): Boolean {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.jetbrains.kotlin.jupyter.build
2+
3+
import org.gradle.api.Project
4+
import org.json.JSONArray
5+
import org.json.JSONObject
6+
import java.io.File
7+
8+
fun Project.prepareKotlinVersionUpdateTask() {
9+
tasks.register("updateKotlinVersion") {
10+
doLast {
11+
val teamcityUrl = "https://teamcity.jetbrains.com"
12+
val requestEndpoint = "guestAuth/app/rest/builds"
13+
val locator = "buildType:(id:Kotlin_KotlinPublic_Aggregate),status:SUCCESS,branch:default:any,count:1"
14+
val response = khttp.get(
15+
"$teamcityUrl/$requestEndpoint/?locator=$locator",
16+
headers = mapOf("accept" to "application/json")
17+
)
18+
val builds = response.jsonObject["build"] as JSONArray
19+
val lastBuild = builds[0] as JSONObject
20+
val lastBuildNumber = lastBuild["number"]
21+
println("Last Kotlin dev version: $lastBuildNumber")
22+
23+
val kotlinVersionProp = "kotlinVersion"
24+
val gradlePropertiesFile = File("gradle.properties")
25+
val gradleProperties = gradlePropertiesFile.readLines()
26+
val updatedGradleProperties = gradleProperties.map {
27+
if (it.startsWith("$kotlinVersionProp=")) "$kotlinVersionProp=$lastBuildNumber"
28+
else it
29+
}
30+
gradlePropertiesFile.writeText(updatedGradleProperties.joinToString("\n", "", "\n"))
31+
}
32+
}
33+
}

‎kotlin-jupyter-plugin/src/main/kotlin/org/jetbrains/kotlin/jupyter/plugin/plugin.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ package org.jetbrains.kotlin.jupyter.plugin
22

33
import org.gradle.api.Plugin
44
import org.gradle.api.Project
5+
import org.jetbrains.kotlin.jupyter.build.prepareKotlinVersionUpdateTask
56

67
class KotlinJupyterBuildDependency: Plugin<Project> {
7-
override fun apply(project: Project) {}
8+
override fun apply(project: Project) {
9+
project.prepareKotlinVersionUpdateTask()
10+
}
811
}

‎src/main/kotlin/org/jetbrains/kotlin/jupyter/config.kt

+1-11
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.jupyter.api.GenerativeTypeHandler
1010
import org.jetbrains.kotlin.jupyter.api.KotlinKernelVersion
1111
import org.jetbrains.kotlin.jupyter.api.LibraryDefinition
1212
import org.jetbrains.kotlin.jupyter.api.RendererTypeHandler
13+
import org.jetbrains.kotlin.jupyter.config.defaultRepositories
1314
import org.jetbrains.kotlin.jupyter.libraries.LibraryFactory
1415
import org.jetbrains.kotlin.jupyter.libraries.LibraryResolver
1516
import org.slf4j.LoggerFactory
@@ -39,17 +40,6 @@ val defaultRuntimeProperties by lazy {
3940
RuntimeKernelProperties(ClassLoader.getSystemResource("runtime.properties")?.readText()?.parseIniConfig().orEmpty())
4041
}
4142

42-
val defaultRepositories = arrayOf(
43-
"https://jcenter.bintray.com/",
44-
"https://repo.maven.apache.org/maven2/",
45-
"https://jitpack.io/",
46-
).map { RepositoryCoordinates(it) }
47-
48-
val defaultGlobalImports = listOf(
49-
"kotlin.math.*",
50-
"org.jetbrains.kotlin.jupyter.api.*",
51-
)
52-
5343
enum class JupyterSockets(val zmqKernelType: SocketType, val zmqClientType: SocketType) {
5444
hb(SocketType.REP, SocketType.REQ),
5545
shell(SocketType.ROUTER, SocketType.REQ),

‎src/main/kotlin/org/jetbrains/kotlin/jupyter/repl.kt

+5-41
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package org.jetbrains.kotlin.jupyter
22

3-
import jupyter.kotlin.DependsOn
43
import jupyter.kotlin.KotlinContext
5-
import jupyter.kotlin.Repository
6-
import jupyter.kotlin.ScriptTemplateWithDisplayHelpers
74
import kotlinx.coroutines.runBlocking
85
import org.jetbrains.kotlin.config.KotlinCompilerVersion
96
import org.jetbrains.kotlin.jupyter.api.Code
@@ -15,6 +12,9 @@ import org.jetbrains.kotlin.jupyter.api.KotlinKernelVersion
1512
import org.jetbrains.kotlin.jupyter.api.LibraryDefinition
1613
import org.jetbrains.kotlin.jupyter.api.Renderable
1714
import org.jetbrains.kotlin.jupyter.api.RendererTypeHandler
15+
import org.jetbrains.kotlin.jupyter.config.DependsOn
16+
import org.jetbrains.kotlin.jupyter.config.Repository
17+
import org.jetbrains.kotlin.jupyter.config.getCompilationConfiguration
1818
import org.jetbrains.kotlin.jupyter.libraries.LibrariesProcessor
1919
import org.jetbrains.kotlin.jupyter.libraries.LibraryFactory
2020
import org.jetbrains.kotlin.jupyter.libraries.buildDependenciesInitCode
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.jupyter.repl.KotlinCompleter
2626
import org.jetbrains.kotlin.jupyter.repl.ListErrorsResult
2727
import org.jetbrains.kotlin.jupyter.repl.SourceCodeImpl
2828
import org.jetbrains.kotlin.scripting.ide_services.compiler.KJvmReplCompilerWithIdeServices
29-
import org.jetbrains.kotlin.scripting.resolve.skipExtensionsResolutionForImplicitsExceptInnermost
3029
import java.io.File
3130
import java.net.URLClassLoader
3231
import java.util.LinkedList
@@ -43,25 +42,16 @@ import kotlin.script.experimental.api.ScriptEvaluationConfiguration
4342
import kotlin.script.experimental.api.analysisDiagnostics
4443
import kotlin.script.experimental.api.asDiagnostics
4544
import kotlin.script.experimental.api.asSuccess
46-
import kotlin.script.experimental.api.baseClass
47-
import kotlin.script.experimental.api.compilerOptions
4845
import kotlin.script.experimental.api.constructorArgs
49-
import kotlin.script.experimental.api.defaultImports
5046
import kotlin.script.experimental.api.dependencies
51-
import kotlin.script.experimental.api.fileExtension
5247
import kotlin.script.experimental.api.foundAnnotations
53-
import kotlin.script.experimental.api.hostConfiguration
5448
import kotlin.script.experimental.api.implicitReceivers
5549
import kotlin.script.experimental.api.onSuccess
56-
import kotlin.script.experimental.api.refineConfiguration
5750
import kotlin.script.experimental.api.valueOrThrow
58-
import kotlin.script.experimental.host.withDefaultsFrom
5951
import kotlin.script.experimental.jvm.BasicJvmReplEvaluator
6052
import kotlin.script.experimental.jvm.JvmDependency
6153
import kotlin.script.experimental.jvm.baseClassLoader
62-
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
6354
import kotlin.script.experimental.jvm.jvm
64-
import kotlin.script.experimental.jvm.updateClasspath
6555
import kotlin.script.experimental.jvm.util.isError
6656
import kotlin.script.experimental.jvm.util.isIncomplete
6757
import kotlin.script.experimental.jvm.util.toSourceCodePosition
@@ -295,34 +285,8 @@ class ReplForJupyterImpl(
295285
}
296286

297287
private val compilerConfiguration by lazy {
298-
ScriptCompilationConfiguration {
299-
hostConfiguration.update { it.withDefaultsFrom(defaultJvmScriptingHostConfiguration) }
300-
baseClass.put(KotlinType(ScriptTemplateWithDisplayHelpers::class))
301-
fileExtension.put("jupyter.kts")
302-
303-
val classImports = listOf(
304-
DependsOn::class,
305-
Repository::class,
306-
ScriptTemplateWithDisplayHelpers::class,
307-
).map { it.java.name }
308-
defaultImports(classImports + defaultGlobalImports)
309-
310-
jvm {
311-
updateClasspath(scriptClasspath)
312-
}
313-
refineConfiguration {
314-
onAnnotations(DependsOn::class, Repository::class, handler = { configureMavenDepsOnAnnotations(it) })
315-
}
316-
317-
val receiversTypes = scriptReceivers.map { KotlinType(it.javaClass.canonicalName) }
318-
implicitReceivers(receiversTypes)
319-
skipExtensionsResolutionForImplicitsExceptInnermost(receiversTypes)
320-
321-
compilerOptions(
322-
"-jvm-target",
323-
runtimeProperties.jvmTargetForSnippets,
324-
"-no-stdlib"
325-
)
288+
getCompilationConfiguration(scriptClasspath, scriptReceivers, runtimeProperties.jvmTargetForSnippets) {
289+
onAnnotations(DependsOn::class, Repository::class, handler = { configureMavenDepsOnAnnotations(it) })
326290
}
327291
}
328292

‎src/main/kotlin/org/jetbrains/kotlin/jupyter/resolver.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package org.jetbrains.kotlin.jupyter
22

3-
import jupyter.kotlin.DependsOn
4-
import jupyter.kotlin.Repository
53
import kotlinx.coroutines.runBlocking
4+
import org.jetbrains.kotlin.jupyter.config.DependsOn
5+
import org.jetbrains.kotlin.jupyter.config.Repository
66
import org.jetbrains.kotlin.mainKts.impl.IvyResolver
77
import org.slf4j.LoggerFactory
88
import java.io.File

‎src/test/kotlin/org/jetbrains/kotlin/jupyter/test/ResolverTests.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.jetbrains.kotlin.jupyter.test
22

33
import kotlinx.coroutines.runBlocking
4-
import org.jetbrains.kotlin.jupyter.defaultRepositories
4+
import org.jetbrains.kotlin.jupyter.config.defaultRepositories
55
import org.jetbrains.kotlin.mainKts.impl.IvyResolver
66
import org.junit.jupiter.api.Test
77
import org.slf4j.Logger

‎src/test/kotlin/org/jetbrains/kotlin/jupyter/test/TypeProviderTests.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import jupyter.kotlin.receivers.TypeProviderReceiver
66
import org.jetbrains.kotlin.jupyter.ReplCompilerException
77
import org.jetbrains.kotlin.jupyter.ReplForJupyterImpl
88
import org.jetbrains.kotlin.jupyter.ResolverConfig
9-
import org.jetbrains.kotlin.jupyter.defaultRepositories
9+
import org.jetbrains.kotlin.jupyter.config.defaultRepositories
1010
import org.jetbrains.kotlin.jupyter.libraries.LibraryFactory
1111
import org.jetbrains.kotlin.jupyter.libraries.parseLibraryDescriptors
1212
import org.junit.jupiter.api.Assertions.assertEquals

‎src/test/kotlin/org/jetbrains/kotlin/jupyter/test/replTests.kt

+10-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.jupyter.ResolverConfig
1414
import org.jetbrains.kotlin.jupyter.api.CodeExecution
1515
import org.jetbrains.kotlin.jupyter.api.KotlinKernelVersion.Companion.toMaybeUnspecifiedString
1616
import org.jetbrains.kotlin.jupyter.api.MimeTypedResult
17-
import org.jetbrains.kotlin.jupyter.defaultRepositories
17+
import org.jetbrains.kotlin.jupyter.config.defaultRepositories
1818
import org.jetbrains.kotlin.jupyter.defaultRuntimeProperties
1919
import org.jetbrains.kotlin.jupyter.generateDiagnostic
2020
import org.jetbrains.kotlin.jupyter.generateDiagnosticFromAbsolute
@@ -412,7 +412,15 @@ class ReplTest : AbstractReplTest() {
412412
}
413413

414414
class CustomLibraryResolverTests : AbstractReplTest() {
415-
private fun makeRepl(libs: LibraryResolver) = ReplForJupyterImpl(libraryFactory, classpath, homeDir, ResolverConfig(defaultRepositories, libs))
415+
private fun makeRepl(libs: LibraryResolver) = ReplForJupyterImpl(
416+
libraryFactory,
417+
classpath,
418+
homeDir,
419+
ResolverConfig(
420+
defaultRepositories,
421+
libs
422+
)
423+
)
416424

417425
@Test
418426
fun testUseMagic() {

‎src/test/kotlin/org/jetbrains/kotlin/jupyter/test/testUtil.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ package org.jetbrains.kotlin.jupyter.test
22

33
import com.beust.klaxon.JsonObject
44
import com.beust.klaxon.Parser
5-
import jupyter.kotlin.DependsOn
65
import org.jetbrains.kotlin.jupyter.DisplayHandler
76
import org.jetbrains.kotlin.jupyter.LibrariesDir
87
import org.jetbrains.kotlin.jupyter.LibraryDescriptor
98
import org.jetbrains.kotlin.jupyter.LibraryDescriptorExt
109
import org.jetbrains.kotlin.jupyter.ReplRuntimeProperties
1110
import org.jetbrains.kotlin.jupyter.ResolverConfig
12-
import org.jetbrains.kotlin.jupyter.defaultRepositories
11+
import org.jetbrains.kotlin.jupyter.config.DependsOn
12+
import org.jetbrains.kotlin.jupyter.config.defaultRepositories
1313
import org.jetbrains.kotlin.jupyter.defaultRuntimeProperties
1414
import org.jetbrains.kotlin.jupyter.libraries.LibraryFactory
1515
import org.jetbrains.kotlin.jupyter.libraries.LibraryReference

0 commit comments

Comments
 (0)
Please sign in to comment.