--- a/Tools__ClassChecker.st Thu Apr 04 01:43:18 2013 +0100
+++ b/Tools__ClassChecker.st Thu Apr 04 19:06:16 2013 +0100
@@ -185,36 +185,36 @@
|cls notUsedHere notUsedAnyWhere anySubclass|
cls := checkedClass theNonMetaclass.
- notUsedHere := cls classVarNames asSet.
+ notUsedHere := cls classVarNames asNewSet.
notUsedHere isEmpty ifTrue:[^ self].
self removeUsedClassVariablesIn:cls from:notUsedHere.
self removeUsedClassVariablesIn:cls class from:notUsedHere.
notUsedHere notEmpty ifTrue:[
- notUsedAnyWhere := notUsedHere copy.
- anySubclass := false.
- cls allSubclassesDo:[:eachSubclass |
- anySubclass := true.
- notUsedAnyWhere notEmpty ifTrue:[
- self removeUsedClassVariablesIn:eachSubclass from:notUsedAnyWhere.
- self removeUsedClassVariablesIn:eachSubclass class from:notUsedAnyWhere.
- ]
- ].
+ notUsedAnyWhere := notUsedHere copy.
+ anySubclass := false.
+ cls allSubclassesDo:[:eachSubclass |
+ anySubclass := true.
+ notUsedAnyWhere notEmpty ifTrue:[
+ self removeUsedClassVariablesIn:eachSubclass from:notUsedAnyWhere.
+ self removeUsedClassVariablesIn:eachSubclass class from:notUsedAnyWhere.
+ ]
+ ].
- notUsedHere do:[:eachVariable |
- |className|
+ notUsedHere do:[:eachVariable |
+ |className|
- className := checkedClass name allBold.
- self
- rememberBadClass:cls
- info:('classVar ' , eachVariable allBold , ' is unused in ' , className , ' (#classVariablesNeverUsed)').
- (notUsedAnyWhere includes:eachVariable) ifTrue:[
- self
- rememberBadClass:cls
- info:('classVar ' , eachVariable allBold , ' is not even used in subclasses of ' , className , ' (#classVariablesNeverUsed)')
- ]
- ].
+ className := checkedClass name allBold.
+ self
+ rememberBadClass:cls
+ info:('classVar ' , eachVariable allBold , ' is unused in ' , className , ' (#classVariablesNeverUsed)').
+ (notUsedAnyWhere includes:eachVariable) ifTrue:[
+ self
+ rememberBadClass:cls
+ info:('classVar ' , eachVariable allBold , ' is not even used in subclasses of ' , className , ' (#classVariablesNeverUsed)')
+ ]
+ ].
]
!
@@ -222,36 +222,36 @@
|cls notWrittenHere notWrittenAnyWhere anySubclass|
cls := checkedClass theNonMetaclass.
- notWrittenHere := cls classVarNames asSet.
+ notWrittenHere := cls classVarNames asNewSet.
notWrittenHere isEmpty ifTrue:[^ self].
self removeWrittenClassVariablesIn:cls from:notWrittenHere.
self removeWrittenClassVariablesIn:cls class from:notWrittenHere.
notWrittenHere notEmpty ifTrue:[
- notWrittenAnyWhere := notWrittenHere copy.
- anySubclass := false.
- cls allSubclassesDo:[:eachSubclass |
- anySubclass := true.
- notWrittenAnyWhere notEmpty ifTrue:[
- self removeWrittenClassVariablesIn:eachSubclass from:notWrittenAnyWhere.
- self removeWrittenClassVariablesIn:eachSubclass class from:notWrittenAnyWhere.
- ]
- ].
+ notWrittenAnyWhere := notWrittenHere copy.
+ anySubclass := false.
+ cls allSubclassesDo:[:eachSubclass |
+ anySubclass := true.
+ notWrittenAnyWhere notEmpty ifTrue:[
+ self removeWrittenClassVariablesIn:eachSubclass from:notWrittenAnyWhere.
+ self removeWrittenClassVariablesIn:eachSubclass class from:notWrittenAnyWhere.
+ ]
+ ].
- notWrittenHere do:[:eachVariable |
- |className|
+ notWrittenHere do:[:eachVariable |
+ |className|
- className := cls name allBold.
- self
- rememberBadClass:cls
- info:('classVar ' , eachVariable allBold , ' is not set in ' , className , ' (#classVariablesNeverWritten)').
- (notWrittenAnyWhere includes:eachVariable) ifTrue:[
- self
- rememberBadClass:cls
- info:('classVar ' , eachVariable allBold , ' is not even set in subclasses of ' , className , ' (#classVariablesNeverWritten)')
- ]
- ].
+ className := cls name allBold.
+ self
+ rememberBadClass:cls
+ info:('classVar ' , eachVariable allBold , ' is not set in ' , className , ' (#classVariablesNeverWritten)').
+ (notWrittenAnyWhere includes:eachVariable) ifTrue:[
+ self
+ rememberBadClass:cls
+ info:('classVar ' , eachVariable allBold , ' is not even set in subclasses of ' , className , ' (#classVariablesNeverWritten)')
+ ]
+ ].
]
!
@@ -545,7 +545,7 @@
unusedClassVariables
|remainingVars|
- remainingVars := checkedClass theNonMetaclass classVarNames asSet.
+ remainingVars := checkedClass theNonMetaclass classVarNames asNewSet.
checkedClass theNonMetaclass withAllSubclassesDo:[:eachClassToCheck |
eachClassToCheck instAndClassMethodsDo:[:method |
@@ -568,7 +568,7 @@
unusedInstanceVariables
|remainingVars|
- remainingVars := checkedClass theNonMetaclass instVarNames asSet.
+ remainingVars := checkedClass theNonMetaclass instVarNames asNewSet.
checkedClass theNonMetaclass withAllSubclassesDo:[:eachClassToCheck |
eachClassToCheck methodDictionary keysAndValuesDo:[:mSelector :method |
@@ -665,94 +665,94 @@
instanceVariablesNeverUsedIn:aClass
|notUsedHere notUsedAnyWhere anySubclass|
- notUsedHere := aClass instVarNames asSet.
+ notUsedHere := aClass instVarNames asNewSet.
notUsedHere isEmpty ifTrue:[^ self].
self removeUsedInstanceVariablesIn:aClass from:notUsedHere.
notUsedHere notEmpty ifTrue:[
- notUsedAnyWhere := notUsedHere copy.
- anySubclass := false.
- aClass allSubclassesDo:[:eachSubclass |
- anySubclass := true.
- notUsedAnyWhere notEmpty ifTrue:[
- self removeUsedInstanceVariablesIn:eachSubclass from:notUsedAnyWhere.
- ]
- ].
+ notUsedAnyWhere := notUsedHere copy.
+ anySubclass := false.
+ aClass allSubclassesDo:[:eachSubclass |
+ anySubclass := true.
+ notUsedAnyWhere notEmpty ifTrue:[
+ self removeUsedInstanceVariablesIn:eachSubclass from:notUsedAnyWhere.
+ ]
+ ].
- notUsedHere do:[:eachVariable |
- |className|
+ notUsedHere do:[:eachVariable |
+ |className|
- className := aClass name allBold.
- self
- rememberBadClass:aClass
- info:('instVar ' , eachVariable allBold , ' is unused in ' , className , ' (#instanceVariablesNeverUsed)').
+ className := aClass name allBold.
+ self
+ rememberBadClass:aClass
+ info:('instVar ' , eachVariable allBold , ' is unused in ' , className , ' (#instanceVariablesNeverUsed)').
- anySubclass ifTrue:[
- (notUsedAnyWhere includes:eachVariable) ifTrue:[
- self
- rememberBadClass:aClass
- info:('instVar ' , eachVariable allBold , ' is not even used in subclasses of ' , className , ' (#instanceVariablesNeverUsed)')
- ]
- ]
- ].
+ anySubclass ifTrue:[
+ (notUsedAnyWhere includes:eachVariable) ifTrue:[
+ self
+ rememberBadClass:aClass
+ info:('instVar ' , eachVariable allBold , ' is not even used in subclasses of ' , className , ' (#instanceVariablesNeverUsed)')
+ ]
+ ]
+ ].
]
!
instanceVariablesNeverWrittenIn:aClass
|notWrittenHere notWrittenAnyWhere anySubclass|
- notWrittenHere := aClass instVarNames asSet.
+ notWrittenHere := aClass instVarNames asNewSet.
notWrittenHere isEmpty ifTrue:[^ self].
self removeWrittenInstanceVariablesIn:aClass from:notWrittenHere.
notWrittenHere notEmpty ifTrue:[
- notWrittenAnyWhere := notWrittenHere copy.
- anySubclass := false.
- aClass allSubclassesDo:[:eachSubclass |
- anySubclass := true.
- notWrittenAnyWhere notEmpty ifTrue:[
- self removeWrittenInstanceVariablesIn:eachSubclass from:notWrittenAnyWhere.
- ]
- ].
+ notWrittenAnyWhere := notWrittenHere copy.
+ anySubclass := false.
+ aClass allSubclassesDo:[:eachSubclass |
+ anySubclass := true.
+ notWrittenAnyWhere notEmpty ifTrue:[
+ self removeWrittenInstanceVariablesIn:eachSubclass from:notWrittenAnyWhere.
+ ]
+ ].
- notWrittenHere do:[:eachVariable |
- |className|
+ notWrittenHere do:[:eachVariable |
+ |className|
- className := aClass name allBold.
- self
- rememberBadClass:aClass
- info:('instVar ' , eachVariable allBold , ' is nowhere set in ' , className , ' (#instanceVariablesNeverWritten)').
- anySubclass ifTrue:[
- (notWrittenAnyWhere includes:eachVariable) ifTrue:[
- self
- rememberBadClass:aClass
- info:('instVar ' , eachVariable allBold , ' is not even set in subclasses of ' , className , ' (#instanceVariablesNeverWritten)')
- ]
- ]
- ].
+ className := aClass name allBold.
+ self
+ rememberBadClass:aClass
+ info:('instVar ' , eachVariable allBold , ' is nowhere set in ' , className , ' (#instanceVariablesNeverWritten)').
+ anySubclass ifTrue:[
+ (notWrittenAnyWhere includes:eachVariable) ifTrue:[
+ self
+ rememberBadClass:aClass
+ info:('instVar ' , eachVariable allBold , ' is not even set in subclasses of ' , className , ' (#instanceVariablesNeverWritten)')
+ ]
+ ]
+ ].
]
!
messagesNeverSentAndNotUsedAsSymbolIn:selectorsOfInterest
|remaining toRemove checkBlock|
- remaining := selectorsOfInterest copy asIdentitySet.
+ remaining := selectorsOfInterest asNewIdentitySet.
toRemove := IdentitySet new.
checkBlock := [:eachClass |
- eachClass instAndClassSelectorsAndMethodsDo:[:mSel :mthd | |lits|
- lits := mthd literals.
- lits notNil ifTrue:[
- lits traverse:[:eachLiteral |
- eachLiteral isSymbol ifTrue:[
- remaining remove:eachLiteral ifAbsent:nil.
- ]
- ].
- remaining isEmpty ifTrue:[^ remaining].
- ]
- ].
+ eachClass instAndClassSelectorsAndMethodsDo:[:mSel :mthd | |lits|
+ lits := mthd literals.
+ lits notNil ifTrue:[
+ lits traverse:[:eachLiteral |
+ eachLiteral isSymbol ifTrue:[
+ remaining remove:eachLiteral ifAbsent:nil.
+ ]
+ ].
+ remaining isEmpty ifTrue:[^ remaining].
+ ]
+ ].
].
"/ start searching in the checkedClass - chances are high, we find some here