use of io.flutter.vmService.frame.DartVmServiceStackFrame in project flutter-intellij by flutter.
the class CanonicalBreakpoint method computeStackFrames.
public void computeStackFrames(@NotNull final String isolateId, final int firstFrameIndex, @NotNull final XExecutionStack.XStackFrameContainer container, @Nullable final InstanceRef exception) {
addRequest(() -> myVmService.getStack(isolateId, new GetStackConsumer() {
@Override
public void received(final Stack vmStack) {
ApplicationManager.getApplication().executeOnPooledThread(() -> {
InstanceRef exceptionToAddToFrame = exception;
// Check for async causal frames; fall back to using regular sync frames.
ElementList<Frame> elementList = vmStack.getAsyncCausalFrames();
if (elementList == null) {
elementList = vmStack.getFrames();
}
final List<Frame> vmFrames = Lists.newArrayList(elementList);
final List<XStackFrame> xStackFrames = new ArrayList<>(vmFrames.size());
for (final Frame vmFrame : vmFrames) {
if (vmFrame.getKind() == FrameKind.AsyncSuspensionMarker) {
// Render an asynchronous gap.
final XStackFrame markerFrame = new DartAsyncMarkerFrame();
xStackFrames.add(markerFrame);
} else {
final DartVmServiceStackFrame stackFrame = new DartVmServiceStackFrame(myDebugProcess, isolateId, vmFrame, vmFrames, exceptionToAddToFrame);
stackFrame.setIsDroppableFrame(vmFrame.getKind() == FrameKind.Regular);
xStackFrames.add(stackFrame);
if (!stackFrame.isInDartSdkPatchFile()) {
// The exception (if any) is added to the frame where debugger stops and to the upper frames.
exceptionToAddToFrame = null;
}
}
}
container.addStackFrames(firstFrameIndex == 0 ? xStackFrames : xStackFrames.subList(firstFrameIndex, xStackFrames.size()), true);
});
}
@Override
public void onError(final RPCError error) {
container.errorOccurred(error.getMessage());
}
@Override
public void received(Sentinel response) {
container.errorOccurred(response.getValueAsString());
}
}));
}
use of io.flutter.vmService.frame.DartVmServiceStackFrame in project flutter-intellij by flutter.
the class FlutterPopFrameAction method update.
public void update(@NotNull AnActionEvent e) {
final DartVmServiceStackFrame frame = getStackFrame(e);
final boolean enabled = frame != null && frame.canDrop();
if (ActionPlaces.isMainMenuOrActionSearch(e.getPlace()) || ActionPlaces.DEBUGGER_TOOLBAR.equals(e.getPlace())) {
e.getPresentation().setEnabled(enabled);
} else {
e.getPresentation().setVisible(enabled);
}
}
use of io.flutter.vmService.frame.DartVmServiceStackFrame in project flutter-intellij by flutter.
the class FlutterPopFrameAction method getStackFrame.
@Nullable
private static DartVmServiceStackFrame getStackFrame(@NotNull final AnActionEvent e) {
final Project project = e.getProject();
if (project == null)
return null;
XDebugSession session = e.getData(XDebugSession.DATA_KEY);
if (session == null) {
session = XDebuggerManager.getInstance(project).getCurrentSession();
}
if (session != null) {
final XStackFrame frame = session.getCurrentStackFrame();
if (frame instanceof DartVmServiceStackFrame) {
return ((DartVmServiceStackFrame) frame);
}
}
return null;
}
Aggregations