Плагин компилятора SAM-with-receiver
Плагин компилятора sam-with-receiver делает первый параметр метода аннотированного Java-интерфейса «единого абстрактного метода» (SAM) получателем в Kotlin. Эта конвертация работает только тогда, когда интерфейс SAM передаётся в Kotlin в качестве лямбды, как для адаптеров SAM, так и для конструкторов SAM (подробнее см. документацию по преобразованиям SAM).
Вот пример:
public @interface SamWithReceiver {}
@SamWithReceiver
public interface TaskRunner {
void run(Task task);
}
fun test(context: TaskContext) {
val runner = TaskRunner {
// Here 'this' is an instance of 'Task'
println("$name is started")
context.executeTask(this)
println("$name is finished")
}
}
Gradle
Использование аналогично all-open и no-arg, за исключением того, что sam-with-receiver не имеет встроенных предустановок, и вам необходимо указать свой собственный список аннотаций, обрабатываемых специальным образом.
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-sam-with-receiver:$kotlin_version"
}
}
apply plugin: "kotlin-sam-with-receiver"
Затем укажите список аннотаций SAM-with-receiver:
samWithReceiver {
annotation("com.my.SamWithReceiver")
}
Maven
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<configuration>
<compilerPlugins>
<plugin>sam-with-receiver</plugin>
</compilerPlugins>
<pluginOptions>
<option>
sam-with-receiver:annotation=com.my.SamWithReceiver
</option>
</pluginOptions>
</configuration>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-sam-with-receiver</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
</plugin>
Компилятор командной строки
Добавьте JAR-файл плагина в путь к классу компилятора и укажите список аннотаций sam-with-receiver:
-Xplugin=$KOTLIN_HOME/lib/sam-with-receiver-compiler-plugin.jar -P plugin:org.jetbrains.kotlin.samWithReceiver:annotation=com.my.SamWithReceiver
© 2010–2022 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/sam-with-receiver-plugin.html