|
42 | 42 | import processing.app.Sketch; |
43 | 43 | import processing.app.SketchCode; |
44 | 44 | import processing.mode.java.debug.*; |
45 | | -import processing.mode.java.pdex.VMEventListener; |
46 | | -import processing.mode.java.pdex.VMEventReader; |
47 | 45 | import processing.mode.java.runner.Runner; |
48 | 46 |
|
49 | 47 |
|
50 | | -public class Debugger implements VMEventListener { |
| 48 | +public class Debugger { |
51 | 49 |
|
52 | 50 | /// editor window, acting as main view |
53 | 51 | protected JavaEditor editor; |
@@ -91,6 +89,9 @@ public class Debugger implements VMEventListener { |
91 | 89 | /// tab filenames which already have been tracked for runtime changes |
92 | 90 | protected Set<String> runtimeTabsTracked = new HashSet<>(); |
93 | 91 |
|
| 92 | + /// VM event listener |
| 93 | + protected VMEventListener vmEventListener = this::vmEvent; |
| 94 | + |
94 | 95 |
|
95 | 96 | public Debugger(JavaEditor editor) { |
96 | 97 | this.editor = editor; |
@@ -219,7 +220,7 @@ public synchronized void startDebug() { |
219 | 220 | } |
220 | 221 |
|
221 | 222 | // start receiving vm events |
222 | | - VMEventReader eventThread = new VMEventReader(vm.eventQueue(), this); |
| 223 | + VMEventReader eventThread = new VMEventReader(vm.eventQueue(), vmEventListener); |
223 | 224 | eventThread.start(); |
224 | 225 |
|
225 | 226 | startTrackingLineChanges(); |
@@ -532,7 +533,6 @@ synchronized List<LineBreakpoint> getBreakpoints(String tabFilename) { |
532 | 533 | * ({@link VMEventReader}) |
533 | 534 | * @param es Incoming set of events from VM |
534 | 535 | */ |
535 | | - @Override |
536 | 536 | public synchronized void vmEvent(EventSet es) { |
537 | 537 | for (Event e : es) { |
538 | 538 | log(Level.INFO, "*** VM Event: {0}", e.toString()); |
@@ -1392,4 +1392,66 @@ static private void log(Level level, String msg) { |
1392 | 1392 | static private void log(Level level, String msg, Object obj) { |
1393 | 1393 | Logger.getLogger(Debugger.class.getName()).log(level, msg, obj); |
1394 | 1394 | } |
| 1395 | + |
| 1396 | + |
| 1397 | + /** |
| 1398 | + * Interface for VM callbacks. |
| 1399 | + * |
| 1400 | + * @author Martin Leopold <m@martinleopold.com> |
| 1401 | + */ |
| 1402 | + protected interface VMEventListener { |
| 1403 | + |
| 1404 | + /** |
| 1405 | + * Receive an event from the VM. Events are sent in batches. See |
| 1406 | + * documentation of EventSet for more information. |
| 1407 | + * |
| 1408 | + * @param es Set of events |
| 1409 | + */ |
| 1410 | + void vmEvent(EventSet es); |
| 1411 | + } |
| 1412 | + |
| 1413 | + |
| 1414 | + /** |
| 1415 | + * Reader Thread for VM Events. Constantly monitors a VMs EventQueue for new |
| 1416 | + * events and forwards them to an VMEventListener. |
| 1417 | + * |
| 1418 | + * @author Martin Leopold <m@martinleopold.com> |
| 1419 | + */ |
| 1420 | + protected static class VMEventReader extends Thread { |
| 1421 | + |
| 1422 | + EventQueue eventQueue; |
| 1423 | + VMEventListener listener; |
| 1424 | + |
| 1425 | + /** |
| 1426 | + * Construct a VMEventReader. Needs to be kicked off with start() once |
| 1427 | + * constructed. |
| 1428 | + * |
| 1429 | + * @param eventQueue The queue to read events from. Can be obtained from a |
| 1430 | + * VirtualMachine via eventQueue(). |
| 1431 | + * @param listener the listener to forward events to. |
| 1432 | + */ |
| 1433 | + public VMEventReader(EventQueue eventQueue, VMEventListener listener) { |
| 1434 | + super("VM Event Thread"); |
| 1435 | + this.eventQueue = eventQueue; |
| 1436 | + this.listener = listener; |
| 1437 | + } |
| 1438 | + |
| 1439 | + @Override |
| 1440 | + public void run() { |
| 1441 | + try { |
| 1442 | + while (true) { |
| 1443 | + EventSet eventSet = eventQueue.remove(); |
| 1444 | + listener.vmEvent(eventSet); |
| 1445 | + /* |
| 1446 | + * for (Event e : eventSet) { System.out.println("VM Event: " + |
| 1447 | + * e.toString()); } |
| 1448 | + */ |
| 1449 | + } |
| 1450 | + } catch (VMDisconnectedException e) { |
| 1451 | + Logger.getLogger(VMEventReader.class.getName()).log(Level.INFO, "VMEventReader quit on VM disconnect"); |
| 1452 | + } catch (Exception e) { |
| 1453 | + Logger.getLogger(VMEventReader.class.getName()).log(Level.SEVERE, "VMEventReader quit", e); |
| 1454 | + } |
| 1455 | + } |
| 1456 | + } |
1395 | 1457 | } |
0 commit comments