On 10 Sep 2015, at 19:44, Ben Coman <btc@openInWorld.com> wrote:On Fri, Sep 11, 2015 at 12:43 AM, Max Leske <maxleske@gmail.com> wrote:On 10 Sep 2015, at 17:22, Ben Coman <btc@openInWorld.com> wrote:
The bootstrap-dependency graph and report [1] mark dependency
System-Announcements --> PragmaCollector for pruning. This is due to...
SystemAnnouncer>>restoreAllNotifications
| collector |
self reset.
collector := PragmaCollector filter: [ :pragma |
pragma keyword = #systemEventRegistration ].
collector reset.
collector do: [ :pragma |
pragma methodClass theNonMetaClass perform: pragma selector ]
Browsing around I came to understand that PragmaCollector is useful as
a pragma cache, but here the collector is thrown away, so that
facility is not needed. A key part is "collector reset" which does...
self class allSystemPragmas
do: [:pragma | self addPragma: pragma]
where the #addPragma: evaluates the initialize'd #filter: block. Now
it seems that #allSystemPragmas might fit nicely on Pragma rather than
PragmaCollector
such that the following should be equivalent...
SystemAnnouncer>>restoreAllNotifications
| systemPragmas |
self reset.
systemPragmas := Pragma allSystemPragmas collect: [ :pragma |
pragma keyword = #systemEventRegistration ].
systemPragmas do: [ :pragma |
pragma methodClass theNonMetaClass perform: pragma selector
Cool. I like that better.However #allSystemPragmas depends on SystemNavigation, so is it be
okay for Pragma to depend on SystemNavigation?
Spontaneously I���d say that SystemNavigation should depend on Pragma or PragmaCollector for looking up pragmas, not the other way around.
So you mean something like...
SystemAnnouncer>>restoreAllNotifications
self reset.
SystemNavigation allPragmasNamed: #systemEventRegistration do:
[ :pragma |
pragma methodClass theNonMetaClass perform: pragma selector ].
where...
SystemNavigation>>allPragmasNamed: symbol do: aBlock
| systemPragmas |
systemPragmas :=
self allSystemPragmas collect: [ :pragma | pragma keyword
= symbol ].
systemPragmas do: [ :pragma |
pragma methodClass theNonMetaClass perform: pragma selector
SystemNavigation>>allSystemPragmas
^ (Array
streamContents: [:stream |
self allBehaviorsDo: [:behavior |
Pragma
withPragmasIn: behavior
do: [:pragma | stream nextPut: pragma]]])
cheers -benActually, class side of Pragma has several #named:in: like methods, so
something like the following would be neat...
SystemAnnouncer>>restoreAllNotifications
self reset.
Pragma allNamed: #systemEventRegistration do: [ :pragma |
pragma methodClass theNonMetaClass perform: pragma selector ].