From e5c61a0786f63b0f73836a0c2ffe57988a3a2e92 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Thu, 21 May 2015 18:12:29 +0300 Subject: [PATCH] RunLineMarkerProvider: sharing context --- .../lineMarker/RunLineMarkerProvider.java | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/lineMarker/RunLineMarkerProvider.java b/platform/lang-impl/src/com/intellij/execution/lineMarker/RunLineMarkerProvider.java index a8637e28c22c..bbe8e5a3c2ff 100644 --- a/platform/lang-impl/src/com/intellij/execution/lineMarker/RunLineMarkerProvider.java +++ b/platform/lang-impl/src/com/intellij/execution/lineMarker/RunLineMarkerProvider.java @@ -32,6 +32,7 @@ import com.intellij.openapi.actionSystem.impl.ActionPopupMenuImpl; import com.intellij.openapi.editor.markup.GutterIconRenderer; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Getter; +import com.intellij.openapi.util.UserDataHolderBase; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiNameIdentifierOwner; import com.intellij.util.Function; @@ -99,18 +100,12 @@ public class RunLineMarkerProvider implements LineMarkerProvider { final MouseEvent me = (MouseEvent)e.getInputEvent(); final Component c = me.getComponent(); if (c != null && c.isShowing()) { + final DataContext delegate = DataManager.getInstance().getDataContext(c, me.getX(), me.getY()); + final DataContext dataContext = new MyDataContext(element, delegate); popupMenu.setDataContextProvider(new Getter() { @Override public DataContext get() { - final DataContext delegate = DataManager.getInstance().getDataContext(c, me.getX(), me.getY()); - return new DataContext() { - @Nullable - @Override - public Object getData(@NonNls String dataId) { - if (Location.DATA_KEY.is(dataId)) return new PsiLocation(element); - return delegate.getData(dataId); - } - }; + return dataContext; } }); popupMenu.getComponent().show(c, me.getX(), me.getY()); @@ -128,4 +123,21 @@ public class RunLineMarkerProvider implements LineMarkerProvider { @Override public void collectSlowLineMarkers(@NotNull List elements, @NotNull Collection result) { } + + private static class MyDataContext extends UserDataHolderBase implements DataContext { + private final PsiElement myElement; + private final DataContext myDelegate; + + public MyDataContext(PsiElement element, DataContext delegate) { + myElement = element; + myDelegate = delegate; + } + + @Nullable + @Override + public Object getData(@NonNls String dataId) { + if (Location.DATA_KEY.is(dataId)) return new PsiLocation(myElement); + return myDelegate.getData(dataId); + } + } }