Files
openide/plugins/dev/intellij.kotlin.dev/src/internal/KotlinGoodCodeRedVisitor.kt
Anna Kozlova a0c84efca9 [kotlin] good code red: report AA exceptions
^KTIJ-30174 fixed

GitOrigin-RevId: ad54a6c912e2abbd39399a7c3b8c23d662d18415
2024-06-05 20:41:13 +00:00

39 lines
1.5 KiB
Kotlin

// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.idea.dev.kotlin.internal
import com.intellij.codeInspection.ProblemsHolder
import com.intellij.dev.codeInsight.internal.GoodCodeRedVisitor
import com.intellij.openapi.diagnostic.ControlFlowException
import com.intellij.psi.PsiElementVisitor
import com.intellij.psi.PsiFile
import org.jetbrains.kotlin.analysis.api.analyze
import org.jetbrains.kotlin.analysis.api.components.KtDiagnosticCheckerFilter
import org.jetbrains.kotlin.diagnostics.Severity
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtVisitor
internal class KotlinGoodCodeRedVisitor : GoodCodeRedVisitor {
override fun createVisitor(holder: ProblemsHolder): PsiElementVisitor {
return object : KtVisitor<Unit, Unit>() {
override fun visitFile(file: PsiFile) {
super.visitFile(file)
try {
analyze(file as KtFile) {
val diagnostics = file.collectDiagnosticsForFile(KtDiagnosticCheckerFilter.ONLY_COMMON_CHECKERS)
for (diagnostic in diagnostics) {
if (diagnostic.severity == Severity.ERROR) {
holder.registerProblem(diagnostic.psi, diagnostic.defaultMessage)
}
}
}
}
catch (e: Exception) {
if (e is ControlFlowException) throw e
holder.registerProblem(file, KotlinDevBundle.message("inspection.message.analysis.failed.with.exception", e.message))
}
}
}
}
}