fesch / Structorizer.Desktop

Structorizer is a little tool which you can use to create Nassi-Schneiderman Diagrams (NSD).
https://structorizer.fisch.lu
GNU General Public License v3.0
65 stars 19 forks source link

Request for colored coverage marker #77

Closed elemhsb closed 8 years ago

elemhsb commented 8 years ago

In a learning environment and for automated testing it seems very useful to have a (mint green) color marker. Which is set to the structure blocks background that have already done with Executor, so a full coverage in a test case driven environment a easy possible. A reset button or cleanup on start is advised. If a subroutine block is fully covered it could switch also his background color.

codemanyak commented 8 years ago

Seems feasible and not so difficult to implement. In the priority ranking of the background colour marking I suggest to insert it between selected and collapsed, resulting in the following queue (where 1 and 2 are interchangeable because they exclude one another):

  1. waiting for execution completion (structured elements with substructure being executed)
  2. currently being executed
  3. selected
  4. covered by most recent test (your request)
  5. collapsed

Would that be okay?

elemhsb commented 8 years ago

There is a grey comment bar on the left side if comments exists. Some similar would also work as coverage marker, except a empty false path. I am not sure, but I would prefer a new flat background color.

codemanyak commented 8 years ago

Okay, then be it a green bar prioritized above the comment bar. I feel better with this suggestion, too. Some additional considerations: Since ordinary diagrams may contain alternatives or selections outside of loops, a full test coverage cannot be achieved with a single run, obviously. So it either doesn't make sense to reset the coverage on every start but requires the suggested reset button, which might confuse beginners not aware of the enhancement. Or, conversely, the user must explicitly enter (and leave) a test coverage mode collecting and showing coverage flags over several execution runs. A third opportunity would be to have a specific new diagram type (next to program and subroutine), representing a "test case" program. Possibly it might be detected from the program name (e.g. by a "TEST_" prefix or "_TEST" suffix) or a third diagram type ought to be added with a different representation than the existing two.

elemhsb commented 8 years ago

Coverage should active when a new "Show Coverage" switch in menu, like "Show Comments" is on. Reset the coverage states with old "play" button [ > ] and continuing with new "pause play/continue" button [ l > ] which is only available in "Show Coverage" mode at executor control. Ok ?

elemhsb commented 8 years ago

Oh, i see the Symbol [ |-> ] is already use for step.

codemanyak commented 8 years ago

I will consider the proposals and prepare some draft specifiation.

codemanyak commented 8 years ago

There is a first prototype available on branch codemanyak/Structorizer.Desktop/master.

Structured elements will only be marked as covered if all contained elements have been marked. Empty elements (e.g. empty else paths of alternatives) will only be marked if they have really been passed at least once, of course. W.r.t. Call elements see below. Coverage marks can be gathered by repetitive runs.

My own evaluation showed that the first proposal (green background colour for elements covered by test) is far better recognisable than some green bars along the left edge. I added two checkboxes to the Executor Control panel to control the test coverage tracking:

Note: Within recursive calls the deep mode is suspended (temporarily switches to flat mode) because otherwise a complete coverage would never be possible - the subroutine would have to be covered in order to be marked as covered, an obvious contradiction.

Both controls can only be affected between tests, not during a running or partially completed test.

I'm looking forward to user test results and comments.

codemanyak commented 8 years ago

I just detected that under Linux parts of the checkbox notification don't work as expected (and successfully tested under Windows). I will have to use a different event notification mechanism, it seems.

codemanyak commented 8 years ago

Now it works under both Windows and Linux.

codemanyak commented 8 years ago

The online User Guide already provides a preview description of this feature.

elemhsb commented 8 years ago

