[GREENFOOT-253] Rename and change superclass at the same time throws exception
If you rename a class in the editor and at the same time change the inheritance hierarchy by removing the "extends Actor" you will get an exception.
Steps to reproduce:
Create new project
- Create subclass of Actor (no image needed)
- Open editor for the new class
- Rename it to something else
- Delete "extends Actor"
- Hit Compile All
- ConcurrentModificationException
- Hit Compile All
- NullPointerException
Also, the entire class browser goes blank.
Stacktraces (from dev version): {noformat} Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793) at java.util.HashMap$ValueIterator.next(HashMap.java:822) at bluej.pkgmgr.Package.rebuild(Package.java:1233) at bluej.extensions.BPackage.compileAll(BPackage.java:296) at rmiextension.wrappers.RPackageImpl.compileAll(RPackageImpl.java:87) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) at sun.rmi.transport.Transport$1.run(Transport.java:159) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:155) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:637) at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255) at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142) at rmiextension.wrappers.RPackageImpl_Stub.compileAll(Unknown Source) at greenfoot.core.GPackage.compileAll(GPackage.java:120) at greenfoot.actions.CompileAllAction.actionPerformed(CompileAllAction.java:72) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6301) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:6066) at java.awt.Container.processEvent(Container.java:2085) at java.awt.Component.dispatchEventImpl(Component.java:4667) at java.awt.Container.dispatchEventImpl(Container.java:2143) at java.awt.Component.dispatchEvent(Component.java:4497) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4600) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4264) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4194) at java.awt.Container.dispatchEventImpl(Container.java:2129) at java.awt.Window.dispatchEventImpl(Window.java:2475) at java.awt.Component.dispatchEvent(Component.java:4497) at java.awt.EventQueue.dispatchEvent(EventQueue.java:635) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at greenfoot.gui.classbrowser.ClassBrowser.createClassHierarchyComponent(ClassBrowser.java:282) at greenfoot.gui.classbrowser.ClassBrowser.updateLayout(ClassBrowser.java:209) at greenfoot.gui.classbrowser.ClassBrowser.consolidateLayout(ClassBrowser.java:354) at greenfoot.gui.classbrowser.ClassView.updateSuperClass(ClassView.java:133) at greenfoot.gui.classbrowser.ClassView.update(ClassView.java:232) at greenfoot.gui.classbrowser.ClassView.updateView(ClassView.java:240) at greenfoot.core.GClass$2.run(GClass.java:550) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) at java.awt.EventQueue.dispatchEvent(EventQueue.java:633) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
{noformat}
Issue metadata
- Issue type: Bug
- Priority: Medium
- Fix versions: 1.5.4