--- a/Tools__MethodList.st Sun Jan 12 23:30:25 2014 +0000
+++ b/Tools__MethodList.st Wed Apr 01 10:38:01 2015 +0100
@@ -164,6 +164,7 @@
(if this app is embedded in a subCanvas)."
^ #(
+ environmentHolder
#(doubleClickChannel action)
#filterClassVars
#forceGeneratorTrigger
@@ -185,7 +186,7 @@
#showSyntheticMethods
).
- "Modified: / 13-04-2012 / 16:11:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 24-02-2014 / 10:37:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!MethodList methodsFor:'aspects'!
@@ -206,8 +207,8 @@
filterClassVars
filterClassVars isNil ifTrue:[
- filterClassVars := false asValue.
- filterClassVars addDependent:self
+ filterClassVars := ValueHolder with:false.
+ filterClassVars addDependent:self
].
^ filterClassVars
!
@@ -253,8 +254,8 @@
showImageResourceMethodsImages
showImageResourceMethodsImages isNil ifTrue:[
- showImageResourceMethodsImages := false asValue.
- showImageResourceMethodsImages addDependent:self
+ showImageResourceMethodsImages := ValueHolder with:false.
+ showImageResourceMethodsImages addDependent:self
].
^ showImageResourceMethodsImages
!
@@ -271,8 +272,8 @@
showMethodComplexity
showMethodComplexity isNil ifTrue:[
- showMethodComplexity := false asValue.
- showMethodComplexity addDependent:self
+ showMethodComplexity := ValueHolder with:false.
+ showMethodComplexity addDependent:self
].
^ showMethodComplexity
!
@@ -289,8 +290,8 @@
showMethodInheritance
showMethodInheritance isNil ifTrue:[
- showMethodInheritance := false asValue.
- showMethodInheritance addDependent:self
+ showMethodInheritance := ValueHolder with:false.
+ showMethodInheritance addDependent:self
].
^ showMethodInheritance
!
@@ -307,8 +308,8 @@
showMethodTypeIcon
showMethodTypeIcon isNil ifTrue:[
- showMethodTypeIcon := true asValue.
- showMethodTypeIcon addDependent:self
+ showMethodTypeIcon := ValueHolder with:true.
+ showMethodTypeIcon addDependent:self
].
^ showMethodTypeIcon
!
@@ -325,7 +326,7 @@
showSyntheticMethods
showSyntheticMethods isNil ifTrue:[
- showSyntheticMethods := false asValue.
+ showSyntheticMethods := ValueHolder with:false.
showSyntheticMethods addDependent:self
].
^ showSyntheticMethods
@@ -335,11 +336,11 @@
showSyntheticMethods:aValueHolder
showSyntheticMethods notNil ifTrue:[
- showSyntheticMethods removeDependent:self
+ showSyntheticMethods removeDependent:self
].
showSyntheticMethods := aValueHolder.
showSyntheticMethods notNil ifTrue:[
- showSyntheticMethods addDependent:self
+ showSyntheticMethods addDependent:self
].
"Created: / 13-04-2012 / 16:03:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -347,8 +348,8 @@
variableFilter
variableFilter isNil ifTrue:[
- variableFilter := nil asValue.
- variableFilter addDependent:self
+ variableFilter := ValueHolder with:nil.
+ variableFilter addDependent:self
].
^ variableFilter
!
@@ -373,182 +374,182 @@
selection := selectionHolder value.
changedObject == environment ifTrue:[
- classes notNil ifTrue:[
- something == #classDefinition ifTrue:[
- cls := aParameter.
- clsName := cls name.
- (classes contains:[:aClass | aClass name = clsName]) ifFalse:[
- ^ self "/ I don't care for that class
- ].
- classes := classes collect:[:eachClass | (environment classNamed:eachClass name) ].
- self invalidateList.
+ classes notNil ifTrue:[
+ something == #classDefinition ifTrue:[
+ cls := aParameter.
+ clsName := cls name.
+ (classes contains:[:aClass | aClass name = clsName]) ifFalse:[
+ ^ self "/ I don't care for that class
+ ].
+ classes := classes collect:[:eachClass | (environment classNamed:eachClass name) ].
+ self invalidateList.
"/ self updateList.
- ^ self.
- ].
+ ^ self.
+ ].
- something == #methodCategory ifTrue:[
- "/ ignore here - methodCategoryList will tell me if required
- ^ self
- ].
- (something == #classOrganization
- or:[ something == #methodCategoryAdded
- or:[ something == #methodCategoryRemoved
- or:[ something == #methodCategoriesRemoved
- or:[ something == #methodCategoryRenamed ]]]]) ifTrue:[
- "/ ignore here - methodCategoryList will tell me if required
- ^ self
- ].
+ something == #methodCategory ifTrue:[
+ "/ ignore here - methodCategoryList will tell me if required
+ ^ self
+ ].
+ (something == #classOrganization
+ or:[ something == #methodCategoryAdded
+ or:[ something == #methodCategoryRemoved
+ or:[ something == #methodCategoriesRemoved
+ or:[ something == #methodCategoryRenamed ]]]]) ifTrue:[
+ "/ ignore here - methodCategoryList will tell me if required
+ ^ self
+ ].
- (something == #methodInClass
- or:[something == #methodCoverageInfo]) ifTrue:[
- "/ a method has been added/changed
- cls := aParameter at:1.
- (classes includesIdentical:cls) ifTrue:[
- sel := aParameter at:2.
- oldMethod := aParameter at:3.
- newMethod := cls compiledMethodAt:sel.
- (oldMethod notNil and:[newMethod notNil]) ifTrue:[
- "a method was changed & acccepted;
- No need for a rescan of the methodDictionary;
- however, ensure that the refs to the old method are updated
- "
- methods := selection.
- methods size > 0 ifTrue:[
- (methods includesIdentical:oldMethod) ifTrue:[
- needSelectionChange := true.
- ]
- ].
- methodList replaceAllIdentical:oldMethod with:newMethod.
- lastSelectedMethods notNil ifTrue:[
- lastSelectedMethods replaceAllIdentical:oldMethod with:newMethod
- ].
- methods size > 0 ifTrue:[
- methods := methods asOrderedCollection.
- methods replaceAllIdentical:oldMethod with:newMethod.
- ].
+ (something == #methodInClass
+ or:[something == #methodCoverageInfo]) ifTrue:[
+ "/ a method has been added/changed
+ cls := aParameter at:1.
+ (classes includesIdentical:cls) ifTrue:[
+ sel := aParameter at:2.
+ oldMethod := aParameter at:3.
+ newMethod := cls compiledMethodAt:sel.
+ (oldMethod notNil and:[newMethod notNil]) ifTrue:[
+ "a method was changed & acccepted;
+ No need for a rescan of the methodDictionary;
+ however, ensure that the refs to the old method are updated
+ "
+ methods := selection.
+ methods size > 0 ifTrue:[
+ (methods includesIdentical:oldMethod) ifTrue:[
+ needSelectionChange := true.
+ ]
+ ].
+ methodList replaceAllIdentical:oldMethod with:newMethod.
+ lastSelectedMethods notNil ifTrue:[
+ lastSelectedMethods replaceAllIdentical:oldMethod with:newMethod
+ ].
+ methods size > 0 ifTrue:[
+ methods := methods asOrderedCollection.
+ methods replaceAllIdentical:oldMethod with:newMethod.
+ ].
- needSelectionChange == true ifTrue:[
- selectionHolder setValue:methods.
- "/ self enqueueDelayedMethodsSelectionChanged.
- "/ need this to inform my browser that method was changed
- "/ by someone else.
- selectionHolder changed.
- ].
- "/JV@2011-07-22: Update always - I need to see immediately that
- "/the method has changed. Also, add/remove breakpoint etc.
+ needSelectionChange == true ifTrue:[
+ selectionHolder setValue:methods.
+ "/ self enqueueDelayedMethodsSelectionChanged.
+ "/ need this to inform my browser that method was changed
+ "/ by someone else.
+ selectionHolder changed.
+ ].
+ "/JV@2011-07-22: Update always - I need to see immediately that
+ "/the method has changed. Also, add/remove breakpoint etc.
"/ (variableFilter value size > 0
"/ or:[oldMethod package ~= newMethod package
"/ or:[oldMethod resources ~= newMethod resources
"/ or:[showMethodComplexity value == true]]])
- self autoUpdateOnChange ifTrue:[
- "/ only update that method's entry
- self updateListEntryFor:newMethod.
- "/ sigh - must invalidate
- "/ self invalidateList.
- ].
- ^ self.
- ].
- "/ method was added - update the methodList
- "/ Q: is this needed (methodCategoryList should send me a new inGenerator)
- self invalidateList.
- ].
- ^ self.
- ].
+ self autoUpdateOnChange ifTrue:[
+ "/ only update that method's entry
+ self updateListEntryFor:newMethod.
+ "/ sigh - must invalidate
+ "/ self invalidateList.
+ ].
+ ^ self.
+ ].
+ "/ method was added - update the methodList
+ "/ Q: is this needed (methodCategoryList should send me a new inGenerator)
+ self invalidateList.
+ ].
+ ^ self.
+ ].
- something == #methodInClassRemoved ifTrue:[
- cls := aParameter at:1.
- (classes includesIdentical:cls) ifTrue:[
- sel := aParameter at:2.
- "/ method was removed - update the methodList
- "/ Q: is this needed (methodCategoryList should send me a new inGenerator)
- self invalidateList.
- ].
- ^ self.
- ].
+ something == #methodInClassRemoved ifTrue:[
+ cls := aParameter at:1.
+ (classes includesIdentical:cls) ifTrue:[
+ sel := aParameter at:2.
+ "/ method was removed - update the methodList
+ "/ Q: is this needed (methodCategoryList should send me a new inGenerator)
+ self invalidateList.
+ ].
+ ^ self.
+ ].
- something == #methodCoverageInfo ifTrue:[
- "/ already checked if it is one of my classes
- self updateListEntryFor:aParameter.
+ something == #methodCoverageInfo ifTrue:[
+ "/ already checked if it is one of my classes
+ self updateListEntryFor:aParameter.
"/ self enqueueDelayedUpdateList.
"/ listValid == true ifTrue:[
"/ self invalidateList.
"/ ].
- ^ self.
- ].
+ ^ self.
+ ].
- (something == #methodTrap
- or:[ something == #lastTestRunResult
- or:[ something == #privacyOfMethod ]]) ifTrue:[
- cls := aParameter at:1.
- sel := aParameter at:2.
- (classes includesIdentical:cls) ifFalse:[ ^ self].
+ (something == #methodTrap
+ or:[ something == #lastTestRunResult
+ or:[ something == #privacyOfMethod ]]) ifTrue:[
+ cls := aParameter at:1.
+ sel := aParameter at:2.
+ (classes includesIdentical:cls) ifFalse:[ ^ self].
- newMethod := cls compiledMethodAt:sel.
- newMethod isNil ifTrue:[
- self invalidateList.
- ^ self
- ].
+ newMethod := cls compiledMethodAt:sel.
+ newMethod isNil ifTrue:[
+ self invalidateList.
+ ^ self
+ ].
- ((something == #privacyOfMethod) or:[something == #lastTestRunResult]) ifTrue:[
- self updateListEntryFor:newMethod.
- ].
+ ((something == #privacyOfMethod) or:[something == #lastTestRunResult]) ifTrue:[
+ self updateListEntryFor:newMethod.
+ ].
- (something == #methodTrap) ifTrue:[
- newMethod isWrapped ifTrue:[
- oldMethod := newMethod originalMethod
- ] ifFalse:[
- selection size > 0 ifTrue:[
- oldMethod := selection detect:[:each | each isWrapped and:[each originalMethod == newMethod]] ifNone:nil.
- ]
- ].
+ (something == #methodTrap) ifTrue:[
+ newMethod isWrapped ifTrue:[
+ oldMethod := newMethod originalMethod
+ ] ifFalse:[
+ selection size > 0 ifTrue:[
+ oldMethod := selection detect:[:each | each isWrapped and:[each originalMethod == newMethod]] ifNone:nil.
+ ]
+ ].
- selection size > 0 ifTrue:[
- (selection includesIdentical:oldMethod) ifTrue:[
- needSelectionChange := true.
- ]
- ].
- methodList replaceAllIdentical:oldMethod with:newMethod.
- lastSelectedMethods notNil ifTrue:[
- lastSelectedMethods replaceAllIdentical:oldMethod with:newMethod
- ].
- selection size > 0 ifTrue:[
- selection := selection asOrderedCollection.
- selection replaceAllIdentical:oldMethod with:newMethod.
- ].
- needSelectionChange == true ifTrue:[
- selectionHolder changed.
- ].
+ selection size > 0 ifTrue:[
+ (selection includesIdentical:oldMethod) ifTrue:[
+ needSelectionChange := true.
+ ]
+ ].
+ methodList replaceAllIdentical:oldMethod with:newMethod.
+ lastSelectedMethods notNil ifTrue:[
+ lastSelectedMethods replaceAllIdentical:oldMethod with:newMethod
+ ].
+ selection size > 0 ifTrue:[
+ selection := selection asOrderedCollection.
+ selection replaceAllIdentical:oldMethod with:newMethod.
+ ].
+ needSelectionChange == true ifTrue:[
+ selectionHolder changed.
+ ].
- "/ actually, could just change that single item ...
- "/ ... might be cheaper, if list is huge.
- "/ only update that methods entry
- self updateListEntryFor:newMethod.
- "/ self invalidateList.
- ].
- ^ self
- ].
+ "/ actually, could just change that single item ...
+ "/ ... might be cheaper, if list is huge.
+ "/ only update that methods entry
+ self updateListEntryFor:newMethod.
+ "/ self invalidateList.
+ ].
+ ^ self
+ ].
- (something == #projectOrganization
- or:[something == #lastTestRunResult]) ifTrue:[
- aParameter notNil ifTrue:[
- cls := aParameter at:1.
- cls notNil ifTrue:[
- ((classes includesIdentical:cls theNonMetaclass)
- or:[(classes includesIdentical:cls theMetaclass)]) ifTrue:[
- self invalidateList.
- ].
- ].
- ] ifFalse:[
- self invalidateList.
- ].
- ^ self
- ].
+ (something == #projectOrganization
+ or:[something == #lastTestRunResult]) ifTrue:[
+ aParameter notNil ifTrue:[
+ cls := aParameter at:1.
+ cls notNil ifTrue:[
+ ((classes includesIdentical:cls theNonMetaclass)
+ or:[(classes includesIdentical:cls theMetaclass)]) ifTrue:[
+ self invalidateList.
+ ].
+ ].
+ ] ifFalse:[
+ self invalidateList.
+ ].
+ ^ self
+ ].
- "/ everything else is ignored
- "/ self halt.
- ].
- ^ self
+ "/ everything else is ignored
+ "/ self halt.
+ ].
+ ^ self
].
"/ something == #organization ifTrue:[
@@ -619,15 +620,15 @@
"/ ].
changedObject == sortBy ifTrue:[
- listValid ~~ true ifTrue:[ "/ could be nil
- inGeneratorHolder value isNil ifTrue:[
- "/ ok, no need to react on that one
- "/ (will invalidate anyway, once I have more info at hand)
- ^ self
- ].
- ].
- self invalidateList.
- ^ self
+ listValid ~~ true ifTrue:[ "/ could be nil
+ inGeneratorHolder value isNil ifTrue:[
+ "/ ok, no need to react on that one
+ "/ (will invalidate anyway, once I have more info at hand)
+ ^ self
+ ].
+ ].
+ self invalidateList.
+ ^ self
].
(changedObject == variableFilter
@@ -636,34 +637,34 @@
or:[changedObject == showMethodComplexity
or:[changedObject == showSyntheticMethods
]]]]) ifTrue:[
- self invalidateList.
- ^ self
+ self invalidateList.
+ ^ self
].
changedObject == selectedMethodNameIndices ifTrue:[
- newSelection := self selectedMethodNameIndices value collect:[:idx | methodList at:idx].
- newSelection ~= selection ifTrue:[
- selectionHolder value:newSelection.
- lastSelectedMethods := newSelection.
- lastSelectedMethods notNil ifTrue:[
- lastSelectedMethods := lastSelectedMethods asOrderedCollection
- ].
- ] ifFalse:[
- "/ a reselect - force update
+ newSelection := self selectedMethodNameIndices value collect:[:idx | methodList at:idx].
+ newSelection ~= selection ifTrue:[
+ selectionHolder value:newSelection.
+ lastSelectedMethods := newSelection.
+ lastSelectedMethods notNil ifTrue:[
+ lastSelectedMethods := lastSelectedMethods asOrderedCollection
+ ].
+ ] ifFalse:[
+ "/ a reselect - force update
"/ selection size == 1 ifTrue:[
- selectionHolder setValue:newSelection.
- selectionHolder changed:#value.
+ selectionHolder setValue:newSelection.
+ selectionHolder changed:#value.
"/ ].
- ].
- ^ self
+ ].
+ ^ self
].
changedObject == selectionHolder ifTrue:[
- self selectedMethodsChanged.
- lastSelectedMethods := selectionHolder value.
- lastSelectedMethods notNil ifTrue:[
- lastSelectedMethods := lastSelectedMethods asOrderedCollection
- ].
- ^ self
+ self selectedMethodsChanged.
+ lastSelectedMethods := selectionHolder value.
+ lastSelectedMethods notNil ifTrue:[
+ lastSelectedMethods := lastSelectedMethods asOrderedCollection
+ ].
+ ^ self
].
"/ something == #methodTrap ifTrue:[
"/self halt:'no longer'.
@@ -767,11 +768,11 @@
methods := ((self selectedMethodNameIndices value) ? #()) collect:[:idx | methodList at:idx].
methods notEmpty ifTrue:[
- lastSelectedMethods := methods asOrderedCollection.
+ lastSelectedMethods := methods asOrderedCollection.
].
"/ to allow reselect, change my valueHolder, even if the same collection
"/ self selectedMethods value ~= methods ifTrue:[
- self selectedMethods value:methods asOrderedCollection
+ self selectedMethods value:methods asOrderedCollection
"/ ]
"Created: / 05-02-2000 / 13:42:14 / cg"
@@ -826,42 +827,48 @@
(classes notNil and:[classes includesIdentical:mthd mclass]) ifFalse:[
^ self "/ I don't care for that class
].
- mustFlushInheritanceInfo := false.
+ mustFlushInheritanceInfo := false.
].
- (something == #methodTrap
+ (something == #methodTrap
or:[ something == #methodPrivacy
or:[ something == #lastTestRunResult] ]) ifTrue:[
+ cls := aParameter at:1.
+ (classes includesIdentical:cls) ifFalse:[ ^ self].
+
+ sel := aParameter at:2.
+ mthd := cls compiledMethodAt:sel.
+ (mthd notNil and:[mthd isWrapped or:[mthd isMethodWithBreakpoints]]) ifTrue:[
+ |original|
+
+ original := mthd originalMethod.
+ (methodList includesIdentical:original) ifTrue:[
+ methodList replaceAll:original with:mthd.
+ lastSelectedMethods notNil ifTrue:[
+ lastSelectedMethods replaceAll:original with:mthd.
+ ].
+ ]
+ ].
+
self window shown ifFalse:[
"JV@2011-11-17: Do not break the dependency here,
because then the window won't get updates once
deiconified -> leads to confusing behavior
(browser shows obsolete info)"
"/changedObject removeDependent:self. "/ ?????
- self invalidateList.
+ listValid ifTrue:[ self invalidateList ].
^ self
].
- cls := aParameter at:1.
- sel := aParameter at:2.
- mthd := cls compiledMethodAt:sel.
- (mthd notNil and:[mthd isWrapped or:[mthd isMethodWithBreakpoints]]) ifTrue:[
- (methodList includes:mthd originalMethod) ifTrue:[
- methodList replaceAll:mthd originalMethod with:mthd.
- lastSelectedMethods notNil ifTrue:[
- lastSelectedMethods replaceAll:mthd originalMethod with:mthd.
- ].
- ]
- ].
- mustFlushInheritanceInfo := false.
+ mustFlushInheritanceInfo := false.
].
something == #newClass ifTrue:[
^ self.
].
- (something == #methodInClass
+ (something == #methodInClass
or:[ something == #methodInClassRemoved ]) ifTrue:[
cls := aParameter first.
- clsName := cls name.
+ clsName := cls name.
(classes contains:[:aClass | aClass name = clsName]) ifFalse:[
^ self "/ I dont care for that class
].
@@ -882,7 +889,7 @@
something == #classDefinition ifTrue:[
cls := aParameter.
- clsName := cls name.
+ clsName := cls name.
(classes contains:[:aClass | aClass name = clsName]) ifFalse:[
^ self "/ I don't care for that class
].
@@ -900,11 +907,12 @@
"/ these must lead to immediate update of the selectedMethods collection
"/ (otherwise, that collection might be updated too late, leading to
"/ an obsolete methods code being shown by the codeView.
- (something == #methodInClass
+ (something == #methodInClass
or:[ something == #methodCoverageInfo ]) ifTrue:[
"/ as the organisation changes, flush my remembered redefinition-cache-info
classAndSelectorsRedefinedBySubclassesOfClass := nil.
cls := aParameter at:1.
+ classes isNil ifTrue:[ ^ self ].
(classes includesIdentical:cls) ifFalse:[
^ self "/ I dont care for that class
].
@@ -921,6 +929,7 @@
something == #methodInClassRemoved ifTrue:[
cls := aParameter at:1.
+ classes isNil ifTrue:[ ^ self ].
(classes includesIdentical:cls) ifFalse:[
^ self "/ I dont care for that class
].
@@ -928,19 +937,29 @@
super update:something with:aParameter from:changedObject
- "Modified: / 17-11-2011 / 19:22:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 05-06-2012 / 23:41:50 / cg"
+ "Modified: / 17-04-2014 / 21:48:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!MethodList methodsFor:'drag & drop'!
canDropContext:aDropContext
- |methods|
+ "I can receive methods (from another browser) and image filenames"
+ |objects|
+ "/ ignore drop from myself
aDropContext sourceWidget == aDropContext targetWidget ifTrue:[^ false].
- methods := aDropContext dropObjects collect:[:obj | obj theObject].
- (methods conform:[:aMethod | aMethod isMethod]) ifFalse:[^ false].
+ objects := aDropContext dropObjects collect:[:obj | obj theObject].
+ (objects
+ conform:[:anObject |
+ |mime|
+
+ anObject isMethod
+ or:[ anObject isFilename
+ and:[ (mime := anObject mimeTypeFromName) notNil
+ and:[ mime isImageType ]]]
+ ]) ifFalse:[^ false].
self masterApplication theSingleSelectedClass isNil ifTrue:[^ false].
^ true
@@ -949,20 +968,36 @@
!
doDropContext:aDropContext
- |methods browser|
-
- methods := aDropContext dropObjects collect:[:aDropObject | aDropObject theObject].
- (methods conform:[:something | something isMethod]) ifFalse:[^ self].
+ |objects methods files browser cls|
browser := self masterApplication.
+ cls := browser theSingleSelectedClass.
+
+ objects := aDropContext dropObjects collect:[:aDropObject | aDropObject theObject].
+ methods := objects select:[:something | something isMethod].
+
aDropContext dragType == DropContext dragTypeCopy ifTrue:[
browser
copyMethods:methods
- toClass:(browser theSingleSelectedClass).
+ toClass:cls.
] ifFalse:[
browser
moveMethods:methods
- toClass:(browser theSingleSelectedClass).
+ toClass:cls.
+ ].
+
+ files := objects select:[:something | something isFilename].
+ files do:[:eachFilename |
+ |img sel mime|
+
+ ((mime := eachFilename mimeTypeFromName) notNil
+ and:[mime isImageType]) ifTrue:[
+ img := Image fromFile:eachFilename.
+ sel := Dialog request:'Name of Image Method' initialAnswer:'img_',eachFilename withoutSuffix baseName.
+ sel isEmptyOrNil ifTrue:[^ self].
+ browser theSingleSelectedClass programmingLanguage codeGeneratorClass
+ createImageSpecMethodFor:img comment:'"Imported from ',eachFilename pathName,'"' in:cls selector:sel
+ ]
].
"Modified: / 13-09-2006 / 11:43:44 / cg"
@@ -970,7 +1005,7 @@
!MethodList methodsFor:'private'!
-isMethodToBeShown:aMethod
+isMethodToBeShown:aMethod
"invoked, when we get a change for aMethod which was previously not
in the list (for example, if I show a filtered list).
Check if that single method is to be shown now.
@@ -980,25 +1015,25 @@
generator := inGeneratorHolder value.
generator isNil ifTrue:[
- ^ false
+ ^ false
].
-
+
"/ generator generates nil-selector entries
"/ to pass multiple-class and multiple-protocol info
-
- generator do:[:cls :cat :sel :mthd |
- mthd == aMethod ifTrue:[
- mthd isSynthetic ifFalse:[
- sel notNil ifTrue:[
+
+ generator do:[:cls :cat :sel :mthd |
+ mthd == aMethod ifTrue:[
+ mthd isSynthetic ifFalse:[
+ sel notNil ifTrue:[
"/ cg: no longer filter those...
-"/ (packageFilter value isNil
+"/ (packageFilter value isNil
"/ or:[ packageFilter value includes:mthd package ]) ifTrue:[
- ^ true
+ ^ true
"/ ]
- ]
- ].
- ^ false
- ]
+ ]
+ ].
+ ^ false
+ ]
].
^ false
@@ -1006,11 +1041,11 @@
!
listOfMethodNames
- |methods entries selectorBag newNameList allClasses newClasses
+ |methods entries selectorBag newNameList allClasses newClasses
allCategories "allSelectors"
- generator doShowClass doShowClassFirst doShowCategory enforceClassAndProtocolInList
+ generator doShowClass doShowClassFirst doShowCategory enforceClassAndProtocolInList
theMethod sortByClass anyMethodToWatch mclass
- packageFilterValue nameListEntryForExtensions
+ packageFilterValue nameListEntryForExtensions
suppressInheritanceInfoNow startTime|
suppressInheritanceInfoNow := (showMethodInheritance value ? true) not.
@@ -1022,9 +1057,9 @@
].
allClasses := IdentitySet new.
allCategories := IdentitySet new.
-
+
"/ allSelectors := Set new.
-
+
newClasses := IdentitySet new.
selectorBag := Bag new.
entries := OrderedCollection new.
@@ -1036,6 +1071,11 @@
"/ Enabled again, because when i select package in a browser I expect
"/ to see only methods belonging to that package!!
packageFilterValue := packageFilter value.
+ packageFilterValue notNil ifTrue:[
+ (packageFilterValue includes:self class nameListEntryForALL) ifTrue:[
+ packageFilterValue := nil
+ ]
+ ].
"/ generator generates nil-selector entries
"/ to pass multiple-class and multiple-protocol info
@@ -1045,30 +1085,26 @@
|categoryIsExtensionsPseudoCategory|
categoryIsExtensionsPseudoCategory := (cat = nameListEntryForExtensions).
-
(cls isNil and:[ cat isNil and:[ sel isNil ] ]) ifTrue:[
enforceClassAndProtocolInList := true
] ifFalse:[
cls notNil ifTrue:[
allClasses add:cls.
].
-"/ cat notNil ifTrue:[
-"/ allCategories add:cat.
-"/ ].
"/ JV: Filter method through package filter
"/ but not, if it is an extension method and we are showing extensions
- (mthd notNil
+ (mthd notNil
and:[ (mthd isSynthetic not or:[showSyntheticMethods value == true])
and:[ sel notNil ]]
- ) ifTrue:[
- (packageFilterValue isNil
+ ) ifTrue:[
+ (packageFilterValue isNil
or:[ (packageFilterValue includes:mthd package)
or:[ categoryIsExtensionsPseudoCategory and:[ mthd isExtension] ]]
) ifTrue:[
entries add:(Array with:cls with:sel with:mthd).
selectorBag add:sel.
newClasses add:cls.
-
+
allCategories add:mthd category.
"/ allSelectors add:sel.
]
@@ -1085,7 +1121,7 @@
classAndSelectorsRedefinedBySubclassesOfClass isNil ifTrue:[
classAndSelectorsRedefinedBySubclassesOfClass := IdentityDictionary new.
].
- allClasses do:[:cls |
+ allClasses do:[:cls |
|d|
d := classAndSelectorsRedefinedBySubclassesOfClass.
@@ -1096,13 +1132,13 @@
]
].
].
-
+
"/ multiple classes must: add the className for some
-
+
doShowClass := enforceClassAndProtocolInList or:[ allClasses size > 1 ].
-
+
"/ multiple categories: must add the categorie for some
-
+
doShowCategory := enforceClassAndProtocolInList or:[ allCategories size > 1 ].
doShowClassFirst := doShowClass.
@@ -1113,12 +1149,12 @@
(doShowClass not and:[ sortBy value == #class ]) ifTrue:[
"/ multiple classes must add the className for some
"/ check, if doShowClass must be enforced
- entries do:[:entry |
+ entries do:[:entry |
|cls sel mthd s needClass|
- cls := entry at:1.
+ "/ cls := entry at:1.
sel := entry at:2.
- mthd := entry at:3.
+ "/ mthd := entry at:3.
doShowClass ifFalse:[
doShowClass := (selectorBag occurrencesOf:sel) > 1
].
@@ -1126,18 +1162,21 @@
].
sortByClass := doShowClass and:[ sortBy value == #class ].
sortByClass ifTrue:[
- entries
- sort:[:a :b |
- |nmA nmB clsNmA clsNmB nsNmA nsNmB|
+ entries
+ sort:[:a :b |
+ |clsA clsB selA selB nmA nmB clsNmA clsNmB nsNmA nsNmB mthdA mthdB|
- clsNmA := (a at:1) name.
- clsNmB := (b at:1) name.
+ clsA := a at:1. clsB := b at:1.
+ clsNmA := clsA name.
+ clsNmB := clsB name.
clsNmA = clsNmB ifTrue:[
- nmA := (a at:2) asSymbol selector.
- nmB := (b at:2) asSymbol selector.
+ selA := a at:2. selB := b at:2.
+ nmA := selA asSymbol selectorWithoutNameSpace.
+ nmB := selB asSymbol selectorWithoutNameSpace.
nmA = nmB ifTrue:[
- nsNmA := (a at:3) nameSpaceName.
- nsNmB := (b at:3) nameSpaceName.
+ mthdA := a at:3. mthdB := b at:3.
+ nsNmA := mthdA nameSpaceName.
+ nsNmB := mthdB nameSpaceName.
nsNmA < nsNmB
] ifFalse:[ nmA < nmB ]
] ifFalse:[
@@ -1146,21 +1185,24 @@
].
] ifFalse:[
sortBy value == #category ifTrue:[
- entries
- sort:[:a :b |
- |nmA nmB catA catB clsNmA clsNmB nsNmA nsNmB|
+ entries
+ sort:[:a :b |
+ |mthdA mthdB selA selB clsA clsB nmA nmB catA catB clsNmA clsNmB nsNmA nsNmB|
- catA := (a at:3) category.
- catB := (b at:3) category.
+ mthdA := a at:3. mthdB := b at:3.
+ catA := mthdA category.
+ catB := mthdB category.
catA = catB ifTrue:[
- nmA := (a at:2) asSymbol selector.
- nmB := (b at:2) asSymbol selector.
+ selA := a at:2. selB := b at:2.
+ nmA := selA asSymbol selectorWithoutNameSpace.
+ nmB := selB asSymbol selectorWithoutNameSpace.
nmA = nmB ifTrue:[
- clsNmA := (a at:1) name.
- clsNmB := (b at:1) name.
+ clsA := a at:1. clsB := b at:1.
+ clsNmA := clsA name.
+ clsNmB := clsB name.
clsNmA = clsNmB ifTrue:[
- nsNmA := (a at:3) nameSpaceName.
- nsNmB := (b at:3) nameSpaceName.
+ nsNmA := mthdA nameSpaceName.
+ nsNmB := mthdB nameSpaceName.
nsNmA < nsNmB
] ifFalse:[
clsNmA < clsNmB
@@ -1171,12 +1213,12 @@
]
].
] ifFalse:[
- entries
- sort:[:a :b |
+ entries
+ sort:[:a :b |
|nmA nmB clsNmA clsNmB nsNmA nsNmB|
- nmA := (a at:2) asSymbol selector.
- nmB := (b at:2) asSymbol selector.
+ nmA := (a at:2) asSymbol selectorWithoutNameSpace.
+ nmB := (b at:2) asSymbol selectorWithoutNameSpace.
nmA = nmB ifTrue:[
clsNmA := (a at:1) name.
clsNmB := (b at:1) name.
@@ -1193,10 +1235,10 @@
].
].
methods := OrderedCollection new:(entries size).
-
+
"/ first generate the new methodList, and see if it is different ...
-
- entries do:[:entry |
+
+ entries do:[:entry |
|sel mthd|
mthd := entry at:3.
@@ -1207,26 +1249,26 @@
newNameList := self browserNameList.
] ifFalse:[
newNameList := OrderedCollection new:(entries size).
-
+
"/ multiple classes must add the className for some
-
- entries do:[:entry |
+
+ entries do:[:entry |
|cls sel mthd s needClass|
cls := entry at:1.
sel := entry at:2.
mthd := entry at:3.
needClass := doShowClass.
-
+
"/ needClass ifFalse:[
"/ needClass := (selectorBag occurrencesOf:sel) > 1
"/ ].
(suppressInheritanceInfoNow not
- and:[ (Timestamp now deltaFrom:startTime) > 3 seconds ]) ifTrue:[
+ and:[ (Timestamp now secondDeltaFrom:startTime) > 3 ]) ifTrue:[
suppressInheritanceInfoNow := true.
].
- s := self
+ s := self
listEntryForMethod:mthd
selector:sel
class:cls
@@ -1234,7 +1276,7 @@
showCategory:doShowCategory
classFirst:doShowClassFirst
suppressInheritanceInfo:suppressInheritanceInfoNow.
-
+
newNameList add:s.
].
].
@@ -1251,19 +1293,20 @@
mclass := theMethod mclass.
].
].
- self methodLabelHolder value:(mclass isNil
+ self methodLabelHolder
+ value:(mclass isNil
ifTrue:[ ('???' , ' ' , '???') ]
- ifFalse:[ (mclass name , ' ' , theMethod selector) ])
+ ifFalse:[ (mclass name ? '*unnamed*'), ' ' , (theMethod selector asString) ])
].
"/ anyMethodToWatch ifTrue:[
"/ self startWatchProcess.
"/ ] ifFalse:[
"/ self stopWatchProcess.
"/ ].
-
+
"/ remember these, in case of an incremental (single method only)
"/ update in the future.
-
+
lastShowClass := doShowClass.
lastShowClassFirst := doShowClassFirst.
lastShowCategory := doShowCategory.
@@ -1319,10 +1362,10 @@
].
"/ JV Following code is just very bad. It assumes that method is a Smalltalk method.
- "/ But it may not, it could be JavaScript method, Java method or whatever fancy language
+ "/ But it may not, it could be JavaScript method, Java method or whatever fancy language
"/ method. Should be actually delegated to the method itself, just as #messagesSend & co.
- "/ I'm not going to refactor now to keep the differences between jv-branch and CVS
+ "/ I'm not going to refactor now to keep the differences between jv-branch and CVS
"/ ss small as possible. This interface is bad anyway as method is parsed several times
"/ to check different things. Once should be enough.
@@ -1343,7 +1386,7 @@
before doing a slow parse, quickly scan the
methods source for the variables name ...
"
- (variablesToHighLight contains:[:varName | (src findString:varName) ~~ 0]) ifTrue:[
+ (variablesToHighLight contains:[:varName | src includesString:varName ]) ifTrue:[
parser := Parser
parseMethod:src
in:cls
@@ -1405,21 +1448,21 @@
redefined := self methodIsRedefinedBelow:aMethod.
inherited ifTrue:[
- redefined ifTrue:[
- ^ self methodInheritedFromAboveAndRedefinedBelowIcon.
- ].
- ^ self methodInheritedFromAboveIcon.
+ redefined ifTrue:[
+ ^ self methodInheritedFromAboveAndRedefinedBelowIcon.
+ ].
+ ^ self methodInheritedFromAboveIcon.
].
- subclassResponsibility := aMethod sends:#subclassResponsibility.
+ subclassResponsibility := aMethod sendsAny:#( subclassResponsibility implementedBySubclass).
redefined ifTrue:[
- subclassResponsibility ifTrue:[
- ^ self methodIsSubclassResponsibilityAndRedefinedBelowIcon.
- ].
- ^ self methodRedefinedBelowIcon.
+ subclassResponsibility ifTrue:[
+ ^ self methodIsSubclassResponsibilityAndRedefinedBelowIcon.
+ ].
+ ^ self methodRedefinedBelowIcon.
].
subclassResponsibility ifTrue:[
- ^ self methodIsSubclassResponsibilityIcon.
+ ^ self methodIsSubclassResponsibilityIcon.
].
^ self methodEmptyInheritedIcon
@@ -1434,12 +1477,6 @@
variableFilter removeDependent:self.
!
-resourceIconForMethod:aMethod
- ^ SystemBrowser resourceIconForMethod:aMethod
-
- "Modified: / 17-08-2006 / 09:09:01 / cg"
-!
-
setOfAllSelectorsImplementedBelow:aClass
|set|
@@ -1462,7 +1499,7 @@
oldListSize := self browserNameList size.
self topApplication withWaitCursorDo:[
- newList := self listOfMethodNames.
+ newList := self listOfMethodNames.
].
newListSize := newList size.
sameContents := self updateListFor:newList.
@@ -1470,69 +1507,70 @@
sameContents ifFalse:[
"/ self browserNameList value:newList.
- (prevSelection size == 0
- and:[selectedMethodsHolder value size ~~ 0]) ifTrue:[
- "/ this happens during early startup time,
- "/ when the selection is already (pre-)set,
- "/ and the methodList is generated the first time
- "/ (i.e. when opened with preset selection
+ (prevSelection size == 0
+ and:[selectedMethodsHolder value size ~~ 0]) ifTrue:[
+ "/ this happens during early startup time,
+ "/ when the selection is already (pre-)set,
+ "/ and the methodList is generated the first time
+ "/ (i.e. when opened with preset selection
- "/ do not clobber the selection in this case.
- prevSelection := selectedMethodsHolder value.
- ].
+ "/ do not clobber the selection in this case.
+ prevSelection := selectedMethodsHolder value.
+ ].
- (methodList size == 0 or:[prevSelection size == 0]) ifTrue:[
- newSelection := #()
- ] ifFalse:[
- methodSet := methodList.
+ (methodList size == 0 or:[prevSelection size == 0]) ifTrue:[
+ newSelection := #()
+ ] ifFalse:[
+ methodSet := methodList.
- "/ intersect is much faster with sets, if the number of items is large
- "/ however, only if its worth building the set ...
- (methodSet size + prevSelection size) > 35 ifTrue:[
- methodSet := methodSet asIdentitySet.
- ].
- newSelection := methodSet intersect:prevSelection.
- ].
- newSelection size > 0 ifTrue:[
- newSelection size > 100 ifTrue:[
- "/ need selection indices - might be expensive if done straight forward...
- reverseMap := IdentityDictionary new.
- methodList keysAndValuesDo:[:idx :mthd | reverseMap at:mthd put:idx].
- newSelIdx := newSelection collect:[:mthd | reverseMap at:mthd].
- ] ifFalse:[
- newSelIdx := newSelection collect:[:mthd | methodList identityIndexOf:mthd]
- ].
+ "/ intersect is much faster with sets, if the number of items is large
+ "/ however, only if its worth building the set ...
+ (methodSet size + prevSelection size) > 35 ifTrue:[
+ methodSet := methodSet asIdentitySet.
+ ].
+ newSelection := methodSet intersect:prevSelection.
+ ].
+ newSelection size > 0 ifTrue:[
+ newSelection size > 100 ifTrue:[
+ "/ need selection indices - might be expensive if done straight forward...
+ reverseMap := IdentityDictionary new.
+ methodList keysAndValuesDo:[:idx :mthd | reverseMap at:mthd put:idx].
+ newSelIdx := newSelection collect:[:mthd | reverseMap at:mthd].
+ ] ifFalse:[
+ newSelIdx := newSelection collect:[:mthd | methodList identityIndexOf:mthd]
+ ].
"/ self halt.
- "/ force change (for dependents)
- newSelIdx ~= selectedMethodNameIndices value ifTrue:[
- selectedMethodNameIndices value:newSelIdx.
- ].
- ] ifFalse:[
- lastSelectedMethods := selectedMethodsHolder value.
- lastSelectedMethods notNil ifTrue:[
- lastSelectedMethods := lastSelectedMethods asOrderedCollection
- ].
- selectedMethodNameIndices value size > 0 ifTrue:[
- selectedMethodNameIndices value:#().
- ]
- ].
+ "/ force change (for dependents)
+ newSelIdx ~= selectedMethodNameIndices value ifTrue:[
+ self selectedMethodNameIndices value:newSelIdx.
+ ].
+ ] ifFalse:[
+ lastSelectedMethods := selectedMethodsHolder value.
+ lastSelectedMethods notNil ifTrue:[
+ lastSelectedMethods := lastSelectedMethods asOrderedCollection
+ ].
+ selectedMethodNameIndices value size > 0 ifTrue:[
+ selectedMethodNameIndices value:#().
+ ]
+ ].
- newSelection ~= prevSelection ifTrue:[
- self selectionChanged.
- ]
+ newSelection ~= prevSelection ifTrue:[
+ self selectionChanged.
+ ]
] ifTrue:[
- "/ same list - but classes might have changed
- "/ that is the case, if the class selection has been changed,
- "/ to another class which has the same categories.
+ "/ same list - but classes might have changed
+ "/ that is the case, if the class selection has been changed,
+ "/ to another class which has the same categories.
- (prevClasses ~= (classes ? IdentitySet new)) ifTrue:[
- (newListSize > 0 or:[oldListSize > 0]) ifTrue:[
- self selectionChanged.
- ]
- ]
+ (prevClasses ~= (classes ? IdentitySet new)) ifTrue:[
+ (newListSize > 0 or:[oldListSize > 0]) ifTrue:[
+ self selectionChanged.
+ ]
+ ]
]
"Modified: / 05-03-2007 / 16:07:24 / cg"
+ "Modified: / 24-02-2014 / 11:08:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
updateListEntryFor:aMethod
@@ -1542,11 +1580,11 @@
|s idx|
- s := self
- listEntryForMethod:aMethod
- selector:aMethod selector
- class:aMethod mclass
- showClass:lastShowClass
+ s := self
+ listEntryForMethod:aMethod
+ selector:aMethod selector ? '*unbound*'
+ class:aMethod mclass
+ showClass:lastShowClass
showCategory:lastShowCategory
classFirst:lastShowClassFirst
suppressInheritanceInfo:false.
@@ -1591,30 +1629,30 @@
!
listEntryForMethod:aMethod selector:selector class:cls showClass:showClass showCategory:showCategory classFirst:showClassFirst
- "answer a method list entry
- gimmics:
+ "answer a method list entry
+ gimmics:
+ adding a little image to breakPointed methods,
+ inheritance indicators,
+ highlight accessors of variable"
+
+ ^ self
+ listEntryForMethod:aMethod
+ selector:selector
+ class:cls
+ showClass:showClass showCategory:showCategory
+ classFirst:showClassFirst
+ suppressInheritanceInfo:false
+!
+
+listEntryForMethod:aMethod selector:selector class:cls showClass:showClass showCategory:showCategory classFirst:showClassFirst suppressInheritanceInfo:suppressInheritanceInfo
+ "answer a method list entry
+ gimmics:
adding a little image to breakPointed methods,
inheritance indicators,
highlight accessors of variable"
- ^ self
- listEntryForMethod:aMethod
- selector:selector
- class:cls
- showClass:showClass showCategory:showCategory
- classFirst:showClassFirst
- suppressInheritanceInfo:false
-!
-
-listEntryForMethod:aMethod selector:selector class:cls showClass:showClass showCategory:showCategory classFirst:showClassFirst suppressInheritanceInfo:suppressInheritanceInfo
- "answer a method list entry
- gimmics:
- adding a little image to breakPointed methods,
- inheritance indicators,
- highlight accessors of variable"
-
- |s icn variablesToHighlight classVarsToHighLight
- doHighLight doHighLightRed clr emp cat l redefIcon
+ |s icn variablesToHighlight classVarsToHighLight
+ doHighLight doHighLightRed clr emp cat l redefIcon
metrics complexity complexityString complexityIcon mark lastResultOrNil|
aMethod isNil ifTrue:[
@@ -1638,7 +1676,7 @@
s := s copyButLast:2
].
aMethod isBreakpointed ifTrue:[
- icn := self stopIcon
+ icn := self fullBreakPointedIcon.
] ifFalse:[
aMethod isTimed ifTrue:[
icn := self timeIcon
@@ -1653,7 +1691,7 @@
"/
icn isNil ifTrue:[
(aMethod notNil and:[aMethod isMethodWithBreakpoints]) ifTrue:[
- icn := self breakPointedIcon
+ icn := self lineBreakPointedIcon
].
].
@@ -1690,9 +1728,9 @@
].
].
icn isNil ifTrue:[
- (selector startsWith:'test') ifTrue:[
- ((cls isSubclassOf:TestCase)
- and:[cls isAbstract not]) ifTrue:[
+ (selector isSymbol and:[selector startsWith:'test']) ifTrue:[
+ (((cls isSubclassOf:TestCase) and:[cls isAbstract not])
+ or:[showSyntheticMethods value and:[aMethod isSynthetic]]) ifTrue:[
"JV@2011-11-17: Show thumbs even if not all test were run"
lastResultOrNil := cls rememberedOutcomeFor:selector.
@@ -1710,8 +1748,8 @@
icn := ToolbarIconLibrary testCaseFailedIcon
] ifFalse:[
icn := ToolbarIconLibrary testCaseSkippedIcon
- ]
- ]
+ ]
+ ]
]
].
].
@@ -1720,24 +1758,21 @@
showClass ifTrue:[
showClassFirst ifFalse:[
- s := s , ' [' , cls name allBold , ']'.
+ s := s , ' [' , cls nameInBrowser allBold , ']'.
]
].
- (showCategory and:[aMethod mclass supportsMethodCategories]) ifTrue:[
+ (showCategory and:[aMethod mclass notNil and:[aMethod mclass supportsMethodCategories]]) ifTrue:[
cat := aMethod category.
cat notNil ifTrue:[
- s := s , ' {' , (cat "asText allItalic" colorizeAllWith:Color grey), '}'
+ s := s , ' {' , (cat "asText allItalic" colorizeAllWith:Color gray), '}'
]
].
- self showCoverageInformation value ifTrue:[
- clr := self colorForCoverageInformationOfMethod:aMethod.
- clr notNil ifTrue:[
- s := self colorize:s with:(#color->clr).
- "/ aMethod isInstrumented ifTrue:[
- "/ icn := self instrumentationIcon
- "/ ].
- ].
+ (self showCoverageInformation value and:[(clr := self colorForCoverageInformationOfMethod:aMethod) notNil]) ifTrue:[
+ s := self colorize:s with:(#color->clr).
+ "/ aMethod isInstrumented ifTrue:[
+ "/ icn := self instrumentationIcon
+ "/ ].
] ifFalse:[
(ChangeSet current includesChangeForClass:cls selector:selector) ifTrue:[
mark := self class markForBeingInChangeList.
@@ -1778,7 +1813,7 @@
]
].
- (showMethodComplexity value == true
+ (showMethodComplexity value == true
and:[ OOM::MethodMetrics notNil ]) ifTrue:[
icn isNil ifTrue:[
metrics := OOM::MethodMetrics forMethod:aMethod.
@@ -1818,7 +1853,13 @@
"Created: / 22-10-1996 / 19:51:00 / cg"
"Modified: / 15-08-2009 / 13:13:32 / Jan Vrany <vranyj1@fel.cvut.cz>"
"Modified: / 07-03-2012 / 19:06:09 / cg"
- "Modified: / 16-10-2013 / 01:10:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 25-02-2015 / 17:14:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+resourceIconForMethod:aMethod
+ ^ SystemBrowser resourceIconForMethod:aMethod
+
+ "Modified: / 17-08-2006 / 09:09:01 / cg"
! !
!MethodList methodsFor:'private-watching'!
@@ -1868,19 +1909,10 @@
!MethodList class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/Tools_MethodList.st,v 1.92 2013-09-05 10:46:11 vrany Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/Tools__MethodList.st,v 1.118 2015-02-26 03:58:57 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libtool/Tools_MethodList.st,v 1.92 2013-09-05 10:46:11 vrany Exp $'
-!
-
-version_HG
-
- ^ '$Changeset: <not expanded> $'
-!
-
-version_SVN
- ^ '$Id: Tools__MethodList.st 8083 2013-01-14 11:48:37Z vranyj1 $'
+ ^ '$Header: /cvs/stx/stx/libtool/Tools__MethodList.st,v 1.118 2015-02-26 03:58:57 cg Exp $'
! !