Hi @codemanyak, nice to hear that this future is implemented. :-) Sorry but I could'nt test it because i get the following compile errors on Linux with openjdk 1.7 on debian jessie. I the past there was a uncommited file from you, i amt right ? Cheers! elemhsb ... -do-compile: [javac] Compiling 93 source files to /unix/gits/system/sw/structorizer/github/codemanyak-structorizer/build/classes [javac] warning: [options] bootstrap class path not set in conjunction with -source 1.6 [javac] /unix/gits/system/sw/structorizer/github/codemanyak-structorizer/src/lu/fisch/structorizer/elements/Root.java:2354: error: cannot find symbol [javac] Integer count = myInitVars.putIfAbsent(varName, 1 << threadNo); [javac] ^ [javac] symbol: method putIfAbsent(String,int) [javac] location: variable myInitVars of type Hashtable<String,Integer> [javac] /unix/gits/system/sw/structorizer/github/codemanyak-structorizer/src/lu/fisch/structorizer/elements/Root.java:2361: error: cannot find symbol [javac] Integer count = myUsedVars.putIfAbsent(varName, 1 << threadNo); [javac] ^ [javac] symbol: method putIfAbsent(String,int) [javac] location: variable myUsedVars of type Hashtable<String,Integer> [javac] /unix/gits/system/sw/structorizer/github/codemanyak-structorizer/src/lu/fisch/structorizer/executor/Executor.java:1833: error: cannot find symbol [javac] nLevels = Integer.parseUnsignedInt(tokens.get(1)); [javac] ^ [javac] symbol: method parseUnsignedInt(String) [javac] location: class Integer [javac] Note: Some input files use or override a deprecated API. [javac] Note: Recompile with -Xlint:deprecation for details. [javac] Note: Some input files use unchecked or unsafe operations. [javac] Note: Recompile with -Xlint:unchecked for details. [javac] 3 errors [javac] 1 warning

BUILD FAILED /unix/gits/system/sw/structorizer/github/codemanyak-structorizer/nbproject/build-impl.xml:908: The following error occurred while executing this line: /unix/gits/system/sw/structorizer/github/codemanyak-structorizer/nbproject/build-impl.xml:257: Compile failed; see the compiler error output for details.

codemanyak commented 8 years ago

@elemhsb Haven't we had this very problem somewhat earlier already? Seams, that some setting suggests to use Java 1.6 while Java 1.8 would be the version of choice. Have you tried some of the compile options the error message suggests?

codemanyak commented 8 years ago

@elemhsb Have a look at the issue #55 discussion. Looks pretty similar.

codemanyak commented 8 years ago

By the way, the work on this issue widened my perspective a lot and I'm going to present something still greater on Monday to make more use of runtime data gathered during execution.

codemanyak commented 8 years ago

@elemhsb Excuse me, perhaps I didn't read your comment form 2016-03-11 thouroughly enough. But even after having checked for uncommitted files, I return to the former suggestion: The errors give a clear hint that the files can't be compiled with Java 1.6, because e.g. method Integer.parseUnsignedInt() was only introduced with Java SE 1.8, unfortunately.

Would you mind installing openjdk 8 on your Debian? (If you would, I might replace the specific code passages by traditional code - at least method Integer.parseUnsignedInt() could easily be circumvented. I could hardly guarantee, however, that I would have eliminated all 1.8-specific code. I have no Idea, for instance, why the compiler complained about method Hashtable.putIfAbsent().)

If you should have already installed openjdk 8, on the other hand, but Structorizer compilation still failed with similar errors then I would like you to try again - after having replaced line

    <property name="target" value="1.6"/>

by

    <property name="target" value="1.8"/>

in file build_eclipse.xml (and possibly the "source" line nextby as well).

codemanyak commented 8 years ago

@elemhsb ... or in the file project.properties.xml in directory nbprojects - depending on which of the build configurations you actually use.

codemanyak commented 8 years ago

Test coverage mode is now available with version 3.24-01. I close the Issue. @elemhsb Perhaps you have a look at the brandnew Structorizer version 3.24-01, which incorporates the most advanced prototype. If something doesn't meet your expectations or is defective then please reopen this issue. Still I would like to know whether you managed to compile the downloaded preview and if manual editing of some build.xml setting could avoid the translation error.

