holder.registerProblem doesn't work

已回答
/**
* yaml 版本自动补全
*/
class AutoVersionTool : LocalInspectionTool() {

/// 访问了文件
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor {
return YamlElementVisitor(holder)
}
}

class YamlElementVisitor(
private val holder: ProblemsHolder
) : PsiElementVisitor() {

override fun visitFile(file: PsiFile) {


ProgressManager.getInstance().run(object : Task.Backgroundable(holder.project, "检测插件中") {
override fun run(progressIndicator: ProgressIndicator) {
runBlocking {
launch {
val yamlFileParser = YamlFileParser(file, holder)
val list = yamlFileParser.startCheckFile()
if(list.isNotEmpty()){
SwingUtilities.invokeLater {
regProblem(list,file) // doesn't work here
}
}

}
}

}
})


super.visitFile(file)

}


/**
* 问题注册器,并新增快速修复功能更
*/
private fun regProblem(plugins: List<PluginVersion>,file: PsiFile) {
plugins.map { plugin ->
// 有新版本了,注册问题快捷修复
val findElementAt = file.findElementAt(plugin.startIndex)!!

holder.registerProblem(
findElementAt,
"当前插件有新版本:${plugin.newVersion}",
ProblemHighlightType.WARNING,
NewVersinFix(file.findElementAt(plugin.startIndex)!!, plugin.newVersion)
)
}
}

}

 

Please is there any way to use holder.registerProblem in Task.Backgroundable

 

 

0

Hi,

Sorry, but your code looks overcomplicated.

Why are you trying to achieve? What is your exact use case? Why are you trying to run tasks from inspection?

0

请先登录再写评论。