Search in sources :

Example 1 with DartVmServiceStackFrame

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());
        }
    }));
}
Also used : InstanceRef(org.dartlang.vm.service.element.InstanceRef) GetStackConsumer(org.dartlang.vm.service.consumer.GetStackConsumer) Frame(org.dartlang.vm.service.element.Frame) DartVmServiceStackFrame(io.flutter.vmService.frame.DartVmServiceStackFrame) XStackFrame(com.intellij.xdebugger.frame.XStackFrame) DartAsyncMarkerFrame(io.flutter.vmService.frame.DartAsyncMarkerFrame) Sentinel(org.dartlang.vm.service.element.Sentinel) ArrayList(java.util.ArrayList) RPCError(org.dartlang.vm.service.element.RPCError) XStackFrame(com.intellij.xdebugger.frame.XStackFrame) XExecutionStack(com.intellij.xdebugger.frame.XExecutionStack) Stack(org.dartlang.vm.service.element.Stack) DartVmServiceStackFrame(io.flutter.vmService.frame.DartVmServiceStackFrame) DartAsyncMarkerFrame(io.flutter.vmService.frame.DartAsyncMarkerFrame)

Example 2 with DartVmServiceStackFrame

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);
    }
}
Also used : DartVmServiceStackFrame(io.flutter.vmService.frame.DartVmServiceStackFrame)

Example 3 with DartVmServiceStackFrame

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;
}
Also used : Project(com.intellij.openapi.project.Project) XDebugSession(com.intellij.xdebugger.XDebugSession) DartVmServiceStackFrame(io.flutter.vmService.frame.DartVmServiceStackFrame) XStackFrame(com.intellij.xdebugger.frame.XStackFrame) Nullable(org.jetbrains.annotations.Nullable)

Aggregations

DartVmServiceStackFrame (io.flutter.vmService.frame.DartVmServiceStackFrame)3 XStackFrame (com.intellij.xdebugger.frame.XStackFrame)2 Project (com.intellij.openapi.project.Project)1 XDebugSession (com.intellij.xdebugger.XDebugSession)1 XExecutionStack (com.intellij.xdebugger.frame.XExecutionStack)1 DartAsyncMarkerFrame (io.flutter.vmService.frame.DartAsyncMarkerFrame)1 ArrayList (java.util.ArrayList)1 GetStackConsumer (org.dartlang.vm.service.consumer.GetStackConsumer)1 Frame (org.dartlang.vm.service.element.Frame)1 InstanceRef (org.dartlang.vm.service.element.InstanceRef)1 RPCError (org.dartlang.vm.service.element.RPCError)1 Sentinel (org.dartlang.vm.service.element.Sentinel)1 Stack (org.dartlang.vm.service.element.Stack)1 Nullable (org.jetbrains.annotations.Nullable)1