From 1e5dbd8702bfba3f2eccadb80e3dd3bdb7adf5ee Mon Sep 17 00:00:00 2001 From: Pablo Tesone Date: Wed, 10 Mar 2021 17:36:50 +0100 Subject: [PATCH] Fixing the creation of traits when the loaded traits are in the same package as trait support. The extension methods are loaded after traits and classes. So, the build process cannot relly in the extension methods. --- src/Hermes/HEInstaller.class.st | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/Hermes/HEInstaller.class.st b/src/Hermes/HEInstaller.class.st index 4e278dfac26..1b4bc2a3dfc 100644 --- a/src/Hermes/HEInstaller.class.st +++ b/src/Hermes/HEInstaller.class.st @@ -84,21 +84,34 @@ HEInstaller >> buildTrait: aTraitDefinition [ (self existingTrait: aTraitDefinition) ifNotNil: [:x | ^ x ]. - traitComposition := (aTraitDefinition traitComposition asLiteralIn: environment) asTraitComposition. - traitClass := Smalltalk globals at: #Trait ifAbsent: [ self error: 'Trait support is not installed' ]. + traitComposition := self buildTraitCompositionFor: aTraitDefinition traitComposition. + newTrait := traitClass named: aTraitDefinition traitName uses: traitComposition package: aTraitDefinition category env: environment. - newTrait classTrait traitComposition: (aTraitDefinition classTraitComposition asLiteralIn: environment) asTraitComposition. + newTrait classTrait traitComposition: (self buildTraitCompositionFor: aTraitDefinition classTraitComposition). ^ newTrait ] +{ #category : #'creating traits' } +HEInstaller >> buildTraitCompositionFor: traitComposition [ + + | aLiteral | + + aLiteral := (traitComposition asLiteralIn: environment). + aLiteral isArray + ifTrue: [ ^ aLiteral + ifEmpty: [ TaEmptyComposition new ] + ifNotEmpty: [ TaSequence withAll: (aLiteral collect: [:each | each asTraitComposition]) ] ] + ifFalse: [ ^ aLiteral asTraitComposition ] +] + { #category : #accessing } HEInstaller >> classNamed: aSymbol [ aSymbol ifNil: [ ^ nil ]. @@ -220,8 +233,8 @@ HEInstaller >> processTraitsFrom: aHEClass in: newClass [ hasTraits ifFalse: [ ^ self ]. - newClass setTraitComposition: (aHEClass traitComposition asLiteralIn: environment) asTraitComposition. - newClass class setTraitComposition: (aHEClass classTraitComposition asLiteralIn: environment) asTraitComposition. + newClass setTraitComposition: (self buildTraitCompositionFor: aHEClass traitComposition). + newClass class setTraitComposition: (self buildTraitCompositionFor: aHEClass classTraitComposition). ]