Skip to content

Commit 69cdecd

Browse files
committed
Extract dependencies into separate project and support compose compiler plugin
1 parent f47f6f2 commit 69cdecd

File tree

18 files changed

+242
-100
lines changed

18 files changed

+242
-100
lines changed

Dockerfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ RUN if [ -z "$KOTLIN_VERSION" ]; then \
1010
ENV KOTLIN_LIB=$KOTLIN_VERSION
1111
ENV KOTLIN_LIB_JS=${KOTLIN_VERSION}-js
1212
ENV KOTLIN_LIB_WASM=${KOTLIN_VERSION}-wasm
13+
ENV KOTLIN_COMPILER_PLUGINS=${KOTLIN_VERSION}-compiler-plugins
1314

1415
RUN mkdir -p /kotlin-compiler-server
1516
WORKDIR /kotlin-compiler-server
@@ -29,6 +30,7 @@ COPY --from=build /build/libs/BOOT-INF/classes /kotlin-compiler-server
2930
COPY --from=build /kotlin-compiler-server/${KOTLIN_LIB} /kotlin-compiler-server/${KOTLIN_LIB}
3031
COPY --from=build /kotlin-compiler-server/${KOTLIN_LIB_JS} /kotlin-compiler-server/${KOTLIN_LIB_JS}
3132
COPY --from=build /kotlin-compiler-server/${KOTLIN_LIB_WASM} /kotlin-compiler-server/${KOTLIN_LIB_WASM}
33+
COPY --from=build /kotlin-compiler-server/${KOTLIN_COMPILER_PLUGINS} /kotlin-compiler-server/${KOTLIN_COMPILER_PLUGINS}
3234
COPY --from=build /kotlin-compiler-server/executor.policy /kotlin-compiler-server/
3335
COPY --from=build /kotlin-compiler-server/indexes.json /kotlin-compiler-server/
3436
COPY --from=build /kotlin-compiler-server/indexesJs.json /kotlin-compiler-server/

build.gradle.kts

Lines changed: 11 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,17 @@
1-
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
2-
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsCompilerAttribute
31
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
42
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
53
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
64
import org.springframework.boot.gradle.tasks.bundling.BootJar
75

8-
val kotlinVersion = rootProject.properties["systemProp.kotlinVersion"]
9-
val kotlinIdeVersion: String by System.getProperties()
10-
val kotlinIdeVersionSuffix: String by System.getProperties()
116
val policy: String by System.getProperties()
12-
val indexes: String by System.getProperties()
13-
val indexesJs: String by System.getProperties()
14-
val indexesWasm: String by System.getProperties()
157

168
group = "com.compiler.server"
179
version = "$kotlinVersion-SNAPSHOT"
1810
java.sourceCompatibility = JavaVersion.VERSION_17
1911

20-
val kotlinDependency: Configuration by configurations.creating {
21-
isTransitive = false
22-
}
23-
val kotlinJsDependency: Configuration by configurations.creating {
24-
isTransitive = false
25-
attributes {
26-
attribute(
27-
KotlinPlatformType.attribute,
28-
KotlinPlatformType.js
29-
)
30-
attribute(
31-
KotlinJsCompilerAttribute.jsCompilerAttribute,
32-
KotlinJsCompilerAttribute.ir
33-
)
34-
}
35-
}
36-
37-
val kotlinWasmDependency: Configuration by configurations.creating {
38-
isTransitive = false
39-
attributes {
40-
attribute(
41-
KotlinPlatformType.attribute,
42-
KotlinPlatformType.wasm
43-
)
44-
}
45-
}
46-
47-
val libJSFolder = "$kotlinVersion-js"
48-
val libWasmFolder = "$kotlinVersion-wasm"
49-
val libJVMFolder = kotlinVersion
5012
val propertyFile = "application.properties"
5113
val jacksonVersionKotlinDependencyJar = "2.14.0" // don't forget to update version in `executor.policy` file.
5214

