From 2d1e2943071fc4021e271bc14c8bcaf744b74d41 Mon Sep 17 00:00:00 2001 From: Pierre Laborde Date: Fri, 4 Oct 2024 23:25:23 +0200 Subject: [PATCH] Fix #198 and #199 --- .../MolImplementationsPresenter.class.st | 9 ++++++ .../MolCompleteComponentChild2Impl.class.st | 5 ++++ src/Molecule-Tests/MolUtilsTest.class.st | 24 +++++++++++++++ src/Molecule/MolUtils.class.st | 30 +++++++++++++++---- 4 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 src/Molecule-Tests/MolCompleteComponentChild2Impl.class.st diff --git a/src/Molecule-IDE/MolImplementationsPresenter.class.st b/src/Molecule-IDE/MolImplementationsPresenter.class.st index 013920a..8dc4162 100644 --- a/src/Molecule-IDE/MolImplementationsPresenter.class.st +++ b/src/Molecule-IDE/MolImplementationsPresenter.class.st @@ -46,6 +46,15 @@ MolImplementationsPresenter >> initializePresenters [ self iconNamed: elem systemIconName ] ] +{ #category : #initialization } +MolImplementationsPresenter >> listImplementations: aComponentType [ + "necessary to use a Collection or one of its subclasses (Array in this case) to retrieve implementations of the selected Type Trait" + + (aComponentType = '' or: aComponentType = OrderedCollection new) + ifFalse: [ + ^ (MolUtils allComponentImplementationClassesOfType: aComponentType) asArray ] +] + { #category : #initialization } MolImplementationsPresenter >> title [ diff --git a/src/Molecule-Tests/MolCompleteComponentChild2Impl.class.st b/src/Molecule-Tests/MolCompleteComponentChild2Impl.class.st new file mode 100644 index 0000000..a5210a4 --- /dev/null +++ b/src/Molecule-Tests/MolCompleteComponentChild2Impl.class.st @@ -0,0 +1,5 @@ +Class { + #name : #MolCompleteComponentChild2Impl, + #superclass : #MolCompleteComponentImpl, + #category : #'Molecule-Tests-Resources - Components' +} diff --git a/src/Molecule-Tests/MolUtilsTest.class.st b/src/Molecule-Tests/MolUtilsTest.class.st index e1676a6..f607d82 100644 --- a/src/Molecule-Tests/MolUtilsTest.class.st +++ b/src/Molecule-Tests/MolUtilsTest.class.st @@ -55,6 +55,12 @@ MolUtilsTest >> testActivateComponents [ self assert: (homeServices isWaitingForActivation: MolCompleteComponentImpl) equals: false. ] +{ #category : #tests } +MolUtilsTest >> testAllComponentImplementationClassesOfType [ + + self assert: (MolUtils allComponentImplementationClassesOfType: MolCompleteComponent) size equals: 5. +] + { #category : #tests } MolUtilsTest >> testAllComponentInstancesOfType [ @@ -71,6 +77,24 @@ MolUtilsTest >> testAllComponentInstancesOfType [ self assert: (MolUtils allComponentInstancesOfType: MolCompleteComponent) size = 4. +] + +{ #category : #tests } +MolUtilsTest >> testAllComponentInstancesOfType2 [ + + self assert: (MolUtils allComponentInstancesOfType: MolCompleteComponent) isEmpty. + + MolUtils startComponent: MolCompleteComponentChild2Impl named: #compA. + MolUtils startComponent: MolCompleteComponentChild2Impl named: #compB. + MolUtils startComponent: MolCompleteComponentChild2Impl named: #compC. + + self assert: (MolUtils allComponentInstancesOfType: MolCompleteComponent) size = 3. + + MolUtils startComponent: MolCompleteComponentChild2Impl named: #compD. + + self assert: (MolUtils allComponentInstancesOfType: MolCompleteComponent) size = 4. + + ] { #category : #tests } diff --git a/src/Molecule/MolUtils.class.st b/src/Molecule/MolUtils.class.st index ed87158..c268bc3 100644 --- a/src/Molecule/MolUtils.class.st +++ b/src/Molecule/MolUtils.class.st @@ -30,21 +30,41 @@ MolUtils class >> activateComponents: aComponentClassList [ ]. ] +{ #category : #accessing } +MolUtils class >> allComponentImplementationClassesOfType: aComponentType [ + "Return a list of component Class which are implemented a component Type" + + | list | + list := Set new. + aComponentType users do:[ :class | + "class should be another trait or a component impl class" + class isTrait + ifFalse:[ + list add: class. + list addAll: (class allSubclasses) ] + ifTrue:[ list addAll: (self allComponentImplementationClassesOfType: class) ]. + ]. + + ^ list asOrderedCollection +] + { #category : #accessing } MolUtils class >> allComponentInstancesOfType: aComponentType [ - | oc homeServices | + | oc homeServices classes | (aComponentType notNil and:[aComponentType isTrait and:[aComponentType isComponentType]]) ifFalse:[^OrderedCollection new]. oc := OrderedCollection new. homeServices := MolComponentManager default homeServices. - aComponentType users do:[ :class | - (homeServices isDeployedComponent: class) ifTrue:[ - oc addAll: (homeServices deployedComponents at: class) values. + + classes := self allComponentImplementationClassesOfType: aComponentType. + classes do:[ :c | + (homeServices isDeployedComponent: c) ifTrue:[ + oc addAll: (homeServices deployedComponents at: c) values. ] ]. - ^oc + ^ oc ] { #category : #private }