[java-console] IDEA-346861 Support change ClassFinderFilter's style in settings

GitOrigin-RevId: 696419662953dfdd0a7a799ed2ad1f5611d18fbc
This commit is contained in:
Mikhail Pyltsin
2024-02-21 14:02:16 +01:00
committed by intellij-monorepo-bot
parent 58dcd393a1
commit cd6619cc6b
4 changed files with 111 additions and 6 deletions

View File

@@ -165,6 +165,7 @@
<inspectionCustomComponent implementation="com.intellij.codeInsight.options.JavaInspectionButtons"/>
<!--console filter-->
<colorSettingsPage implementation="com.intellij.analysis.customization.console.ClassFinderConsoleColorsPage"/>
<consoleFilterProvider implementation="com.intellij.analysis.customization.console.ClassLoggingConsoleFilterProvider"/>
<advancedSetting id="process.console.output.to.find.class.names" default="true" groupKey="group.advanced.settings.jvm" bundle="messages.JvmAnalysisBundle"/>
<statistics.counterUsagesCollector implementationClass="com.intellij.analysis.customization.console.LogConsoleLogHandlerCollectors"/>

View File

@@ -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>ClassName</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<String, TextAttributesKey> ADDITIONAL_HIGHLIGHT_DESCRIPTORS =
Map.of("className", TERMINAL_CLASS_NAME_LOG_REFERENCE);
@Override
public @NotNull Map<String, TextAttributesKey> 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);
}
}

View File

@@ -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<Filter.Result> = 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()

View File

@@ -637,6 +637,12 @@
<option name="BACKGROUND" value="d8d8d8"/>
</value>
</option>
<option name="TERMINAL_CLASS_NAME_LOG_REFERENCE">
<value>
<option name="EFFECT_TYPE" value="5" />
<option name="EFFECT_COLOR" value="808080" />
</value>
</option>
<option name="LIVE_TEMPLATE_ATTRIBUTES">
<value>
<option name="FOREGROUND"/>
@@ -667,7 +673,7 @@
<value>
<option name="FOREGROUND"/>
<option name="BACKGROUND" value="e4e4ff" deuteranopia="D9E6FF" protanopia="D9E6FF"/>
<option name="ERROR_STRIPE_COLOR" value="baa8ff" deuteranopia="acb0bf" protanopia="acb0bf"/>
<option name="ERROR_STRIPE_COLOR" value="baa8ff" deuteranopia="acb0bf" protanopia="acb0bf"/>
<option name="EFFECT_COLOR"/>
</value>
</option>
@@ -1395,7 +1401,7 @@
<option name="FOREGROUND" value="bc5150" />
</value>
</option>
<option name="BREADCRUMBS_DEFAULT">
<value>
<option name="FOREGROUND" value="585858"/>
@@ -2538,6 +2544,12 @@
<option name="BACKGROUND" value="6b6b6b"/>
</value>
</option>
<option name="TERMINAL_CLASS_NAME_LOG_REFERENCE">
<value>
<option name="EFFECT_TYPE" value="5" />
<option name="EFFECT_COLOR" value="808080" />
</value>
</option>
<option name="SPY-JS.FUNCTION_SCOPE">
<value>
<option name="BACKGROUND" value="3A3A3A"/>