[ANN] Documentation for Omnibrowser

Damien Cassou damien.cassou at gmail.com
Sat May 5 18:07:09 UTC 2007


2007/5/5, Daniel Vainsencher <danielv at tx.technion.ac.il>:
> Damien Cassou wrote:
> > If you have time and solutions, you can commit to OmniBrowser,
> > OmniBrowserFixes and DynamicProtocols. They are all open to
> > modifications.
>
> If you help me get into it, I'll have a look and see if I can help.
> Overrides are evil, and I'd like to help kill them.


Please ask any specific question you might have.

OmniBrowser repository: http://source.wiresong.ca/ob
OmniBrowser fixes: http://www.squeaksource.com/OmniBrowserFixes/


> > 2007/5/4, Daniel Vainsencher <danielv at tx.technion.ac.il>:
> >> Damien Cassou wrote:
> > Sometimes there is no other solution than doing an override.
> I doubt that - the world of possible solutions is so large. Do you want
> to talk about a particular example?Sorry, I can't, so I have only opinions.


You are right. There is always a solution. Sometimes, it's not that
easy to implement however. For example:

OBCmdFindClass>>findClassIn: anEnvironment pattern: pattern
   ...
   potentialClassNames := anEnvironment classNames asArray.
   ...

I want the traits too in this variable. Do you have a better solution
than my override:

OBCmdFindClass>>findClassIn: anEnvironment pattern: pattern
   ...
   potentialClassNames := (anEnvironment classNames, anEnvironment
traitNames) asArray.
   ...

If you have a better solution, please commit to the above
repositories. I would really like to get rid of those overrides.


> >> At least for fixes, move them into their intended permanent home...
> >
> > This is not possible because the fixes are trait-specific and OB must
> > be backward compatible.
>
> Why is it better to maintain the fixes in parallel to the OB mainline as
> overrides, rather than as a branch of the OB?

I don't know. Why not :-) Is it possible to maintain a branch in a
different repository? I think this would solve our overriding
problems. Can you help me in this direction?

> > I refactored DynamicProtocols so that I don't have an override for it
> > anymore. The code is really ugly however.
>
> I don't feel I really understand this example. What I see below looks
> like an override. Opening a squeak-dev 118 image, OBSB does not seem to
> have a method #addTo:*.

OBSB does not have this method currently. DynamicProtocols adds it to
install itself in the browser. So, it's not an override anymore.
However, I have to manually get the nodes I want from the root. I
didn't have this problem before because I added the line installing
the dynamic protocols directly in OBCodeBrowser>>addTo*

> > OBSystemBrowser>>addTo: root class: classSel comment: commentSel
> > metaclass: metaclassSel
> >     "Adds the dynamic protocols to the metagraph"
> >     |class metaclass method|
> >     super addTo: root class: classSel comment: commentSel metaclass:
> > metaclassSel.
> >
> >     "Get back the meta nodes from the root. Really ugly"
> >     class := root children detect: [:node | node name =  'Class'].
> >     metaclass := root children detect: [:node | node name =
> > 'Metaclass'].
> >     method := class children anyOne children first.
> >
> >     DynamicProtocols
> >         installDPOnClass: class
> >         metaClass: metaclass
> >         method: method.
> >     ^ root
> >
> > I have exactly the same code in OBHierarchyBrowser. It can be enhanced
> > a bit but I think a bigger refactoring is needed in methods creating
> > metagraphs.
> >
> >
>
> Nor does OBHB have code that looks like that in this image. Give me a
> specific image, package, class and overriding method, and preferably an
> explanation why its needed, and I'll see if there's anything I'd do
> different. At the minimum, we'll all learn something about a difficult
> packaging subject...

Is it clearer now ? The package DynamicProtocols has to modify the
meta graph. I can do it when the meta graph is constructed in
OBCodeBrowser>>addTo* but this would be an override. My current
solution is to reimplement #addTo: in the subclasses I want:
OBSystemBrowser and OBHierarchyBrowser.

Hope you can help.

Bye

-- 
Damien Cassou



More information about the Squeak-dev mailing list