mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 11:53:49 +07:00
[Rider] Lift some of the common UI Rider/CLionNova logic to rdclient and the platform.
(So that the Rider/CLionNova thin clients could use it) GitOrigin-RevId: 26802752ccf2a27fd66394c44373ba573ab7a19e
This commit is contained in:
committed by
intellij-monorepo-bot
parent
6bf4b6f983
commit
042406f675
@@ -12,6 +12,8 @@
|
||||
implementationClass="com.intellij.openapi.vcs.ex.LineStatusMakerEscEditorHandler"
|
||||
id="LineStatusTrackerMarkerPopup"
|
||||
order="before hide-hints"/>
|
||||
|
||||
<mergeableGutterIconRendererProvider implementation="com.intellij.diff.util.DiffGutterRendererMergeableRendererProvider" />
|
||||
</extensions>
|
||||
|
||||
<applicationListeners>
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.diff.util;
|
||||
|
||||
import com.intellij.codeInsight.daemon.GutterMark;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.editor.GutterMarkWrapper;
|
||||
import com.intellij.openapi.editor.ImportantNonMergeableGutterMark;
|
||||
import com.intellij.openapi.editor.MergeableGutterIconRenderer;
|
||||
import com.intellij.openapi.editor.MergeableGutterIconRendererProvider;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@ApiStatus.Internal
|
||||
public class DiffGutterRendererMergeableRendererProvider implements MergeableGutterIconRendererProvider {
|
||||
|
||||
public static class DiffMergeableGutterMarkRenderer extends GutterMarkWrapper<DiffGutterRenderer> implements ImportantNonMergeableGutterMark {
|
||||
|
||||
protected DiffMergeableGutterMarkRenderer(DiffGutterRenderer originalMark) {
|
||||
super(originalMark);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable AnAction getClickAction() { return originalMark.getClickAction(); }
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) { return obj instanceof DiffMergeableGutterMarkRenderer && originalMark.equals(((DiffMergeableGutterMarkRenderer)obj).originalMark); }
|
||||
|
||||
@Override
|
||||
public int hashCode() { return System.identityHashCode(originalMark); }
|
||||
|
||||
@Override
|
||||
public int getWeight() { return 0; }
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable MergeableGutterIconRenderer tryGetMergeableIconRenderer(@NotNull GutterMark mark) {
|
||||
if (!(mark instanceof DiffGutterRenderer)) return null;
|
||||
return new DiffMergeableGutterMarkRenderer((DiffGutterRenderer)mark);
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,8 @@
|
||||
dynamic="true">
|
||||
<with attribute="implementationClass" implements="com.intellij.openapi.fileTypes.SyntaxHighlighter"/>
|
||||
</extensionPoint>
|
||||
|
||||
<extensionPoint qualifiedName="com.intellij.mergeableGutterIconRendererProvider" interface="com.intellij.openapi.editor.MergeableGutterIconRendererProvider" dynamic="true"/>
|
||||
</extensionPoints>
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<applicationService serviceImplementation="com.intellij.ide.ui.UISettingsStateDefaultsProviderImpl"
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.openapi.editor;
|
||||
|
||||
import com.intellij.openapi.actionSystem.ActionGroup;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.editor.markup.GutterDraggableObject;
|
||||
import com.intellij.openapi.editor.markup.GutterIconRenderer;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
@ApiStatus.Internal
|
||||
public abstract class GutterMarkWrapper<T extends GutterIconRenderer> extends GutterIconRenderer implements MergeableGutterIconRenderer {
|
||||
|
||||
protected final T originalMark;
|
||||
|
||||
public T getOriginalMark() { return originalMark; }
|
||||
|
||||
protected GutterMarkWrapper(T originalMark) {
|
||||
this.originalMark = originalMark;
|
||||
}
|
||||
|
||||
@Override public @NotNull Icon getIcon() { return originalMark.getIcon(); }
|
||||
@Override public @Nullable String getTooltipText() { return originalMark.getTooltipText(); }
|
||||
@Override public @NotNull Alignment getAlignment() { return Alignment.LEFT; }
|
||||
@Override public @NotNull String getAccessibleName() { return originalMark.getAccessibleName(); }
|
||||
@Override public @Nullable String getAccessibleTooltipText() { return originalMark.getAccessibleTooltipText(); }
|
||||
@Override public @Nullable GutterDraggableObject getDraggableObject() { return originalMark.getDraggableObject(); }
|
||||
@Override public @Nullable AnAction getMiddleButtonClickAction() { return originalMark.getMiddleButtonClickAction(); }
|
||||
@Override public @Nullable ActionGroup getPopupMenuActions() { return originalMark.getPopupMenuActions(); }
|
||||
@Override public @Nullable AnAction getRightButtonClickAction() { return originalMark.getRightButtonClickAction(); }
|
||||
@Override public boolean isNavigateAction() { return originalMark.isNavigateAction(); }
|
||||
@Override public boolean isDumbAware() { return originalMark.isDumbAware(); }
|
||||
@Override public @NotNull String toString() { return originalMark.toString(); }
|
||||
|
||||
@Override public abstract @Nullable AnAction getClickAction();
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.openapi.editor;
|
||||
|
||||
import com.intellij.codeInsight.daemon.GutterMark;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
/**
|
||||
* This interface is used in some {@link GutterMarkPreprocessor} implementors (the ones that merge the gutter marks) to
|
||||
* mark a gutter mark as a non-participant in the merge logic.
|
||||
*/
|
||||
@ApiStatus.Internal
|
||||
public interface ImportantNonMergeableGutterMark extends GutterMark {
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.openapi.editor;
|
||||
|
||||
import com.intellij.codeInsight.daemon.GutterMark;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
@ApiStatus.Internal
|
||||
public interface MergeableGutterIconRenderer extends GutterMark, Comparable<MergeableGutterIconRenderer> {
|
||||
int getWeight();
|
||||
|
||||
@Override
|
||||
default int compareTo(MergeableGutterIconRenderer other) {
|
||||
return -Integer.compare(this.getWeight(), other.getWeight());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.openapi.editor;
|
||||
|
||||
import com.intellij.codeInsight.daemon.GutterMark;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Objects;
|
||||
|
||||
@ApiStatus.Internal
|
||||
public abstract class MergeableGutterIconRendererExternalWrapper implements MergeableGutterIconRenderer {
|
||||
|
||||
private final GutterMark myOriginalMark;
|
||||
|
||||
public MergeableGutterIconRendererExternalWrapper(GutterMark originalMark) {
|
||||
myOriginalMark = originalMark;
|
||||
}
|
||||
|
||||
public GutterMark getOriginalMark() { return myOriginalMark; }
|
||||
|
||||
@Override
|
||||
public @NotNull Icon getIcon() { return myOriginalMark.getIcon(); }
|
||||
@Override
|
||||
public @Nullable String getTooltipText() { return myOriginalMark.getTooltipText(); }
|
||||
|
||||
@Override
|
||||
public boolean equals(@Nullable Object other) {
|
||||
if (!(other instanceof MergeableGutterIconRendererExternalWrapper)) return false;
|
||||
return Objects.equals(myOriginalMark, ((MergeableGutterIconRendererExternalWrapper)other).myOriginalMark);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hashCode(myOriginalMark);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.openapi.editor;
|
||||
|
||||
import com.intellij.codeInsight.daemon.GutterMark;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
// This is a bit of a crutch inherited from the Forefathers. Please refer to RiderGutterMarksPreprocessor if you have questions.
|
||||
@ApiStatus.Internal
|
||||
public interface MergeableGutterIconRendererProvider {
|
||||
|
||||
ExtensionPointName<MergeableGutterIconRendererProvider> EP_NAME = ExtensionPointName.create("com.intellij.mergeableGutterIconRendererProvider");
|
||||
|
||||
@Nullable MergeableGutterIconRenderer tryGetMergeableIconRenderer(@NotNull GutterMark mark);
|
||||
}
|
||||
Reference in New Issue
Block a user