Package org.erlide.backend.debug.events

Source Code of org.erlide.backend.debug.events.NewStatusEvent

package org.erlide.backend.debug.events;

import org.eclipse.debug.core.DebugEvent;
import org.erlide.backend.debug.model.ErlangDebugTarget;
import org.erlide.backend.debug.model.ErlangProcess;

import com.ericsson.otp.erlang.OtpErlangAtom;
import com.ericsson.otp.erlang.OtpErlangObject;
import com.ericsson.otp.erlang.OtpErlangPid;

public class NewStatusEvent extends IntEvent {

    public NewStatusEvent(final OtpErlangObject[] cmds) {
        super(cmds);
    }

    @Override
    public void execute(final ErlangDebugTarget debugTarget) {
        final OtpErlangPid pid = (OtpErlangPid) cmds[1];
        final ErlangProcess erlangProcess = debugTarget.getOrCreateErlangProcess(pid);
        final OtpErlangAtom sa = (OtpErlangAtom) cmds[2];
        final String status = sa.atomValue();
        if (status.equals("break")) {
            handleBreakStatus(erlangProcess, status);
        } else if (status.equals("exit")) {
            handleExitStatus(erlangProcess, status);
        } else if (status.equals("running")) {
            handleRunningStatus(erlangProcess, status);
        } else if (status.equals("idle")) {
            handleIdleStatus(erlangProcess, status);
        } else {
            erlangProcess.setStatus(status);
            erlangProcess.fireChangeEvent(DebugEvent.STATE | DebugEvent.CHANGE);
        }
    }

    private void handleIdleStatus(final ErlangProcess erlangProcess, final String status) {
        // FIXME: this must be cleaned, but the status messages seem
        // to come out of order...
        // erlangProcess.removeStackFrames();
        erlangProcess.setStatus(status);
        erlangProcess.fireChangeEvent(DebugEvent.STATE | DebugEvent.CHANGE);
    }

    private void handleRunningStatus(final ErlangProcess erlangProcess,
            final String status) {
        erlangProcess.setStatus(status);
        if (erlangProcess.isStepping()) {
            erlangProcess.fireResumeEvent(DebugEvent.STEP_OVER);
        } else {
            erlangProcess.fireResumeEvent(DebugEvent.RESUME);
        }
    }

    private void handleExitStatus(final ErlangProcess erlangProcess, final String status) {
        erlangProcess.setStatus(status);
        final OtpErlangObject esa = cmds[3];
        erlangProcess.setExitStatus(esa.toString());
        erlangProcess.fireSuspendEvent(DebugEvent.TERMINATE);
    }

    private void handleBreakStatus(final ErlangProcess erlangProcess, final String status) {
        erlangProcess.setStatus(status);
        if (!erlangProcess.isStepping()) {
            erlangProcess.fireSuspendEvent(DebugEvent.BREAKPOINT);
        }
    }

}
TOP

Related Classes of org.erlide.backend.debug.events.NewStatusEvent

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.