From cd6619cc6bd530bcc76e968b51991275101fc211 Mon Sep 17 00:00:00 2001 From: Mikhail Pyltsin Date: Wed, 21 Feb 2024 14:02:16 +0100 Subject: [PATCH] [java-console] IDEA-346861 Support change ClassFinderFilter's style in settings GitOrigin-RevId: 696419662953dfdd0a7a799ed2ad1f5611d18fbc --- .../resources/META-INF/JvmAnalysisPlugin.xml | 1 + .../console/ClassFinderConsoleColorsPage.java | 90 +++++++++++++++++++ .../console/ClassFinderFilter.kt | 10 ++- .../src/DefaultColorSchemesManager.xml | 16 +++- 4 files changed, 111 insertions(+), 6 deletions(-) create mode 100644 jvm/jvm-analysis-impl/src/com/intellij/analysis/customization/console/ClassFinderConsoleColorsPage.java diff --git a/jvm/jvm-analysis-impl/resources/META-INF/JvmAnalysisPlugin.xml b/jvm/jvm-analysis-impl/resources/META-INF/JvmAnalysisPlugin.xml index 1a7d8c7e8626..d3c507c70eff 100644 --- a/jvm/jvm-analysis-impl/resources/META-INF/JvmAnalysisPlugin.xml +++ b/jvm/jvm-analysis-impl/resources/META-INF/JvmAnalysisPlugin.xml @@ -165,6 +165,7 @@ + diff --git a/jvm/jvm-analysis-impl/src/com/intellij/analysis/customization/console/ClassFinderConsoleColorsPage.java b/jvm/jvm-analysis-impl/src/com/intellij/analysis/customization/console/ClassFinderConsoleColorsPage.java new file mode 100644 index 000000000000..b4234fce8b00 --- /dev/null +++ b/jvm/jvm-analysis-impl/src/com/intellij/analysis/customization/console/ClassFinderConsoleColorsPage.java @@ -0,0 +1,90 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.analysis.customization.console; + +import com.intellij.execution.impl.ConsoleViewUtil; +import com.intellij.java.JavaBundle; +import com.intellij.openapi.editor.colors.EditorColorsScheme; +import com.intellij.openapi.editor.colors.TextAttributesKey; +import com.intellij.openapi.editor.ex.EditorEx; +import com.intellij.openapi.fileTypes.PlainSyntaxHighlighter; +import com.intellij.openapi.fileTypes.PlainTextFileType; +import com.intellij.openapi.fileTypes.SyntaxHighlighter; +import com.intellij.openapi.options.OptionsBundle; +import com.intellij.openapi.options.colors.AttributesDescriptor; +import com.intellij.openapi.options.colors.ColorDescriptor; +import com.intellij.openapi.options.colors.ColorSettingsPage; +import com.intellij.psi.codeStyle.DisplayPriority; +import com.intellij.psi.codeStyle.DisplayPrioritySortable; +import com.intellij.ui.EditorCustomization; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.util.Map; + +public final class ClassFinderConsoleColorsPage implements ColorSettingsPage, DisplayPrioritySortable, EditorCustomization { + public static final TextAttributesKey + TERMINAL_CLASS_NAME_LOG_REFERENCE = TextAttributesKey.createTextAttributesKey("TERMINAL_CLASS_NAME_LOG_REFERENCE"); + + private static final String DEMO_TEXT = + """ + com.example.ClassName + """; + + private static final AttributesDescriptor LOG_CLASS_NAME = + new AttributesDescriptor(OptionsBundle.messagePointer("options.language.defaults.class.name"), TERMINAL_CLASS_NAME_LOG_REFERENCE); + private static final AttributesDescriptor[] ATTRS = {LOG_CLASS_NAME,}; + + + private static final Map ADDITIONAL_HIGHLIGHT_DESCRIPTORS = + Map.of("className", TERMINAL_CLASS_NAME_LOG_REFERENCE); + + @Override + public @NotNull Map getAdditionalHighlightingTagToDescriptorMap() { + return ADDITIONAL_HIGHLIGHT_DESCRIPTORS; + } + + @Override + public @NotNull String getDisplayName() { + return JavaBundle.message("jvm.logging.configurable.display.name"); + } + + @Override + public @NotNull Icon getIcon() { + return PlainTextFileType.INSTANCE.getIcon(); + } + + @Override + public AttributesDescriptor @NotNull [] getAttributeDescriptors() { + return ATTRS; + } + + @Override + public ColorDescriptor @NotNull [] getColorDescriptors() { + return ColorDescriptor.EMPTY_ARRAY; + } + + @Override + public @NotNull SyntaxHighlighter getHighlighter() { + return new PlainSyntaxHighlighter(); + } + + @Override + public @NotNull String getDemoText() { + return DEMO_TEXT; + } + + @Override + public DisplayPriority getPriority() { + return DisplayPriority.COMMON_SETTINGS; + } + + @Override + public @NotNull EditorColorsScheme customizeColorScheme(@NotNull EditorColorsScheme scheme) { + return ConsoleViewUtil.updateConsoleColorScheme(scheme); + } + + @Override + public void customize(@NotNull EditorEx editor) { + editor.getSettings().setCaretRowShown(false); + } +} diff --git a/jvm/jvm-analysis-impl/src/com/intellij/analysis/customization/console/ClassFinderFilter.kt b/jvm/jvm-analysis-impl/src/com/intellij/analysis/customization/console/ClassFinderFilter.kt index 3b6fb33d7733..42d09566f132 100644 --- a/jvm/jvm-analysis-impl/src/com/intellij/analysis/customization/console/ClassFinderFilter.kt +++ b/jvm/jvm-analysis-impl/src/com/intellij/analysis/customization/console/ClassFinderFilter.kt @@ -1,8 +1,10 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.analysis.customization.console +import com.intellij.analysis.customization.console.ClassFinderConsoleColorsPage.TERMINAL_CLASS_NAME_LOG_REFERENCE import com.intellij.execution.filters.Filter import com.intellij.execution.filters.HyperlinkInfo +import com.intellij.openapi.editor.colors.EditorColorsManager import com.intellij.openapi.editor.markup.EffectType import com.intellij.openapi.editor.markup.TextAttributes import com.intellij.openapi.project.Project @@ -27,14 +29,14 @@ private val HARDCODED_NOT_CLASS = setOf( internal class ClassFinderFilter(private val myProject: Project, myScope: GlobalSearchScope) : Filter { private val cache = ClassInfoResolver(myProject, myScope) + private val hyperLinkAttributes: TextAttributes = EditorColorsManager.getInstance()?.globalScheme?.getAttributes(TERMINAL_CLASS_NAME_LOG_REFERENCE)?: hardCodedHyperLinkAttributes() override fun applyFilter(line: String, entireLength: Int): Filter.Result? { val textStartOffset = entireLength - line.length - val expectedClasses = findProbableClasses(line) val results: MutableList = ArrayList() + val attributes = hyperLinkAttributes for (probableClass in expectedClasses) { - val attributes = hyperLinkAttributes() results.add( Filter.Result(textStartOffset + probableClass.from, @@ -49,7 +51,7 @@ internal class ClassFinderFilter(private val myProject: Project, myScope: Global return Filter.Result(results) } - private fun hyperLinkAttributes(): TextAttributes { + private fun hardCodedHyperLinkAttributes(): TextAttributes { val attributes = TextAttributes() attributes.effectType = EffectType.BOLD_DOTTED_LINE attributes.effectColor = NamedColorUtil.getInactiveTextColor() diff --git a/platform/platform-resources/src/DefaultColorSchemesManager.xml b/platform/platform-resources/src/DefaultColorSchemesManager.xml index 826e3a374178..f2423d69a329 100644 --- a/platform/platform-resources/src/DefaultColorSchemesManager.xml +++ b/platform/platform-resources/src/DefaultColorSchemesManager.xml @@ -637,6 +637,12 @@ + - + +