SlideShare a Scribd company logo
Calypso browser
What’s wrong with Nautilus?
• Works only on local “live” environment
• could not browse remote image
• could not browse not loaded code (MCSnapshotBrowser)
• Very difficult to improve
• Full of spaghetti
• No model behind Nautilus
• Everything inside single class NautilusUI
Calypso navigation model
• First class scopes
• PackageScope
• ClassScope
• MethodScope
• Select scope from environment
scope := ClySystemNavigationEnvironment currentImage
selectScope: ClyClassScope of: {Collection. Set}.
• SystemScope represents global environment space
ClySystemNavigationEnvironment currentImageScope
Calypso navigation model
• First class queries
• MessageSenders
• ClassReferences
• Evaluate query in scope
scope query: (ClyMessageSenders of: #(do:))
scope query: (ClyMessageImplementors of: #(do:))
Calypso navigation model
• First class query results
• SortedClasses
• HierarchicallySortedClasses
• Specify what kind of result should be built by query
scope query: (ClyMessageSenders of: #(do:) as: ClyHierarchicallySortedMethods)
• Retrieve all available items with simple query
scope query: ClySortedMethods
scope query: ClyHierarchicallySortedMethods
Any query returns cursor
• Cursor provides stream access to underlying query
result
• caches portion of result items
• loads new portion on demand
• only cached items compute properties
• In remote scenario only cursor and cached items
are transferred to client
Cursor provides subsequent
query API
packageCursor := ClySystemNavigationEnvironment
queryCurrentImageFor: ClySortedPackages.
classCursor := packageCursor query: ClySortedClasses from: {#Kernel asPackage}.
classCursor := classesCursor query: ClyHierarchicallySortedClasses.
classCursor := classesCursor queryContentInScopeWith: 'AST-Core' asPackage.
classCursor := classesCursor queryContentInScopeWithout: 'Kernel' asPackage.
methodCursor := classCursor query: ClySortedMethods from: {Point. Array}.
methodCursor := methodCursor queryContentInNewScope: ClyClassSideScope.
Actual query result is
collection of environment items
• Environment item wraps actual object and extends it with properties:
• position in query result
• depth in query result
• domain specific properties
• ClyAbstractClassTag
• ClyOverridenMethodTag
• Environment plugins can extend properties of particular items
• ClyInheritanceAnalyzerEnvironmentPlugin marks abstract classes with
ClyAbstractClassTag
• Properties are computed lazily for portion of requested items
• it can be slow to retrieve them
Browser navigation views
• All navigation views are based on fast table
• Special data source based on cursor
• Only visible part of table are requested from cursor
• which is covered by cursor cache
• Data source describes tree structure
• what query to use to expand each kind of item
Browser navigation views
cursor := ClySystemNavigationEnvironment
queryCurrentImageFor: ClySortedPackages.
dataSource := ClyCollapsedDataSource on: cursor.
dataSource childrenStructure: {
ClyPackageScope -> ClySortedClassGroups.
ClyClassGroupScope -> ClyHierarchicallySortedClasses}.
table := FTTableMorph new.
table
extent: 200 @ 400;
dataSource: dataSource;
openInWindow.
Browser navigation state
• Most state incapsulated inside navigation data sources:
• what kind of query it represents
• method group mode or variable mode
• in what scope result are shown
• instance side or class side
• what kind of result are used
• flat methods or hierarchical methods
Browser navigation state
• First class selection represent selected objects
• ClyDataSourceSelection represents manually selected items
• ClyDataSourceHighlighting represents highlighted items
• to highlight groups of selected methods
• ClyDesiredSelection responsible to restore selected items
when data source is changed
• automatic selection of same method when new class
selected
• Selections maintain correct visible state after any changes
Browser navigation state
• No special flags like in old browser
How extend browser
• Commands
• Table decoration
• Browser tabs
• Method groups
• Class groups
Commander
• Calypso commands are based on Commander
• Every command is first class object subclass of CmdCommand with execute method
• Multiple activators can be attached to command class to declare specific way to
access command from particular application context
• CmdContextMenuCommandActivator
• CmdShortcutCommandActivator
• CmdDragAndDropCommandActivator
• ClyToolbarCommandActivator (for elements from browser toolbar)
• ClyTableIconCommandActivator (to support method icons of Nautilus)
• More http://dionisiydk.blogspot.fr/2017/04/commander-command-pattern-library.html
Command example
RenamePackageCommand>>execute
package renameTo: newName
RenamePackageCommand class>>systemBrowserShortcutActivator
<commandActivator>
^CmdShortcutCommandActivator by: $r meta for: ClyPackageSystemBrowserContext
RenamePackageCommand class>>systemBrowserMenuActivator
<commandActivator>
^CmdContextMenuCommandActivator byRootGroupItemFor: ClyPackageSystemBrowserContext
RenamePackageCommand>>defaultMenuItemName
^'Rename'
Command example
RenamePackageCommand>>prepareFullExecutionInContext: aToolContext
super prepareFullExecutionInContext: aToolContext.
package := aToolContext lastSelectedPackage.
newName := UIManager default
request: 'New name of the package'
initialAnswer: package name
title: 'Rename a package'.
newName isEmptyOrNil | (newName = package name)
ifTrue: [ ^ CmdCommandAborted signal ]
RenamePackageCommand>>canBeExecutedInContext: aToolContext
^aToolContext isPackageSelected
Drag and drop example
MoveClassToPackageCommand>>execute
classes do: [:each | package addClass: each]
MoveClassToPackageCommand class>>systemBrowserDragAndDropActivator
<commandActivator>
^CmdDragAndDropCommandActivator
for: ClyClassSystemBrowserContext toDropIn: ClyPackageSystemBrowserContext
MoveClassToPackageCommand>>prepareExecutionInDragContext: aToolContext
super prepareExecutionInDragContext: aToolContext.
classes := aToolContext selectedClasses
MoveClassToPackageCommand>>prepareExecutionInDropContext: aToolContext
super prepareExecutionInDropContext: aToolContext.
package := aToolContext lastSelectedPackage
Table decoration
• ClyTableDecorator subclasses with class side methods
ClyAbstractClassTableDecorator class>>browserContextClass
^ClyClassSystemBrowserContext
ClyAbstractClassTableDecorator class>>wantsDecorateTableCellOf: aDataSourceItem
^aDataSourceItem isMarkedWith: ClyAbstractClassTag
ClyAbstractClassTableDecorator class>>decorateTableCell: anItemCellMorph of: aDataSourceItem
| nameMorph |
nameMorph := anItemCellMorph nameMorph.
nameMorph emphasis: TextEmphasis italic emphasisCode.
nameMorph color: nameMorph color contrastingColorAdjustment contrastingColorAdjustment
Table decoration
• Commands with ClyTableIconCommandActivator
RunTestMethodCommand class>>systemBrowserTableIconActivator
<commandActivator>
^ClyTableIconCommandActivator for: ClyMethodSystemBrowserContext
RunTestMethodCommand >>buildTableCellIconFor: anItemCellMorph
testMethod isPassedTest ifTrue: [^anItemCellMorph iconNamed: #testGreenIcon].
testMethod isErrorTest ifTrue: [^anItemCellMorph iconNamed: #testRedIcon].
testMethod isFailedTest ifTrue: [^anItemCellMorph iconNamed: #testYellowIcon].
^anItemCellMorph iconNamed: #testNotRunIcon
Browser tabs
• Calypso provides multiple tools instead of single source code view
• ClyClassCreationTool
• ClyClassCommentEditorTool
• ClyClassDefinitionEditorTool
• ClyMethodCreationTool
• ClyMethodCodeEditorTool
• Tools are managed by tabs
• Tools are built in background due to nice TabsManager package
Browser tabs
• Tools are subclasses of ClyBrowserTool with #build method and
activation context where they should be applied
ClyMethodDiffTool>>build
diffMorph := DiffMorph from: self leftMethod sourceCode to: self rightMethod sourceCode.
diffMorph
contextClass: self rightMethod sourceCode;
hResizing: #spaceFill;
vResizing: #spaceFill;
showOptions: false.
self addMorph: diffMorph fullFrame: LayoutFrame identity
ClyMethodDiffTool class>>activationContextClass
^ClyMethodSystemBrowserContext
ClyMethodDiffTool class>>shouldBeActivatedInContext: aBrowserContext
^aBrowserContext selectedMethods size > 1
Demo for more tools
Method groups
• Third panel in browser shows method groups
• TaggedMethodGroups based on method tags (protocols)
• NoTagMethodGroup for unclassified methods
• ExtendedMethodGroup for all class extensions
• InheritedMethodGroup to toggle all inherited methods visibility
• SuperclassMethodGroup to toggle concrete superclass methods visibility
• ExternalPackageGroup for concrete package extending class
• VariableMethodGroup for variables mode of browser
• more
Method groups
• Method groups are built by method group providers
• Group providers are extended by environment plugins
ClyInheritanceAnalyzerEnvironmentPlugin>>collectMethodGroupProvidersFor: classes
^{ClyAbstractMethodGroupProvider. ClyOverrideMethodGroupProvider.
ClyOverriddenMethodGroupProvider. ClyRequiredMethodGroupProvider}
collect: [ :each | each classes: classes]
ClyAbstractMethodGroupProvider>>buildGroupItemsOn: items
(classes anySatisfy: [ :each | each hasAbstractMethods ])
ifFalse: [ ^self ].
items add: (ClyAbstractMethodGroup classes: classes) asEnvironmentItem
ClyAbstractMethodGroup>>includesMethod: aMethod
^aMethod sendsSelector: #subclassResponsibility
Demo for method groups
Class groups
• First panel in browser shows packages expanded
to class groups
• TaggedClassGroup based of class tags
(RPackageTag)
• NoTagClassGroup for unclassified classes
• ExtendedClassGroup for classes extended by
current package
Class groups
• Class groups are built by class group providers
• Group providers are extended by environment
plugins
ClySystemEnvironmentPlugin>>collectClassGroupProvidersFor: aPackage
^{ClyExtendedClassGroupProvider. ClyTaggedClassGroupProvider}
collect: [ :each | each package: aPackage ]
ClyExtendedClassGroupProvider>>buildGroupItemsOn: items
package extendedClassNames ifEmpty: [ ^self ].
items add: (ClyExtendedClassGroup in: package) asEnvironmentItem
What is missing
• Navigation history
• go back and forward in browser
• should works for tabs selection too
• Some commands and refactoring
• maybe we do not everything from Nautilus
• report at https://github.com/dionisiydk/Calypso/issues
The end

More Related Content

PDF
Calypso a new modular code browser for Pharo
PDF
Integrating the NCBI BLAST+ suite into Galaxy
PDF
Writing Galaxy Tools
PDF
Few simple-type-tricks in scala
PPTX
PPT
9781305078444 ppt ch08
DOC
Object Repository
PPT
Serialization/deserialization
Calypso a new modular code browser for Pharo
Integrating the NCBI BLAST+ suite into Galaxy
Writing Galaxy Tools
Few simple-type-tricks in scala
9781305078444 ppt ch08
Object Repository
Serialization/deserialization

What's hot (15)

PDF
Core Java Programming Language (JSE) : Chapter X - I/O Fundamentals
PDF
Tool Development 05 - XML Schema, INI, JSON, YAML
PPTX
PHP Starter Application
PPTX
NiFi - First approach
PDF
Tool Development 04 - XML
DOC
Serialization in .NET
PPT
Java XML Parsing
PPT
XML SAX PARSING
PPTX
04 darwino concepts and utility classes
PDF
C# basics
PPTX
Xml writers
PPTX
06 xml processing-in-.net
PPT
Basic info on java intro
PPTX
C++ training
PPTX
DSpace 4.2 Transmission: Import/Export
Core Java Programming Language (JSE) : Chapter X - I/O Fundamentals
Tool Development 05 - XML Schema, INI, JSON, YAML
PHP Starter Application
NiFi - First approach
Tool Development 04 - XML
Serialization in .NET
Java XML Parsing
XML SAX PARSING
04 darwino concepts and utility classes
C# basics
Xml writers
06 xml processing-in-.net
Basic info on java intro
C++ training
DSpace 4.2 Transmission: Import/Export
Ad

Similar to Calypso browser (20)

PDF
Calypso underhood
PDF
td_mxc_rubyrails_shin
PDF
td_mxc_rubyrails_shin
PPTX
CodeIgniter & MVC
PPTX
Benchmarking Solr Performance at Scale
PPTX
DDD, CQRS and testing with ASP.Net MVC
PDF
Django introduction @ UGent
PPTX
VB.net&OOP.pptx
KEY
Leveraging the Chaos tool suite for module development
PPTX
Introduction to Monsoon PHP framework
PDF
Pursuing Performance in Store
PPTX
06.1 .Net memory management
PDF
Alex Dias: how to build a docker monitoring solution
PPTX
Exploring Java Heap Dumps (Oracle Code One 2018)
PPTX
Java 102 intro to object-oriented programming in java
PDF
OpenCms Days 2012 - OpenCms 8.5: Using Apache Solr to retrieve content
PPTX
Deep dive in Citrix Troubleshooting
PDF
Apache Zookeeper
PPTX
Apache zookeeper seminar_trinh_viet_dung_03_2016
PDF
Tools and Tips for Moodle Developers - #mootus16
Calypso underhood
td_mxc_rubyrails_shin
td_mxc_rubyrails_shin
CodeIgniter & MVC
Benchmarking Solr Performance at Scale
DDD, CQRS and testing with ASP.Net MVC
Django introduction @ UGent
VB.net&OOP.pptx
Leveraging the Chaos tool suite for module development
Introduction to Monsoon PHP framework
Pursuing Performance in Store
06.1 .Net memory management
Alex Dias: how to build a docker monitoring solution
Exploring Java Heap Dumps (Oracle Code One 2018)
Java 102 intro to object-oriented programming in java
OpenCms Days 2012 - OpenCms 8.5: Using Apache Solr to retrieve content
Deep dive in Citrix Troubleshooting
Apache Zookeeper
Apache zookeeper seminar_trinh_viet_dung_03_2016
Tools and Tips for Moodle Developers - #mootus16
Ad

Recently uploaded (20)

PDF
Salesforce Agentforce AI Implementation.pdf
PDF
Tally Prime Crack Download New Version 5.1 [2025] (License Key Free
PPTX
assetexplorer- product-overview - presentation
PDF
17 Powerful Integrations Your Next-Gen MLM Software Needs
PPTX
Operating system designcfffgfgggggggvggggggggg
PDF
Product Update: Alluxio AI 3.7 Now with Sub-Millisecond Latency
PDF
Digital Systems & Binary Numbers (comprehensive )
PPTX
L1 - Introduction to python Backend.pptx
PDF
iTop VPN 6.5.0 Crack + License Key 2025 (Premium Version)
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PPTX
Patient Appointment Booking in Odoo with online payment
PPTX
CHAPTER 2 - PM Management and IT Context
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
CCleaner Pro 6.38.11537 Crack Final Latest Version 2025
PDF
AutoCAD Professional Crack 2025 With License Key
PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
PDF
wealthsignaloriginal-com-DS-text-... (1).pdf
PPTX
Why Generative AI is the Future of Content, Code & Creativity?
PPTX
Computer Software and OS of computer science of grade 11.pptx
Salesforce Agentforce AI Implementation.pdf
Tally Prime Crack Download New Version 5.1 [2025] (License Key Free
assetexplorer- product-overview - presentation
17 Powerful Integrations Your Next-Gen MLM Software Needs
Operating system designcfffgfgggggggvggggggggg
Product Update: Alluxio AI 3.7 Now with Sub-Millisecond Latency
Digital Systems & Binary Numbers (comprehensive )
L1 - Introduction to python Backend.pptx
iTop VPN 6.5.0 Crack + License Key 2025 (Premium Version)
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Patient Appointment Booking in Odoo with online payment
CHAPTER 2 - PM Management and IT Context
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
Wondershare Filmora 15 Crack With Activation Key [2025
CCleaner Pro 6.38.11537 Crack Final Latest Version 2025
AutoCAD Professional Crack 2025 With License Key
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
wealthsignaloriginal-com-DS-text-... (1).pdf
Why Generative AI is the Future of Content, Code & Creativity?
Computer Software and OS of computer science of grade 11.pptx

Calypso browser

  • 2. What’s wrong with Nautilus? • Works only on local “live” environment • could not browse remote image • could not browse not loaded code (MCSnapshotBrowser) • Very difficult to improve • Full of spaghetti • No model behind Nautilus • Everything inside single class NautilusUI
  • 3. Calypso navigation model • First class scopes • PackageScope • ClassScope • MethodScope • Select scope from environment scope := ClySystemNavigationEnvironment currentImage selectScope: ClyClassScope of: {Collection. Set}. • SystemScope represents global environment space ClySystemNavigationEnvironment currentImageScope
  • 4. Calypso navigation model • First class queries • MessageSenders • ClassReferences • Evaluate query in scope scope query: (ClyMessageSenders of: #(do:)) scope query: (ClyMessageImplementors of: #(do:))
  • 5. Calypso navigation model • First class query results • SortedClasses • HierarchicallySortedClasses • Specify what kind of result should be built by query scope query: (ClyMessageSenders of: #(do:) as: ClyHierarchicallySortedMethods) • Retrieve all available items with simple query scope query: ClySortedMethods scope query: ClyHierarchicallySortedMethods
  • 6. Any query returns cursor • Cursor provides stream access to underlying query result • caches portion of result items • loads new portion on demand • only cached items compute properties • In remote scenario only cursor and cached items are transferred to client
  • 7. Cursor provides subsequent query API packageCursor := ClySystemNavigationEnvironment queryCurrentImageFor: ClySortedPackages. classCursor := packageCursor query: ClySortedClasses from: {#Kernel asPackage}. classCursor := classesCursor query: ClyHierarchicallySortedClasses. classCursor := classesCursor queryContentInScopeWith: 'AST-Core' asPackage. classCursor := classesCursor queryContentInScopeWithout: 'Kernel' asPackage. methodCursor := classCursor query: ClySortedMethods from: {Point. Array}. methodCursor := methodCursor queryContentInNewScope: ClyClassSideScope.
  • 8. Actual query result is collection of environment items • Environment item wraps actual object and extends it with properties: • position in query result • depth in query result • domain specific properties • ClyAbstractClassTag • ClyOverridenMethodTag • Environment plugins can extend properties of particular items • ClyInheritanceAnalyzerEnvironmentPlugin marks abstract classes with ClyAbstractClassTag • Properties are computed lazily for portion of requested items • it can be slow to retrieve them
  • 9. Browser navigation views • All navigation views are based on fast table • Special data source based on cursor • Only visible part of table are requested from cursor • which is covered by cursor cache • Data source describes tree structure • what query to use to expand each kind of item
  • 10. Browser navigation views cursor := ClySystemNavigationEnvironment queryCurrentImageFor: ClySortedPackages. dataSource := ClyCollapsedDataSource on: cursor. dataSource childrenStructure: { ClyPackageScope -> ClySortedClassGroups. ClyClassGroupScope -> ClyHierarchicallySortedClasses}. table := FTTableMorph new. table extent: 200 @ 400; dataSource: dataSource; openInWindow.
  • 11. Browser navigation state • Most state incapsulated inside navigation data sources: • what kind of query it represents • method group mode or variable mode • in what scope result are shown • instance side or class side • what kind of result are used • flat methods or hierarchical methods
  • 12. Browser navigation state • First class selection represent selected objects • ClyDataSourceSelection represents manually selected items • ClyDataSourceHighlighting represents highlighted items • to highlight groups of selected methods • ClyDesiredSelection responsible to restore selected items when data source is changed • automatic selection of same method when new class selected • Selections maintain correct visible state after any changes
  • 13. Browser navigation state • No special flags like in old browser
  • 14. How extend browser • Commands • Table decoration • Browser tabs • Method groups • Class groups
  • 15. Commander • Calypso commands are based on Commander • Every command is first class object subclass of CmdCommand with execute method • Multiple activators can be attached to command class to declare specific way to access command from particular application context • CmdContextMenuCommandActivator • CmdShortcutCommandActivator • CmdDragAndDropCommandActivator • ClyToolbarCommandActivator (for elements from browser toolbar) • ClyTableIconCommandActivator (to support method icons of Nautilus) • More http://dionisiydk.blogspot.fr/2017/04/commander-command-pattern-library.html
  • 16. Command example RenamePackageCommand>>execute package renameTo: newName RenamePackageCommand class>>systemBrowserShortcutActivator <commandActivator> ^CmdShortcutCommandActivator by: $r meta for: ClyPackageSystemBrowserContext RenamePackageCommand class>>systemBrowserMenuActivator <commandActivator> ^CmdContextMenuCommandActivator byRootGroupItemFor: ClyPackageSystemBrowserContext RenamePackageCommand>>defaultMenuItemName ^'Rename'
  • 17. Command example RenamePackageCommand>>prepareFullExecutionInContext: aToolContext super prepareFullExecutionInContext: aToolContext. package := aToolContext lastSelectedPackage. newName := UIManager default request: 'New name of the package' initialAnswer: package name title: 'Rename a package'. newName isEmptyOrNil | (newName = package name) ifTrue: [ ^ CmdCommandAborted signal ] RenamePackageCommand>>canBeExecutedInContext: aToolContext ^aToolContext isPackageSelected
  • 18. Drag and drop example MoveClassToPackageCommand>>execute classes do: [:each | package addClass: each] MoveClassToPackageCommand class>>systemBrowserDragAndDropActivator <commandActivator> ^CmdDragAndDropCommandActivator for: ClyClassSystemBrowserContext toDropIn: ClyPackageSystemBrowserContext MoveClassToPackageCommand>>prepareExecutionInDragContext: aToolContext super prepareExecutionInDragContext: aToolContext. classes := aToolContext selectedClasses MoveClassToPackageCommand>>prepareExecutionInDropContext: aToolContext super prepareExecutionInDropContext: aToolContext. package := aToolContext lastSelectedPackage
  • 19. Table decoration • ClyTableDecorator subclasses with class side methods ClyAbstractClassTableDecorator class>>browserContextClass ^ClyClassSystemBrowserContext ClyAbstractClassTableDecorator class>>wantsDecorateTableCellOf: aDataSourceItem ^aDataSourceItem isMarkedWith: ClyAbstractClassTag ClyAbstractClassTableDecorator class>>decorateTableCell: anItemCellMorph of: aDataSourceItem | nameMorph | nameMorph := anItemCellMorph nameMorph. nameMorph emphasis: TextEmphasis italic emphasisCode. nameMorph color: nameMorph color contrastingColorAdjustment contrastingColorAdjustment
  • 20. Table decoration • Commands with ClyTableIconCommandActivator RunTestMethodCommand class>>systemBrowserTableIconActivator <commandActivator> ^ClyTableIconCommandActivator for: ClyMethodSystemBrowserContext RunTestMethodCommand >>buildTableCellIconFor: anItemCellMorph testMethod isPassedTest ifTrue: [^anItemCellMorph iconNamed: #testGreenIcon]. testMethod isErrorTest ifTrue: [^anItemCellMorph iconNamed: #testRedIcon]. testMethod isFailedTest ifTrue: [^anItemCellMorph iconNamed: #testYellowIcon]. ^anItemCellMorph iconNamed: #testNotRunIcon
  • 21. Browser tabs • Calypso provides multiple tools instead of single source code view • ClyClassCreationTool • ClyClassCommentEditorTool • ClyClassDefinitionEditorTool • ClyMethodCreationTool • ClyMethodCodeEditorTool • Tools are managed by tabs • Tools are built in background due to nice TabsManager package
  • 22. Browser tabs • Tools are subclasses of ClyBrowserTool with #build method and activation context where they should be applied ClyMethodDiffTool>>build diffMorph := DiffMorph from: self leftMethod sourceCode to: self rightMethod sourceCode. diffMorph contextClass: self rightMethod sourceCode; hResizing: #spaceFill; vResizing: #spaceFill; showOptions: false. self addMorph: diffMorph fullFrame: LayoutFrame identity ClyMethodDiffTool class>>activationContextClass ^ClyMethodSystemBrowserContext ClyMethodDiffTool class>>shouldBeActivatedInContext: aBrowserContext ^aBrowserContext selectedMethods size > 1
  • 23. Demo for more tools
  • 24. Method groups • Third panel in browser shows method groups • TaggedMethodGroups based on method tags (protocols) • NoTagMethodGroup for unclassified methods • ExtendedMethodGroup for all class extensions • InheritedMethodGroup to toggle all inherited methods visibility • SuperclassMethodGroup to toggle concrete superclass methods visibility • ExternalPackageGroup for concrete package extending class • VariableMethodGroup for variables mode of browser • more
  • 25. Method groups • Method groups are built by method group providers • Group providers are extended by environment plugins ClyInheritanceAnalyzerEnvironmentPlugin>>collectMethodGroupProvidersFor: classes ^{ClyAbstractMethodGroupProvider. ClyOverrideMethodGroupProvider. ClyOverriddenMethodGroupProvider. ClyRequiredMethodGroupProvider} collect: [ :each | each classes: classes] ClyAbstractMethodGroupProvider>>buildGroupItemsOn: items (classes anySatisfy: [ :each | each hasAbstractMethods ]) ifFalse: [ ^self ]. items add: (ClyAbstractMethodGroup classes: classes) asEnvironmentItem ClyAbstractMethodGroup>>includesMethod: aMethod ^aMethod sendsSelector: #subclassResponsibility
  • 26. Demo for method groups
  • 27. Class groups • First panel in browser shows packages expanded to class groups • TaggedClassGroup based of class tags (RPackageTag) • NoTagClassGroup for unclassified classes • ExtendedClassGroup for classes extended by current package
  • 28. Class groups • Class groups are built by class group providers • Group providers are extended by environment plugins ClySystemEnvironmentPlugin>>collectClassGroupProvidersFor: aPackage ^{ClyExtendedClassGroupProvider. ClyTaggedClassGroupProvider} collect: [ :each | each package: aPackage ] ClyExtendedClassGroupProvider>>buildGroupItemsOn: items package extendedClassNames ifEmpty: [ ^self ]. items add: (ClyExtendedClassGroup in: package) asEnvironmentItem
  • 29. What is missing • Navigation history • go back and forward in browser • should works for tabs selection too • Some commands and refactoring • maybe we do not everything from Nautilus • report at https://github.com/dionisiydk/Calypso/issues