Search in sources :

Example 1 with DartAsyncMarkerFrame

use of com.jetbrains.lang.dart.ide.runner.server.vmService.frame.DartAsyncMarkerFrame in project intellij-plugins by JetBrains.

the class VmServiceWrapper 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 StackConsumer() {

        @Override
        public void received(final Stack vmStack) {
            ApplicationManager.getApplication().executeOnPooledThread(() -> {
                InstanceRef exceptionToAddToFrame = exception;
                // Check to see if the VM passing in awaiter frames; if so, use them. Else check
                // for async causal frames. Finally, fall back to using regular sync frames.
                ElementList<Frame> elementList = vmStack.getAwaiterFrames();
                if (elementList == null) {
                    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());
        }
    }));
}
Also used : XStackFrame(com.intellij.xdebugger.frame.XStackFrame) DartAsyncMarkerFrame(com.jetbrains.lang.dart.ide.runner.server.vmService.frame.DartAsyncMarkerFrame) DartVmServiceStackFrame(com.jetbrains.lang.dart.ide.runner.server.vmService.frame.DartVmServiceStackFrame) DartVmServiceStackFrame(com.jetbrains.lang.dart.ide.runner.server.vmService.frame.DartVmServiceStackFrame) ArrayList(java.util.ArrayList) XStackFrame(com.intellij.xdebugger.frame.XStackFrame) DartAsyncMarkerFrame(com.jetbrains.lang.dart.ide.runner.server.vmService.frame.DartAsyncMarkerFrame) XExecutionStack(com.intellij.xdebugger.frame.XExecutionStack)

Aggregations

XExecutionStack (com.intellij.xdebugger.frame.XExecutionStack)1 XStackFrame (com.intellij.xdebugger.frame.XStackFrame)1 DartAsyncMarkerFrame (com.jetbrains.lang.dart.ide.runner.server.vmService.frame.DartAsyncMarkerFrame)1 DartVmServiceStackFrame (com.jetbrains.lang.dart.ide.runner.server.vmService.frame.DartVmServiceStackFrame)1 ArrayList (java.util.ArrayList)1