Плагин компилятора SAM-with-receiver
Плагин компилятора sam-with-receiver делает первый параметр метода аннотированного Java-интерфейса "single abstract method" (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 не имеет встроенных предустановок, и вам необходимо указать свой собственный список аннотаций, которые будут обрабатываться особым образом.
plugins {
id("org.jetbrains.kotlin.plugin.sam.with.receiver") version "$kotlin_version"
}
Затем укажите список аннотаций 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