<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body>
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<p>Hi Marcel,</p>
<p><br>
</p>
<p>thanks for extending this helpful tool! :-)</p>
<p><br>
</p>
<p>Hm, this artificial syntax does not really appear intuitive to me<span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;">, especially for beginners. You prove this yourself by writing an extra explanation of these symbols. ;-)
 I would not want myself to need to google what this notation could mean ... There are already too many tools in the dark outside of Squeak that lack a proper self-description.</span></p>
<p><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;"><br>
</span></p>
<p><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;">Couldn't we simply write "Collections (defs+exts)" or maybe "Collection (super) *exts"?</span></p>
<p><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;">Maybe we could also display some helpful hints in the text pane when you select a depending package only.</span></p>
<p><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;"><br>
</span></p>
<p><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;">Or ideally: Use some kind of text attribute to highlight the parts of the source that actually make up dependency. Quick and dirty prototypes:</span></p>
<p><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;"><img size="54977" contenttype="image/png" id="img511903" style="max-width: 99.9%; user-select: none;" contextid="img43176" tabindex="0" src="cid:2378228f-6909-4df2-a592-6b1f4dd946fd"><br>
</span></p>
<p><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;"><img size="64240" contenttype="image/png" id="img180948" style="max-width: 99.9%; user-select: none;" contextid="img59011" tabindex="0" src="cid:1e3eb367-a535-42c4-b93f-781b7ae5a0da"><br>
</span></p>
<p><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;"><br>
</span></p>
<p><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;">I think this would make it much easier to use this tool. Just my two cents :-)</span></p>
<div id="Signature">
<div id="divtagdefaultwrapper" dir="ltr" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<div name="divtagdefaultwrapper" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:; margin:0">
<div>
<div class="_rp_T4" id="Item.MessagePartBody">
<div class="_rp_U4 ms-font-weight-regular ms-font-color-neutralDark rpHighlightAllClass rpHighlightBodyClass" id="Item.MessageUniqueBody" style="font-family:wf_segoe-ui_normal,"Segoe UI","Segoe WP",Tahoma,Arial,sans-serif,serif,EmojiFont">
<div dir="ltr">
<div id="divtagdefaultwrapper"><font face="Calibri,Helvetica,sans-serif,EmojiFont,Apple Color Emoji,Segoe UI Emoji,NotoColorEmoji,Segoe UI Symbol,Android Emoji,EmojiSymbols">
<div id="Signature">
<div style="margin:0px"><font style="font-family:Calibri,Arial,Helvetica,sans-serif,serif,EmojiFont">
<div><font size="3" color="black"><span style="font-size:12pt"><a href="http://www.hpi.de/" target="_blank" rel="noopener noreferrer" id="LPNoLP"><font size="2"><span id="LPlnk909538"><font color="#757B80"></font></span></font></a></span></font></div>
</font></div>
</div>
</font></div>
</div>
</div>
</div>
<div class="_rp_T4" id="Item.MessagePartBody"><br>
</div>
<div class="_rp_T4" id="Item.MessagePartBody">Best,</div>
<div class="_rp_T4" id="Item.MessagePartBody">Christoph</div>
</div>
<div><font size="2" color="#808080"></font></div>
</div>
</div>
</div>
</div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>Von:</b> Squeak-dev <squeak-dev-bounces@lists.squeakfoundation.org> im Auftrag von Taeumel, Marcel<br>
<b>Gesendet:</b> Samstag, 13. Juni 2020 12:23:03<br>
<b>An:</b> squeak-dev<br>
<b>Betreff:</b> Re: [squeak-dev] The Trunk: Tools-mt.978.mcz</font>
<div> </div>
</div>
<div>
<div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: Arial;color: #000000">
<img id="b0f0cbf1-bd52-4321-b5ac-392e5a8a38cc" width="auto" src="cid:9e199013-ffb2-464c-a87c-eea4df827fe5"><!-- </img> --><br>
<div class="mb_sig"></div>
<div><br>
</div>
<div>For example, "BitBlt ()" means that (1) you need it as a base class and (2) you actually reference the class "BitBlt" in your code and (3) you make no extensions to that class.</div>
<div><br>
</div>
<div>For another example, "Kernel () *" means that (1) you need some class from Kernel package as base class and (2) you add extension methods to at least one class from the Kernel package. It does not reveal whether you reference a class from that Kernel package
 in your code.</div>
<div><br>
</div>
<div>For a last example, "Files" means that (1) you reference a class from the Files package and (2) you do not need any class as a base class from there and (3) you do not put extensions into any of those classes from Files.</div>
<div><br>
</div>
<div>Well, if there would be no hidden dependencies -- but there often are, e.g. Etoys msg sends  -- considering modularity, it is preferrable to get rid of "*" and "*exts only" first. Then go for changing "()" into "(defs only)". In any case remove the number
 of items in the second to fifth panes. :-D</div>
