Skip to content

Commit 89facbe

Browse files
committed
Implement support for SamWithReceiverAnnotations for Gradle Kotlin dsl
build-scripts
1 parent 86fd15d commit 89facbe

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

server/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ dependencies {
4040
implementation "org.jetbrains.kotlin:kotlin-compiler:$kotlinVersion"
4141
implementation "org.jetbrains.kotlin:kotlin-scripting-compiler:$kotlinVersion"
4242
implementation "org.jetbrains.kotlin:kotlin-scripting-jvm-host-unshaded:$kotlinVersion"
43+
implementation 'org.jetbrains.kotlin:kotlin-sam-with-receiver-compiler-plugin'
4344
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion"
4445
implementation 'org.jetbrains:fernflower:1.0'
4546
implementation "org.jetbrains.exposed:exposed-core:$exposedVersion"

server/src/main/kotlin/org/javacs/kt/compiler/Compiler.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
6969
import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM
7070
import org.jetbrains.kotlin.config.*
7171
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
72+
import org.jetbrains.kotlin.samWithReceiver.CliSamWithReceiverComponentContributor
73+
import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor
7274
import java.io.File
7375

7476
private val GRADLE_DSL_DEPENDENCY_PATTERN = Regex("^gradle-(?:kotlin-dsl|core).*\\.jar$")
@@ -376,6 +378,12 @@ private class CompilationEnvironment(
376378
configFiles = EnvironmentConfigFiles.JVM_CONFIG_FILES
377379
)
378380

381+
// hacky way to support SamWithReceiverAnnotations for scripts
382+
val scriptDefinitions: List<ScriptDefinition> = environment.configuration.getList(ScriptingConfigurationKeys.SCRIPT_DEFINITIONS)
383+
scriptDefinitions.takeIf { it.isNotEmpty() }?.let {
384+
val annotations = scriptDefinitions.flatMap { it.asLegacyOrNull<KotlinScriptDefinition>()?.annotationsForSamWithReceivers ?: emptyList() }
385+
StorageComponentContainerContributor.registerExtension(environment.project, CliSamWithReceiverComponentContributor(annotations))
386+
}
379387
val project = environment.project
380388
parser = KtPsiFactory(project)
381389
scripts = ScriptDefinitionProvider.getInstance(project)!! as CliScriptDefinitionProvider

0 commit comments

Comments
 (0)