[jboss-svn-commits] JBL Code SVN: r13605 - in labs/jbossrules/branches/mvel-tooling-2007-06-30: drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jul 18 10:28:10 EDT 2007
Author: ahtik
Date: 2007-07-18 10:28:10 -0400 (Wed, 18 Jul 2007)
New Revision: 13605
Modified:
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELDebugHandler.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/VariableWrapper.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsLineBreakpoint.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/MVELStackFrame.java
Log:
Fixing debugger stack frame calculations and implemented remote variable fetch for the debug view
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELDebugHandler.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELDebugHandler.java 2007-07-18 12:33:42 UTC (rev 13604)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELDebugHandler.java 2007-07-18 14:28:10 UTC (rev 13605)
@@ -17,9 +17,6 @@
*
*/
public static void receiveBreakpoints() {
- System.out.println("MVEL: MVELDebugHandler Receiving breakpoints..");
- // Remote debugger is supposed to suspend thread and set
- // MVELRuntime.registerBreakpoint( compexpr.getSourceName(), 2 );
}
/**
@@ -28,29 +25,26 @@
* @param frame
*/
private final static void onBreak(Frame frame) {
- System.out.println("MVEL: MVELDebugger break on frame:"
- + frame.getSourceName() + "at line:" + frame.getLineNumber());
}
protected final static void registerBreakpoint(String sourceName, int lineNumber) {
- System.out.println("MVEL: Registering Breakpoint FROM DEBUGGER for "+sourceName+":"+lineNumber+"; from Thread:"+Thread.currentThread());
MVELRuntime.registerBreakpoint( sourceName, lineNumber );
}
protected final static void clearAllBreakpoints() {
- System.out.println("MVEL: CLEARING ALL BREAKPOINTS (request from remote debugger)");
MVELRuntime.clearAllBreakpoints();
}
+ protected final static void removeBreakpoint(String sourceName, int lineNumber) {
+ MVELRuntime.removeBreakpoint( sourceName, lineNumber );
+ }
+
private static class MVELDebugger implements Debugger {
public MVELDebugger() {
- System.out.println("MVEL: Initializing MVEL debugger for drools.");
}
public int onBreak(Frame frame) {
- System.out.println("MVEL: MVELDebugger BREAKPOINT RECEIVED FOR ---- "
- + frame.getSourceName() + ":" + frame.getLineNumber());
MVELDebugHandler.onBreak(frame);
// This call is supposed to be catched by the remote debugger
return 0;
@@ -62,7 +56,6 @@
* Do nothing. ensures that class is loaded prior debug handler
*/
public static void prepare() {
- System.out.println("Preparing debug handler");
}
}
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java 2007-07-18 12:33:42 UTC (rev 13604)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java 2007-07-18 14:28:10 UTC (rev 13605)
@@ -158,15 +158,9 @@
PackageCompilationData data = compiledPackage
.getPackageCompilationData();
- System.out.println("MVEL:DRLInfo.getConsequenceJavaLineNumber: Getting mappings for " + getClassName());
-
LineMappings mappings = data.getLineMappings(className);
consequenceJavaLineNumber = mappings.getOffset();
- System.out.println("MVEL:DRLInfo.getConsequenceJavaLineNumber:"
- + " Calculated consequenceJavaLineNumber: " + consequenceJavaLineNumber);
- System.out.println(" MVEL: startLINE " + mappings.getStartLine());
- System.out.println(" MVEL: DRLLine "+getConsequenceDrlLineNumber());
}
return consequenceJavaLineNumber;
}
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/VariableWrapper.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/VariableWrapper.java 2007-07-18 12:33:42 UTC (rev 13604)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/VariableWrapper.java 2007-07-18 14:28:10 UTC (rev 13605)
@@ -19,7 +19,9 @@
private String name;
private IJavaValue value;
-
+ private boolean isLocal = false;
+ private boolean isPublic = false;
+
public VariableWrapper(String name, IJavaValue value) {
this.name = name;
this.value = value;
@@ -38,7 +40,7 @@
}
public boolean isLocal() {
- return false;
+ return isLocal;
}
public IValue getValue() {
@@ -58,7 +60,7 @@
}
public boolean isPublic() {
- return false;
+ return isPublic;
}
public boolean isPrivate() {
@@ -135,4 +137,12 @@
return name.hashCode() + value.hashCode();
}
+ public void setLocal(boolean val) {
+ isLocal=val;
+ }
+
+ public void setPublic(boolean val) {
+ isPublic = val;
+ }
+
}
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java 2007-07-18 12:33:42 UTC (rev 13604)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java 2007-07-18 14:28:10 UTC (rev 13605)
@@ -1,6 +1,5 @@
package org.drools.eclipse.debug.core;
-import java.awt.EventQueue;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Iterator;
@@ -10,21 +9,14 @@
import org.drools.rule.builder.dialect.mvel.MVELDialect;
import org.eclipse.core.resources.IMarkerDelta;
import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.model.IBreakpoint;
import org.eclipse.debug.core.model.IProcess;
-import org.eclipse.debug.core.model.IStackFrame;
import org.eclipse.debug.core.model.IThread;
-import org.eclipse.debug.internal.core.WatchExpression;
import org.eclipse.jdi.TimeoutException;
-import org.eclipse.jdi.internal.ClassTypeImpl;
-import org.eclipse.jdi.internal.LocalVariableImpl;
-import org.eclipse.jdt.debug.core.IEvaluationRunnable;
import org.eclipse.jdt.debug.core.IJavaBreakpoint;
-import org.eclipse.jdt.debug.core.IJavaThread;
import org.eclipse.jdt.internal.debug.core.IJDIEventListener;
import org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint;
import org.eclipse.jdt.internal.debug.core.model.JDIDebugModelMessages;
@@ -32,19 +24,12 @@
import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
import org.eclipse.jdt.internal.debug.core.model.JDIThread;
-import com.sun.jdi.AbsentInformationException;
-import com.sun.jdi.ClassLoaderReference;
-import com.sun.jdi.ClassNotLoadedException;
import com.sun.jdi.ClassType;
-import com.sun.jdi.IncompatibleThreadStateException;
import com.sun.jdi.IntegerValue;
-import com.sun.jdi.InvalidTypeException;
-import com.sun.jdi.InvocationException;
import com.sun.jdi.Method;
import com.sun.jdi.ObjectCollectedException;
import com.sun.jdi.ObjectReference;
import com.sun.jdi.ReferenceType;
-import com.sun.jdi.StackFrame;
import com.sun.jdi.StringReference;
import com.sun.jdi.ThreadReference;
import com.sun.jdi.VMDisconnectedException;
@@ -99,7 +84,7 @@
// Create class prepare request to add breakpoint after MVELDebugHanlder is loaded
ClassPrepareRequest req = getEventRequestManager().createClassPrepareRequest();
req.addClassFilter( "org.drools.base.mvel.MVELDebugHandler" );
- req.setSuspendPolicy( EventRequest.SUSPEND_ALL);
+ req.setSuspendPolicy( EventRequest.SUSPEND_ALL );
addJDIEventListener( new IJDIEventListener() {
@@ -120,16 +105,7 @@
return;
}
-/* boolean suspend = false;
- if ( !isSuspended() && canSuspend() ) {
- suspend = true;
- suspend();
- }
-*/ addRemoteBreakpoint( d );
-/* if ( suspend && canResume() ) {
- resume();
- }
-*/
+ addRemoteBreakpoint( d );
} else {
// only add breakpoint if setting Java properties of DRL
// breakpoint does not generate an error
@@ -466,6 +442,18 @@
}
if ( supportsBreakpoint( breakpoint ) ) {
try {
+
+ if ( breakpoint instanceof DroolsLineBreakpoint ) {
+ ((DroolsLineBreakpoint) breakpoint).setJavaBreakpointProperties();
+
+ final DroolsLineBreakpoint d = (DroolsLineBreakpoint) breakpoint;
+
+ if ( d.getDialectName().equals( MVELDialect.ID ) ) {
+ removeRemoteBreakpoint( (DroolsLineBreakpoint) breakpoint,
+ delta );
+ }
+ }
+
((JavaBreakpoint) breakpoint).removeFromTarget( this );
getBreakpoints().remove( breakpoint );
Iterator threads = getThreadIterator();
@@ -705,7 +693,6 @@
return true;
}
-
try {
IThread[] tharr = getThreads();
@@ -720,31 +707,16 @@
if ( th2real.suspendCount() == 1 && th2.getName().equals( "main" ) ) {
t = th2real;
t2 = (DroolsThread) th2;
-
- //fireSuspendEvent(DebugEvent.CLIENT_REQUEST);
-
- //th2.suspend();
- //th2.suspend();
- th2real.suspend();
- th2.setRunning(false);
- th2.fireSuspendEvent(DebugEvent.CLIENT_REQUEST);
- /*
- try {
- Thread.sleep( 3000 );
- } catch ( InterruptedException e ) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }*/
-
- //fireSuspendEvent(DebugEvent.BREAKPOINT);
- //((DroolsThread)thr).suspendedByVM();
- //suspendThreads();
+ th2real.suspend();
+ th2.setRunning( false );
+ th2.fireSuspendEvent( DebugEvent.CLIENT_REQUEST );
+
return true;
}
}
- } catch ( DebugException t ) {
- t.printStackTrace();
+ } catch ( Exception t ) {
+ logError( t );
}
return true;
@@ -783,12 +755,14 @@
DroolsLineBreakpoint l = (DroolsLineBreakpoint) element;
try {
+ if ( l == null || source == null ) {
+ return null;
+ }
if ( l.getLineNumber() == line && source.equals( l.getRuleName() ) ) {
return l;
}
} catch ( CoreException e ) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ logError( e );
}
}
}
@@ -796,9 +770,20 @@
}
private void addRemoteBreakpoint(DroolsLineBreakpoint d) {
+
+ try {
+ if (!d.isEnabled()) {
+ return; // No need to install disabled breakpoints
+ }
+ } catch ( CoreException e2 ) {
+ logError( e2 );
+ return; // No need to install breakpoints that are this much broken
+ }
+
Iterator handleriter = getVM().classesByName( "org.drools.base.mvel.MVELDebugHandler" ).iterator();
Object debugHandlerClass = handleriter.next();
+
int line;
String sourceName;
@@ -806,44 +791,86 @@
line = d.getLineNumber();
sourceName = d.getTypeName();
} catch ( CoreException e1 ) {
- e1.printStackTrace();
+ logError( e1 );
return;
}
ReferenceType refType = (ReferenceType) debugHandlerClass;
-
Method m = (Method) refType.methodsByName( "registerBreakpoint" ).iterator().next();
-
List args = new ArrayList();
-
IntegerValue lineVal = getVM().mirrorOf( line );
StringReference nameVal = getVM().mirrorOf( sourceName );
-
JDIObjectValue val = (JDIObjectValue) newValue( sourceName );
ObjectReference realVal = val.getUnderlyingObject();
-
args.add( nameVal );
args.add( lineVal );
- //args.add(new IntegerValueImpl((VirtualMachineImpl) getVM(), new Integer(line)));
- //args.add(((JDIPrimitiveValue)newValue(line)).getIntValue());
+ try {
+ ClassType tt = (ClassType) debugHandlerClass;
+ IThread[] tharr = getThreads();
+ ThreadReference t = null;
+ DroolsThread t2 = null;
+ for ( int i = 0; i < tharr.length; i++ ) {
+ IThread th2 = tharr[i];
+ ThreadReference th2real = ((DroolsThread) tharr[i]).getUnderlyingThread();
+ //MVEL It doesn't have to be always main. find a better way for detection. suspend count is most likely only at one thread so a bit more error-safe
+ if ( th2real.suspendCount() == 1 && th2.getName().equals( "main" ) ) {
+ t = th2real;
+ t2 = (DroolsThread) th2;
+ }
+ }
+
+ tt.invokeMethod( t,
+ m,
+ args,
+ ObjectReference.INVOKE_SINGLE_THREADED );
+ //t2.computeNewStackFrames();
+
+ super.breakpointAdded( d );
+
+ } catch ( Exception e ) {
+ logError( e );
+ }
+
+ }
+
+ private void removeRemoteBreakpoint(DroolsLineBreakpoint d,
+ IMarkerDelta delta) {
+ Iterator handleriter = getVM().classesByName( "org.drools.base.mvel.MVELDebugHandler" ).iterator();
+ Object debugHandlerClass = handleriter.next();
+
+ int line;
+ String sourceName;
+
try {
+ line = d.getLineNumber();
+ sourceName = d.getTypeName();
+ } catch ( CoreException e1 ) {
+ logError( e1 );
+ return;
+ }
- //StackFrame frame = t.frame( 0 );
+ ReferenceType refType = (ReferenceType) debugHandlerClass;
+ Method m = (Method) refType.methodsByName( "removeBreakpoint" ).iterator().next();
+ List args = new ArrayList();
+ IntegerValue lineVal = getVM().mirrorOf( line );
+ StringReference nameVal = getVM().mirrorOf( sourceName );
+ JDIObjectValue val = (JDIObjectValue) newValue( sourceName );
+ ObjectReference realVal = val.getUnderlyingObject();
+ args.add( nameVal );
+ args.add( lineVal );
- //ClassType tt = (ClassType) getVM().classesByName(refType.name()).iterator().next();
+ try {
ClassType tt = (ClassType) debugHandlerClass;
-
IThread[] tharr = getThreads();
-
ThreadReference t = null;
DroolsThread t2 = null;
for ( int i = 0; i < tharr.length; i++ ) {
IThread th2 = tharr[i];
ThreadReference th2real = ((DroolsThread) tharr[i]).getUnderlyingThread();
- //MVEL It doesn't have to be always main. find a better way for detection
+ //MVEL It doesn't have to be always main. find a better way for detection. suspend count is most likely only at one thread so a bit more error-safe
if ( th2real.suspendCount() == 1 && th2.getName().equals( "main" ) ) {
t = th2real;
t2 = (DroolsThread) th2;
@@ -854,29 +881,11 @@
m,
args,
ObjectReference.INVOKE_SINGLE_THREADED );
- t2.computeNewStackFrames();
-
- super.breakpointAdded( d );
-
- } catch ( Throwable e ) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ } catch ( Exception e ) {
+ logError( e );
}
}
- /* public String getActiveBreakpoint() {
- Iterator iterator = getBreakpoints().iterator();
- while ( iterator.hasNext() ) {
- IJavaBreakpoint element = (IJavaBreakpoint) iterator.next();
- if (element instanceof DroolsLineBreakpoint) {
- DroolsLineBreakpoint l = (DroolsLineBreakpoint) element;
- l.getMarker().
- }
- }
- return null;
- }
-
- */
}
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsLineBreakpoint.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsLineBreakpoint.java 2007-07-18 12:33:42 UTC (rev 13604)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsLineBreakpoint.java 2007-07-18 14:28:10 UTC (rev 13605)
@@ -12,6 +12,7 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint;
public class DroolsLineBreakpoint extends JavaLineBreakpoint {
@@ -109,7 +110,7 @@
if ( ruleInfo.getConsequenceDrlLineNumber() < lineNumber ) {
int line = ruleInfo.getConsequenceJavaLineNumber()
- + (lineNumber - ruleInfo.getConsequenceDrlLineNumber() + 1);
+ + (lineNumber - ruleInfo.getConsequenceDrlLineNumber());
return line;
}
}
@@ -134,4 +135,5 @@
}
return null;
}
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/MVELStackFrame.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/MVELStackFrame.java 2007-07-18 12:33:42 UTC (rev 13604)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/MVELStackFrame.java 2007-07-18 14:28:10 UTC (rev 13605)
@@ -8,19 +8,19 @@
import org.drools.eclipse.DroolsEclipsePlugin;
import org.drools.eclipse.DRLInfo.RuleInfo;
+import org.drools.eclipse.debug.DebugUtil;
+import org.drools.eclipse.debug.VariableWrapper;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.IValue;
import org.eclipse.debug.core.model.IVariable;
-import org.eclipse.debug.internal.core.WatchExpression;
-import org.eclipse.jdi.internal.MirrorImpl;
import org.eclipse.jdi.internal.StackFrameImpl;
-import org.eclipse.jdi.internal.VirtualMachineImpl;
-import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
+import org.eclipse.jdt.debug.core.IJavaValue;
import org.eclipse.jdt.internal.debug.core.model.JDILocalVariable;
import org.eclipse.jdt.internal.debug.core.model.JDINullValue;
import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
import com.sun.jdi.AbsentInformationException;
+import com.sun.jdi.ArrayReference;
import com.sun.jdi.BooleanValue;
import com.sun.jdi.ClassNotLoadedException;
import com.sun.jdi.ClassType;
@@ -72,11 +72,6 @@
List result = new ArrayList( 0 );
- /*
- WatchExpression ex = new WatchExpression("frame");
- ex.setExpressionContext( this );
- System.out.println("REALLY "+ex.getValue());
- */
Method method = getUnderlyingMethod(); // onBreak
ReferenceType declaringType = method.declaringType(); // org.drools.base.mvel.MVELDebugHandler
@@ -89,129 +84,47 @@
v2 );
result.add( frameLocal );
+ IValue knownVars = DebugUtil.getValueByExpression( "return getFactory().getKnownVariables().toArray(new String[0]);", frameLocal.getValue());
- {
- IVariable[] vararr = (IVariable[]) result.toArray( new IVariable[result.size()] );
- if (vararr!=null) {
- return vararr;
- }
- }
-
- Value factoryVar = fetchField( frameLocal, "factory" );
- Value localVars = fetchField( factoryVar,
- "localVariables" );
+ IValue factory = DebugUtil.getValueByExpression( "return getFactory();", frameLocal.getValue());
- ObjectReference mapObj = ((JDIObjectValue) frameLocal.getValue()).getUnderlyingObject();
- ReferenceType t = mapObj.referenceType();
+ JDIObjectValue vvv = (JDIObjectValue) knownVars;
- Value entrySet = runMethod( localVars,
- "entrySet" );
+ if (vvv!=null) {
+ ArrayReference arr = (ArrayReference) vvv.getUnderlyingObject();
+ Iterator varIter = arr.getValues().iterator();
- /* Value iter = runMethod( entrySet,
- "iterator" );
+ while ( varIter.hasNext() ) {
+ final String varName = ((StringReference) varIter.next()).value();
+ IJavaValue val = (IJavaValue) DebugUtil.getValueByExpression( "return getVariableResolver(\""+varName+"\").getValue();", factory);
+ final ObjectReference valRef = ((JDIObjectValue)val).getUnderlyingObject();
+ //MVELThisVariable t2 = new MVELThisVariable((JDIDebugTarget) getDebugTarget(),valRef,varName);
+
+ VariableWrapper local = new VariableWrapper(varName, val);
+
+ IValue isLocal = DebugUtil.getValueByExpression( "return getParserContext().getVariables();", frameLocal.getValue());
+ local.setPublic( true );
+ //local.setLocal( true );
+ result.add(local);
+ }
- while (internalHasNext(iter)) {
- Value next = runMethod( iter,
- "next" );
-
- Value entryKey = runMethod( next,
- "getKey" );
- Value entryValue = runMethod( next,
- "getValue" );
- String entryK = ((StringReference) entryKey).value();
-
- MVELThisVariable th = new MVELThisVariable( (JDIDebugTarget) getDebugTarget(),
- (ObjectReference) entryValue,
- entryK );
- result.add( th );
+ IValue localVars = DebugUtil.getValueByExpression( "return getParserContext().getVariables();", frameLocal.getValue());
+ IValue globalVars = DebugUtil.getValueByExpression( "return getParserContext().getInputs();", frameLocal.getValue());
+
+ result.add(new VariableWrapper("LocalVariables", (IJavaValue) localVars));
+ result.add(new VariableWrapper("GlobalVariables", (IJavaValue) globalVars));
+
+
+
+ //now iterate over localVars and add all that have getValue() non-null
+
+ //MVELThisVariable t2 = new MVELThisVariable((JDIDebugTarget) getDebugTarget(),((JDIObjectValue)variables).getUnderlyingObject(),"parserContext variables");
+ //result.add(t2);
}
-*/ // v2.localVariables
+ IVariable[] vararr = (IVariable[]) result.toArray( new IVariable[result.size()] );
+ return vararr;
- //ObjectReference iteratorObj = ((JDIObjectValue)mapentries).getUnderlyingObject();
-
- /* Field varsField = declaringType.fieldByName("frameLocalVars");
-
- System.out.println("field is "+varsField);
-
- Value value = declaringType.getValue(varsField);
-
- System.out.println("value is "+value);
-
- ObjectReferenceImpl valueImpl = (ObjectReferenceImpl) value;
-
- JDIFieldVariable var = new JDIFieldVariable((JDIDebugTarget)getDebugTarget(), varsField, valueImpl);
-
- System.out.println("Got Value for Stack Frame!!: "+value+" with impl class "+value.getClass());
-
- result.add(var);
- */
-
- //TODO HERE WE START FIXING!!!
- /* JDIFieldVariable vars = (JDIFieldVariable) getThis().getField( "frameLocalVars",
- false );
-
- JDIObjectValue val = (JDIObjectValue) vars.getValue();
-
- try {
-
- System.out.println( "Trying to get the map values" );
-
- // System.out.println("Declating type222 is "+vars.getDeclaringType());
- //System.out.println("VAL type is "+vars.getReferenceType();
-
- ObjectReference mapObj = ((JDIObjectValue) vars.getValue()).getUnderlyingObject();
- ReferenceType t = mapObj.referenceType();
-
- List allmethods = t.allMethods();
-
- Method m2 = (Method) t.methodsByName( "entrySet" ).iterator().next();
-
- System.out.println( "Got method " + m2 );
-
- ThreadReference thread = ((DroolsThread) getThread()).getUnderlyingThread();
- System.out.println( ". thread is . " + thread.getClass() + "; " + thread );
- Value mapentries = mapObj.invokeMethod( thread,
- m2,
- new ArrayList(),
- 0 );
-
- //ObjectReference iteratorObj = ((JDIObjectValue)mapentries).getUnderlyingObject();
- ObjectReferenceImpl entries = (ObjectReferenceImpl) mapentries;
-
- Method m3 = (Method) entries.referenceType().methodsByName( "iterator" ).iterator().next();
- Value iter = entries.invokeMethod( thread,
- m3,
- new ArrayList(),
- 0 );
-
- Method m2 = (Method) t.methodsByName( "i" ).iterator().next();
- Value mapiter = ((JDIObjectValue)mapentries).getUnderlyingObject().invokeMethod( ((DroolsThread)getThread()).getUnderlyingThread(), m3, new ArrayList(), 0);
-
-
- ObjectReferenceImpl valueImpl = (ObjectReferenceImpl) iter;
-
- *///boolean hasNext = hasNext(iter);
- //ObjectReferenceImpl next = getNext(iter);
- /* Field varsField;
-
- IVariable var1 = new MVELThisVariable( getJavaDebugTarget(),
- valueImpl,
- "label1" );
- IVariable var2 = new MVELThisVariable( getJavaDebugTarget(),
- valueImpl,
- "label2" );
- */
- //JDIFieldVariable var = new JDIFieldVariable((JDIDebugTarget)getDebugTarget(), varsField, valueImpl);
- //JDILocalVariable var2 = new JDILocalVariable()
- /* result.add( var1 );
- result.add( var2 );
- */
- // WatchExpression ex = new WatchExpression("frameLocalVars.entrySet().iterator()");
- // WatchExpression ex = new WatchExpression( "ttw12e4" );
- // ex.setExpressionContext( this );
- // System.out.println( "got expression value " + ex.getValue() );
- //System.out.println("Got value "+mapentries);
} catch ( Throwable t ) {
t.printStackTrace();
}
@@ -252,10 +165,6 @@
IncompatibleThreadStateException,
InvocationException, DebugException {
- recreateFrames();
-
-
-
ObjectReference refObj = (ObjectReference) val;
ReferenceType t = refObj.referenceType();
Method m2 = (Method) t.methodsByName( methodName ).iterator().next();
@@ -265,7 +174,6 @@
m2,
new ArrayList(),
0 );
- recreateFrames();
return res;
}
@@ -280,11 +188,9 @@
private Value fetchField(ObjectReference ref,
String fieldName) throws ClassNotLoadedException, DebugException {
- recreateFrames();
ClassType varType = (ClassType) ref.type();
Field field = varType.fieldByName( fieldName );
Value res = ref.getValue( field );
- recreateFrames();
return res;
}
@@ -389,35 +295,10 @@
LocalVariable var = (LocalVariable) method.variables().get( 0 );//frame
- recreateFrames();
-
JDILocalVariable jdivar = new JDILocalVariable(this, (LocalVariable) var);
ClassType frameType = (ClassType) var.type();
- //Method m1 = (Method) frameType.methodsByName( methodName ).iterator().next();
-
- //ThreadReference thread = ((DroolsThread) getThread()).getUnderlyingThread();
-
- //ObjectReference o = ((JDIObjectValue) jdivar.getValue()).getUnderlyingObject();
-
- //ThreadReference thread = getUnderlyingStackFrame().thread();
-
- //getUnderlyingStackFrame().getValue( var );
-
- //Field varsField = frameType.fieldByName(methodName);
- //Value value = frameType.getValue(varsField);
- //System.out.println("Got VALUE "+value);
-
- //StackFrame frame = getUnderlyingStackFrame();
-
- //StackFrame fr = getUnderlyingStackFrame();
-
- //MirrorImpl m = (MirrorImpl) fr;
- //m.verboseWriter()
-
- //ObjectReference o = (ObjectReference) fr.getValue( var );
- recreateFrames();
IValue value = jdivar.getValue();
if (value instanceof JDINullValue) {
return null;
@@ -440,10 +321,6 @@
public String getSourcePath() throws DebugException {
return "";
}
-
- private void recreateFrames() throws DebugException {
- //DroolsThread thr = (DroolsThread) getThread();
- //thr.computeNewStackFrames();
- }
+
}
More information about the jboss-svn-commits
mailing list