package net.sourceforge.phpeclipse.xdebug.php.model; import net.sourceforge.phpeclipse.xdebug.core.Base64; import net.sourceforge.phpeclipse.xdebug.core.xdebug.XDebugConnection; import net.sourceforge.phpeclipse.xdebug.core.xdebug.ResponseListener.DebugResponse; import net.sourceforge.phpeclipse.xdebug.php.model.XDebugVariable; import net.sourceforge.phpeclipse.xdebug.php.model.XDebugTarget; import org.eclipse.debug.core.model.IDebugElement; import org.eclipse.debug.core.model.IWatchExpressionDelegate; import org.eclipse.debug.core.model.IWatchExpressionListener; import org.eclipse.debug.core.model.IWatchExpressionResult; import org.w3c.dom.Node; public class XDebugWatchExpressionDelegate implements IWatchExpressionDelegate { public void evaluateExpression(String expression, IDebugElement context, IWatchExpressionListener listener) { IWatchExpressionResult x; XDebugConnection connection; XDebugTarget s; x = new XDebugWatchExpressionResult(expression, null, null); s = (XDebugTarget) context.getDebugTarget(); connection = (XDebugConnection) s.getDebugConnection(); if( connection != null ) { try { if( ! connection.isClosed() ) { String encoded = Base64.encodeBytes(expression.getBytes()); DebugResponse evalCommand = connection.sendRequestA( "eval", "-- "+encoded ); Node evalNode = evalCommand.getParentNode(); XDebugVariable var= connection.getVariableFromNodeA( null, evalNode.getFirstChild()); XDebugVariable result[] = {var}; if (result.length == 0) { x = new XDebugWatchExpressionResult(expression, null, null); } else { x = new XDebugWatchExpressionResult(expression, result[0].getValue(), null); } } } catch (Exception e) { String[] s1; s1 = new String[1]; s1[0] = e.toString(); x = new XDebugWatchExpressionResult(expression, null, s1); } } listener.watchEvaluationFinished(x); } }