53-
val copyDependencies by tasks.creating(Copy::class) {
54-
from(kotlinDependency)
55-
into(libJVMFolder)
56-
}
57-
val copyJSDependencies by tasks.creating(Copy::class) {
58-
from(kotlinJsDependency)
59-
into(libJSFolder)
60-
}
61-
62-
val copyWasmDependencies by tasks.creating(Copy::class) {
63-
from(kotlinWasmDependency)
64-
into(libWasmFolder)
65-
}
66-
6715
plugins {
6816
id("org.springframework.boot") version "2.7.10"
6917
id("io.spring.dependency-management") version "1.1.3"
@@ -91,6 +39,8 @@ allprojects {
9139
maven("https://www.myget.org/F/rd-snapshots/maven/")
9240
maven("https://kotlin.jetbrains.space/p/kotlin/packages/maven/kotlin-ide")
9341
maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/bootstrap")
42+
maven("https://maven.pkg.jetbrains.space/kotlin/p/wasm/experimental")
43+
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
9444
}
9545
afterEvaluate {
9646
dependencies {
@@ -105,22 +55,6 @@ allprojects {
10555
}
10656

10757
dependencies {
108-
kotlinDependency("junit:junit:4.13.2")
109-
kotlinDependency("org.hamcrest:hamcrest:2.2")
110-
kotlinDependency("com.fasterxml.jackson.core:jackson-databind:$jacksonVersionKotlinDependencyJar")
111-
kotlinDependency("com.fasterxml.jackson.core:jackson-core:$jacksonVersionKotlinDependencyJar")
112-
kotlinDependency("com.fasterxml.jackson.core:jackson-annotations:$jacksonVersionKotlinDependencyJar")
113-
// Kotlin libraries
114-
kotlinDependency("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion")
115-
kotlinDependency("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion")
116-
kotlinDependency("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion")
117-
kotlinDependency("org.jetbrains.kotlin:kotlin-test:$kotlinVersion")
118-
kotlinDependency("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3")
119-
kotlinDependency("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3")
120-
kotlinJsDependency("org.jetbrains.kotlin:kotlin-stdlib-js:$kotlinVersion")
121-
kotlinJsDependency("org.jetbrains.kotlin:kotlin-dom-api-compat:$kotlinVersion")
122-
kotlinWasmDependency("org.jetbrains.kotlin:kotlin-stdlib-wasm-js:$kotlinVersion")
123-
12458
annotationProcessor("org.springframework:spring-context-indexer")
12559
implementation("com.google.code.gson:gson")
12660
implementation("org.springframework.boot:spring-boot-starter-web")
@@ -166,6 +100,7 @@ fun generateProperties(prefix: String = "") = """
166100
libraries.folder.jvm=${prefix + libJVMFolder}
167101
libraries.folder.js=${prefix + libJSFolder}
168102
libraries.folder.wasm=${prefix + libWasmFolder}
103+
libraries.folder.compiler-plugins=${prefix + libCompilerPluginsFolder}
169104
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
170105
server.compression.enabled=true
171106
server.compression.mime-types=application/json
@@ -182,9 +117,10 @@ tasks.withType<KotlinCompile> {
182117
freeCompilerArgs = listOf("-Xjsr305=strict")
183118
jvmTarget = "17"
184119
}
185-
dependsOn(copyDependencies)
186-
dependsOn(copyJSDependencies)
187-
dependsOn(copyWasmDependencies)
120+
dependsOn(":dependencies:copyDependencies")
121+
dependsOn(":dependencies:copyJSDependencies")
122+
dependsOn(":dependencies:copyWasmDependencies")
123+
dependsOn(":dependencies:copyCompilerPlugins")
188124
dependsOn(":executors:jar")
189125
dependsOn(":indexation:run")
190126
buildPropertyFile()
@@ -208,9 +144,10 @@ val buildLambda by tasks.creating(Zip::class) {
208144
from(indexes)
209145
from(indexesJs)
210146
from(indexesWasm)
211-
from(libJSFolder) { into(libJSFolder) }
212-
from(libWasmFolder) { into(libWasmFolder) }
213-
from(libJVMFolder) { into(libJVMFolder) }
147+
from(libJSFolder) { into(libJS) }
148+
from(libWasmFolder) { into(libWasm) }
149+
from(libJVMFolder) { into(libJVM) }
150+
from(libCompilerPluginsFolder) { into(libCompilerPlugins) }
214151
into("lib") {
215152
from(configurations.compileClasspath) { exclude("tomcat-embed-*") }
216153
}

buildSrc/build.gradle.kts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
plugins {
2+
`kotlin-dsl`
3+
}
4+
5+
repositories {
6+
mavenCentral()
7+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import org.gradle.api.Project
2+
import org.gradle.kotlin.dsl.provideDelegate
3+
4+
val kotlinVersion: String by System.getProperties()
5+
val kotlinIdeVersion: String by System.getProperties()
6+
val kotlinIdeVersionSuffix: String by System.getProperties()
7+
val indexes: String by System.getProperties()
8+
val indexesJs: String by System.getProperties()
9+
val indexesWasm: String by System.getProperties()
10+
11+
val libJS = "$kotlinVersion-js"
12+
val libWasm = "$kotlinVersion-wasm"
13+
val libCompilerPlugins = "$kotlinVersion-compiler-plugins"
14+
val libJVM = kotlinVersion
15+
16+
val Project.libJSFolder
17+
get() = rootProject.layout.projectDirectory.dir(libJS)
18+
19+
val Project.libWasmFolder
20+
get() = rootProject.layout.projectDirectory.dir(libWasm)
21+
22+
val Project.libCompilerPluginsFolder
23+
get() = rootProject.layout.projectDirectory.dir(libCompilerPlugins)
24+
25+
val Project.libJVMFolder
26+
get() = rootProject.layout.projectDirectory.dir(libJVM)

common/build.gradle.kts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
val kotlinVersion: String by System.getProperties()
2-
val kotlinIdeVersion: String by System.getProperties()
3-
val kotlinIdeVersionSuffix: String by System.getProperties()
4-
51
plugins {
62
kotlin("jvm")
73
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package component
2+
3+
data class CompilerPluginOption(
4+
val id: String,
5+
val option: String,
6+
val value: String
7+
)

common/src/main/kotlin/component/KotlinEnvironment.kt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
1515
import org.jetbrains.kotlin.config.JVMConfigurationKeys
1616
import org.jetbrains.kotlin.config.languageVersionSettings
1717
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
18+
import org.jetbrains.kotlin.library.impl.isKotlinLibrary
1819
import org.jetbrains.kotlin.serialization.js.JsModuleDescriptor
1920
import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil
2021
import org.jetbrains.kotlin.serialization.js.ModuleKind
@@ -25,6 +26,8 @@ class KotlinEnvironment(
2526
val classpath: List<File>,
2627
additionalJsClasspath: List<File>,
2728
additionalWasmClasspath: List<File>,
29+
compilerPlugins: List<File>,
30+
compilerPluginsOptions: List<CompilerPluginOption>
2831
) {
2932
companion object {
3033
/**
@@ -53,8 +56,17 @@ class KotlinEnvironment(
5356
}
5457
}
5558

56-
val JS_LIBRARIES = additionalJsClasspath.map { it.absolutePath }
57-
val WASM_LIBRARIES = additionalWasmClasspath.map { it.absolutePath }
59+
val JS_LIBRARIES = additionalJsClasspath
60+
.map { it.absolutePath }
61+
.filter { isKotlinLibrary(File(it)) }
62+
val WASM_LIBRARIES = additionalWasmClasspath
63+
.map { it.absolutePath }
64+
.filter { isKotlinLibrary(File(it)) }
65+
val COMPILER_PLUGINS = compilerPlugins
66+
.map { it.absolutePath }
67+
68+
val compilerPluginOptions = compilerPluginsOptions
69+
.map { "plugin:${it.id}:${it.option}=${it.value}" }
5870

5971
@Synchronized
6072
fun <T> environment(f: (KotlinCoreEnvironment) -> T): T {

dependencies/build.gradle.kts

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
2+
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsCompilerAttribute
3+
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetAttribute
4+
5+
val kotlinDependency: Configuration by configurations.creating {
6+
isTransitive = false
7+
}
8+
9+
val kotlinJsDependency: Configuration by configurations.creating {
10+
isCanBeResolved = true
11+
isCanBeConsumed = false
12+
13+
attributes {
14+
attribute(
15+
KotlinPlatformType.attribute,
16+
KotlinPlatformType.js
17+
)
18+
attribute(
19+
KotlinJsCompilerAttribute.jsCompilerAttribute,
20+
KotlinJsCompilerAttribute.ir
21+
)
22+
}
23+
}
24+
25+
val kotlinWasmDependency: Configuration by configurations.creating {
26+
isCanBeResolved = true
27+
isCanBeConsumed = false
28+
29+
attributes {
30+
attribute(
31+
KotlinPlatformType.attribute,
32+
KotlinPlatformType.wasm
33+
)
34+
attribute(
35+
KotlinWasmTargetAttribute.wasmTargetAttribute,
36+
KotlinWasmTargetAttribute.js
37+
)
38+
}
39+
}
40+
41+
val compilerPlugins: Configuration by configurations.creating {
42+
isTransitive = false
43+
}
44+
45+
46+
val jacksonVersionKotlinDependencyJar = "2.14.0" // don't forget to update version in `executor.policy` file.
47+
48+
val copyDependencies by tasks.creating(Copy::class) {
49+
from(kotlinDependency)
50+
into(libJVMFolder)
51+
}
52+
val copyJSDependencies by tasks.creating(Copy::class) {
53+
from(kotlinJsDependency)
54+
into(libJSFolder)
55+
}
56+
57+
val copyWasmDependencies by tasks.creating(Copy::class) {
58+
from(kotlinWasmDependency)
59+
into(libWasmFolder)
60+
}
61+
62+
val copyCompilerPlugins by tasks.creating(Copy::class) {
63+
from(compilerPlugins)
64+
into(libCompilerPluginsFolder)
65+
}
66+
67+
plugins {
68+
kotlin("jvm")
69+
}
70+
71+
dependencies {
72+
kotlinDependency("junit:junit:4.13.2")
73+
kotlinDependency("org.hamcrest:hamcrest:2.2")
74+
kotlinDependency("com.fasterxml.jackson.core:jackson-databind:$jacksonVersionKotlinDependencyJar")
75+
kotlinDependency("com.fasterxml.jackson.core:jackson-core:$jacksonVersionKotlinDependencyJar")
76+
kotlinDependency("com.fasterxml.jackson.core:jackson-annotations:$jacksonVersionKotlinDependencyJar")
77+
// Kotlin libraries
78+
kotlinDependency("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion")
79+
kotlinDependency("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion")
80+
kotlinDependency("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion")
81+
kotlinDependency("org.jetbrains.kotlin:kotlin-test:$kotlinVersion")
82+
kotlinDependency("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3")
83+
kotlinJsDependency("org.jetbrains.kotlin:kotlin-stdlib-js:$kotlinVersion")
84+
kotlinJsDependency("org.jetbrains.kotlin:kotlin-dom-api-compat:$kotlinVersion")
85+
kotlinWasmDependency("org.jetbrains.kotlin:kotlin-stdlib-wasm-js:$kotlinVersion")
86+
kotlinWasmDependency("org.jetbrains.compose.runtime:runtime:1.6.0-alpha01")
87+
kotlinWasmDependency("org.jetbrains.compose.ui:ui:1.6.0-alpha01")
88+
kotlinWasmDependency("org.jetbrains.compose.animation:animation:1.6.0-alpha01")
89+
kotlinWasmDependency("org.jetbrains.compose.foundation:foundation:1.6.0-alpha01")
90+
kotlinWasmDependency("org.jetbrains.compose.material:material:1.6.0-alpha01")
91+
kotlinWasmDependency("org.jetbrains.compose.components:components-resources:1.6.0-alpha01")
92+
93+
kotlinJsDependency("org.jetbrains.compose.runtime:runtime:1.6.0-alpha01")
94+
kotlinJsDependency("org.jetbrains.compose.ui:ui:1.6.0-alpha01")
95+
kotlinJsDependency("org.jetbrains.compose.animation:animation:1.6.0-alpha01")
96+
kotlinJsDependency("org.jetbrains.compose.foundation:foundation:1.6.0-alpha01")
97+
kotlinJsDependency("org.jetbrains.compose.material:material:1.6.0-alpha01")
98+
kotlinJsDependency("org.jetbrains.compose.components:components-resources:1.6.0-alpha01")
99+
100+
compilerPlugins("org.jetbrains.compose.compiler:compiler-hosted:1.5.4")
101+
}

executors/build.gradle.kts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
22

3-
val kotlinVersion: String by System.getProperties()
4-
53
plugins {
64
kotlin("jvm")
75
}
@@ -19,5 +17,5 @@ tasks.withType<KotlinCompile> {
1917
}
2018

2119
tasks.withType<Jar>().getByName("jar") {
22-
destinationDirectory.set(File("../$kotlinVersion"))
20+
destinationDirectory.set(libJVMFolder)
2321
}

indexation/build.gradle.kts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
val kotlinVersion: String by System.getProperties()
2-
val kotlinIdeVersion: String by System.getProperties()
3-
val indexes: String by System.getProperties()
4-
val indexesJs: String by System.getProperties()
5-
val indexesWasm: String by System.getProperties()
6-
71
plugins {
82
kotlin("jvm")
93
application
@@ -23,6 +17,7 @@ application {
2317
tasks.withType<JavaExec> {
2418
val rootName = project.rootProject.projectDir.toString()
2519
args = listOf(
20+
kotlinVersion,
2621
"$rootName${File.separator}$kotlinVersion",
2722
"$rootName${File.separator}$indexes",
2823
"$rootName${File.separator}$indexesJs",

0 commit comments

Comments
 (0)