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