首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何抑制特定的Kotlinc/Javac编译器警告?

如何抑制特定的Kotlinc/Javac编译器警告?
EN

Stack Overflow用户
提问于 2018-09-25 00:17:53
回答 2查看 3.6K关注 0票数 43

如何在类似于deprecationsKotlinCompile中抑制Gradle中的JavaCompile

JavaCompile(works):

代码语言:javascript
复制
tasks.withType(JavaCompile) {
    configure(options) {
        compilerArgs << '-Xlint:-deprecation'
    }
}

KotlinCompile(不工作):

代码语言:javascript
复制
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
    kotlinOptions {
        freeCompilerArgs = ["-Xjavac-arguments=-Xlint:-deprecation"]
    }
}

参考资料:

类似问题:

EN

回答 2

Stack Overflow用户

发布于 2020-07-22 12:58:01

目前,Kotlin不支持重写编译器警告。他们确实有一些类别需要压制。但与此不同的是,唯一的办法是:

代码语言:javascript
复制
@Suppress("DEPRECATION")

有时,只输入应该在运行时上工作的注释就不会起作用。您可能需要添加如下内容

代码语言:javascript
复制
val foo = error.asDynamic().response
if (foo is AxiosResponse<String>) {
    @Suppress("UNCHECKED_CAST")
    val response = foo as AxiosResponse<String>
}

这不是你的案子。但显然其他人也有类似的问题。我建议简单地看一下reddit。这也不是上面的情况,而是可以引导你。

未经检查的/

票数 2
EN

Stack Overflow用户

发布于 2021-06-28 01:12:36

如果您的目标是抑制降级,这样您就可以使构建在彼此的Kotlin警告上失败,那么这就是我的经验。

有一种方法可以配置Kotlin编译器,使其在每个警告上都失败。只需将以下配置添加到您的build.gradle文件:

代码语言:javascript
复制
// For Android Project
android {
    kotlinOptions {
        allWarningsAsErrors = true
    }
}
// For non Android Project
compileKotlin {
    kotlinOptions {
        allWarningsAsErrors = true
    }
}

但是在启用allWarningsAsErrors标志之后,Kotlin编译器将在每次使用不推荐的代码之后失败。不幸的是,Kotlin不支持忽略那些被废弃的警告,也不支持避免在这些警告上失败。

下面的Gradle脚本提供了这个问题的解决方案。

代码语言:javascript
复制
import org.gradle.api.Project
import org.gradle.api.internal.GradleInternal
import org.gradle.configurationcache.extensions.serviceOf
import org.gradle.internal.logging.events.operations.LogEventBuildOperationProgressDetails
import org.gradle.internal.operations.BuildOperationDescriptor
import org.gradle.internal.operations.BuildOperationListener
import org.gradle.internal.operations.BuildOperationListenerManager
import org.gradle.internal.operations.OperationFinishEvent
import org.gradle.internal.operations.OperationIdentifier
import org.gradle.internal.operations.OperationProgressEvent
import org.gradle.internal.operations.OperationStartEvent

val kotlinWarnings = mutableListOf<String>()
val buildOperationListener = object : BuildOperationListener {
    override fun started(buildOperation: BuildOperationDescriptor, startEvent: OperationStartEvent) {
    }

    override fun progress(operationIdentifier: OperationIdentifier, progressEvent: OperationProgressEvent) {
        val log = progressEvent.details
        if (log is LogEventBuildOperationProgressDetails) {
            if (log.message.contains("w:") && !log.message.contains("is deprecated.") && !kotlinWarnings.contains(log.message)) {
                kotlinWarnings.add(log.message)
            }
        }
    }

    override fun finished(buildOperation: BuildOperationDescriptor, finishEvent: OperationFinishEvent) {
    }
}
val gradleInternal = project.gradle as GradleInternal
val buildOperationListenerManager = gradleInternal.serviceOf() as BuildOperationListenerManager?
buildOperationListenerManager?.addListener(buildOperationListener)
project.gradle.buildFinished {
    buildOperationListenerManager?.removeListener(buildOperationListener)
    if (kotlinWarnings.isNotEmpty()) {
        kotlinWarnings.forEach { project.logger.warn(it) }
        throw RuntimeException("Kotlin warning found")
    }
}

基本上,将一个BuildOperationListener添加到Gradle构建中,这样您就可以侦听每个控制台日志。对每个日志进行检查,搜索Kotlin警告,但忽略不推荐的使用警告。最后,如果项目上有Kotlin警告,则引发异常。

下面的文章提供了有关此主题的更多信息:在Kotlin警告上失败构建

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52488930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档