[jboss-svn-commits] JBL Code SVN: r13558 - in labs/jbossrules/branches/mvel-tooling-2007-06-30: drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Jul 16 16:12:08 EDT 2007
Author: ahtik
Date: 2007-07-16 16:12:08 -0400 (Mon, 16 Jul 2007)
New Revision: 13558
Modified:
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaFunctionBuilder.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java
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/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/DroolsStackFrame.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsThread.java
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/editors/completion/DialectDeterminator.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/DroolsSourceLookupDirector.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/DroolsSourceLookupParticipant.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/MVELSourceLookupParticipant.java
Log:
Progressing with the mvel debugger
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java 2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java 2007-07-16 20:12:08 UTC (rev 13558)
@@ -335,7 +335,6 @@
final String[] classes = new String[this.generatedClassList.size()];
this.generatedClassList.toArray( classes );
- System.out.println("MVEL: JavaDialect compilation");
final CompilationResult result = this.compiler.compile( classes,
this.src,
this.packageStoreWrapper,
@@ -352,7 +351,6 @@
final RuleErrorHandler rh = (RuleErrorHandler) handler;
}
handler.addError( err );
- System.out.println("MVEL: JavaDialect compilation error:"+ err.getMessage());
}
final Collection errors = this.errorHandlers.values();
@@ -409,7 +407,6 @@
}
final String text = (String) context.getInvokers().get( className );
- //System.out.println( className + ":\n" + text );
final BaseDescr descr = (BaseDescr) context.getDescrLookups().get( className );
addClassCompileTask( className,
descr,
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaFunctionBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaFunctionBuilder.java 2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaFunctionBuilder.java 2007-07-16 20:12:08 UTC (rev 13558)
@@ -96,8 +96,6 @@
final String text = TemplateInterpreter.evalToString( template,
vars );
- //System.out.println( text );
-
final BufferedReader reader = new BufferedReader( new StringReader( text ) );
String line = null;
final String lineStartsWith = " public static " + functionDescr.getReturnType() + " " + functionDescr.getName();
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java 2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java 2007-07-16 20:12:08 UTC (rev 13558)
@@ -69,6 +69,7 @@
try {
MVELDialect dialect = (MVELDialect) context.getDialect();
+
final DroolsMVELFactory factory = new DroolsMVELFactory( context.getDeclarationResolver().getDeclarations(),
null,
context.getPkg().getGlobals() );
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java 2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java 2007-07-16 20:12:08 UTC (rev 13558)
@@ -184,8 +184,6 @@
public void init(RuleDescr ruleDescr) {
//MVEL: Compiler change
- System.out.println("MVEL: MVELDialect.init with ruleDescr:" + ruleDescr);
-
//MVEL:test null to Fix failing test on org.drools.rule.builder.dialect.mvel.MVELConsequenceBuilderTest.testImperativeCodeError()
String pkgName = this.pkg == null? "": this.pkg.getName();
final String ruleClassName = JavaDialect.getUniqueLegalName( pkgName,
@@ -209,7 +207,6 @@
final LineMappings mapping = new LineMappings( name );
mapping.setStartLine( ruleDescr.getConsequenceLine() );
mapping.setOffset( ruleDescr.getConsequenceOffset() );
- System.out.println("MVEL: Adding mvel mappings for:" + name + " at line: " + mapping.getStartLine());
context.getPkg().getPackageCompilationData().getLineMappings().put( name, mapping );
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java 2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java 2007-07-16 20:12:08 UTC (rev 13558)
@@ -32,7 +32,6 @@
workingMemory,
null );
//MVEL: Core change
- System.out.println("MVEL:Executing expression " + ((CompiledExpression)expr).getSourceName());
CompiledExpression compexpr = (CompiledExpression)this.expr;
@@ -40,10 +39,10 @@
//MVELRuntime.registerBreakpoint( compexpr.getSourceName(), 1 );
//MVEL: Receive breakpoints from debugger
- MVELDebugHandler.receiveBreakpoints();
+ MVELDebugHandler.prepare();
//MVEL: weare always debugging for now, but we should either debug or run
- System.out.println("MVEL: RUNNING WITH DEBUGGING");
+
MVEL.executeDebugger( compexpr, null, this.factory);
/*MVEL.executeExpression( this.expr,
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-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELDebugHandler.java 2007-07-16 20:12:08 UTC (rev 13558)
@@ -4,7 +4,7 @@
import org.mvel.debug.Debugger;
import org.mvel.debug.Frame;
-public class MVELDebugHandler {
+public final class MVELDebugHandler {
//MVEL: Core change
static {
@@ -28,12 +28,12 @@
* @param frame
*/
private final static void onBreak(Frame frame) {
- System.out.println("MVEL: HEEEE!!! MVELDebugger break on 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);
+ System.out.println("MVEL: Registering Breakpoint FROM DEBUGGER for "+sourceName+":"+lineNumber+"; from Thread:"+Thread.currentThread());
MVELRuntime.registerBreakpoint( sourceName, lineNumber );
}
@@ -57,5 +57,12 @@
}
}
+
+ /**
+ * 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/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-16 19:46:38 UTC (rev 13557)
+++ 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-16 20:12:08 UTC (rev 13558)
@@ -1,5 +1,6 @@
package org.drools.eclipse.debug.core;
+import java.awt.EventQueue;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Iterator;
@@ -15,13 +16,12 @@
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.IntegerValueImpl;
-import org.eclipse.jdi.internal.ObjectReferenceImpl;
-import org.eclipse.jdi.internal.StringReferenceImpl;
-import org.eclipse.jdi.internal.VirtualMachineImpl;
-import org.eclipse.jdi.internal.jdwp.JdwpStringID;
+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;
@@ -30,16 +30,16 @@
import org.eclipse.jdt.internal.debug.core.model.JDIDebugModelMessages;
import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
-import org.eclipse.jdt.internal.debug.core.model.JDIPrimitiveValue;
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.Location;
import com.sun.jdi.Method;
import com.sun.jdi.ObjectCollectedException;
import com.sun.jdi.ObjectReference;
@@ -62,70 +62,109 @@
public class DroolsDebugTarget extends JDIDebugTarget {
- private ArrayList fThreads;
+ private ArrayList fThreads;
private ThreadStartHandler fThreadStartHandler = null;
- private boolean fSuspended = true;
+ private boolean fSuspended = true;
- public DroolsDebugTarget(ILaunch launch, VirtualMachine jvm, String name, boolean supportTerminate, boolean supportDisconnect, IProcess process, boolean resume) {
- super(launch, jvm, name, supportTerminate, supportDisconnect, process, resume);
+ public DroolsDebugTarget(ILaunch launch,
+ VirtualMachine jvm,
+ String name,
+ boolean supportTerminate,
+ boolean supportDisconnect,
+ IProcess process,
+ boolean resume) {
+ super( launch,
+ jvm,
+ name,
+ supportTerminate,
+ supportDisconnect,
+ process,
+ resume );
}
- public void breakpointAdded(IBreakpoint breakpoint) {
-
- System.out.println("MVEL: entering DroolsDebugTarget.breakpointAdded");
+ public void breakpointAdded(IBreakpoint breakpoint) {
+
try {
- if (breakpoint instanceof DroolsLineBreakpoint) {
+ if ( breakpoint instanceof DroolsLineBreakpoint ) {
((DroolsLineBreakpoint) breakpoint).setJavaBreakpointProperties();
- DroolsLineBreakpoint d = (DroolsLineBreakpoint) breakpoint;
- System.out.println("MVEL:Got dialect " + d.getDialectName());
+ final DroolsLineBreakpoint d = (DroolsLineBreakpoint) breakpoint;
- if (d.getDialectName().equals(MVELDialect.ID)) {
- System.out.println("MVEL: Adding MVEL breakpoint"
- + " getLineNumber:" + d.getLineNumber()
- + " getDRLLineNumber:" + d.getDRLLineNumber());
+ if ( d.getDialectName().equals( MVELDialect.ID ) ) {
//getBreakpoints().add( breakpoint );
//super.breakpointAdded(breakpoint);
- System.out.println("MVEL: BREAKPOINT LINE NUMBER: "+d.getLineNumber());
-
- super.breakpointAdded(breakpoint);
-
+ Iterator handleriter = getVM().classesByName( "org.drools.base.mvel.MVELDebugHandler" ).iterator();
+ if ( !handleriter.hasNext() ) {
+ // 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_EVENT_THREAD );
+
+ addJDIEventListener( new IJDIEventListener() {
+
+ public boolean handleEvent(Event event,
+ JDIDebugTarget target) {
+ addRemoteBreakpoint( d );
+ return true;
+ }
+
+ public void wonSuspendVote(Event event,
+ JDIDebugTarget target) {
+ }
+
+ },
+ req );
+
+ req.enable();
+ return;
+ }
+
+/* boolean suspend = false;
+ if ( !isSuspended() && canSuspend() ) {
+ suspend = true;
+ suspend();
+ }
+*/ addRemoteBreakpoint( d );
+/* if ( suspend && canResume() ) {
+ resume();
+ }
+*/
} else {
- System.out.println("MVEL: Adding Java breakpoint");
// only add breakpoint if setting Java properties of DRL
// breakpoint does not generate an error
- super.breakpointAdded(breakpoint);
- }
+ super.breakpointAdded( breakpoint );
+ }
} else {
- super.breakpointAdded(breakpoint);
+ super.breakpointAdded( breakpoint );
}
- } catch (Throwable t) {
+ } catch ( Throwable t ) {
// Exception will be thrown when trying to use breakpoint
// on drl that is incorrect (cannot be parsed or compiled)
- DroolsEclipsePlugin.log(t);
+ DroolsEclipsePlugin.log( t );
}
}
protected synchronized void initialize() {
- setThreadList(new ArrayList(5));
+ setThreadList( new ArrayList( 5 ) );
super.initialize();
}
protected JDIThread createThread(ThreadReference thread) {
- JDIThread jdiThread= null;
+ JDIThread jdiThread = null;
try {
- jdiThread= new DroolsThread(this, thread);
- } catch (ObjectCollectedException exception) {
+ jdiThread = new DroolsThread( this,
+ thread );
+ } catch ( ObjectCollectedException exception ) {
// ObjectCollectionException can be thrown if the thread has already
// completed (exited) in the VM.
return null;
}
- if (isDisconnected()) {
+ if ( isDisconnected() ) {
return null;
}
- synchronized (fThreads) {
- fThreads.add(jdiThread);
+ synchronized ( fThreads ) {
+ fThreads.add( jdiThread );
}
jdiThread.fireCreationEvent();
return jdiThread;
@@ -133,49 +172,48 @@
private Iterator getThreadIterator() {
List threadList;
- synchronized (fThreads) {
- threadList= (List) fThreads.clone();
+ synchronized ( fThreads ) {
+ threadList = (List) fThreads.clone();
}
return threadList.iterator();
}
private boolean hasSuspendedThreads() {
Iterator it = getThreadIterator();
- while(it.hasNext()){
- IThread thread = (IThread)it.next();
- if(thread.isSuspended())
- return true;
+ while ( it.hasNext() ) {
+ IThread thread = (IThread) it.next();
+ if ( thread.isSuspended() ) return true;
}
return false;
}
public boolean canResume() {
- return (isSuspended() || hasSuspendedThreads())
- && isAvailable() && !isPerformingHotCodeReplace();
+ return (isSuspended() || hasSuspendedThreads()) && isAvailable() && !isPerformingHotCodeReplace();
}
protected void resume(boolean fireNotification) throws DebugException {
- if ((!isSuspended() && !hasSuspendedThreads())
- || !isAvailable()) {
+ if ( (!isSuspended() && !hasSuspendedThreads()) || !isAvailable() ) {
return;
}
try {
- setSuspended(false);
+ setSuspended( false );
resumeThreads();
VirtualMachine vm = getVM();
- if (vm != null) {
+ if ( vm != null ) {
vm.resume();
}
- if (fireNotification) {
- fireResumeEvent(DebugEvent.CLIENT_REQUEST);
+ if ( fireNotification ) {
+ fireResumeEvent( DebugEvent.CLIENT_REQUEST );
}
- } catch (VMDisconnectedException e) {
+ } catch ( VMDisconnectedException e ) {
disconnected();
return;
- } catch (RuntimeException e) {
- setSuspended(true);
- fireSuspendEvent(DebugEvent.CLIENT_REQUEST);
- targetRequestFailed(MessageFormat.format(JDIDebugModelMessages.JDIDebugTarget_exception_resume, new String[] {e.toString()}), e);
+ } catch ( RuntimeException e ) {
+ setSuspended( true );
+ fireSuspendEvent( DebugEvent.CLIENT_REQUEST );
+ targetRequestFailed( MessageFormat.format( JDIDebugModelMessages.JDIDebugTarget_exception_resume,
+ new String[]{e.toString()} ),
+ e );
}
}
@@ -192,29 +230,31 @@
}
public IThread[] getThreads() {
- synchronized (fThreads) {
- return (IThread[])fThreads.toArray(new IThread[0]);
+ synchronized ( fThreads ) {
+ return (IThread[]) fThreads.toArray( new IThread[0] );
}
}
protected void removeAllThreads() {
- Iterator itr= getThreadIterator();
- while (itr.hasNext()) {
- DroolsThread child= (DroolsThread) itr.next();
+ Iterator itr = getThreadIterator();
+ while ( itr.hasNext() ) {
+ DroolsThread child = (DroolsThread) itr.next();
child.terminated();
}
- synchronized (fThreads) {
+ synchronized ( fThreads ) {
fThreads.clear();
}
}
protected void initializeRequests() {
- setThreadStartHandler(new ThreadStartHandler());
+ setThreadStartHandler( new ThreadStartHandler() );
new ThreadDeathHandler();
new MVELTraceHandler();
}
- class ThreadDeathHandler implements IJDIEventListener {
+ class ThreadDeathHandler
+ implements
+ IJDIEventListener {
protected ThreadDeathHandler() {
createRequest();
@@ -226,14 +266,15 @@
*/
protected void createRequest() {
EventRequestManager manager = getEventRequestManager();
- if (manager != null) {
+ if ( manager != null ) {
try {
- EventRequest req= manager.createThreadDeathRequest();
- req.setSuspendPolicy(EventRequest.SUSPEND_NONE);
+ EventRequest req = manager.createThreadDeathRequest();
+ req.setSuspendPolicy( EventRequest.SUSPEND_NONE );
req.enable();
- addJDIEventListener(this, req);
- } catch (RuntimeException e) {
- logError(e);
+ addJDIEventListener( this,
+ req );
+ } catch ( RuntimeException e ) {
+ logError( e );
}
}
}
@@ -248,12 +289,13 @@
* @param target the target in which the thread died
* @return <code>true</code> - the thread should be resumed
*/
- public boolean handleEvent(Event event, JDIDebugTarget target) {
- ThreadReference ref= ((ThreadDeathEvent)event).thread();
- DroolsThread thread= (DroolsThread) findThread(ref);
- if (thread != null) {
- synchronized (fThreads) {
- fThreads.remove(thread);
+ public boolean handleEvent(Event event,
+ JDIDebugTarget target) {
+ ThreadReference ref = ((ThreadDeathEvent) event).thread();
+ DroolsThread thread = (DroolsThread) findThread( ref );
+ if ( thread != null ) {
+ synchronized ( fThreads ) {
+ fThreads.remove( thread );
}
thread.terminated();
}
@@ -263,13 +305,16 @@
/* (non-Javadoc)
* @see org.eclipse.jdt.internal.debug.core.IJDIEventListener#wonSuspendVote(com.sun.jdi.event.Event, org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget)
*/
- public void wonSuspendVote(Event event, JDIDebugTarget target) {
+ public void wonSuspendVote(Event event,
+ JDIDebugTarget target) {
// do nothing
}
}
- class ThreadStartHandler implements IJDIEventListener {
+ class ThreadStartHandler
+ implements
+ IJDIEventListener {
protected EventRequest fRequest;
@@ -283,15 +328,16 @@
*/
protected void createRequest() {
EventRequestManager manager = getEventRequestManager();
- if (manager != null) {
+ if ( manager != null ) {
try {
- EventRequest req= manager.createThreadStartRequest();
- req.setSuspendPolicy(EventRequest.SUSPEND_NONE);
+ EventRequest req = manager.createThreadStartRequest();
+ req.setSuspendPolicy( EventRequest.SUSPEND_NONE );
req.enable();
- addJDIEventListener(this, req);
- setRequest(req);
- } catch (RuntimeException e) {
- logError(e);
+ addJDIEventListener( this,
+ req );
+ setRequest( req );
+ } catch ( RuntimeException e ) {
+ logError( e );
}
}
}
@@ -308,28 +354,29 @@
* @param target the target in which the thread started
* @return <code>true</code> - the thread should be resumed
*/
- public boolean handleEvent(Event event, JDIDebugTarget target) {
- ThreadReference thread= ((ThreadStartEvent)event).thread();
+ public boolean handleEvent(Event event,
+ JDIDebugTarget target) {
+ ThreadReference thread = ((ThreadStartEvent) event).thread();
try {
- if (thread.isCollected()) {
+ if ( thread.isCollected() ) {
return false;
}
- } catch (VMDisconnectedException exception) {
+ } catch ( VMDisconnectedException exception ) {
return false;
- } catch (ObjectCollectedException e) {
+ } catch ( ObjectCollectedException e ) {
return false;
- } catch (TimeoutException e) {
+ } catch ( TimeoutException e ) {
// continue - attempt to create the thread
}
- DroolsThread jdiThread= (DroolsThread) findThread(thread);
- if (jdiThread == null) {
- jdiThread = (DroolsThread) createThread(thread);
- if (jdiThread == null) {
+ DroolsThread jdiThread = (DroolsThread) findThread( thread );
+ if ( jdiThread == null ) {
+ jdiThread = (DroolsThread) createThread( thread );
+ if ( jdiThread == null ) {
return false;
}
} else {
jdiThread.disposeStackFrames();
- jdiThread.fireChangeEvent(DebugEvent.CONTENT);
+ jdiThread.fireChangeEvent( DebugEvent.CONTENT );
}
return !jdiThread.isSuspended();
}
@@ -337,7 +384,8 @@
/* (non-Javadoc)
* @see org.eclipse.jdt.internal.debug.core.IJDIEventListener#wonSuspendVote(com.sun.jdi.event.Event, org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget)
*/
- public void wonSuspendVote(Event event, JDIDebugTarget target) {
+ public void wonSuspendVote(Event event,
+ JDIDebugTarget target) {
// do nothing
}
@@ -345,9 +393,10 @@
* Deregisters this event listener.
*/
protected void deleteRequest() {
- if (getRequest() != null) {
- removeJDIEventListener(this, getRequest());
- setRequest(null);
+ if ( getRequest() != null ) {
+ removeJDIEventListener( this,
+ getRequest() );
+ setRequest( null );
}
}
@@ -362,7 +411,7 @@
private void disposeThreadHandler() {
ThreadStartHandler handler = getThreadStartHandler2();
- if (handler != null) {
+ if ( handler != null ) {
handler.deleteRequest();
}
}
@@ -380,10 +429,10 @@
}
public boolean isOutOfSynch() throws DebugException {
- Iterator threads= getThreadIterator();
- while (threads.hasNext()) {
- JDIThread thread= (JDIThread)threads.next();
- if (thread.isOutOfSynch()) {
+ Iterator threads = getThreadIterator();
+ while ( threads.hasNext() ) {
+ JDIThread thread = (JDIThread) threads.next();
+ if ( thread.isOutOfSynch() ) {
return true;
}
}
@@ -391,10 +440,10 @@
}
public boolean mayBeOutOfSynch() {
- Iterator threads= getThreadIterator();
- while (threads.hasNext()) {
- JDIThread thread= (JDIThread)threads.next();
- if (thread.mayBeOutOfSynch()) {
+ Iterator threads = getThreadIterator();
+ while ( threads.hasNext() ) {
+ JDIThread thread = (JDIThread) threads.next();
+ if ( thread.mayBeOutOfSynch() ) {
return true;
}
}
@@ -402,135 +451,139 @@
}
public JDIThread findThread(ThreadReference tr) {
- Iterator iter= getThreadIterator();
- while (iter.hasNext()) {
+ Iterator iter = getThreadIterator();
+ while ( iter.hasNext() ) {
JDIThread thread = (JDIThread) iter.next();
- if (thread.getUnderlyingThread().equals(tr))
- return thread;
+ if ( thread.getUnderlyingThread().equals( tr ) ) return thread;
}
return null;
}
- public void breakpointRemoved(IBreakpoint breakpoint, IMarkerDelta delta) {
- if (!isAvailable()) {
+ public void breakpointRemoved(IBreakpoint breakpoint,
+ IMarkerDelta delta) {
+ if ( !isAvailable() ) {
return;
}
- if (supportsBreakpoint(breakpoint)) {
+ if ( supportsBreakpoint( breakpoint ) ) {
try {
- ((JavaBreakpoint)breakpoint).removeFromTarget(this);
- getBreakpoints().remove(breakpoint);
+ ((JavaBreakpoint) breakpoint).removeFromTarget( this );
+ getBreakpoints().remove( breakpoint );
Iterator threads = getThreadIterator();
- while (threads.hasNext()) {
- ((DroolsThread)threads.next()).removeCurrentBreakpoint(breakpoint);
+ while ( threads.hasNext() ) {
+ ((DroolsThread) threads.next()).removeCurrentBreakpoint( breakpoint );
}
- } catch (CoreException e) {
- logError(e);
+ } catch ( CoreException e ) {
+ logError( e );
}
}
}
protected void suspendThreads() {
Iterator threads = getThreadIterator();
- while (threads.hasNext()) {
- ((DroolsThread)threads.next()).suspendedByVM();
+ while ( threads.hasNext() ) {
+ ((DroolsThread) threads.next()).suspendedByVM();
}
}
protected void resumeThreads() throws DebugException {
Iterator threads = getThreadIterator();
- while (threads.hasNext()) {
- ((DroolsThread)threads.next()).resumedByVM();
+ while ( threads.hasNext() ) {
+ ((DroolsThread) threads.next()).resumedByVM();
}
}
public void disconnect() throws DebugException {
- if (!isAvailable()) {
+ if ( !isAvailable() ) {
// already done
return;
}
- if (!canDisconnect()) {
- notSupported(JDIDebugModelMessages.JDIDebugTarget_does_not_support_disconnect);
+ if ( !canDisconnect() ) {
+ notSupported( JDIDebugModelMessages.JDIDebugTarget_does_not_support_disconnect );
}
try {
disposeThreadHandler();
VirtualMachine vm = getVM();
- if (vm != null) {
+ if ( vm != null ) {
vm.dispose();
}
- } catch (VMDisconnectedException e) {
+ } catch ( VMDisconnectedException e ) {
// if the VM disconnects while disconnecting, perform
// normal disconnect handling
disconnected();
- } catch (RuntimeException e) {
- targetRequestFailed(MessageFormat.format(JDIDebugModelMessages.JDIDebugTarget_exception_disconnecting, new String[] {e.toString()}), e);
+ } catch ( RuntimeException e ) {
+ targetRequestFailed( MessageFormat.format( JDIDebugModelMessages.JDIDebugTarget_exception_disconnecting,
+ new String[]{e.toString()} ),
+ e );
}
}
public void terminate() throws DebugException {
- if (!isAvailable()) {
+ if ( !isAvailable() ) {
return;
}
- if (!supportsTerminate()) {
- notSupported(JDIDebugModelMessages.JDIDebugTarget_does_not_support_termination);
+ if ( !supportsTerminate() ) {
+ notSupported( JDIDebugModelMessages.JDIDebugTarget_does_not_support_termination );
}
try {
- setTerminating(true);
+ setTerminating( true );
disposeThreadHandler();
VirtualMachine vm = getVM();
- if (vm != null) {
- vm.exit(1);
+ if ( vm != null ) {
+ vm.exit( 1 );
}
- IProcess process= getProcess();
- if (process != null) {
+ IProcess process = getProcess();
+ if ( process != null ) {
process.terminate();
}
- } catch (VMDisconnectedException e) {
+ } catch ( VMDisconnectedException e ) {
// if the VM disconnects while exiting, perform
// normal termination processing
terminated();
- } catch (TimeoutException exception) {
+ } catch ( TimeoutException exception ) {
// if there is a timeout see if the associated process is terminated
IProcess process = getProcess();
- if (process != null && process.isTerminated()) {
+ if ( process != null && process.isTerminated() ) {
terminated();
} else {
// All we can do is disconnect
disconnected();
}
- } catch (RuntimeException e) {
- targetRequestFailed(MessageFormat.format(JDIDebugModelMessages.JDIDebugTarget_exception_terminating, new String[] {e.toString()}), e);
+ } catch ( RuntimeException e ) {
+ targetRequestFailed( MessageFormat.format( JDIDebugModelMessages.JDIDebugTarget_exception_terminating,
+ new String[]{e.toString()} ),
+ e );
}
}
public void handleVMStart(VMStartEvent event) {
- if (isResumeOnStartup()) {
+ if ( isResumeOnStartup() ) {
try {
- setSuspended(true);
+ setSuspended( true );
resume();
- } catch (DebugException e) {
- logError(e);
+ } catch ( DebugException e ) {
+ logError( e );
}
}
// If any threads have resumed since thread collection was initialized,
// update their status (avoid concurrent modification - use #getThreads())
IThread[] threads = getThreads();
- for (int i = 0; i < threads.length; i++) {
+ for ( int i = 0; i < threads.length; i++ ) {
DroolsThread thread = (DroolsThread) threads[i];
- if (thread.isSuspended()) {
+ if ( thread.isSuspended() ) {
try {
boolean suspended = thread.getUnderlyingThread().isSuspended();
- if (!suspended) {
- thread.setRunning(true);
- thread.fireResumeEvent(DebugEvent.CLIENT_REQUEST);
+ if ( !suspended ) {
+ thread.setRunning( true );
+ thread.fireResumeEvent( DebugEvent.CLIENT_REQUEST );
}
- } catch (VMDisconnectedException e) {
- } catch (ObjectCollectedException e){
- } catch (RuntimeException e) {
- logError(e);
+ } catch ( VMDisconnectedException e ) {
+ } catch ( ObjectCollectedException e ) {
+ } catch ( RuntimeException e ) {
+ logError( e );
}
}
}
@@ -538,94 +591,79 @@
protected void initializeState() {
- List threads= null;
+ List threads = null;
VirtualMachine vm = getVM();
- if (vm != null) {
+ if ( vm != null ) {
try {
- threads= vm.allThreads();
- } catch (RuntimeException e) {
- internalError(e);
+ threads = vm.allThreads();
+ } catch ( RuntimeException e ) {
+ internalError( e );
}
- if (threads != null) {
- Iterator initialThreads= threads.iterator();
- while (initialThreads.hasNext()) {
- createThread((ThreadReference) initialThreads.next());
+ if ( threads != null ) {
+ Iterator initialThreads = threads.iterator();
+ while ( initialThreads.hasNext() ) {
+ createThread( (ThreadReference) initialThreads.next() );
}
}
}
- if (isResumeOnStartup()) {
- setSuspended(false);
+ if ( isResumeOnStartup() ) {
+ setSuspended( false );
}
}
public void suspend() throws DebugException {
- if (isSuspended()) {
+ if ( isSuspended() ) {
return;
}
try {
VirtualMachine vm = getVM();
- if (vm != null) {
+ if ( vm != null ) {
vm.suspend();
}
suspendThreads();
- setSuspended(true);
- fireSuspendEvent(DebugEvent.CLIENT_REQUEST);
- } catch (RuntimeException e) {
- setSuspended(false);
- fireResumeEvent(DebugEvent.CLIENT_REQUEST);
- targetRequestFailed(MessageFormat.format(JDIDebugModelMessages.JDIDebugTarget_exception_suspend, new String[] {e.toString()}), e);
+ setSuspended( true );
+ fireSuspendEvent( DebugEvent.CLIENT_REQUEST );
+ } catch ( RuntimeException e ) {
+ setSuspended( false );
+ fireResumeEvent( DebugEvent.CLIENT_REQUEST );
+ targetRequestFailed( MessageFormat.format( JDIDebugModelMessages.JDIDebugTarget_exception_suspend,
+ new String[]{e.toString()} ),
+ e );
}
}
public void prepareToSuspendByBreakpoint(JavaBreakpoint breakpoint) {
- setSuspended(true);
+ setSuspended( true );
suspendThreads();
}
protected void cancelSuspendByBreakpoint(JavaBreakpoint breakpoint) throws DebugException {
- setSuspended(false);
+ setSuspended( false );
resumeThreads();
}
- class MVELTraceHandler implements IJDIEventListener {
+ class MVELTraceHandler
+ implements
+ IJDIEventListener {
protected MVELTraceHandler() {
createRequest();
}
protected void createRequest() {
- System.out.println("MVEL: entering MVELTraceHandler.createRequest");
EventRequestManager manager = getEventRequestManager();
- if (manager != null) {
+ if ( manager != null ) {
try {
-/* String className = "com.sample.DroolsTest";
-
- List list = getVM().classesByName(className);
- List alllist = getVM().allClasses();
-
- System.out.println("Number of classes "+alllist.size());
- System.out.println("they are:");
-
- Iterator iter = alllist.iterator();
- while (iter.hasNext()) {
- Object o = (Object) iter.next();
- System.out.println("allclass: "+o);
- }
-
- System.out.println("Found classes "+list.size());
- if (list.size()>0) {
- System.out.println(". first "+iter.next());
- }
-*/
- ClassPrepareRequest req= manager.createClassPrepareRequest();
- req.addClassFilter("org.drools.base.mvel.MVELDebugHandler");
- req.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
+ ClassPrepareRequest req = manager.createClassPrepareRequest();
+ req.addClassFilter( "org.drools.base.mvel.MVELDebugHandler" );
+ req.setSuspendPolicy( EventRequest.SUSPEND_EVENT_THREAD );
+ addJDIEventListener( MVELTraceHandler.this,
+ req );
req.enable();
- addJDIEventListener(MVELTraceHandler.this, req);
- } catch (RuntimeException e) {
- logError(e);
+ } catch ( RuntimeException e ) {
+ logError( e );
}
}
}
@@ -640,9 +678,9 @@
* @param target the target in which the thread died
* @return <code>true</code> - the thread should be resumed
*/
- public boolean handleEvent(Event event, JDIDebugTarget target) {
- String name = ((ClassPrepareEvent)event).referenceType().name();
- System.out.println("MVEL: dialect class loaded " + name);
+ public boolean handleEvent(Event event,
+ JDIDebugTarget target) {
+ String name = ((ClassPrepareEvent) event).referenceType().name();
MethodEntryRequest req = getEventRequestManager().createMethodEntryRequest();
req.addClassFilter( ((ClassPrepareEvent) event).referenceType() );
@@ -654,8 +692,6 @@
EventRequest req= manager.createModificationWatchpointRequest(field);
*/
req.setSuspendPolicy( EventRequest.SUSPEND_EVENT_THREAD );
- req.enable();
-
addJDIEventListener( new IJDIEventListener() {
public boolean handleEvent(Event event,
@@ -663,130 +699,53 @@
MethodEntryEvent entryEvent = (MethodEntryEvent) event;
String name2 = entryEvent.method().name();
- System.out.println( "MVEL: Got MVELConsequence call for " + name2 );
- if ( !name2.equals("onBreak" ) && !name2.equals( "receiveBreakpoints" )) {
- System.out.println( "MVEL: Wrong method, resuming. method: "+name2 );
+ if ( !name2.equals( "onBreak" ) && !name2.equals( "receiveBreakpoints" ) ) {
//event.virtualMachine().resume();
return true;
}
- if (name2.equals( "receiveBreakpoints" )) {
- Iterator iterator = getBreakpoints().iterator();
- while ( iterator.hasNext() ) {
- IJavaBreakpoint element = (IJavaBreakpoint) iterator.next();
- if (element instanceof DroolsLineBreakpoint) {
- DroolsLineBreakpoint l = (DroolsLineBreakpoint) element;
- if (MVELDialect.ID.equals(l.getDialectName())) {
-
- try {
-
- int line = l.getLineNumber();
- String sourceName = l.getTypeName();
-
- ReferenceType refType = ((MethodEntryEvent) event).method().declaringType();
-
- Method m = (Method) refType.methodsByName( "registerBreakpoint" ).iterator().next();
+ try {
+ IThread[] tharr = getThreads();
- 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 {
- ThreadReference t = ((MethodEntryEvent) event).thread();
-
- System.out.println("MVEL: SUSPEND COUNT="+t.suspendCount());
-
- StackFrame frame = t.frame( 0 );
-
- ClassType tt = (ClassType) getVM().classesByName(refType.name()).iterator().next();
-
+ ThreadReference t = null;
+ DroolsThread t2 = null;
- DroolsThread t2 = (DroolsThread) findThread( t );
- tt.invokeMethod( t2.getUnderlyingThread(), m, args, ObjectReference.INVOKE_SINGLE_THREADED);
-
- //refType.classObject().invokeMethod( t, m, args, 0);
-
- //getVM().classesByName(refType.g);
- //refType
-
-
- } catch ( InvalidTypeException e ) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch ( ClassNotLoadedException e ) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch ( IncompatibleThreadStateException e ) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch ( InvocationException e ) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- //MVELRuntime.registerBreakpoint( compexpr.getSourceName(), 1 );
-
- } catch ( CoreException e ) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
-
- }
- return true;
-
- }
-
- System.out.println("MVEL: ONBREAK Called!!! Suspending threads");
+ for ( int i = 0; i < tharr.length; i++ ) {
+ DroolsThread th2 = (DroolsThread) tharr[i];
+ ThreadReference th2real = ((DroolsThread) tharr[i]).getUnderlyingThread();
- JDIThread thr = findThread( entryEvent.thread() );
- try {
- thr.suspend();
- } catch ( DebugException e ) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
+ //MVEL It doesn't have to be always main. find a better way for detection
+ 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);
- System.out.println("MVEL: Thread is "+entryEvent.thread().getClass());
- if (thr instanceof DroolsThread) {
- System.out.println("MVEL: Drools Thread!!");
- ((DroolsThread)thr).suspendedByVM();
+ /*
+ try {
+ Thread.sleep( 3000 );
+ } catch ( InterruptedException e ) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }*/
+
+ //fireSuspendEvent(DebugEvent.BREAKPOINT);
+ //((DroolsThread)thr).suspendedByVM();
+ //suspendThreads();
+ return true;
+ }
+ }
+ } catch ( DebugException t ) {
+ t.printStackTrace();
}
- //suspendThreads();
- //suspendedByBreakpoint( null, false);
-
-
-
-/* try {
- suspend();
- } catch ( DebugException e ) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-*/ System.out.println( "MVEL: Stopping thread, inspecting remote vars" );
-
-/* ReferenceType declaringType = entryEvent.location().declaringType();
- Field varsField = declaringType.fieldByName( "frameLocalVars" );
-
- System.out.println("Field is "+varsField);
-
- Value value = declaringType.getValue( varsField );
-
- System.out.println( "Got Value: " + value );
-*/
return true;
}
@@ -800,48 +759,124 @@
},
req );
+ req.enable();
- //getVM().resume();
-/* try {
- resumeThreads();
- } catch (DebugException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-*/
-/* try {
- String path = ((MethodEntryEvent)event).location().sourcePath();
- if (path.startsWith("org.drools")) {
- System.out.println("Path "+path);
- }
- } catch (AbsentInformationException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-*/
- //System.out.println("WOW! Got entry! "+method);
return true;
}
/* (non-Javadoc)
* @see org.eclipse.jdt.internal.debug.core.IJDIEventListener#wonSuspendVote(com.sun.jdi.event.Event, org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget)
*/
- public void wonSuspendVote(Event event, JDIDebugTarget target) {
+ public void wonSuspendVote(Event event,
+ JDIDebugTarget target) {
// do nothing
}
}
- public Object getFirstDroolsBreakpoint() {
+ public Object getDroolsBreakpoint(String source,
+ int line) {
Iterator iterator = getBreakpoints().iterator();
while ( iterator.hasNext() ) {
- IJavaBreakpoint element = (IJavaBreakpoint) iterator.next();
- if (element instanceof DroolsLineBreakpoint) {
- DroolsLineBreakpoint l = (DroolsLineBreakpoint) element;
- return l;
- }
+ IJavaBreakpoint element = (IJavaBreakpoint) iterator.next();
+ if ( element instanceof DroolsLineBreakpoint ) {
+ DroolsLineBreakpoint l = (DroolsLineBreakpoint) element;
+ try {
+
+ if ( l.getLineNumber() == line && source.equals( l.getRuleName() ) ) {
+ return l;
+ }
+ } catch ( CoreException e ) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
}
return null;
}
+ private void addRemoteBreakpoint(DroolsLineBreakpoint d) {
+ 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 ) {
+ e1.printStackTrace();
+ 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 {
+
+ //StackFrame frame = t.frame( 0 );
+
+ //ClassType tt = (ClassType) getVM().classesByName(refType.name()).iterator().next();
+ 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
+ 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 ( Throwable e ) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ }
+
+ /* 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-16 19:46:38 UTC (rev 13557)
+++ 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-16 20:12:08 UTC (rev 13558)
@@ -52,7 +52,7 @@
public int getDRLLineNumber() {
return getMarker().getAttribute( IDroolsDebugConstants.DRL_LINE_NUMBER, -1 );
}
-
+
public String getModelIdentifier() {
return IDroolsDebugConstants.ID_DROOLS_DEBUG_MODEL;
}
@@ -69,7 +69,8 @@
DRLInfo drlInfo = DroolsEclipsePlugin.getDefault().parseResource( marker.getResource(), true );
marker.setAttribute( TYPE_NAME, getRuleClassName( drlInfo, marker.getResource().toString(), drlLineNumber ) );
- marker.setAttribute( IMarker.LINE_NUMBER, getRuleLineNumber( drlInfo, marker.getResource().toString(), drlLineNumber ) );
+ int ruleLineNumber = getRuleLineNumber( drlInfo, marker.getResource().toString(), drlLineNumber );
+ marker.setAttribute( IMarker.LINE_NUMBER, ruleLineNumber );
marker.setAttribute( DIALECT, getDialect( drlInfo, drlLineNumber ) );
} catch ( Throwable t ) {
@@ -106,8 +107,10 @@
RuleInfo ruleInfo = drlInfo.getRuleInfo( lineNumber );
if ( ruleInfo != null ) {
if ( ruleInfo.getConsequenceDrlLineNumber() < lineNumber ) {
- return ruleInfo.getConsequenceJavaLineNumber()
- + (lineNumber - ruleInfo.getConsequenceDrlLineNumber() + 1);
+
+ int line = ruleInfo.getConsequenceJavaLineNumber()
+ + (lineNumber - ruleInfo.getConsequenceDrlLineNumber() + 1);
+ return line;
}
}
FunctionInfo functionInfo = drlInfo.getFunctionInfo( lineNumber );
@@ -119,4 +122,16 @@
throw new CoreException( new Status( IStatus.ERROR, DroolsEclipsePlugin.getUniqueIdentifier(), 0,
"Cannot determine ruleLineNumber for " + resource + " " + lineNumber, null ) );
}
+
+ public String getRuleName() {
+ IMarker marker = getMarker();
+ if ( marker.exists() ) {
+ try {
+ return (String) marker.getAttribute( TYPE_NAME);
+ } catch ( CoreException e ) {
+ e.printStackTrace();
+ }
+ }
+ 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/DroolsStackFrame.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsStackFrame.java 2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsStackFrame.java 2007-07-16 20:12:08 UTC (rev 13558)
@@ -74,7 +74,6 @@
String methodName = getMethodName();
String signature = getSignature();
String type = getDeclaringTypeName();
- System.out.println("MVEL: in getExecutingRuleInfo: type=" + type + " methodName=" + methodName + " signature" + signature);
if ("consequence".equals(methodName) && signature.startsWith(CONSEQUENCE_SIGNATURE)) {
return DroolsEclipsePlugin.getDefault().getRuleInfoByClass(type);
}
@@ -242,8 +241,7 @@
}
protected DroolsStackFrame createNewDroolsFrame(StackFrame frame, int depth) {
- //MVEL: should we try to return a Drols or Mvel stack frame?
- return new DroolsStackFrame(fThread, frame, depth);
+ return DroolsThread.createCustomFrame( fThread, depth, frame );
}
public IThread getThread() {
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsThread.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsThread.java 2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsThread.java 2007-07-16 20:12:08 UTC (rev 13558)
@@ -15,10 +15,13 @@
import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
import org.eclipse.jdt.internal.debug.core.model.JDIThread;
+import com.sun.jdi.ClassType;
import com.sun.jdi.IncompatibleThreadStateException;
import com.sun.jdi.InvalidStackFrameException;
import com.sun.jdi.Location;
+import com.sun.jdi.Method;
import com.sun.jdi.ObjectCollectedException;
+import com.sun.jdi.ObjectReference;
import com.sun.jdi.StackFrame;
import com.sun.jdi.ThreadReference;
@@ -58,18 +61,14 @@
for (int i = newFrames - 1; i >= 0; i--) {
StackFrame currentFrame = (StackFrame) frames.get(i);
//MVEL: create an mvel stack frame when the declaring type is our debugger?
- //MVEL: this cannot work: org.drools.rule.builder.dialect.mvel.MVELDebugger is never instantiated
- Location loc = currentFrame.location();
- System.out.println("MVEL: In DroolsThread.computeStackFrames with declaringType:" + loc.declaringType().name());
- if ( loc.declaringType().name().equals( "org.drools.base.mvel.MVELDebugHandler" )
- && loc.method().name().equals( "onBreak" ) ) {
- System.out.println(" MVEL: creating MVELStackFrame");
- fStackFrames.add( 0, new MVELStackFrame( this, currentFrame, depth ) );
- } else {
- System.out.println(" MVEL: creating DroolsStackFrame");
- fStackFrames.add( 0, new DroolsStackFrame( this, currentFrame, depth ) );
- }
+
+ DroolsStackFrame customFrame;
+ customFrame = createCustomFrame( this, depth,
+ currentFrame );
+
+ fStackFrames.add( 0, customFrame );
+
depth++;
}
int numToRebind = Math.min(newSize, oldSize); // number of frames to attempt to rebind
@@ -93,6 +92,19 @@
return fStackFrames;
}
+ public final static DroolsStackFrame createCustomFrame(DroolsThread thread, int depth,
+ StackFrame currentFrame) {
+ DroolsStackFrame customFrame;
+ Location loc = currentFrame.location();
+ if ( loc.declaringType().name().equals( "org.drools.base.mvel.MVELDebugHandler" )
+ && loc.method().name().equals( "onBreak" ) ) {
+ customFrame = new MVELStackFrame( thread, currentFrame, depth );
+ } else {
+ customFrame = new DroolsStackFrame( thread, currentFrame, depth );
+ }
+ return customFrame;
+ }
+
private List getUnderlyingFrames() throws DebugException {
if (!isSuspended()) {
// Checking isSuspended here eliminates a race condition in resume
@@ -189,4 +201,15 @@
super.stepToFrame(frame);
}
+ /* (non-Javadoc)
+ * @see org.eclipse.jdt.internal.debug.core.model.JDIThread#newInstance(com.sun.jdi.ClassType, com.sun.jdi.Method, java.util.List)
+ */
+ public ObjectReference newInstance(ClassType receiverClass,
+ Method constructor,
+ List args) throws DebugException {
+ return super.newInstance( receiverClass,
+ constructor,
+ args );
+ }
+
}
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-16 19:46:38 UTC (rev 13557)
+++ 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-16 20:12:08 UTC (rev 13558)
@@ -7,19 +7,30 @@
import org.drools.eclipse.DroolsEclipsePlugin;
import org.drools.eclipse.DRLInfo.RuleInfo;
import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IValue;
import org.eclipse.debug.core.model.IVariable;
-import org.eclipse.jdi.internal.LocalVariableImpl;
-import org.eclipse.jdi.internal.ObjectReferenceImpl;
-import org.eclipse.jdt.internal.debug.core.model.JDIFieldVariable;
+import org.eclipse.jdi.internal.MirrorImpl;
+import org.eclipse.jdi.internal.StackFrameImpl;
+import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
+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.BooleanValue;
+import com.sun.jdi.ClassNotLoadedException;
+import com.sun.jdi.ClassType;
import com.sun.jdi.Field;
+import com.sun.jdi.IncompatibleThreadStateException;
+import com.sun.jdi.IntegerValue;
+import com.sun.jdi.InvalidTypeException;
+import com.sun.jdi.InvocationException;
import com.sun.jdi.LocalVariable;
import com.sun.jdi.Method;
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.Value;
@@ -32,7 +43,15 @@
frame,
depth );
//MVEL:Logging
- System.out.println( "MVEL: MVELStackFrame created for depth " + depth + " thread=" + thread );
+ try {
+ Iterator i = thread.getUnderlyingThread().frames().iterator();
+ while ( i.hasNext() ) {
+ StackFrameImpl o = (StackFrameImpl) i.next();
+ }
+ } catch ( IncompatibleThreadStateException e ) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
}
@@ -52,115 +71,195 @@
Method method = getUnderlyingMethod(); // onBreak
ReferenceType declaringType = method.declaringType(); // org.drools.base.mvel.MVELDebugHandler
- //ReferenceType declaringType = .location().declaringType();
+ //ReferenceType declaringType = .location().declaringType();
+ try {
- try {
Object var = method.variables().get( 0 );
- LocalVariable v2 = (LocalVariable) var;
- result.add( new DroolsLocalVariable(this,v2));
+ LocalVariable v2 = (LocalVariable) var;
+ DroolsLocalVariable frameLocal = new DroolsLocalVariable( this,
+ v2 );
+ result.add( frameLocal );
+
+ Value factoryVar = fetchField( frameLocal, "factory" );
+ Value localVars = fetchField( factoryVar,
+ "localVariables" );
+
+ ObjectReference mapObj = ((JDIObjectValue) frameLocal.getValue()).getUnderlyingObject();
+ ReferenceType t = mapObj.referenceType();
+
+ Value entrySet = runMethod( localVars,
+ "entrySet" );
+ Value iter = runMethod( entrySet,
+ "iterator" );
- } catch ( AbsentInformationException e ) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
-/* Field varsField = declaringType.fieldByName("frameLocalVars");
+ while (internalHasNext(iter)) {
+ Value next = runMethod( iter,
+ "next" );
- System.out.println("field is "+varsField);
+ Value entryKey = runMethod( next,
+ "getKey" );
+ Value entryValue = runMethod( next,
+ "getValue" );
+ String entryK = ((StringReference) entryKey).value();
- Value value = declaringType.getValue(varsField);
+ MVELThisVariable th = new MVELThisVariable( (JDIDebugTarget) getDebugTarget(),
+ (ObjectReference) entryValue,
+ entryK );
+ result.add( th );
+ }
+
+ // v2.localVariables
- System.out.println("value is "+value);
+ //ObjectReference iteratorObj = ((JDIObjectValue)mapentries).getUnderlyingObject();
- ObjectReferenceImpl valueImpl = (ObjectReferenceImpl) value;
+ /* Field varsField = declaringType.fieldByName("frameLocalVars");
- JDIFieldVariable var = new JDIFieldVariable((JDIDebugTarget)getDebugTarget(), varsField, valueImpl);
+ System.out.println("field is "+varsField);
- System.out.println("Got Value for Stack Frame!!: "+value+" with impl class "+value.getClass());
+ Value value = declaringType.getValue(varsField);
- result.add(var);
- */
+ System.out.println("value is "+value);
- //TODO HERE WE START FIXING!!!
-/* JDIFieldVariable vars = (JDIFieldVariable) getThis().getField( "frameLocalVars",
- false );
+ ObjectReferenceImpl valueImpl = (ObjectReferenceImpl) value;
- JDIObjectValue val = (JDIObjectValue) vars.getValue();
+ JDIFieldVariable var = new JDIFieldVariable((JDIDebugTarget)getDebugTarget(), varsField, valueImpl);
- try {
+ System.out.println("Got Value for Stack Frame!!: "+value+" with impl class "+value.getClass());
- System.out.println( "Trying to get the map values" );
+ result.add(var);
+ */
- // System.out.println("Declating type222 is "+vars.getDeclaringType());
- //System.out.println("VAL type is "+vars.getReferenceType();
+ //TODO HERE WE START FIXING!!!
+ /* JDIFieldVariable vars = (JDIFieldVariable) getThis().getField( "frameLocalVars",
+ false );
- ObjectReference mapObj = ((JDIObjectValue) vars.getValue()).getUnderlyingObject();
- ReferenceType t = mapObj.referenceType();
+ JDIObjectValue val = (JDIObjectValue) vars.getValue();
- List allmethods = t.allMethods();
+ try {
- Method m2 = (Method) t.methodsByName( "entrySet" ).iterator().next();
+ System.out.println( "Trying to get the map values" );
- System.out.println( "Got method " + m2 );
+ // System.out.println("Declating type222 is "+vars.getDeclaringType());
+ //System.out.println("VAL type is "+vars.getReferenceType();
- ThreadReference thread = ((DroolsThread) getThread()).getUnderlyingThread();
- System.out.println( ". thread is . " + thread.getClass() + "; " + thread );
- Value mapentries = mapObj.invokeMethod( thread,
- m2,
- new ArrayList(),
- 0 );
+ ObjectReference mapObj = ((JDIObjectValue) vars.getValue()).getUnderlyingObject();
+ ReferenceType t = mapObj.referenceType();
- //ObjectReference iteratorObj = ((JDIObjectValue)mapentries).getUnderlyingObject();
- ObjectReferenceImpl entries = (ObjectReferenceImpl) mapentries;
+ List allmethods = t.allMethods();
- Method m3 = (Method) entries.referenceType().methodsByName( "iterator" ).iterator().next();
- Value iter = entries.invokeMethod( thread,
- m3,
- new ArrayList(),
- 0 );
+ Method m2 = (Method) t.methodsByName( "entrySet" ).iterator().next();
- Method m2 = (Method) t.methodsByName( "i" ).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;
+ ObjectReferenceImpl valueImpl = (ObjectReferenceImpl) iter;
-*/ //boolean hasNext = hasNext(iter);
+ *///boolean hasNext = hasNext(iter);
//ObjectReferenceImpl next = getNext(iter);
+ /* Field varsField;
-/* Field varsField;
-
- IVariable var1 = new MVELThisVariable( getJavaDebugTarget(),
- valueImpl,
- "label1" );
- IVariable var2 = new MVELThisVariable( getJavaDebugTarget(),
- valueImpl,
- "label2" );
-*/
+ 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 );
-*/
+ /* 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();
+ }
+ IVariable[] vararr = (IVariable[]) result.toArray( new IVariable[result.size()] );
+ return vararr;
+ }
+
+ private boolean internalHasNext(Value iter) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException, DebugException {
+ BooleanValue hasNext = (BooleanValue) runMethod( iter,
+ "hasNext" );
+ return hasNext.booleanValue();
+ }
+
+ private Value fetchField(Value factoryVar,
+ String fieldName) throws ClassNotLoadedException, DebugException {
+ return fetchField((ObjectReference)factoryVar, fieldName );
+ }
+
+ private Value runMethod(Value val,
+ String methodName) throws InvalidTypeException,
+ ClassNotLoadedException,
+ IncompatibleThreadStateException,
+ InvocationException, DebugException {
- IVariable[] vararr = (IVariable[]) result.toArray( new IVariable[result.size()] );
+ recreateFrames();
+
+ ObjectReference refObj = (ObjectReference) val;
+ ReferenceType t = refObj.referenceType();
+ Method m2 = (Method) t.methodsByName( methodName ).iterator().next();
+ ThreadReference thread = ((DroolsThread) getThread()).getUnderlyingThread();
- System.out.println( "MVEL: Returning list of visible vars: count " + vararr.length );
+ Value res = refObj.invokeMethod( thread,
+ m2,
+ new ArrayList(),
+ 0 );
+ recreateFrames();
+
+ return res;
+ }
- return vararr;
+ private Value fetchField(DroolsLocalVariable frameLocal,
+ String fieldName) throws DebugException,
+ ClassNotLoadedException {
+ ObjectReference objRef = ((JDIObjectValue) frameLocal.getValue()).getUnderlyingObject();
+ return fetchField( objRef,
+ fieldName );
}
- protected DroolsStackFrame createNewDroolsFrame(StackFrame frame, int depth) {
- return new MVELStackFrame( (DroolsThread) getThread(), frame, depth );
+ 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;
}
+ protected DroolsStackFrame createNewDroolsFrame(StackFrame frame,
+ int depth) {
+ return new MVELStackFrame( (DroolsThread) getThread(),
+ frame,
+ depth );
+ }
+
public String getReceivingTypeName() throws DebugException {
return "getReceivingTypeName";
}
@@ -169,16 +268,30 @@
return "getMethodName";
}
-/* public String getDeclaringTypeName() throws DebugException {
- return "MVELRunner";
- }
-*/
+ /* public String getDeclaringTypeName() throws DebugException {
+ return "MVELRunner";
+ }
+ */
public int getLineNumber() throws DebugException {
-/* DRLInfo drlInfo = DroolsEclipsePlugin.getDefault().parseResource( marker.getResource(),
- true );*/
- System.out.println("MVEL: IN getLineNumber() LOCAL INFO LINE NR: " +
- getUnderlyingStackFrame().location().lineNumber());
- return getUnderlyingStackFrame().location().lineNumber();
+ /* DRLInfo drlInfo = DroolsEclipsePlugin.getDefault().parseResource( marker.getResource(),
+ true );*/
+
+ //RuleInfo ruleINF = getExecutingRuleInfo();
+ DroolsDebugTarget t = (DroolsDebugTarget) getDebugTarget();
+
+ int lineNr = getBreakpointLineNumber();
+ String sourceName = getMVELName();
+
+ DroolsLineBreakpoint bpoint = (DroolsLineBreakpoint) t.getDroolsBreakpoint( sourceName,
+ lineNr );
+
+ if ( bpoint == null ) {
+ return -1;
+ }
+ int line;
+ line = bpoint.getDRLLineNumber();
+ return line;
+ //return getUnderlyingStackFrame().location().lineNumber();
}
public RuleInfo getExecutingRuleInfo() {
@@ -186,8 +299,6 @@
String methodName = getMethodName();
String signature = getSignature();
String type = getDeclaringTypeName();
- System.out.println( "MVEL: MVELStackFrame.getExecutingRuleInfo: RuleInfo type=" + type
- + " methodName=" + methodName + " signature" + signature );
return DroolsEclipsePlugin.getDefault().getRuleInfoByClass( type );
@@ -196,4 +307,107 @@
}
return null;
}
+
+ public int getBreakpointLineNumber() {
+ try {
+ Object o = getRemoteVar( "lineNumber" );
+ if ( o == null ) {
+ return -1;
+ }
+ //getLineNumber
+ IntegerValue val = (IntegerValue) o;
+ return val.value();
+ } catch ( Throwable e ) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return -1;
+ }
+
+ public String getMVELName() {
+ try {
+ Object rem = getRemoteVar( "sourceName" );
+ if ( rem == null ) {
+ return null;
+ }
+ //getSourceName
+ StringReference res = (StringReference) rem;
+ return res.value();
+ } catch ( Throwable e ) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+
+ private Object getRemoteVar(String methodName) throws AbsentInformationException,
+ ClassNotLoadedException,
+ DebugException,
+ InvalidTypeException,
+ IncompatibleThreadStateException,
+ InvocationException {
+ //frame arg
+ Method method = getUnderlyingMethod(); // onBreak
+ ReferenceType declaringType = method.declaringType(); // org.drools.base.mvel.MVELDebugHandler
+
+ 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 );
+
+ IValue value = jdivar.getValue();
+ if (value instanceof JDINullValue) {
+ return null;
+ }
+ ObjectReference o = (ObjectReference) ((JDIObjectValue)value).getUnderlyingObject();
+
+ if ( o == null ) {
+ return null;
+ }
+ Field field = frameType.fieldByName( methodName );
+ Value val = o.getValue( field );
+
+ return val;
+ }
+
+ public String getSourceName() throws DebugException {
+ return getMVELName();
+ }
+
+ public String getSourcePath() throws DebugException {
+ return "";
+ }
+
+ private void recreateFrames() throws DebugException {
+ DroolsThread thr = (DroolsThread) getThread();
+ thr.computeNewStackFrames();
+ }
+
}
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/DialectDeterminator.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/DialectDeterminator.java 2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/DialectDeterminator.java 2007-07-16 20:12:08 UTC (rev 13558)
@@ -2,11 +2,11 @@
import java.util.List;
+import org.drools.compiler.Dialect;
import org.drools.compiler.DrlParser;
import org.drools.compiler.DroolsParserException;
import org.drools.lang.descr.PackageDescr;
import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.builder.Dialect;
public class DialectDeterminator {
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java 2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java 2007-07-16 20:12:08 UTC (rev 13558)
@@ -8,6 +8,7 @@
import java.util.Map;
import org.drools.base.ClassTypeResolver;
+import org.drools.compiler.Dialect;
import org.drools.compiler.DrlParser;
import org.drools.compiler.DroolsParserException;
import org.drools.compiler.PackageBuilderConfiguration;
@@ -28,7 +29,6 @@
import org.drools.lang.descr.PackageDescr;
import org.drools.lang.descr.PatternDescr;
import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.builder.Dialect;
import org.drools.util.asm.ClassFieldInspector;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextViewer;
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/DroolsSourceLookupDirector.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/DroolsSourceLookupDirector.java 2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/DroolsSourceLookupDirector.java 2007-07-16 20:12:08 UTC (rev 13558)
@@ -6,7 +6,7 @@
public class DroolsSourceLookupDirector extends AbstractSourceLookupDirector {
public void initializeParticipants() {
- addParticipants(new ISourceLookupParticipant[]{new DroolsSourceLookupParticipant(), new MVELSourceLookupParticipant()} );
+ addParticipants(new ISourceLookupParticipant[]{new MVELSourceLookupParticipant(), new DroolsSourceLookupParticipant()} );
}
}
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/DroolsSourceLookupParticipant.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/DroolsSourceLookupParticipant.java 2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/DroolsSourceLookupParticipant.java 2007-07-16 20:12:08 UTC (rev 13558)
@@ -13,7 +13,6 @@
RuleInfo ruleInfo = ((DroolsStackFrame) object).getExecutingRuleInfo();
if (ruleInfo != null) {
String p = ruleInfo.getSourcePathName();
- System.out.println("MVEL: DroolsSourceLookupParticipant.getSourceName retuning path:" + p);
return p;
}
FunctionInfo functionInfo = ((DroolsStackFrame) object).getExecutingFunctionInfo();
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/MVELSourceLookupParticipant.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/MVELSourceLookupParticipant.java 2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/MVELSourceLookupParticipant.java 2007-07-16 20:12:08 UTC (rev 13558)
@@ -20,27 +20,28 @@
public Object[] findSourceElements(Object object) throws CoreException {
//MVEL:Logging
- System.out.println("MVEL: MVELSourceLookupParticipant.findSourceElements with:" + object);
if (object instanceof MVELStackFrame) {
MVELStackFrame frame = (MVELStackFrame) object;
+
+ int lineNumber = frame.getBreakpointLineNumber();
+ String mvelName = frame.getMVELName();
+
IDebugTarget target = frame.getDebugTarget();
if (target instanceof DroolsDebugTarget) {
DroolsDebugTarget droolsTarget = (DroolsDebugTarget)target;
- System.out.println("MVEL: Returning breakpoint as source element");
- return new Object[] {droolsTarget.getFirstDroolsBreakpoint()};
+ Object bpoint = droolsTarget.getDroolsBreakpoint(mvelName, lineNumber);
+ return new Object[] {bpoint};
}
}
return null;
}
public String getSourceName(Object object) throws CoreException {
- System.out.println("MVEL: MVELSourceLookupParticipant.getSourceName with:" + object);
if (object instanceof MVELStackFrame) {
MVELStackFrame frame = (MVELStackFrame) object;
RuleInfo ruleInfo = frame.getExecutingRuleInfo();
if (ruleInfo != null) {
String sourcePath = ruleInfo.getSourcePathName();
- System.out.println("MVEL: DroolsSourceLookupParticipant.getSourceName retuning path:" + sourcePath);
return sourcePath;
}
FunctionInfo functionInfo = frame.getExecutingFunctionInfo();
More information about the jboss-svn-commits
mailing list