diff --git a/java/java-impl/src/com/intellij/slicer/DataflowExceptionAnalysisProvider.java b/java/java-impl/src/com/intellij/slicer/DataflowExceptionAnalysisProvider.java index 32a865c4f1aa..b0d2a7001fe1 100644 --- a/java/java-impl/src/com/intellij/slicer/DataflowExceptionAnalysisProvider.java +++ b/java/java-impl/src/com/intellij/slicer/DataflowExceptionAnalysisProvider.java @@ -318,18 +318,32 @@ public class DataflowExceptionAnalysisProvider implements ExceptionAnalysisProvi if (analysis == null) return null; String text = DfaBasedFilter.getPresentationText(analysis.myDfType, analysis.myAnchor.getType()); if (text.isEmpty()) return null; - return new AnAction(null, JavaBundle.message("action.dfa.from.stacktrace.text", analysis.myAnchor.getText(), text), null) { - @Override - public void actionPerformed(@NotNull AnActionEvent e) { - List nextFrames = nextFramesSupplier.get(); - StackFilter stackFilter = StackFilter.from(nextFrames); - SliceAnalysisParams params = new SliceAnalysisParams(); - params.dataFlowToThis = true; - params.scope = new AnalysisScope(GlobalSearchScope.allScope(myProject), myProject); - params.scope.setSearchInLibraries(true); - params.valueFilter = new JavaValueFilter(new DfaBasedFilter(analysis.myDfType), stackFilter); - SliceManager.getInstance(myProject).createToolWindow(analysis.myAnchor, params); - } - }; + return new DfaFromStacktraceAction(analysis, text, nextFramesSupplier); + } + + private class DfaFromStacktraceAction extends AnAction { + private final @NotNull AnalysisStartingPoint myAnalysis; + private @NotNull final Supplier> myNextFramesSupplier; + + private DfaFromStacktraceAction(@NotNull AnalysisStartingPoint analysis, + String text, + @NotNull Supplier> nextFramesSupplier) { + super(null, JavaBundle + .message("action.dfa.from.stacktrace.text", analysis.myAnchor.getText(), text), null); + myAnalysis = analysis; + myNextFramesSupplier = nextFramesSupplier; + } + + @Override + public void actionPerformed(@NotNull AnActionEvent e) { + List nextFrames = myNextFramesSupplier.get(); + StackFilter stackFilter = StackFilter.from(nextFrames); + SliceAnalysisParams params = new SliceAnalysisParams(); + params.dataFlowToThis = true; + params.scope = new AnalysisScope(GlobalSearchScope.allScope(myProject), myProject); + params.scope.setSearchInLibraries(true); + params.valueFilter = new JavaValueFilter(new DfaBasedFilter(myAnalysis.myDfType), stackFilter); + SliceManager.getInstance(myProject).createToolWindow(myAnalysis.myAnchor, params); + } } } diff --git a/java/openapi/src/com/intellij/execution/filters/ExceptionWorker.java b/java/openapi/src/com/intellij/execution/filters/ExceptionWorker.java index e7226a19787a..873932ea6c79 100644 --- a/java/openapi/src/com/intellij/execution/filters/ExceptionWorker.java +++ b/java/openapi/src/com/intellij/execution/filters/ExceptionWorker.java @@ -16,6 +16,7 @@ package com.intellij.execution.filters; import com.intellij.execution.filters.ExceptionAnalysisProvider.StackLine; +import com.intellij.ide.actions.ActionsCollector; import com.intellij.openapi.actionSystem.ActionPlaces; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; @@ -483,6 +484,7 @@ public class ExceptionWorker { Disposer.dispose(b); } myAnalysisWasActivated = true; + ActionsCollector.getInstance().record(project, action, null, element.getLanguage()); action.actionPerformed(AnActionEvent.createFromAnAction(action, null, ActionPlaces.UNKNOWN, DataContext.EMPTY_CONTEXT)); } }