2007/5/4, Daniel Vainsencher danielv@tx.technion.ac.il:
Damien Cassou wrote:
Even with a new image, upgrading OB is currently not a good solution. This is because at least two installed packages (DynamicProtocols and OmniBrowserFixes) overrides some methods.
Ouch
Upgrading OB would then remove those overrides. I don't know what I can do for this :-(
Not include packages that include overrides?
Sometimes there is no other solution than doing an override.
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.
For extensions, refactor them and the base package until the override is no longer needed.
I refactored DynamicProtocols so that I don't have an override for it anymore. The code is really ugly however.
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.
If you have time and solutions, you can commit to OmniBrowser, OmniBrowserFixes and DynamicProtocols. They are all open to modifications.