diff -r 647f186ccb22 -r a3e5bbb440f4 Tools__ObjectModuleInformation.st --- a/Tools__ObjectModuleInformation.st Fri Apr 09 11:21:12 2010 +0200 +++ b/Tools__ObjectModuleInformation.st Fri Apr 16 19:20:25 2010 +0200 @@ -986,7 +986,7 @@ ! showInfoForNonClassLib:sel - " selected a method, cObject or unknown " + "selected a method, cObject or unknown" |module fileName list entry| @@ -1002,7 +1002,9 @@ self canUnloadSelectedDLL value:true. module isMethodHandle ifTrue:[ - |method nm entry1 entry2 entry3| + |method nm entry entries| + + self canUnloadSelectedModule value:self readOnly not. self middleLabelHolder value:'Compiled Method:'. @@ -1024,16 +1026,22 @@ nm := (method whoString) colorizeAllWith:Color blue. ]. - entry1 := InfoRow new. - entry1 name:'Compiled method'; value:nm. + entries := OrderedCollection new. + entry := InfoRow new. + entry name:'Compiled method'; value:nm. + entries add:entry. - entry2 := InfoRow new. - entry2 name:'Path'; value:fileName. + entry := InfoRow new. + entry name:'Path'; value:fileName. + entries add:entry. - entry3 := InfoRow new. - entry3 name:'Address'; value:('(16r) ' , (method code address hexPrintString leftPaddedTo:8 with:$0)). + (method notNil and:[method code notNil]) ifTrue:[ + entry := InfoRow new. + entry name:'Address'; value:('(16r) ' , (method code address hexPrintString leftPaddedTo:8 with:$0)). + entries add:entry. + ]. - self infoTable2ListHolder value:(Array with:entry1 with:entry2 with:entry3). + self infoTable2ListHolder value:entries. self table1VisibleHolder value:false. self table2VisibleHolder value:true. ^ self. @@ -1311,55 +1319,37 @@ ! unloadSelectedModule - self unloadSelectedModuleRemoveClasses:false + self unloadSelectedModuleRemoveConnectedObjects:false ! unloadSelectedModuleAndRemoveClasses - self unloadSelectedModuleRemoveClasses:true + self unloadSelectedModuleRemoveConnectedObjects:true ! -unloadSelectedModuleRemoveClasses:doRemoveClasses - |module dll| +unloadSelectedModuleRemoveConnectedObjects:doRemoveClasses + |module handle| module := allModules at:self selectedModuleIndex ifAbsent:nil. - module isNil ifTrue:[ - dll := objectHandles at:self selectedModuleIndex ifAbsent:nil. - ]. module notNil ifTrue:[ (Dialog confirm:'This is a possibly dangerous operation, as the DLL is unloaded without caring for proper package-deinstallation procedures. Please use this only in repair situations and when the regular unloadPackage operation fails. -Continue ?') - ifFalse:[ - ^ self - ]. +Continue ?') + ifFalse:[ ^ self ]. ]. - - self withWaitCursorDo:[ - |info idx handle pathName| - - info := self selectedModuleInfo. - handle := objectHandles at:(self selectedModuleIndex). - self selectedModuleIndexHolder value:nil. - - info isNil ifTrue:[ - "/ selected a method/dll - "/ idx := idx - allModules size. - pathName := handle pathName. - ] ifFalse:[ - "/ selected a package - pathName := info pathName. - ]. - pathName notNil ifTrue:[ - doRemoveClasses ifTrue:[ - ObjectFileLoader unloadObjectFileAndRemoveClasses:pathName. - ] ifFalse:[ - ObjectFileLoader unloadObjectFile:pathName. - ] - ]. - self updateModuleList. + handle := objectHandles at:self selectedModuleIndex ifAbsent:nil. + handle notNil ifTrue:[ + self + withWaitCursorDo:[ + self selectedModuleIndexHolder value:nil. + doRemoveClasses ifTrue:[ + handle removeConnectedObjects. + ]. + handle unload. + self updateModuleList. + ]. ] !