Package org.eclipse.php.internal.debug.core.zend.model

Source Code of org.eclipse.php.internal.debug.core.zend.model.PHPThread

/*******************************************************************************
* Copyright (c) 2009 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*     Zend Technologies
*******************************************************************************/
package org.eclipse.php.internal.debug.core.zend.model;

import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.IBreakpoint;
import org.eclipse.debug.core.model.IStackFrame;
import org.eclipse.debug.core.model.IThread;
import org.eclipse.php.internal.debug.core.model.PHPDebugElement;
import org.eclipse.php.internal.debug.core.zend.debugger.Expression;

/**
* A PHP debugger threaded.
*/
public class PHPThread extends PHPDebugElement implements IThread {

  private static final Expression[] NO_VARIABLES = {};

  /**
   * Breakpoints this thread is suspended at or <code>null</code> if none.
   */
  private IBreakpoint[] fBreakpoints;

  /**
   * Whether this thread is stepping
   */
  private boolean fStepping = false;

  /**
   * Constructs a new thread for the given target
   *
   * @param target
   *            VM
   */
  public PHPThread(PHPDebugTarget target) {
    super(target);
  }

  public IStackFrame[] getStackFrames() throws DebugException {
    if (isSuspended()) {
      return ((PHPDebugTarget) getDebugTarget()).getStackFrames();
    } else {
      return new IStackFrame[0];
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.IThread#hasStackFrames()
   */
  public boolean hasStackFrames() throws DebugException {
    return isSuspended();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.IThread#getPriority()
   */
  public int getPriority() throws DebugException {
    return 0;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.IThread#getTopStackFrame()
   */
  public IStackFrame getTopStackFrame() throws DebugException {
    IStackFrame[] frames = getStackFrames();
    if (frames.length > 0) {
      return frames[0];
    }
    return null;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.IThread#getName()
   */
  public String getName() throws DebugException {
    return "PHPthread"//$NON-NLS-1$
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.IThread#getBreakpoints()
   */
  public IBreakpoint[] getBreakpoints() {
    if (fBreakpoints == null) {
      return new IBreakpoint[0];
    }
    return fBreakpoints;
  }

  /**
   * Sets the breakpoints this thread is suspended at, or <code>null</code> if
   * none.
   *
   * @param breakpoints
   *            the breakpoints this thread is suspended at, or
   *            <code>null</code> if none
   */
  protected void setBreakpoints(IBreakpoint[] breakpoints) {
    fBreakpoints = breakpoints;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.ISuspendResume#canResume()
   */
  public boolean canResume() {
    return isSuspended();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.ISuspendResume#canSuspend()
   */
  public boolean canSuspend() {
    return !isSuspended();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.ISuspendResume#isSuspended()
   */
  public boolean isSuspended() {
    return getDebugTarget().isSuspended();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.ISuspendResume#resume()
   */
  public void resume() throws DebugException {
    setStepping(false);
    getDebugTarget().resume();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.ISuspendResume#suspend()
   */
  public void suspend() throws DebugException {
    setStepping(false);
    getDebugTarget().suspend();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.IStep#canStepInto()
   */
  public boolean canStepInto() {
    return isSuspended();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.IStep#canStepOver()
   */
  public boolean canStepOver() {
    return isSuspended();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.IStep#canStepReturn()
   */
  public boolean canStepReturn() {
    return isSuspended();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.IStep#isStepping()
   */
  public boolean isStepping() {
    return fStepping;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.IStep#stepInto()
   */
  public void stepInto() throws DebugException {
    setStepping(true);
    ((PHPDebugTarget) getDebugTarget()).stepInto();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.IStep#stepOver()
   */
  public void stepOver() throws DebugException {
    setStepping(true);
    ((PHPDebugTarget) getDebugTarget()).stepOver();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.IStep#stepReturn()
   */
  public void stepReturn() throws DebugException {
    setStepping(true);
    ((PHPDebugTarget) getDebugTarget()).stepReturn();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.ITerminate#canTerminate()
   */
  public boolean canTerminate() {
    return !isTerminated();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.ITerminate#isTerminated()
   */
  public boolean isTerminated() {
    return getDebugTarget().isTerminated();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.model.ITerminate#terminate()
   */
  public void terminate() throws DebugException {
    getDebugTarget().terminate();
  }

  /**
   * Sets whether this thread is stepping
   *
   * @param stepping
   *            whether stepping
   */
  public void setStepping(boolean stepping) {
    fStepping = stepping;
  }

  // Future method for desplaying error from the debugger client.
  public Object getError() {
    return null;
  }

  public Expression[] getStackVariables() throws DebugException {
    IStackFrame frame = getTopStackFrame();
    if (frame == null) {
      return NO_VARIABLES;
    }
    Expression[] stackVariables = ((PHPStackFrame) frame)
        .getStackVariables();
    if (stackVariables == null) {
      return NO_VARIABLES;
    }
    return stackVariables;
  }
}
TOP

Related Classes of org.eclipse.php.internal.debug.core.zend.model.PHPThread

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.