Tag: kapt

在使用Android Databinding和Kotlin的自定义BindingAdapter中使用lambda

我正在尝试使用Kotlin为Android Databinding绑定一个lambda处理程序。 只要我的ViewModel处理程序显式地返回Void就行了。 但是,如果它返回Kotlin单位,我得到一个error: cannot generate view binders java.lang.StackOverflowError 。 一切似乎都正确地钩上了所有其他自定义绑定工作(convertBooleanToViewVisibility,toTestString,甚至customOnClick只要我打电话onClickVoid [见下面的例子])。 问题是当我试图调用lambda返回单元在我的应用程序:customOnClick而不是返回Void。 在下面的例子中,它是调用mainViewModel.onClick()而不是mainViewModel.onClickVoid() 。 必须有一种方法可以使android:onClick能够调用Unit版本。 但是,如果我使用相同的语法调用onClick的customOnClick,我得到这个错误: :app:kaptGenerateStubsDebugKotlin Using kotlin incremental compilation :app:kaptDebugKotlin e: error: cannot generate view binders java.lang.StackOverflowError e: e: at android.databinding.tool.writer.Scope.access$getCurrentScope$cp(LayoutBinderWriter.kt:49) e: at android.databinding.tool.writer.Scope$Companion.getCurrentScope(LayoutBinderWriter.kt:58) e: at android.databinding.tool.writer.LayoutBinderWriterKt.scopedName(LayoutBinderWriter.kt:196) e: at android.databinding.tool.expr.Expr.toCode(Expr.java:776) e: at android.databinding.tool.writer.LayoutBinderWriterKt$callbackLocalName$2.invoke(LayoutBinderWriter.kt:203) e: at android.databinding.tool.writer.LayoutBinderWriterKt$callbackLocalName$2.invoke(LayoutBinderWriter.kt) e: at android.databinding.tool.ext.LazyExt.getValue(ext.kt:27) e: at android.databinding.tool.writer.LayoutBinderWriterKt.getCallbackLocalName(LayoutBinderWriter.kt) […]

Kotlin的gradle插件不适用于自定义源集(JMH)

拥有Gradle设置的Kotlin项目: apply plugin: 'kotlin' apply plugin: 'kotlin-kapt' dependencies { kapt 'org.openjdk.jmh:jmh-generator-annprocess:1.18' … } 把基准放在src / main / kotlin下工作没有问题。 但是当我为JMH添加一个自定义的源代码集: sourceSets { jmh { compileClasspath += sourceSets.test.runtimeClasspath runtimeClasspath += sourceSets.test.runtimeClasspath } } 并将src / main / kotlin的基准测试版移至src / jmh / kotlin ,执行基准测试失败: Exception in thread "main" java.lang.RuntimeException: ERROR: Unable to find the resource: /META-INF/BenchmarkList at org.openjdk.jmh.runner.AbstractResourceReader.getReaders(AbstractResourceReader.java:98) […]

Kotlin卡普失败 – 只看到Android API级别1的来源

我看到一些奇怪的行为,导致:app:kaptQaDebugKotlin尝试升级到Android Gradle插件3.0时, :app:kaptQaDebugKotlin失败。 用@TargetApi(VERSION_CODES.KITKAT)注解的方法失败, cannot find symbol ( VERSION_CODES.KITKAT ) …但在与方法内联使用时发现VERSION_CODES.KITKAT 找不到符号DialogInterface.OnShowListener (在API级别8中添加) ..但找到DialogInteface.OnClickListener (在API级别1中添加) 找不到符号Application.ActivityLifecycleCallbacks (在api level 14中添加) 注意:Android Studio能够看到所有这些cannot find symbol类的来源( cmd + B作品) 版本 compileSdkVersion: 25 buildTools: 26.0.2 Kotlin版本: 1.1.51 AGP: 3.0.0 gradle包装: 4.3 支持lib: 24.2.1 (这也难以升级,但是我尝试了25.4.0 ,仍然没有运气) 匕首: 2.0.2 (卡在这个旧版本,不能升级不幸) 使用AGP 3.0.0 java 8 desugar功能 使用kotlin-kapt插件。 自动值类正确生成。 任何想法发生了什么? 它看起来像kapt任务是以某种方式使用Android API级别1的来源,我不知道如何解决这个问题

kapt插件不能与gradle-script-kotlin一起使用

我想将我的基于vertx的项目移动到https://github.com/sczyh30/vertx-blueprint-microservice.git模板。 蓝图项目在编译期间使用注释@vertxGen等来生成代码。 我正在使用gradle-script-kotlin来构建项目。 我需要使用kapt插件根据注释生成代码(通过vertx … codegen)。 不幸的是,我无法正确配置kapt插件。 它给出以下错误: w:[kapt]没有指定源输出目录,跳过注释处理 我会很高兴,如果有人可以修复我的gradle构建文件。 以下是与kapt相关的片段 import org.jetbrains.kotlin.gradle.plugin.* // kaptExtension … apply { plugin("kotlin-kapt") } … fun Project.kapt(setup: KaptExtension.() -> Unit) = the<KaptExtension>().setup() kapt { generateStubs = true javacOptions( closureOf<KaptJavacOptionsDelegate> { option("-proc:only") option("-processor", "io.vertx.codegen.CodeGenProcessor") // vertx processor here option("-AoutputDirectory", "${projectDir}/src/main") option("-Acodegen.output", "${projectDir}/src/main") } ) // specify output of generated code […]

kotlin注释处理器中的可空类型

