Intellij Idea IntelliJ中的Groovy GDSL显示警告“delegatesTo”不能应用于“(com.intellij.psi.PsiClass)”

qlckcl4x  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(123)

在遵循https://github.com/jenkinsci/job-dsl-plugin/blob/master/docs/IDE-Support.md的指南时,我将以下GDSL文件添加到了我的项目中

def jobPath = /.*\/jobs\/.*\.groovy/

def ctx = context(pathRegexp: jobPath)
contributor(ctx, {
    delegatesTo(findClass('javaposse.jobdsl.dsl.DslFactory'))
})

字符串
IntelliJ将delegatesTo调用用黄色加下划线,并显示警告消息

'delegatesTo' cannot be applied to '(com.intellij.psi.PsiClass)'


如何解决黄色下划线问题?

q7solyqu

q7solyqu1#

此警告是无害的,可以忽略。GDSL是正确的,并将工作。
如果您仍然想解决黄色下划线,则需要添加相关的IntelliJ类(即com.intellij.psi.PsiElementcom.intellij.psi.PsiClass)添加到项目的类路径中,以便IDE在分析文件时看到该类型。
英雄之旅
如果您按照https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#usage指南为Gradle项目启用IntelliJ插件支持

plugins {
     id("org.jetbrains.intellij") version "1.15.0"
}

intellij {
    version.set("2022.1.1")
    plugins.set(listOf("com.intellij.java"))
}

字符串
那么你最终会下载500MB以上的工件,

Download https://cache-redirector.jetbrains.com/www.jetbrains.com/intellij-repository/releases/com/jetbrains/intellij/idea/ideaIC/2022.1.1/ideaIC-2022.1.1.zip, took 2 m 10 s 803 ms (670.22 MB)
Download https://cache-redirector.jetbrains.com/www.jetbrains.com/intellij-repository/releases/com/jetbrains/intellij/idea/ideaIC/2022.1.1/ideaIC-2022.1.1-sources.jar, took 14 s 453 ms (179.92 MB)


当解压缩并放在classpath上时(gradle intellij插件可以为您做到这一点),它们包含com.intellij.psi.PsiClass,使IDE感到高兴。
对于一个黄色下划线来说,下载的数据太多了,因此,在研究了https://www.jetbrains.com/intellij-repository/releases/之后,我注意到可以从https://www.jetbrains.com/intellij-repository/releases/com/jetbrains/intellij/java/java-impl/232.8660.185/java-impl-232.8660.185.jar下载相同的文件。
这建议我只在单个JAR文件上添加项目依赖项

repositories {
    maven("https://www.jetbrains.com/intellij-repository/releases")
}

dependencies {
    implementation("com.jetbrains.intellij.java:java-impl:232.8660.185")
}


不过,它并不比以前更好,因为该工件自己引入了许多传递依赖项。

最终解决方案

但是,事实证明,Psi类位于其中两个依赖项中,因此只需添加

repositories {
    maven("https://www.jetbrains.com/intellij-repository/releases")
}

dependencies {
    // https://stackoverflow.com/questions/76821539/groovy-gdsl-in-intellij-shows-warning-delegatesto-cannot-be-applied-to-com
    compileOnly("com.jetbrains.intellij.platform:core:232.8660.185") { isTransitive = false }
    compileOnly("com.jetbrains.intellij.java:java-psi:232.8660.185") { isTransitive = false }
}

相关问题