mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 13:02:30 +07:00
IJPL-160202 move navigation ui data to UsageCodeSnippetComponent
This fixes navigation for previews in "similar usage" mode. GitOrigin-RevId: 02ffa5b38870d6b392342bf9566e989bda9514c8
This commit is contained in:
committed by
intellij-monorepo-bot
parent
9b73ef56dd
commit
e9084e9ce8
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2022 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.find.findUsages.similarity;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
@@ -62,7 +62,7 @@ public class SimilarUsagesComponent extends JPanel implements Disposable {
|
||||
if (virtualFile == null) return;
|
||||
SnippetRenderingData data = UsageCodeSnippetComponent.calculateSnippetRenderingData(element, rangeInElement);
|
||||
if (data == null) return;
|
||||
final UsageCodeSnippetComponent codeSnippet = new UsageCodeSnippetComponent(data);
|
||||
final UsageCodeSnippetComponent codeSnippet = new UsageCodeSnippetComponent(data, info);
|
||||
Disposer.register(this, codeSnippet);
|
||||
JPanel headerPanelForUsage = getHeaderPanelForUsage(info, codeSnippet.getEditor().getBackgroundColor());
|
||||
if (myOriginalUsage == info) {
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
// Copyright 2000-2022 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.find.findUsages.similarity;
|
||||
|
||||
import com.intellij.lang.injection.InjectedLanguageManager;
|
||||
import com.intellij.openapi.actionSystem.CommonDataKeys;
|
||||
import com.intellij.openapi.actionSystem.DataSink;
|
||||
import com.intellij.openapi.actionSystem.UiDataProvider;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.EditorSettings;
|
||||
@@ -11,14 +14,17 @@ import com.intellij.openapi.editor.ex.EditorEx;
|
||||
import com.intellij.openapi.editor.ex.MarkupModelEx;
|
||||
import com.intellij.openapi.editor.markup.HighlighterLayer;
|
||||
import com.intellij.openapi.editor.markup.HighlighterTargetArea;
|
||||
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
|
||||
import com.intellij.openapi.util.ProperTextRange;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.pom.Navigatable;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiNamedElement;
|
||||
import com.intellij.ui.EditorTextFieldCellRenderer;
|
||||
import com.intellij.ui.RemoteTransferUIManager;
|
||||
import com.intellij.usageView.UsageInfo;
|
||||
import com.intellij.usages.impl.UsagePreviewPanel;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -26,11 +32,16 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
class UsageCodeSnippetComponent extends EditorTextFieldCellRenderer.SimpleWithGutterRendererComponent {
|
||||
private static final int CONTEXT_LINE_NUMBER = 3;
|
||||
import static com.intellij.pom.Navigatable.EMPTY_NAVIGATABLE_ARRAY;
|
||||
|
||||
UsageCodeSnippetComponent(@NotNull SnippetRenderingData renderingData) {
|
||||
class UsageCodeSnippetComponent extends EditorTextFieldCellRenderer.SimpleWithGutterRendererComponent implements UiDataProvider {
|
||||
private static final int CONTEXT_LINE_NUMBER = 3;
|
||||
@NotNull private final UsageInfo myUsageInfo;
|
||||
|
||||
UsageCodeSnippetComponent(@NotNull SnippetRenderingData renderingData,
|
||||
@NotNull UsageInfo usageInfo) {
|
||||
super(renderingData.getProject(), renderingData.getLanguage(), false);
|
||||
myUsageInfo = usageInfo;
|
||||
setupEditor();
|
||||
addUsagePreview(renderingData);
|
||||
getEditor().getGutterComponentEx().setLineNumberConverter(renderingData.getConverter());
|
||||
@@ -70,6 +81,18 @@ class UsageCodeSnippetComponent extends EditorTextFieldCellRenderer.SimpleWithGu
|
||||
highlightRange(result.getSelectionRange());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void uiDataSnapshot(@NotNull DataSink sink) {
|
||||
sink.lazy(CommonDataKeys.NAVIGATABLE_ARRAY, () -> {
|
||||
var file = myUsageInfo.getVirtualFile();
|
||||
if (file == null) return EMPTY_NAVIGATABLE_ARRAY;
|
||||
|
||||
var navigationOffset = myUsageInfo.getNavigationOffset();
|
||||
var openFileDescriptor = new OpenFileDescriptor(myUsageInfo.getProject(), file, navigationOffset);
|
||||
return new Navigatable[]{openFileDescriptor};
|
||||
});
|
||||
}
|
||||
|
||||
public static @Nullable SnippetRenderingData calculateSnippetRenderingData(@NotNull PsiElement element,
|
||||
@Nullable ProperTextRange infoRange) {
|
||||
PsiDocumentManager docManager = PsiDocumentManager.getInstance(element.getProject());
|
||||
|
||||
@@ -2,10 +2,6 @@
|
||||
package com.intellij.find.findUsages.similarity
|
||||
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.actionSystem.CommonDataKeys
|
||||
import com.intellij.openapi.actionSystem.DataSink
|
||||
import com.intellij.openapi.actionSystem.UiDataProvider
|
||||
import com.intellij.openapi.fileEditor.OpenFileDescriptor
|
||||
import com.intellij.openapi.util.Disposer
|
||||
import com.intellij.openapi.util.Iconable
|
||||
import com.intellij.ui.Gray
|
||||
@@ -28,10 +24,10 @@ import javax.swing.JPanel
|
||||
|
||||
internal class UsagePreviewComponent private constructor(
|
||||
usageView: UsageView,
|
||||
private val usageInfo: UsageInfo,
|
||||
usageInfo: UsageInfo,
|
||||
renderingData: SnippetRenderingData,
|
||||
parent: Disposable,
|
||||
) : JBPanel<JBPanel<*>>(), Disposable, UiDataProvider {
|
||||
) : JBPanel<JBPanel<*>>(), Disposable {
|
||||
var header: JPanel
|
||||
private var mySnippetComponent: UsageCodeSnippetComponent
|
||||
private val myUsageView: UsageView
|
||||
@@ -41,27 +37,18 @@ internal class UsagePreviewComponent private constructor(
|
||||
myUsageView = usageView
|
||||
header = createHeaderWithLocationLink(usageInfo)
|
||||
add(header)
|
||||
mySnippetComponent = UsageCodeSnippetComponent(renderingData)
|
||||
mySnippetComponent = UsageCodeSnippetComponent(renderingData, usageInfo)
|
||||
add(mySnippetComponent)
|
||||
if (!Disposer.tryRegister(parent, this)) {
|
||||
Disposer.dispose(parent)
|
||||
}
|
||||
}
|
||||
|
||||
override fun uiDataSnapshot(sink: DataSink) {
|
||||
sink.lazy(CommonDataKeys.NAVIGATABLE_ARRAY) {
|
||||
val file = usageInfo.virtualFile ?: return@lazy emptyArray()
|
||||
val navigationOffset = usageInfo.navigationOffset
|
||||
val openFileDescriptor = OpenFileDescriptor(usageInfo.project, file, navigationOffset)
|
||||
arrayOf(openFileDescriptor)
|
||||
}
|
||||
}
|
||||
|
||||
fun renderCluster(usageInfo: UsageInfo, renderingData: SnippetRenderingData) {
|
||||
removeAll()
|
||||
header = createHeaderWithLocationLink(usageInfo)
|
||||
Disposer.dispose(mySnippetComponent)
|
||||
mySnippetComponent = UsageCodeSnippetComponent(renderingData)
|
||||
mySnippetComponent = UsageCodeSnippetComponent(renderingData, usageInfo)
|
||||
add(header)
|
||||
add(mySnippetComponent)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user