Log "Find why ..." actions to FUS

GitOrigin-RevId: f54b973046e5d2cada34c657210db1febdb6b3c2
This commit is contained in:
Dmitry Jemerov
2020-06-19 11:17:39 +03:00
committed by intellij-monorepo-bot
parent 40bd98c2dc
commit f865eca72a
2 changed files with 29 additions and 13 deletions
@@ -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<StackLine> 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<List<StackLine>> myNextFramesSupplier;
private DfaFromStacktraceAction(@NotNull AnalysisStartingPoint analysis,
String text,
@NotNull Supplier<List<StackLine>> 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<StackLine> 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);
}
}
}
@@ -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));
}
}