Hi,
#isObsolete is interesting… it used to be that there were two definitions “name
of class starts with ‘AnObsolete’.
(these checks where inlined everywhere). And #isObsolete was checking “my
environment knows my name and
the result is me”.
-> we refactored the system to use #isObsolete everywhere (one of those
unimportant cleanups aka “random refactorings”)
Then Yuriy wanted to annotate classes like we can already annotate the AST and
Methods. So he added a property API
(careful to now use space by storing in a ClassVar).
Then Andrei realized that our definition of #isObsolte does not work for
anonymous behaviors… so should we go back
to “self name beginsWith:”?
No! The property interface now allows us to solve this how you think it works:
we tag obsolte classes.
isObsolete
"Return true if the receiver is obsolete."
^self propertyValueAt: #obsolete ifAbsent: false
This works, even for anonymous classes. And it is *fast*:
[Smalltalk allClasses do: #isObsolete] bench
Pharo 3: '147 per second.’
Pharo 4: '95.562 per second’
Marcus