Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
buildscript {
ext {
kotlin_version = '1.6.+'
kotlin_version = '1.6.20'
}

repositories {
Expand Down Expand Up @@ -58,6 +58,7 @@ dependencies {
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
kotlinOptions {
freeCompilerArgs += "-Xopt-in=kotlin.RequiresOptIn"
freeCompilerArgs += "-Xcontext-receivers"
jvmTarget = "17"
}
}
Expand Down
40 changes: 20 additions & 20 deletions buildscript-gradle.lockfile
Original file line number Diff line number Diff line change
Expand Up @@ -21,26 +21,26 @@ org.checkerframework:checker-qual:2.11.1=classpath
org.codehaus.plexus:plexus-utils:3.4.1=classpath
org.jdom:jdom2:2.0.6=classpath
org.jetbrains.intellij.deps:trove4j:1.0.20200330=classpath
org.jetbrains.kotlin:kotlin-android-extensions:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-build-common:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-compiler-runner:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-daemon-client:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-native-utils:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-project-model:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-scripting-common:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-scripting-jvm:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-tooling-metadata:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-util-io:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-util-klib:1.6.20-M1=classpath
org.jetbrains.kotlin:kotlin-android-extensions:1.6.20=classpath
org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.6.20=classpath
org.jetbrains.kotlin:kotlin-build-common:1.6.20=classpath
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.20=classpath
org.jetbrains.kotlin:kotlin-compiler-runner:1.6.20=classpath
org.jetbrains.kotlin:kotlin-daemon-client:1.6.20=classpath
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.6.20=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.6.20=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.6.20=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.20=classpath
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.6.20=classpath
org.jetbrains.kotlin:kotlin-native-utils:1.6.20=classpath
org.jetbrains.kotlin:kotlin-project-model:1.6.20=classpath
org.jetbrains.kotlin:kotlin-scripting-common:1.6.20=classpath
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.6.20=classpath
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.6.20=classpath
org.jetbrains.kotlin:kotlin-scripting-jvm:1.6.20=classpath
org.jetbrains.kotlin:kotlin-tooling-metadata:1.6.20=classpath
org.jetbrains.kotlin:kotlin-util-io:1.6.20=classpath
org.jetbrains.kotlin:kotlin-util-klib:1.6.20=classpath
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=classpath
org.ow2.asm:asm-analysis:9.2=classpath
org.ow2.asm:asm-commons:9.2=classpath
Expand Down
34 changes: 17 additions & 17 deletions gradle.lockfile
Original file line number Diff line number Diff line change
Expand Up @@ -37,31 +37,31 @@ org.ec4j.core:ec4j-core:0.3.0=ktlint
org.jetbrains.intellij.deps:trove4j:1.0.20181211=ktlint
org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.5.31=ktlint
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.20-M1=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.20=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.5.31=ktlint
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.6.20-M1=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.6.20-M1=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.6.20=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.6.20=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-reflect:1.3.11=runtimeClasspath,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-reflect:1.5.31=ktlint
org.jetbrains.kotlin:kotlin-reflect:1.6.20-M1=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-reflect:1.6.20=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-script-runtime:1.5.31=ktlint
org.jetbrains.kotlin:kotlin-script-runtime:1.6.20-M1=kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-scripting-common:1.6.20-M1=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.6.20-M1=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.6.20-M1=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-jvm:1.6.20-M1=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-script-runtime:1.6.20=kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-scripting-common:1.6.20=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.6.20=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.6.20=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-jvm:1.6.20=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-stdlib-common:1.5.31=ktlint
org.jetbrains.kotlin:kotlin-stdlib-common:1.6.20-M1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-common:1.6.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.31=ktlint
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.20-M1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31=ktlint
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.20-M1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib:1.5.31=ktlint
org.jetbrains.kotlin:kotlin-stdlib:1.6.20-M1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-test-annotations-common:1.6.20-M1=testImplementationDependenciesMetadata
org.jetbrains.kotlin:kotlin-test-common:1.6.20-M1=testImplementationDependenciesMetadata
org.jetbrains.kotlin:kotlin-test-junit5:1.6.20-M1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-test:1.6.20-M1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib:1.6.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-test-annotations-common:1.6.20=testImplementationDependenciesMetadata
org.jetbrains.kotlin:kotlin-test-common:1.6.20=testImplementationDependenciesMetadata
org.jetbrains.kotlin:kotlin-test-junit5:1.6.20=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-test:1.6.20=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.1.0=ktlint
org.jetbrains.kotlinx:kotlinx-serialization-core:1.1.0=ktlint
org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.1.0=ktlint
Expand Down
14 changes: 4 additions & 10 deletions src/main/kotlin/edu/kit/compiler/utils/PatternReplacementDsl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ class Rule<Target, Replacement, Scope : ReplacementBuilderScope>(
private val condition: (() -> Boolean)?,
private val replacementFactory: Scope.() -> Replacement,
) {
// Note: replace with `context(Scope)` when Kotlin 1.6.20 is released
fun match(node: Target, scope: Scope): Replacement? {
context(Scope)
fun match(node: Target): Replacement? {
variables.forEach { it.reset() }

val matches = try {
Expand All @@ -58,7 +58,7 @@ class Rule<Target, Replacement, Scope : ReplacementBuilderScope>(
return null
}

return scope.replacementFactory()
return this@Scope.replacementFactory()
}
}

Expand Down Expand Up @@ -92,13 +92,7 @@ class RuleBuilderScope<Target, Replacement, Scope : ReplacementBuilderScope>(pri
fun build(): Rule<Target, Replacement, Scope> = Rule(name, variables, matchPattern!!, conditionFn, replacementFactory!!)
}

interface ReplacementBuilderScope {
fun <Target, Replacement, Scope : ReplacementBuilderScope> Rule<Target, Replacement, Scope>.match(node: Target) =
with(this@match) {
@Suppress("UNCHECKED_CAST")
match(node, this@ReplacementBuilderScope as Scope)
}
}
interface ReplacementBuilderScope

fun <Target, Replacement, Scope : ReplacementBuilderScope> rule(name: String = "anonymous rule", block: RuleBuilderScope<Target, Replacement, Scope>.() -> Unit): Rule<Target, Replacement, Scope> =
RuleBuilderScope<Target, Replacement, Scope>(name).apply(block).build()