From a0c84efca908e059c096a51d65f97020c4d1eff9 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 5 Jun 2024 15:02:36 +0200 Subject: [PATCH] [kotlin] good code red: report AA exceptions ^KTIJ-30174 fixed GitOrigin-RevId: ad54a6c912e2abbd39399a7c3b8c23d662d18415 --- .../messages/KotlinDevBundle.properties | 1 + .../src/internal/KotlinDevBundle.java | 34 +++++++++++++++++++ .../src/internal/KotlinGoodCodeRedVisitor.kt | 17 +++++++--- 3 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 plugins/dev/intellij.kotlin.dev/resources/messages/KotlinDevBundle.properties create mode 100644 plugins/dev/intellij.kotlin.dev/src/internal/KotlinDevBundle.java diff --git a/plugins/dev/intellij.kotlin.dev/resources/messages/KotlinDevBundle.properties b/plugins/dev/intellij.kotlin.dev/resources/messages/KotlinDevBundle.properties new file mode 100644 index 000000000000..0ff7758db2c2 --- /dev/null +++ b/plugins/dev/intellij.kotlin.dev/resources/messages/KotlinDevBundle.properties @@ -0,0 +1 @@ +inspection.message.analysis.failed.with.exception=Analysis failed with exception: {0} \ No newline at end of file diff --git a/plugins/dev/intellij.kotlin.dev/src/internal/KotlinDevBundle.java b/plugins/dev/intellij.kotlin.dev/src/internal/KotlinDevBundle.java new file mode 100644 index 000000000000..b1dca424a385 --- /dev/null +++ b/plugins/dev/intellij.kotlin.dev/src/internal/KotlinDevBundle.java @@ -0,0 +1,34 @@ +// Copyright 2000-2024 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.DynamicBundle; +import org.jetbrains.annotations.Nls; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.PropertyKey; + +import java.util.function.Supplier; + +public final class KotlinDevBundle { + + private static final @NonNls String BUNDLE_FQN = "messages.KotlinDevBundle"; + private static final DynamicBundle BUNDLE = new DynamicBundle(KotlinDevBundle.class, BUNDLE_FQN); + + private KotlinDevBundle() { + } + + public static @Nls @NotNull String message( + @PropertyKey(resourceBundle = BUNDLE_FQN) @NotNull String key, + @Nullable Object @NotNull ... params + ) { + return BUNDLE.getMessage(key, params); + } + + public static @NotNull Supplier<@Nls @NotNull String> messagePointer( + @PropertyKey(resourceBundle = BUNDLE_FQN) @NotNull String key, + @Nullable Object @NotNull ... params + ) { + return BUNDLE.getLazyMessage(key, params); + } +} diff --git a/plugins/dev/intellij.kotlin.dev/src/internal/KotlinGoodCodeRedVisitor.kt b/plugins/dev/intellij.kotlin.dev/src/internal/KotlinGoodCodeRedVisitor.kt index d03c7ad0a3df..ba6105ee8c26 100644 --- a/plugins/dev/intellij.kotlin.dev/src/internal/KotlinGoodCodeRedVisitor.kt +++ b/plugins/dev/intellij.kotlin.dev/src/internal/KotlinGoodCodeRedVisitor.kt @@ -3,6 +3,7 @@ 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 @@ -18,14 +19,20 @@ internal class KotlinGoodCodeRedVisitor : GoodCodeRedVisitor { return object : KtVisitor() { override fun visitFile(file: PsiFile) { super.visitFile(file) - 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) + 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)) + } } } }