From e846333774c49577ae4e9d67a55c53b6cfd494a8 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Thu, 3 Apr 2025 03:33:29 +0400 Subject: [PATCH] migrate to UiDataProvider Fixes IJPL-182664. GitOrigin-RevId: 5e1a39f8e247a3244efac3801634d3c72b39d4cd --- .../usages/impl/rules/ClassGroupingRule.java | 25 ++++++----------- .../usages/impl/rules/MethodGroupingRule.java | 24 ++++++---------- .../impl/rules/PackageGroupingRule.java | 21 ++++---------- platform/lang-impl/api-dump-unreviewed.txt | 4 +-- .../intellij/find/impl/FindInProjectUtil.java | 16 +++-------- platform/refactoring/api-dump.txt | 4 +-- .../PsiElement2UsageTargetAdapter.java | 28 ++++++------------- platform/usageView-impl/api-dump.txt | 4 +-- .../usages/impl/UsageViewManagerImpl.java | 22 +++++++-------- .../impl/rules/DirectoryGroupingRule.java | 24 +++++----------- .../usages/impl/rules/FileGroupingRule.java | 24 +++++----------- 11 files changed, 64 insertions(+), 132 deletions(-) diff --git a/java/java-impl/src/com/intellij/usages/impl/rules/ClassGroupingRule.java b/java/java-impl/src/com/intellij/usages/impl/rules/ClassGroupingRule.java index 508657185bcb..783bfd03d8bf 100644 --- a/java/java-impl/src/com/intellij/usages/impl/rules/ClassGroupingRule.java +++ b/java/java-impl/src/com/intellij/usages/impl/rules/ClassGroupingRule.java @@ -4,8 +4,8 @@ package com.intellij.usages.impl.rules; import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.navigation.NavigationItemFileStatus; import com.intellij.openapi.actionSystem.CommonDataKeys; -import com.intellij.openapi.actionSystem.DataProvider; -import com.intellij.openapi.actionSystem.PlatformCoreDataKeys; +import com.intellij.openapi.actionSystem.DataSink; +import com.intellij.openapi.actionSystem.UiDataProvider; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.util.Iconable; import com.intellij.openapi.util.NlsSafe; @@ -22,7 +22,6 @@ import com.intellij.usages.UsageTarget; import com.intellij.usages.UsageView; import com.intellij.usages.rules.PsiElementUsage; import com.intellij.usages.rules.SingleParentUsageGroupingRule; -import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -88,7 +87,7 @@ class ClassGroupingRule extends SingleParentUsageGroupingRule implements DumbAwa return index < 0? name : name.substring(0, index); } - private static class ClassUsageGroup implements UsageGroup, DataProvider { + private static class ClassUsageGroup implements UsageGroup, UiDataProvider { private final SmartPsiElementPointer myClassPointer; private final @NlsSafe String myText; private final String myQName; @@ -169,22 +168,14 @@ class ClassGroupingRule extends SingleParentUsageGroupingRule implements DumbAwa } @Override - public @Nullable Object getData(@NotNull String dataId) { - if (PlatformCoreDataKeys.BGT_DATA_PROVIDER.is(dataId)) { - return (DataProvider)this::getSlowData; - } - return null; - } - - private @Nullable Object getSlowData(@NonNls String dataId) { - if (CommonDataKeys.PSI_ELEMENT.is(dataId)) { + public void uiDataSnapshot(@NotNull DataSink sink) { + sink.lazy(CommonDataKeys.PSI_ELEMENT, () -> { return getPsiClass(); - } - else if (UsageView.USAGE_INFO_KEY.is(dataId)) { + }); + sink.lazy(UsageView.USAGE_INFO_KEY, () -> { PsiClass psiClass = getPsiClass(); return psiClass == null ? null : new UsageInfo(psiClass); - } - return null; + }); } } } \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java b/java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java index 2426a4d7d807..53de3bd0bb94 100644 --- a/java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java +++ b/java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java @@ -4,8 +4,8 @@ package com.intellij.usages.impl.rules; import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.navigation.NavigationItemFileStatus; import com.intellij.openapi.actionSystem.CommonDataKeys; -import com.intellij.openapi.actionSystem.DataProvider; -import com.intellij.openapi.actionSystem.PlatformCoreDataKeys; +import com.intellij.openapi.actionSystem.DataSink; +import com.intellij.openapi.actionSystem.UiDataProvider; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Iconable; @@ -63,7 +63,7 @@ public class MethodGroupingRule extends SingleParentUsageGroupingRule { return null; } - private static class MethodUsageGroup implements UsageGroup, DataProvider { + private static class MethodUsageGroup implements UsageGroup, UiDataProvider { private final SmartPsiElementPointer myMethodPointer; private final @NlsSafe String myName; private final Icon myIcon; @@ -169,22 +169,14 @@ public class MethodGroupingRule extends SingleParentUsageGroupingRule { } @Override - public @Nullable Object getData(@NotNull String dataId) { - if (PlatformCoreDataKeys.BGT_DATA_PROVIDER.is(dataId)) { - return (DataProvider)this::getSlowData; - } - return null; - } - - private @Nullable Object getSlowData(@NotNull String dataId) { - if (CommonDataKeys.PSI_ELEMENT.is(dataId)) { + public void uiDataSnapshot(@NotNull DataSink sink) { + sink.lazy(CommonDataKeys.PSI_ELEMENT, () -> { return getMethod(); - } - else if (UsageView.USAGE_INFO_KEY.is(dataId)) { + }); + sink.lazy(UsageView.USAGE_INFO_KEY, () -> { PsiMethod method = getMethod(); return method == null ? null : new UsageInfo(method); - } - return null; + }); } } } \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/usages/impl/rules/PackageGroupingRule.java b/java/java-impl/src/com/intellij/usages/impl/rules/PackageGroupingRule.java index dae186085b76..d3d91ac90a11 100644 --- a/java/java-impl/src/com/intellij/usages/impl/rules/PackageGroupingRule.java +++ b/java/java-impl/src/com/intellij/usages/impl/rules/PackageGroupingRule.java @@ -2,8 +2,8 @@ package com.intellij.usages.impl.rules; import com.intellij.openapi.actionSystem.CommonDataKeys; -import com.intellij.openapi.actionSystem.DataProvider; -import com.intellij.openapi.actionSystem.PlatformCoreDataKeys; +import com.intellij.openapi.actionSystem.DataSink; +import com.intellij.openapi.actionSystem.UiDataProvider; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.FileStatus; import com.intellij.openapi.vcs.FileStatusManager; @@ -14,7 +14,6 @@ import com.intellij.psi.PsiManager; import com.intellij.psi.PsiPackage; import com.intellij.usages.UsageGroup; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -42,7 +41,7 @@ public final class PackageGroupingRule extends DirectoryGroupingRule { return "UsageGrouping.Package"; } - private final class PackageGroup implements UsageGroup, DataProvider { + private final class PackageGroup implements UsageGroup, UiDataProvider { private final PsiPackage myPackage; private Icon myIcon; @@ -109,18 +108,10 @@ public final class PackageGroupingRule extends DirectoryGroupingRule { } @Override - public @Nullable Object getData(@NotNull String dataId) { - if (PlatformCoreDataKeys.BGT_DATA_PROVIDER.is(dataId)) { - return (DataProvider)slowId -> getSlowData(slowId); - } - return null; - } - - private @Nullable Object getSlowData(@NotNull String dataId) { - if (CommonDataKeys.PSI_ELEMENT.is(dataId)) { + public void uiDataSnapshot(@NotNull DataSink sink) { + sink.lazy(CommonDataKeys.PSI_ELEMENT, () -> { return myPackage; - } - return null; + }); } } } diff --git a/platform/lang-impl/api-dump-unreviewed.txt b/platform/lang-impl/api-dump-unreviewed.txt index 6151ac62b05b..a7290bc03eee 100644 --- a/platform/lang-impl/api-dump-unreviewed.txt +++ b/platform/lang-impl/api-dump-unreviewed.txt @@ -7622,13 +7622,12 @@ f:com.intellij.find.impl.FindInProjectUtil - s:setupViewPresentation(Z,com.intellij.find.FindModel):com.intellij.usages.UsageViewPresentation c:com.intellij.find.impl.FindInProjectUtil$StringUsageTarget - com.intellij.navigation.ItemPresentation -- com.intellij.openapi.actionSystem.DataProvider +- com.intellij.openapi.actionSystem.UiDataProvider - com.intellij.usages.ConfigurableUsageTarget - pf:myFindModel:com.intellij.find.FindModel - pf:myProject:com.intellij.openapi.project.Project - (com.intellij.openapi.project.Project,com.intellij.find.FindModel):V - findUsages():V -- getData(java.lang.String):java.lang.Object - getIcon(Z):javax.swing.Icon - getLongDescriptiveName():java.lang.String - getName():java.lang.String @@ -7637,6 +7636,7 @@ c:com.intellij.find.impl.FindInProjectUtil$StringUsageTarget - getShortcut():com.intellij.openapi.actionSystem.KeyboardShortcut - isValid():Z - showSettings():V +- uiDataSnapshot(com.intellij.openapi.actionSystem.DataSink):V f:com.intellij.find.impl.FindManagerImpl - com.intellij.find.FindManager - (com.intellij.openapi.project.Project):V diff --git a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java index 9abfbb66c3bd..a6f8e1c5e7f8 100644 --- a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java +++ b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java @@ -480,7 +480,7 @@ public final class FindInProjectUtil { } } - public static class StringUsageTarget implements ConfigurableUsageTarget, ItemPresentation, DataProvider { + public static class StringUsageTarget implements ConfigurableUsageTarget, ItemPresentation, UiDataProvider { protected final @NotNull Project myProject; protected final @NotNull FindModel myFindModel; @@ -539,18 +539,10 @@ public final class FindInProjectUtil { } @Override - public @Nullable Object getData(@NotNull String dataId) { - if (PlatformCoreDataKeys.BGT_DATA_PROVIDER.is(dataId)) { - return (DataProvider)slowId -> getSlowData(slowId); - } - return null; - } - - private @Nullable Object getSlowData(@NotNull String dataId) { - if (UsageView.USAGE_SCOPE.is(dataId)) { + public void uiDataSnapshot(@NotNull DataSink sink) { + sink.lazy(UsageView.USAGE_SCOPE, () -> { return getScopeFromModel(myProject, myFindModel); - } - return null; + }); } } diff --git a/platform/refactoring/api-dump.txt b/platform/refactoring/api-dump.txt index 5795dc252e37..e52408e2fe6a 100644 --- a/platform/refactoring/api-dump.txt +++ b/platform/refactoring/api-dump.txt @@ -79,7 +79,7 @@ a:com.intellij.find.FindResult c:com.intellij.find.findUsages.PsiElement2UsageTargetAdapter - com.intellij.navigation.ItemPresentation - com.intellij.navigation.PsiElementNavigationItem -- com.intellij.openapi.actionSystem.DataProvider +- com.intellij.openapi.actionSystem.UiCompatibleDataProvider - com.intellij.usages.ConfigurableUsageTarget - com.intellij.usages.PsiElementUsageTarget - pf:myOptions:com.intellij.find.findUsages.FindUsagesOptions @@ -93,7 +93,6 @@ c:com.intellij.find.findUsages.PsiElement2UsageTargetAdapter - s:convertToPsiElements(com.intellij.find.findUsages.PsiElement2UsageTargetAdapter[]):com.intellij.psi.PsiElement[] - findUsages():V - findUsagesInEditor(com.intellij.openapi.fileEditor.FileEditor):V -- getData(java.lang.String):java.lang.Object - getElement():com.intellij.psi.PsiElement - getFiles():com.intellij.openapi.vfs.VirtualFile[] - getIcon(Z):javax.swing.Icon @@ -110,6 +109,7 @@ c:com.intellij.find.findUsages.PsiElement2UsageTargetAdapter - isValid():Z - navigate(Z):V - showSettings():V +- uiDataSnapshot(com.intellij.openapi.actionSystem.DataSink):V - update():V f:com.intellij.ide.actions.FqnUtil - ():V diff --git a/platform/refactoring/src/com/intellij/find/findUsages/PsiElement2UsageTargetAdapter.java b/platform/refactoring/src/com/intellij/find/findUsages/PsiElement2UsageTargetAdapter.java index 12c359326def..7c7b7e6bbf60 100644 --- a/platform/refactoring/src/com/intellij/find/findUsages/PsiElement2UsageTargetAdapter.java +++ b/platform/refactoring/src/com/intellij/find/findUsages/PsiElement2UsageTargetAdapter.java @@ -9,9 +9,9 @@ import com.intellij.lang.findUsages.DescriptiveNameUtil; import com.intellij.navigation.ItemPresentation; import com.intellij.navigation.NavigationItem; import com.intellij.navigation.PsiElementNavigationItem; -import com.intellij.openapi.actionSystem.DataProvider; +import com.intellij.openapi.actionSystem.DataSink; import com.intellij.openapi.actionSystem.KeyboardShortcut; -import com.intellij.openapi.actionSystem.PlatformCoreDataKeys; +import com.intellij.openapi.actionSystem.UiCompatibleDataProvider; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.fileEditor.FileEditor; import com.intellij.openapi.project.Project; @@ -39,7 +39,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; public class PsiElement2UsageTargetAdapter - implements PsiElementUsageTarget, DataProvider, PsiElementNavigationItem, ItemPresentation, ConfigurableUsageTarget { + implements PsiElementUsageTarget, UiCompatibleDataProvider, PsiElementNavigationItem, ItemPresentation, ConfigurableUsageTarget { private final SmartPsiElementPointer myPointer; protected final @NotNull FindUsagesOptions myOptions; private String myPresentableText; @@ -187,24 +187,12 @@ public class PsiElement2UsageTargetAdapter } @Override - public @Nullable Object getData(@NotNull String dataId) { - if (PlatformCoreDataKeys.BGT_DATA_PROVIDER.is(dataId)) { - return (DataProvider)this::getSlowData; - } - else if (UsageView.USAGE_SCOPE.is(dataId)) { - return myOptions.searchScope; - } - return null; - } - - private @Nullable Object getSlowData(@NotNull String dataId) { - if (UsageView.USAGE_INFO_KEY.is(dataId)) { + public void uiDataSnapshot(@NotNull DataSink sink) { + sink.set(UsageView.USAGE_SCOPE, myOptions.searchScope); + sink.lazy(UsageView.USAGE_INFO_KEY, () -> { PsiElement element = getElement(); - if (element != null && element.getTextRange() != null) { - return new UsageInfo(element); - } - } - return null; + return element != null && element.getTextRange() != null ? new UsageInfo(element) : null; + }); } @Override diff --git a/platform/usageView-impl/api-dump.txt b/platform/usageView-impl/api-dump.txt index 3ea967ab3a2d..373a96263b35 100644 --- a/platform/usageView-impl/api-dump.txt +++ b/platform/usageView-impl/api-dump.txt @@ -174,7 +174,7 @@ c:com.intellij.usages.impl.rules.FileGroupingRule - getRank():I - isGroupingActionInverted():Z c:com.intellij.usages.impl.rules.FileGroupingRule$FileUsageGroup -- com.intellij.openapi.actionSystem.DataProvider +- com.intellij.openapi.actionSystem.UiDataProvider - com.intellij.usages.NamedPresentably - com.intellij.usages.UsageGroup - (com.intellij.openapi.project.Project,com.intellij.openapi.vfs.VirtualFile):V @@ -182,7 +182,6 @@ c:com.intellij.usages.impl.rules.FileGroupingRule$FileUsageGroup - canNavigateToSource():Z - compareTo(com.intellij.usages.UsageGroup):I - equals(java.lang.Object):Z -- getData(java.lang.String):java.lang.Object - getFileStatus():com.intellij.openapi.vcs.FileStatus - getIcon():javax.swing.Icon - getPresentableGroupText():java.lang.String @@ -190,6 +189,7 @@ c:com.intellij.usages.impl.rules.FileGroupingRule$FileUsageGroup - hashCode():I - isValid():Z - navigate(Z):V +- uiDataSnapshot(com.intellij.openapi.actionSystem.DataSink):V - update():V a:com.intellij.usages.impl.rules.UsageGroupBase - com.intellij.usages.UsageGroup diff --git a/platform/usageView-impl/src/com/intellij/usages/impl/UsageViewManagerImpl.java b/platform/usageView-impl/src/com/intellij/usages/impl/UsageViewManagerImpl.java index a38995525b74..0ca5eeb366ab 100644 --- a/platform/usageView-impl/src/com/intellij/usages/impl/UsageViewManagerImpl.java +++ b/platform/usageView-impl/src/com/intellij/usages/impl/UsageViewManagerImpl.java @@ -5,8 +5,10 @@ import com.intellij.find.SearchInBackgroundOption; import com.intellij.injected.editor.VirtualFileWindow; import com.intellij.lang.Language; import com.intellij.notebook.editor.BackedVirtualFile; +import com.intellij.openapi.actionSystem.CustomizedDataContext; +import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.DataProvider; -import com.intellij.openapi.actionSystem.PlatformCoreDataKeys; +import com.intellij.openapi.actionSystem.DataSink; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.diagnostic.Logger; @@ -42,6 +44,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; @@ -214,17 +217,12 @@ public class UsageViewManagerImpl extends UsageViewManager { @NotNull Supplier getMaxSearchScopeToWarnOfFallingOutOf(UsageTarget @NotNull [] searchFor) { UsageTarget target = searchFor.length > 0 ? searchFor[0] : null; - DataProvider dataProvider = target instanceof DataProvider o ? o : null; - SearchScope scope = dataProvider != null ? UsageView.USAGE_SCOPE.getData(dataProvider) : null; - if (scope != null) { - return () -> scope; - } - DataProvider bgtProvider = dataProvider != null ? PlatformCoreDataKeys.BGT_DATA_PROVIDER.getData(dataProvider) : null; - return () -> { - SearchScope scope2 = bgtProvider != null ? UsageView.USAGE_SCOPE.getData(bgtProvider) : null; - if (scope2 != null) return scope2; - return GlobalSearchScope.everythingScope(project); // by default do not warn of falling out of scope - }; + DataContext dataContext = CustomizedDataContext.withSnapshot(DataContext.EMPTY_CONTEXT, sink -> + DataSink.uiDataSnapshot(sink, target)); + return () -> Objects.requireNonNullElseGet( + dataContext.getData(UsageView.USAGE_SCOPE), + // by default, do not warn of falling out of scope + () -> GlobalSearchScope.everythingScope(project)); } @Override diff --git a/platform/usageView-impl/src/com/intellij/usages/impl/rules/DirectoryGroupingRule.java b/platform/usageView-impl/src/com/intellij/usages/impl/rules/DirectoryGroupingRule.java index 460e0476e3eb..6405dec65b9c 100644 --- a/platform/usageView-impl/src/com/intellij/usages/impl/rules/DirectoryGroupingRule.java +++ b/platform/usageView-impl/src/com/intellij/usages/impl/rules/DirectoryGroupingRule.java @@ -3,8 +3,8 @@ package com.intellij.usages.impl.rules; import com.intellij.injected.editor.VirtualFileWindow; import com.intellij.openapi.actionSystem.CommonDataKeys; -import com.intellij.openapi.actionSystem.DataProvider; -import com.intellij.openapi.actionSystem.PlatformCoreDataKeys; +import com.intellij.openapi.actionSystem.DataSink; +import com.intellij.openapi.actionSystem.UiDataProvider; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectUtil; @@ -90,7 +90,7 @@ public class DirectoryGroupingRule extends SingleParentUsageGroupingRule impleme return "UsageGrouping.Directory"; } - protected class DirectoryGroup implements UsageGroup, DataProvider { + protected class DirectoryGroup implements UsageGroup, UiDataProvider { protected final VirtualFile myDir; private Icon myIcon; private final @NlsSafe String relativePathText; @@ -188,21 +188,11 @@ public class DirectoryGroupingRule extends SingleParentUsageGroupingRule impleme } @Override - public @Nullable Object getData(@NotNull String dataId) { - if (CommonDataKeys.VIRTUAL_FILE.is(dataId)) { - return myDir; - } - if (PlatformCoreDataKeys.BGT_DATA_PROVIDER.is(dataId)) { - return (DataProvider)slowId -> getSlowData(slowId); - } - return null; - } - - private @Nullable Object getSlowData(@NotNull String dataId) { - if (CommonDataKeys.PSI_ELEMENT.is(dataId)) { + public void uiDataSnapshot(@NotNull DataSink sink) { + sink.set(CommonDataKeys.VIRTUAL_FILE, myDir); + sink.lazy(CommonDataKeys.PSI_ELEMENT, () -> { return getDirectory(); - } - return null; + }); } @Override diff --git a/platform/usageView-impl/src/com/intellij/usages/impl/rules/FileGroupingRule.java b/platform/usageView-impl/src/com/intellij/usages/impl/rules/FileGroupingRule.java index fb9f1b3a5f89..e2657079a8db 100644 --- a/platform/usageView-impl/src/com/intellij/usages/impl/rules/FileGroupingRule.java +++ b/platform/usageView-impl/src/com/intellij/usages/impl/rules/FileGroupingRule.java @@ -3,8 +3,8 @@ package com.intellij.usages.impl.rules; import com.intellij.injected.editor.VirtualFileWindow; import com.intellij.openapi.actionSystem.CommonDataKeys; -import com.intellij.openapi.actionSystem.DataProvider; -import com.intellij.openapi.actionSystem.PlatformCoreDataKeys; +import com.intellij.openapi.actionSystem.DataSink; +import com.intellij.openapi.actionSystem.UiDataProvider; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; @@ -60,7 +60,7 @@ public class FileGroupingRule extends SingleParentUsageGroupingRule implements D return true; } - public static class FileUsageGroup implements UsageGroup, DataProvider, NamedPresentably { + public static class FileUsageGroup implements UsageGroup, UiDataProvider, NamedPresentably { private final Project myProject; private final VirtualFile myFile; private @NlsSafe String myPresentableName; @@ -144,21 +144,11 @@ public class FileGroupingRule extends SingleParentUsageGroupingRule implements D } @Override - public @Nullable Object getData(@NotNull String dataId) { - if (CommonDataKeys.VIRTUAL_FILE.is(dataId)) { - return myFile; - } - if (PlatformCoreDataKeys.BGT_DATA_PROVIDER.is(dataId)) { - return (DataProvider)slowId -> getSlowData(slowId); - } - return null; - } - - private @Nullable Object getSlowData(@NotNull String dataId) { - if (CommonDataKeys.PSI_ELEMENT.is(dataId)) { + public void uiDataSnapshot(@NotNull DataSink sink) { + sink.set(CommonDataKeys.VIRTUAL_FILE, myFile); + sink.lazy(CommonDataKeys.PSI_ELEMENT, () -> { return getPsiFile(); - } - return null; + }); } @ApiStatus.Internal