From e71ec105dcace0c9f607aca869a29b6896d0dc35 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Thu, 3 May 2018 17:08:05 +0300 Subject: [PATCH] failed test line highlighting: "Runtime problem" text attributes --- .../testframework/TestFailedLineInspection.java | 15 +++++++++------ .../codeInsight/navigation/FailedLineTest.java | 10 ++++++++++ .../openapi/editor/colors/CodeInsightColors.java | 1 + .../options/colors/ColorSettingsUtil.java | 7 ++----- .../daemon/impl/LocalInspectionsPass.java | 6 +++++- .../src/messages/OptionsBundle.properties | 1 + .../src/DefaultColorSchemesManager.xml | 14 ++++++++++++++ 7 files changed, 42 insertions(+), 12 deletions(-) diff --git a/java/execution/impl/src/com/intellij/execution/testframework/TestFailedLineInspection.java b/java/execution/impl/src/com/intellij/execution/testframework/TestFailedLineInspection.java index a7c8547a8ae4..5def1bfd23f2 100644 --- a/java/execution/impl/src/com/intellij/execution/testframework/TestFailedLineInspection.java +++ b/java/execution/impl/src/com/intellij/execution/testframework/TestFailedLineInspection.java @@ -1,10 +1,7 @@ // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.execution.testframework; -import com.intellij.codeInspection.LocalInspectionTool; -import com.intellij.codeInspection.LocalQuickFix; -import com.intellij.codeInspection.ProblemDescriptor; -import com.intellij.codeInspection.ProblemsHolder; +import com.intellij.codeInspection.*; import com.intellij.debugger.DebuggerManagerEx; import com.intellij.execution.*; import com.intellij.execution.actions.ConfigurationContext; @@ -13,6 +10,7 @@ import com.intellij.execution.executors.DefaultRunExecutor; import com.intellij.execution.runners.ExecutionUtil; import com.intellij.execution.stacktrace.StackTraceLine; import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.colors.CodeInsightColors; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Iconable; import com.intellij.psi.*; @@ -35,8 +33,13 @@ public class TestFailedLineInspection extends LocalInspectionTool { TestStateStorage.Record state = TestFailedLineManager.getInstance(call.getProject()).getFailedLineState(call); if (state == null) return; - holder.registerProblem(call, state.errorMessage, new DebugFailedTestFix(call, state.topStacktraceLine), - new RunActionFix(call, DefaultRunExecutor.EXECUTOR_ID)); + LocalQuickFix[] fixes = {new DebugFailedTestFix(call, state.topStacktraceLine), + new RunActionFix(call, DefaultRunExecutor.EXECUTOR_ID)}; + ProblemDescriptor descriptor = InspectionManager.getInstance(call.getProject()) + .createProblemDescriptor(call, state.errorMessage, isOnTheFly, fixes, + ProblemHighlightType.GENERIC_ERROR); + descriptor.setTextAttributes(CodeInsightColors.RUNTIME_PROBLEM); + holder.registerProblem(descriptor); } }; } diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/navigation/FailedLineTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/navigation/FailedLineTest.java index 151f5c616675..5e22bf35a39e 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/navigation/FailedLineTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/navigation/FailedLineTest.java @@ -1,10 +1,14 @@ // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.java.codeInsight.navigation; +import com.intellij.codeInsight.daemon.impl.HighlightInfo; import com.intellij.execution.TestStateStorage; import com.intellij.execution.testframework.JavaTestLocator; import com.intellij.execution.testframework.sm.runner.states.TestStateInfo; import com.intellij.execution.testframework.sm.runner.ui.TestStackTraceParser; +import com.intellij.lang.annotation.HighlightSeverity; +import com.intellij.openapi.editor.markup.EffectType; +import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiMethodCallExpression; @@ -15,6 +19,7 @@ import com.intellij.execution.testframework.TestFailedLineInspection; import com.intellij.testIntegration.TestFailedLineManager; import java.util.Date; +import java.util.List; public class FailedLineTest extends LightCodeInsightFixtureTestCase { @@ -35,6 +40,11 @@ public class FailedLineTest extends LightCodeInsightFixtureTestCase { configure(); myFixture.enableInspections(new TestFailedLineInspection()); myFixture.testHighlighting(); + List infos = myFixture.doHighlighting(HighlightSeverity.ERROR); + assertEquals(1, infos.size()); + TextAttributes attributes = infos.get(0).forcedTextAttributes; + assertNotNull(attributes); + assertEquals(EffectType.BOLD_DOTTED_LINE, attributes.getEffectType()); } public void testTopStacktraceLine() { diff --git a/platform/core-api/src/com/intellij/openapi/editor/colors/CodeInsightColors.java b/platform/core-api/src/com/intellij/openapi/editor/colors/CodeInsightColors.java index 64b0d12db3c6..2d13fc214fbb 100644 --- a/platform/core-api/src/com/intellij/openapi/editor/colors/CodeInsightColors.java +++ b/platform/core-api/src/com/intellij/openapi/editor/colors/CodeInsightColors.java @@ -22,6 +22,7 @@ public interface CodeInsightColors { TextAttributesKey WARNINGS_ATTRIBUTES = TextAttributesKey.createTextAttributesKey("WARNING_ATTRIBUTES"); TextAttributesKey GENERIC_SERVER_ERROR_OR_WARNING = TextAttributesKey.createTextAttributesKey("GENERIC_SERVER_ERROR_OR_WARNING"); TextAttributesKey DUPLICATE_FROM_SERVER = TextAttributesKey.createTextAttributesKey("DUPLICATE_FROM_SERVER"); + TextAttributesKey RUNTIME_PROBLEM = TextAttributesKey.createTextAttributesKey("RUNTIME_PROBLEM"); /** * use #WEAK_WARNING_ATTRIBUTES instead */ diff --git a/platform/lang-impl/src/com/intellij/application/options/colors/ColorSettingsUtil.java b/platform/lang-impl/src/com/intellij/application/options/colors/ColorSettingsUtil.java index 3370c721e94a..de449e18fe15 100644 --- a/platform/lang-impl/src/com/intellij/application/options/colors/ColorSettingsUtil.java +++ b/platform/lang-impl/src/com/intellij/application/options/colors/ColorSettingsUtil.java @@ -26,13 +26,9 @@ import com.intellij.openapi.options.colors.AttributesDescriptor; import com.intellij.openapi.options.colors.ColorAndFontDescriptorsProvider; import com.intellij.openapi.options.colors.ColorSettingsPage; import com.intellij.openapi.util.text.StringUtil; -import java.util.HashMap; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @author lesya @@ -81,6 +77,7 @@ public class ColorSettingsUtil { descriptors.add(new AttributesDescriptor(OptionsBundle.message("options.java.attribute.descriptor.weak.warning"), CodeInsightColors.WEAK_WARNING_ATTRIBUTES)); descriptors.add(new AttributesDescriptor(OptionsBundle.message("options.java.attribute.descriptor.server.problems"), CodeInsightColors.GENERIC_SERVER_ERROR_OR_WARNING)); descriptors.add(new AttributesDescriptor(OptionsBundle.message("options.java.attribute.descriptor.server.duplicate"), CodeInsightColors.DUPLICATE_FROM_SERVER)); + descriptors.add(new AttributesDescriptor(OptionsBundle.message("options.java.attribute.descriptor.runtime"), CodeInsightColors.RUNTIME_PROBLEM)); for (SeveritiesProvider provider : Extensions.getExtensions(SeveritiesProvider.EP_NAME)) { for (HighlightInfoType highlightInfoType : provider.getSeveritiesHighlightInfoTypes()) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java index f97506184694..be17bea38f18 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java @@ -25,6 +25,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.editor.colors.EditorColorsScheme; +import com.intellij.openapi.editor.colors.TextAttributesKey; import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.extensions.PluginId; import com.intellij.openapi.keymap.Keymap; @@ -353,7 +354,10 @@ public class LocalInspectionsPass extends ProgressableTextEditorHighlightingPass boolean isFileLevel = psiElement instanceof PsiFile && textRange.equals(psiElement.getTextRange()); final HighlightSeverity severity = highlightInfoType.getSeverity(psiElement); - TextAttributes attributes = mySeverityRegistrar.getTextAttributesBySeverity(severity); + TextAttributesKey attributesKey = ((ProblemDescriptorBase)problemDescriptor).getEnforcedTextAttributes(); + TextAttributes attributes = attributesKey == null || getColorsScheme() == null + ? mySeverityRegistrar.getTextAttributesBySeverity(severity) + : getColorsScheme().getAttributes(attributesKey); HighlightInfo.Builder b = HighlightInfo.newHighlightInfo(highlightInfoType) .range(psiElement, textRange.getStartOffset(), textRange.getEndOffset()) .description(message) diff --git a/platform/platform-resources-en/src/messages/OptionsBundle.properties b/platform/platform-resources-en/src/messages/OptionsBundle.properties index 58b6897d9966..f78cd55b78f7 100644 --- a/platform/platform-resources-en/src/messages/OptionsBundle.properties +++ b/platform/platform-resources-en/src/messages/OptionsBundle.properties @@ -70,6 +70,7 @@ options.java.attribute.descriptor.warning=Errors and Warnings//Warning options.java.attribute.descriptor.deprecated.symbol=Errors and Warnings//Deprecated symbol options.java.attribute.descriptor.marked.for.removal.symbol=Errors and Warnings//Deprecated symbol marked for removal options.java.attribute.descriptor.unused.symbol=Errors and Warnings//Unused symbol +options.java.attribute.descriptor.runtime=Errors and Warnings//Runtime problem options.java.attribute.descriptor.class=Classes and Interfaces//Class options.java.attribute.descriptor.anonymous.class=Classes and Interfaces//Anonymous class options.java.attribute.descriptor.type.parameter=Parameters//Type parameter diff --git a/platform/platform-resources/src/DefaultColorSchemesManager.xml b/platform/platform-resources/src/DefaultColorSchemesManager.xml index 4b3187afdbc0..fe3a94f18ff7 100644 --- a/platform/platform-resources/src/DefaultColorSchemesManager.xml +++ b/platform/platform-resources/src/DefaultColorSchemesManager.xml @@ -296,6 +296,13 @@ + +