我正在为Kotlin处理注释处理程序,因为处理的元素是用Java编写的,所以我没有收到可空的数据? 而不是@Nullable注释,这很好,但我正在接受类型和高阶函数中的空参数的问题,正常的参数。 var someNullField: String? = "" 我将在其注释中使用@org.jetbrains.annotations.Nullable来接收java.lang.String 。 但是List<String?>例如会返回我java.util.List<java.lang.String>而不会在主要元素中没有任何注释,而不会在导致未知可空性状态的类型参数中 我尝试使用javax.lang.model.util.Types来找到某种结果,但没有。 我现在使用的一些代码: val utils = processingEnvironment.typeUtils val type = fieldElement.asType() if (type is DeclaredType) { val typeElement = utils.asElement(type) type.typeArguments .forEach { //Trying different ways and just printing for possible results val capture = utils.capture(it) val erasure = utils.erasure(it) val element = utils.asElement(it) printMessage("element: $element […]

Kotlin:在命令行中运行kapt来为DI生成存根

我试图从命令行运行kapt3为Kotlin文件生成Java存根。 语法似乎是: kotlinc -P plugin:org.jetbrains.kotlin.kapt3:aptMode=stubs -classpath $CLASSPATH:$ANDROID_HOME/platforms/android-23/android.jar -d $OUT $SRCS 它是否正确? 我没有看到kotlin/lib文件夹中的插件。 目前我正试图从源代码构建它,但下载它的“官方”方式是什么? 补充笔记: 这是一个Android项目,因此包含了android.jar 我的用例:该项目正在编译与BUCK 。 不是gradle 。 Buck现在还不支持kapt ,而且我需要为DI(依赖注入)生成存根,以在kotlin代码上正常工作。

Kotlin-Kapt注释处理器不能与maven一起工作

我想从kotlin实体类生成jpa querydsl文件。 有一个非常好的例子在线如何使用gradle生成dsl文件https://github.com/JetBrains/kotlin-examples/blob/master/gradle/kotlin-querydsl/build.gradle 。 然而,我试图在maven中实现这一点,并没有运气。 我目前的pom在下面。 有谁知道这个问题可能是什么? 提前致谢。 <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>test</groupId> <artifactId>test-jpa</artifactId> <version>2.7.0-SNAPSHOT</version> <properties> <kotlin.version>1.1.50</kotlin.version> </properties> <dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.3.5.Final</version> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib-jre8</artifactId> <version>${kotlin.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>kotlin-maven-plugin</artifactId> <groupId>org.jetbrains.kotlin</groupId> <version>${kotlin.version}</version> <executions> <execution> <id>kapt</id> <goals> <goal>kapt</goal> </goals> <configuration> <sourceDirs> <sourceDir>${project.basedir}/src/main/java</sourceDir> </sourceDirs> <annotationProcessorPaths> <annotationProcessorPath> <groupId>com.mysema.querydsl</groupId> <artifactId>querydsl-apt</artifactId> <version>3.6.4</version> </annotationProcessorPath> </annotationProcessorPaths> […]

Android库,Kotlin和Dagger2

我正在构建一个包含两个模块的应用程序:核心模块,即Android库(com.android.library)和应用程序模块(com.android.application)。 将Java文件转换为Kotlin后,该项目不编译,给我一个错误,没有找到生成的Dagger 2文件(未解决的参考)。 但是那些目前正在生成的文件是: …核心\编译\生成的\源\ kapt \ {释放我的\核心\命名空间} \ DaggerBaseComponent.java 我错过了什么? build.gradle(核心模块) apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-android-extensions' … android { … sourceSets { main.java.srcDirs += 'src/main/kotlin' } } dependencies { … // Dagger. kapt "com.google.dagger:dagger-compiler:2.10" compile 'com.google.dagger:dagger:2.10' provided 'javax.annotation:jsr250-api:1.0' // Kotlin compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" } build.gradle(应用程序模块) apply plugin: 'com.android.application' […]

Kotlin Kapt:java.lang.IllegalStateException:endPosTable已经设置

试图使用Kotlin maven插件来构建一个kotlin应用程序。 使用Dagger 2依赖注入框架。 调用时出现以下错误 mvn clean compile package 也可以通过调用来复制 mvn clean package 然后打电话 mvn package 在maven 3和java 8中似乎有一个错误,但是我找不到kotlin maven插件的解决方法。 [ERROR] Failed to execute goal org.jetbrains.kotlin:kotlin-maven-plugin:1.1.3-2:kapt (kapt) on project process: Compilation failure [ERROR] java.lang.IllegalStateException: failed to analyze: java.lang.IllegalStateException: endPosTable already set [ERROR] at org.jetbrains.kotlin.analyzer.AnalysisResult.throwIfError(AnalysisResult.kt:57) [ERROR] at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyzeAndGenerate(KotlinToJVMBytecodeCompiler.kt:344) [ERROR] at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileBunchOfSources(KotlinToJVMBytecodeCompiler.kt:226) [ERROR] at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:200) [ERROR] at […]

Android Room Persistences库和Kotlin

我正在尝试使用Kotlin和Room Persistance Library编写一个简单的应用程序。 我遵循Android Persistance codelab中的教程 。 这是我在Kotlin的AppDatabase类: @Database(entities = arrayOf(User::class), version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun userModel(): UserDao companion object { private var INSTANCE: AppDatabase? = null @JvmStatic fun getInMemoryDatabase(context: Context): AppDatabase { if (INSTANCE == null) { INSTANCE = Room.inMemoryDatabaseBuilder(context.applicationContext, AppDatabase::class.java).allowMainThreadQueries().build() } return INSTANCE!! } @JvmStatic fun destroyInstance() […]