elemhsb commented 8 years ago

Hi @codemanyak i get 3.24-02 compiled and running with jre-1.8.x, ant and nbprojekt/projekt.properties with javac.source=1.8 and javac.target=1.8. Thanks a lot, that terminates a lot of pain for me! Java Version 1.8 should be the recommened default for now.

Great work on implementing a "colored coverage marker", it's so beautiful (usefull) with all the additional views like "hot spot" with lin steps. Yours respectfully. :100:

bildschirmfoto vom 2016-03-21 13 59 50 btw: there was a lot of exeptions thrown from the graphical librarys, but no real crash. null Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 1 at java.util.Vector.elementAt(Vector.java:474) at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:648) at javax.swing.JTable.getValueAt(JTable.java:2717) at javax.swing.JTable.prepareRenderer(JTable.java:5706) at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2114) at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2016) at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1812) at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161) at javax.swing.JComponent.paintComponent(JComponent.java:780) at javax.swing.JComponent.paint(JComponent.java:1056) at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210) at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:290) at javax.swing.RepaintManager.paint(RepaintManager.java:1272) at javax.swing.JComponent._paintImmediately(JComponent.java:5158) at javax.swing.JComponent.paintImmediately(JComponent.java:4969) at javax.swing.RepaintManager$4.run(RepaintManager.java:831) at javax.swing.RepaintManager$4.run(RepaintManager.java:814) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789) at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738) at javax.swing.RepaintManager.access$1200(RepaintManager.java:64) at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 4 >= 4 at java.util.Vector.elementAt(Vector.java:474) at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:648) at javax.swing.JTable.getValueAt(JTable.java:2717) at javax.swing.JTable.prepareRenderer(JTable.java:5706) at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2114) at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2016) at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1812) at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161) at javax.swing.JComponent.paintComponent(JComponent.java:780) at javax.swing.JComponent.paint(JComponent.java:1056) at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210) at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:290) at javax.swing.RepaintManager.paint(RepaintManager.java:1272) at javax.swing.JComponent._paintImmediately(JComponent.java:5158) at javax.swing.JComponent.paintImmediately(JComponent.java:4969) at javax.swing.RepaintManager$4.run(RepaintManager.java:831) at javax.swing.RepaintManager$4.run(RepaintManager.java:814) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789) at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738) at javax.swing.RepaintManager.access$1200(RepaintManager.java:64) at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 4 >= 4 at java.util.Vector.elementAt(Vector.java:474) at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:648) at javax.swing.JTable.getValueAt(JTable.java:2717) at javax.swing.JTable.prepareRenderer(JTable.java:5706) at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2114) at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2016) at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1812) at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161) at javax.swing.JComponent.paintComponent(JComponent.java:780) at javax.swing.JComponent.paint(JComponent.java:1056) at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210) at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:290) at javax.swing.RepaintManager.paint(RepaintManager.java:1272) at javax.swing.JComponent._paintImmediately(JComponent.java:5158) at javax.swing.JComponent.paintImmediately(JComponent.java:4969) at javax.swing.RepaintManager$4.run(RepaintManager.java:831) at javax.swing.RepaintManager$4.run(RepaintManager.java:814) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789) at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738) at javax.swing.RepaintManager.access$1200(RepaintManager.java:64) at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 4 >= 4 at java.util.Vector.elementAt(Vector.java:474) at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:648) at javax.swing.JTable.getValueAt(JTable.java:2717) at javax.swing.JTable.prepareRenderer(JTable.java:5706) at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2114) at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2016) at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1812) at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161) at javax.swing.JComponent.paintComponent(JComponent.java:780) at javax.swing.JComponent.paint(JComponent.java:1056) at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210) at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:290) at javax.swing.RepaintManager.paint(RepaintManager.java:1272) at javax.swing.JComponent._paintImmediately(JComponent.java:5158) at javax.swing.JComponent.paintImmediately(JComponent.java:4969) at javax.swing.RepaintManager$4.run(RepaintManager.java:831) at javax.swing.RepaintManager$4.run(RepaintManager.java:814) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789) at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738) at javax.swing.RepaintManager.access$1200(RepaintManager.java:64) at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0 at java.util.Vector.elementAt(Vector.java:474) at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:648) at javax.swing.JTable.getValueAt(JTable.java:2717) at javax.swing.JTable.prepareRenderer(JTable.java:5706) at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2114) at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2016) at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1812) at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161) at javax.swing.JComponent.paintComponent(JComponent.java:780) at javax.swing.JComponent.paint(JComponent.java:1056) at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210) at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:290) at javax.swing.RepaintManager.paint(RepaintManager.java:1272) at javax.swing.JComponent._paintImmediately(JComponent.java:5158) at javax.swing.JComponent.paintImmediately(JComponent.java:4969) at javax.swing.RepaintManager$4.run(RepaintManager.java:831) at javax.swing.RepaintManager$4.run(RepaintManager.java:814) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789) at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738) at javax.swing.RepaintManager.access$1200(RepaintManager.java:64) at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 4 >= 4 at java.util.Vector.elementAt(Vector.java:474) at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:648) at javax.swing.JTable.getValueAt(JTable.java:2717) at javax.swing.JTable.prepareRenderer(JTable.java:5706) at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2114) at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2016) at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1812) at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161) at javax.swing.JComponent.paintComponent(JComponent.java:780) at javax.swing.JComponent.paint(JComponent.java:1056) at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210) at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:290) at javax.swing.RepaintManager.paint(RepaintManager.java:1272) at javax.swing.JComponent._paintImmediately(JComponent.java:5158) at javax.swing.JComponent.paintImmediately(JComponent.java:4969) at javax.swing.RepaintManager$4.run(RepaintManager.java:831) at javax.swing.RepaintManager$4.run(RepaintManager.java:814) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789) at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738) at javax.swing.RepaintManager.access$1200(RepaintManager.java:64) at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 3 >= 1 at java.util.Vector.elementAt(Vector.java:474) at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:648) at javax.swing.JTable.getValueAt(JTable.java:2717) at javax.swing.JTable.prepareRenderer(JTable.java:5706) at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2114) at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2016) at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1812) at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161) at javax.swing.JComponent.paintComponent(JComponent.java:780) at javax.swing.JComponent.paint(JComponent.java:1056) at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210) at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:290) at javax.swing.RepaintManager.paint(RepaintManager.java:1272) at javax.swing.JComponent._paintImmediately(JComponent.java:5158) at javax.swing.JComponent.paintImmediately(JComponent.java:4969) at javax.swing.RepaintManager$4.run(RepaintManager.java:831) at javax.swing.RepaintManager$4.run(RepaintManager.java:814) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789) at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738) at javax.swing.RepaintManager.access$1200(RepaintManager.java:64) at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

codemanyak commented 8 years ago

@elemhsb Besides the flattering, thanks for the stacktraces. I have seen some of them, too, but postponed analysis and fixing, since they aren't serious, obviously. They seem to result from races on the variable table in the Executor Control when a subroutine replaces its caller (or the other way round) while the value listing for the variables or its refreshing is still in the pipe. @fesch Hi Bob, would you mind me changing the Java version references in file nbprojekt/projekt.properties to 1.8? As it seems, this would avoid compilation trouble like that reported in issue #55 and also in an earlier comment in this thread here.

fesch commented 8 years ago

@codemanyak : Yes, I think that should be fine.

codemanyak commented 8 years ago

A coverage marker set in Arranger didn't show (against the User Guide documentation). Method Root.isTestCovered() did only reflect the Subqueue's gathered information. Fixed for 3.24-14.