This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.
Description: How to reproduce: - create java project and related uml project - create class diagram - put two classes on diagram and name them. - add generalization link from one class to another - open src for superclass - rename superclass in src using refactoring. BUG: generalization link is removed from diagram and from model. Evaluation: I noticed that the SourceFile name under the superclass' UML element node in the tree is still referring to the old name. I've seen this before in bugs that are supposedly fixed.
this bug exists in earlier coke builds, but is a regression from buzz. *** (#1 of 8): 2006-05-06 16:21:35 MSD ---- reproducible in tpr2 *** (#2 of 8): 2006-05-06 16:39:58 MSD ---- I noticed that the SourceFile name under the superclass' UML element node in the tree is still referring to the old name. However, if you rename the class back to its original name, the source file name under the superclass' UML element node is now updated to the previously new name. For example: In Java project/sources: - ClassA - ClassB extends ClassA And in UML project - ClassA - Generalization (ClassB extends ClassA) - sourcfile: ClassA - ClassB - Generalization (ClassB extends ClassA) *** Refactor->Rename ClassA in Java project source to ClassZ Now, we have in Java project/sources: In Java project/sources: - ClassZ - ClassB extends ClassZ And now, in UML project - ClassZ - sourcfile: ***ClassA*** - ClassB - sourcefile: ClassB *** Refactor->Rename ClassZ back to orignal name ClassA Now, we have in Java project/sources: In Java project/sources: - ClassA - ClassB extends ClassA And now, in UML project - ClassA - sourcfile: ***ClassZ*** - ClassB - sourcefile: ClassB Note: The sourcefile for the superclass in the UML project is always behind by one update. If you do one more Refactor->Rename on the superclass, the Java source file for the superclass gets updated, but the Java class node representing doesn't get updated and has the error that the source file name should be the same as the public class name. *** (#3 of 8): 2006-06-13 21:01:04 MSD ---- *** Last Edit: 2006-06-13 21:13:58 MSD ---- When the sourcecode gets screwed up, these exceptions occur: [org.netbeans.javacore] INFORMATIONAL *********** Exception occurred *********** * at 10:42 AM on Jun 13, 2006 java.lang.Exception: ***** Info is null for element: foo/ClassB.java (instanceof : org.netbeans.jmi.javamodel.Resource$Impl MOFID: 01B56F75-FAFF-11DA-A1E4-714257 36AA77:0000000000000A07) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .getElementInfo(SemiPersistentElement.java:193) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.initChil dren(ResourceImpl.java:322) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.initChil dren(ResourceImpl.java:316) at org.netbeans.modules.javacore.jmiimpl.javamodel.MetadataElement.initC heck(MetadataElement.java:140) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .getElementInfo(SemiPersistentElement.java:185) at org.netbeans.modules.javacore.jmiimpl.javamodel.JavaClassImpl.initChi ldren(JavaClassImpl.java:693) at org.netbeans.modules.javacore.jmiimpl.javamodel.MetadataElement.initC heck(MetadataElement.java:140) at org.netbeans.modules.javacore.jmiimpl.javamodel.TransientElement.getA STree(TransientElement.java:65) at org.netbeans.modules.javacore.jmiimpl.javamodel.MultipartIdImpl.getEl ement(MultipartIdImpl.java:129) at org.netbeans.jmi.javamodel.MultipartId$Impl.getElement(Unknown Source ) at org.netbeans.modules.uml.integration.netbeans.listeners.MetaDataRChan geListener.handleSuperClassChange(MetaDataRChangeListener.java:380) at org.netbeans.modules.uml.integration.netbeans.listeners.MetaDataRChan geListener.plannedChange(MetaDataRChangeListener.java:247) at org.netbeans.mdr.util.EventNotifier$Abstract.firePlannedChange(EventN otifier.java:414) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .fireAttrChange(SemiPersistentElement.java:91) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .fireAttrChange(SemiPersistentElement.java:78) at org.netbeans.modules.javacore.jmiimpl.javamodel.JavaClassImpl.fireSCN ameChange(JavaClassImpl.java:259) at org.netbeans.modules.javacore.jmiimpl.javamodel.JavaClassImpl.setSupe rClass(JavaClassImpl.java:288) at org.netbeans.jmi.javamodel.JavaClass$Impl.setSuperClass(Unknown Sourc e) at org.netbeans.modules.javacore.jmiimpl.javamodel.JavaClassImpl.matchPe rsistent(JavaClassImpl.java:575) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .updatePersistent(SemiPersistentElement.java:364) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .matchMember(SemiPersistentElement.java:650) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .processMembers(SemiPersistentElement.java:541) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.matchPer sistent(ResourceImpl.java:206) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .updatePersistent(SemiPersistentElement.java:364) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.updateMe tadata(ResourceImpl.java:761) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.resetAST (ResourceImpl.java:523) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.parseRes ource(ResourceImpl.java:901) at org.netbeans.modules.javacore.ExclusiveMutex.notifyElements(Exclusive Mutex.java:524) at org.netbeans.modules.javacore.ExclusiveMutex.leave(ExclusiveMutex.jav a:358) at org.netbeans.mdr.NBMDRepositoryImpl.endTrans(NBMDRepositoryImpl.java: 249) at org.netbeans.modules.refactoring.api.RefactoringSession.doRefactoring (RefactoringSession.java:72) at org.netbeans.modules.refactoring.ui.RefactoringPanel$1.run(Refactorin gPanel.java:588) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:493) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java :926) [org.netbeans.javacore] isChanged: true, alreadyChecking: true [org.netbeans.javacore] isValid: true [org.netbeans.javacore] alreadyChecking stacktrace: [org.netbeans.javacore] INFORMATIONAL *********** Exception occurred *********** * at 10:42 AM on Jun 13, 2006 java.lang.RuntimeException [catch] at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.resetAST (ResourceImpl.java:501) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.parseRes ource(ResourceImpl.java:901) at org.netbeans.modules.javacore.ExclusiveMutex.notifyElements(Exclusive Mutex.java:524) at org.netbeans.modules.javacore.ExclusiveMutex.leave(ExclusiveMutex.jav a:358) at org.netbeans.mdr.NBMDRepositoryImpl.endTrans(NBMDRepositoryImpl.java: 249) at org.netbeans.modules.refactoring.api.RefactoringSession.doRefactoring (RefactoringSession.java:72) at org.netbeans.modules.refactoring.ui.RefactoringPanel$1.run(Refactorin gPanel.java:588) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:493) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java :926) java.lang.IllegalStateException: Recursive call to getElementInfo() at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .getElementInfo(SemiPersistentElement.java:201) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.initChil dren(ResourceImpl.java:322) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.initChil dren(ResourceImpl.java:316) at org.netbeans.modules.javacore.jmiimpl.javamodel.MetadataElement.initC heck(MetadataElement.java:140) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .getElementInfo(SemiPersistentElement.java:185) at org.netbeans.modules.javacore.jmiimpl.javamodel.JavaClassImpl.initChi ldren(JavaClassImpl.java:693) at org.netbeans.modules.javacore.jmiimpl.javamodel.MetadataElement.initC heck(MetadataElement.java:140) at org.netbeans.modules.javacore.jmiimpl.javamodel.TransientElement.getA STree(TransientElement.java:65) at org.netbeans.modules.javacore.jmiimpl.javamodel.MultipartIdImpl.getEl ement(MultipartIdImpl.java:129) at org.netbeans.jmi.javamodel.MultipartId$Impl.getElement(Unknown Source ) at org.netbeans.modules.uml.integration.netbeans.listeners.MetaDataRChan geListener.handleSuperClassChange(MetaDataRChangeListener.java:380) at org.netbeans.modules.uml.integration.netbeans.listeners.MetaDataRChan geListener.plannedChange(MetaDataRChangeListener.java:247) at org.netbeans.mdr.util.EventNotifier$Abstract.firePlannedChange(EventN otifier.java:414) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .fireAttrChange(SemiPersistentElement.java:91) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .fireAttrChange(SemiPersistentElement.java:78) at org.netbeans.modules.javacore.jmiimpl.javamodel.JavaClassImpl.fireSCN ameChange(JavaClassImpl.java:259) at org.netbeans.modules.javacore.jmiimpl.javamodel.JavaClassImpl.setSupe rClass(JavaClassImpl.java:288) at org.netbeans.jmi.javamodel.JavaClass$Impl.setSuperClass(Unknown Sourc e) at org.netbeans.modules.javacore.jmiimpl.javamodel.JavaClassImpl.matchPe rsistent(JavaClassImpl.java:575) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .updatePersistent(SemiPersistentElement.java:364) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .matchMember(SemiPersistentElement.java:650) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .processMembers(SemiPersistentElement.java:541) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.matchPer sistent(ResourceImpl.java:206) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .updatePersistent(SemiPersistentElement.java:364) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.updateMe tadata(ResourceImpl.java:761) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.resetAST (ResourceImpl.java:523) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.parseRes ource(ResourceImpl.java:901) at org.netbeans.modules.javacore.ExclusiveMutex.notifyElements(Exclusive Mutex.java:524) at org.netbeans.modules.javacore.ExclusiveMutex.leave(ExclusiveMutex.jav a:358) at org.netbeans.mdr.NBMDRepositoryImpl.endTrans(NBMDRepositoryImpl.java: 249) at org.netbeans.modules.refactoring.api.RefactoringSession.doRefactoring (RefactoringSession.java:72) at org.netbeans.modules.refactoring.ui.RefactoringPanel$1.run(Refactorin gPanel.java:588) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:493) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java :926) [org.netbeans.javacore] INFORMATIONAL *********** Exception occurred *********** * at 10:42 AM on Jun 13, 2006 java.lang.Exception: rollback!!! at org.netbeans.modules.javacore.ExclusiveMutex.leave(ExclusiveMutex.jav a:339) at org.netbeans.mdr.NBMDRepositoryImpl.endTrans(NBMDRepositoryImpl.java: 249) at org.netbeans.mdr.handlers.BaseObjectHandler._unlock(BaseObjectHandler .java:227) at org.netbeans.modules.javacore.jmiimpl.javamodel.JavaClassImpl.initChi ldren(JavaClassImpl.java:761) at org.netbeans.modules.javacore.jmiimpl.javamodel.MetadataElement.initC heck(MetadataElement.java:140) at org.netbeans.modules.javacore.jmiimpl.javamodel.TransientElement.getA STree(TransientElement.java:65) at org.netbeans.modules.javacore.jmiimpl.javamodel.MultipartIdImpl.getEl ement(MultipartIdImpl.java:129) at org.netbeans.jmi.javamodel.MultipartId$Impl.getElement(Unknown Source ) at org.netbeans.modules.uml.integration.netbeans.listeners.MetaDataRChan geListener.handleSuperClassChange(MetaDataRChangeListener.java:380) at org.netbeans.modules.uml.integration.netbeans.listeners.MetaDataRChan geListener.plannedChange(MetaDataRChangeListener.java:247) at org.netbeans.mdr.util.EventNotifier$Abstract.firePlannedChange(EventN otifier.java:414) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .fireAttrChange(SemiPersistentElement.java:91) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .fireAttrChange(SemiPersistentElement.java:78) at org.netbeans.modules.javacore.jmiimpl.javamodel.JavaClassImpl.fireSCN ameChange(JavaClassImpl.java:259) at org.netbeans.modules.javacore.jmiimpl.javamodel.JavaClassImpl.setSupe rClass(JavaClassImpl.java:288) at org.netbeans.jmi.javamodel.JavaClass$Impl.setSuperClass(Unknown Sourc e) at org.netbeans.modules.javacore.jmiimpl.javamodel.JavaClassImpl.matchPe rsistent(JavaClassImpl.java:575) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .updatePersistent(SemiPersistentElement.java:364) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .matchMember(SemiPersistentElement.java:650) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .processMembers(SemiPersistentElement.java:541) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.matchPer sistent(ResourceImpl.java:206) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .updatePersistent(SemiPersistentElement.java:364) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.updateMe tadata(ResourceImpl.java:761) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.resetAST (ResourceImpl.java:523) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.parseRes ource(ResourceImpl.java:901) at org.netbeans.modules.javacore.ExclusiveMutex.notifyElements(Exclusive Mutex.java:524) at org.netbeans.modules.javacore.ExclusiveMutex.leave(ExclusiveMutex.jav a:358) at org.netbeans.mdr.NBMDRepositoryImpl.endTrans(NBMDRepositoryImpl.java: 249) at org.netbeans.modules.refactoring.api.RefactoringSession.doRefactoring (RefactoringSession.java:72) at org.netbeans.modules.refactoring.ui.RefactoringPanel$1.run(Refactorin gPanel.java:588) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:493) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java :926) [org.netbeans.mdr.Logger] INFORMATIONAL *********** Exception occurred ********* *** at 10:42 AM on Jun 13, 2006 java.lang.IllegalStateException: Recursive call to getElementInfo() at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .getElementInfo(SemiPersistentElement.java:201) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.initChil dren(ResourceImpl.java:322) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.initChil dren(ResourceImpl.java:316) at org.netbeans.modules.javacore.jmiimpl.javamodel.MetadataElement.initC heck(MetadataElement.java:140) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .getElementInfo(SemiPersistentElement.java:185) at org.netbeans.modules.javacore.jmiimpl.javamodel.JavaClassImpl.initChi ldren(JavaClassImpl.java:693) at org.netbeans.modules.javacore.jmiimpl.javamodel.MetadataElement.initC heck(MetadataElement.java:140) at org.netbeans.modules.javacore.jmiimpl.javamodel.TransientElement.getA STree(TransientElement.java:65) at org.netbeans.modules.javacore.jmiimpl.javamodel.MultipartIdImpl.getEl ement(MultipartIdImpl.java:129) at org.netbeans.jmi.javamodel.MultipartId$Impl.getElement(Unknown Source ) at org.netbeans.modules.uml.integration.netbeans.listeners.MetaDataRChan geListener.handleSuperClassChange(MetaDataRChangeListener.java:380) at org.netbeans.modules.uml.integration.netbeans.listeners.MetaDataRChan geListener.plannedChange(MetaDataRChangeListener.java:247) [catch] at org.netbeans.mdr.util.EventNotifier$Abstract.firePlannedChange(EventN otifier.java:414) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .fireAttrChange(SemiPersistentElement.java:91) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .fireAttrChange(SemiPersistentElement.java:78) at org.netbeans.modules.javacore.jmiimpl.javamodel.JavaClassImpl.fireSCN ameChange(JavaClassImpl.java:259) at org.netbeans.modules.javacore.jmiimpl.javamodel.JavaClassImpl.setSupe rClass(JavaClassImpl.java:288) at org.netbeans.jmi.javamodel.JavaClass$Impl.setSuperClass(Unknown Sourc e) at org.netbeans.modules.javacore.jmiimpl.javamodel.JavaClassImpl.matchPe rsistent(JavaClassImpl.java:575) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .updatePersistent(SemiPersistentElement.java:364) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .matchMember(SemiPersistentElement.java:650) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .processMembers(SemiPersistentElement.java:541) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.matchPer sistent(ResourceImpl.java:206) at org.netbeans.modules.javacore.jmiimpl.javamodel.SemiPersistentElement .updatePersistent(SemiPersistentElement.java:364) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.updateMe tadata(ResourceImpl.java:761) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.resetAST (ResourceImpl.java:523) at org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.parseRes ource(ResourceImpl.java:901) at org.netbeans.modules.javacore.ExclusiveMutex.notifyElements(Exclusive Mutex.java:524) at org.netbeans.modules.javacore.ExclusiveMutex.leave(ExclusiveMutex.jav a:358) at *** (#4 of 8): 2006-06-13 21:43:58 MSD ---- handleClassNameChangeEvent gets invoked twice. The first time, the source of the event is a JavaClass object that can be used to construct a ClassInfo object which the current (old) source filename is set to that. Then NBUtils.update gets called and another handleClassNameChangeEvent gets invoked and this time the source of the event is a MultipartId. Not sure what this is, but it contains the old and new name of the class being renamed, but it can not be used to create a ClassInfo and therefore, nothing is done with it. Not really sure this is the issue though, but worth noting for future reference. *** (#5 of 8): 2006-06-13 23:41:18 MSD ---- As Trey recommended, I tried Refactor->Rename a class without it being extended. The UML elements stay up to date properly in this scenario. Perhaps a debugging of this scenario will reveal where the other scenario is breaking down. *** (#6 of 8): 2006-06-13 23:46:08 MSD ---- I was mistaken... renaming a class in the java project does NOT properly rename the source file artifact under the Class element in the UML project. This is probably the fundamental issue. This didn't work right in JSE8, either. *** (#7 of 8): 2006-06-14 23:45:56 MSD ---- In deed, the sourcefile name under the Class element in the UML tree did need to get updated. For whatever reason, it wasn't and a simple setFilename/setSymbolFilename invocation just after the class renaming itself seems to not only fix the Navigate to Source issue, but also this issue. However, this fix doesn't seem to be consistent, nor does the actual results of any testing with Refactoring. It seems that a single test can result in a couple different outcomes, whether they are right or wrong, from one IDE restart to the next.
A fix has been found for the dependent issue 78475. That means that this bug is partially fixed. There is still some refreshing issues for the subclass in the diagram as well as the nodes in the UML project tree. A hacky workaround would be to do a source code mod for the subclass or a model element mod which causes the model and source code to sync up and the diagrams and nodes to refresh. A solution for this will be looked into next.
Is possible even if this is fixed, issue 78474 will be required for this the diagram to refresh it's affected elements.
Catching the IllegalStateException, and carry on because the Element that is being sought is long been changed to another name. This allows the refactoring to continue and rename the source files as needed. Also, the generalization remains in tact in the UML diagram.
*** Issue 80833 has been marked as a duplicate of this issue. ***
Files affected: uml/ideintegration/src/org/netbeans/modules/uml/integration/netbeans/listeners/MetaDataRChangeListener.java
The refactoring either hangs or does not rename the file.
*** Issue 78480 has been marked as a duplicate of this issue. ***
in the handleSuperClassChange: We only want to respond to this event if the user is actually changing this super class. We do not want to respond to the case when the user refactor the superclass. In this case we change the superclass element and the associations move automatically. This is the explanation of the oldMPID.equals(newMPID) == false condition.
Verified in NetBeans 5.5 Beta 2 (Build 20060730)