<div><br>
</div>
<div>Best,</div>
<div>Marcel</div>
<blockquote class="history_container" type="cite" style="border-left-style: solid;border-width: 1px;margin-top: 20px;margin-left: 0px;padding-left: 10px;min-width: 500px">
<p style="color: #AAAAAA; margin-top: 10px;">Am 13.06.2020 12:12:25 schrieb commits@source.squeak.org <commits@source.squeak.org>:</p>
<div style="font-family:Arial,Helvetica,sans-serif">Marcel Taeumel uploaded a new version of Tools to project The Trunk:<br>
http://source.squeak.org/trunk/Tools-mt.978.mcz<br>
<br>
==================== Summary ====================<br>
<br>
Name: Tools-mt.978<br>
Author: mt<br>
Time: 13 June 2020, 12:12:13.228814 pm<br>
UUID: 2b303276-0f03-1643-80da-7a436f6d2f89<br>
Ancestors: Tools-mt.977<br>
<br>
In the deps browser, reveal whether there is any class-definition or extension dependency at all as early as possible.<br>
<br>
Feel free to adjust the labels. For now, they are:<br>
<br>
2nd / 3rd pane<br>
... ()<br>
... *<br>
... () *<br>
... *exts only<br>
... (defs only)<br>
4th pane:<br>
... (class definition)<br>
*extensions<br>
<br>
=============== Diff against Tools-mt.977 ===============<br>
<br>
Item was changed:<br>
----- Method: DependencyBrowser>>classDepsList (in category 'class deps') -----<br>
classDepsList<br>
"Class dependencies for the currently selected package"<br>
<br>
+ | checkDef checkExt |<br>
+ checkDef := [:mref | mref selector = #Definition].<br>
+ checkExt := [:mref | mref category notNil and: [mref category first = $*]].<br>
+ <br>
^ classDepsList ifNil: [ <br>
classDepsList := self classDeps.<br>
classDepsList := classDepsList collect: [:className |<br>
+ String streamContents: [:label |<br>
+ label nextPutAll: className.<br>
+ (self depsForClassNamed: className allSatisfy: checkDef)<br>
+ ifTrue: [label nextPutAll: ' (defs only)']<br>
+ ifFalse: [(self depsForClassNamed: className allSatisfy: checkExt)<br>
+ ifTrue: [label nextPutAll: ' *exts only']<br>
+ ifFalse: [<br>
+ (self depsForClassNamed: className anySatisfy: checkDef)<br>
+ ifTrue: [label nextPutAll: ' ()'].<br>
+ (self depsForClassNamed: className anySatisfy: checkExt)<br>
+ ifTrue: [label nextPutAll: ' *']]]]]]!<br>
- (self<br>
- depsForClassNamed: className<br>
- allSatisfy: [:mref | mref selector = #Definition])<br>
- ifTrue: [className, ' (defs only)']<br>
- ifFalse: [(self<br>
- depsForClassNamed: className<br>
- allSatisfy: [:mref | mref category notNil and: [mref category first = $*]])<br>
- ifTrue: [className, ' *ext only*']<br>
- ifFalse: [className]]].<br>
- classDepsList]!<br>
<br>
Item was added:<br>
+ ----- Method: DependencyBrowser>>depsForClassNamed:anySatisfy: (in category 'enumerating') -----<br>
+ depsForClassNamed: className anySatisfy: workBlock<br>
+ <br>
+ self<br>
+ depsForClassNamed: className<br>
+ do: [:mref | (workBlock value: mref) ifTrue: [^ true]].<br>
+ ^ false!<br>
<br>
Item was added:<br>
+ ----- Method: DependencyBrowser>>depsForPackageNamed:anySatisfy: (in category 'enumerating') -----<br>
+ depsForPackageNamed: packageName anySatisfy: workBlock<br>
+ <br>
+ self<br>
+ depsForPackageNamed: packageName<br>
+ do: [:mref | (workBlock value: mref) ifTrue: [^ true]].<br>
+ ^ false!<br>
<br>
Item was changed:<br>
----- Method: DependencyBrowser>>packageDepsList (in category 'package deps') -----<br>
packageDepsList<br>
"Package dependencies for the currently selected package"<br>
<br>
+ | checkDef checkExt |<br>
+ checkDef := [:mref | mref selector = #Definition].<br>
+ checkExt := [:mref | mref category notNil and: [mref category first = $*]].<br>
+ <br>
^ packageDepsList ifNil: [<br>
packageDepsList := self packageDeps.<br>
packageDepsList := packageDepsList collect: [:packageName |<br>
+ String streamContents: [:label |<br>
+ label nextPutAll: packageName.<br>
+ (self depsForPackageNamed: packageName allSatisfy: checkDef)<br>
+ ifTrue: [label nextPutAll: ' (defs only)']<br>
+ ifFalse: [(self depsForPackageNamed: packageName allSatisfy: checkExt)<br>
+ ifTrue: [label nextPutAll: ' *exts only']<br>
+ ifFalse: [<br>
+ (self depsForPackageNamed: packageName anySatisfy: checkDef)<br>
+ ifTrue: [label nextPutAll: ' ()'].<br>
+ (self depsForPackageNamed: packageName anySatisfy: checkExt)<br>
+ ifTrue: [label nextPutAll: ' *']]]]]]!<br>
- (self<br>
- depsForPackageNamed: packageName<br>
- allSatisfy: [:mref | mref selector = #Definition])<br>
- ifTrue: [packageName, ' (defs only)']<br>
- ifFalse: [(self<br>
- depsForPackageNamed: packageName<br>
- allSatisfy: [:mref | mref category notNil and: [mref category first = $*]])<br>
- ifTrue: [packageName, ' *ext only*']<br>
- ifFalse: [packageName]]].<br>
- packageDepsList]!<br>
<br>
<br>
</div>
</blockquote>
</div>
</div>
</body>
</html>