From 23577795ee3288317be212e14796f3df68019831 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 13 Apr 2026 22:23:00 +0200 Subject: [PATCH 001/121] Simplify comment management --- src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st | 2 +- .../FmxMBImportingContext.class.st | 2 +- .../FmxMBRingEnvironment.class.st | 6 ------ src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st | 2 +- src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st | 2 +- 5 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index cb4d2b0ab..b953d6ad7 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -77,7 +77,7 @@ FmxMBClass >> generate [ overwrite: true. aClass tagWith: self tag. - self builder environment setComment: self commentWithRelations for: aClass. + aClass comment content: self commentWithRelations. self realClass: aClass. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index a2187b153..24432c6d4 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -65,7 +65,7 @@ FmxMBImportingContext >> generate [ aClass tagWith: self tag. - self builder environment setComment: self comment for: aClass. + aClass comment content: self comment. self realClass: aClass. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index b577a7967..b5d08ed38 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -205,12 +205,6 @@ FmxMBRingEnvironment >> ringEnvironment [ ^ ringEnvironment ] -{ #category : 'initialization' } -FmxMBRingEnvironment >> setComment: aString for: aClass [ - - aClass comment content: aString -] - { #category : 'initialization' } FmxMBRingEnvironment >> slotNamed: slotName [ ^ (RGUnknownSlot named: slotName asSymbol) expression: #FMProperty diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index fe03997b5..987464699 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -66,7 +66,7 @@ FmxMBTrait >> generate [ overwrite: true. aTrait tagWith: self tag. - self builder environment setComment: self commentWithRelations for: aTrait. + aTrait comment content: self commentWithRelations. self realClass: aTrait. diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index 6a91cfaed..b9a8c58b0 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -40,7 +40,7 @@ FmxMBVisitorTrait >> generate [ in: self packageName overwrite: true. - self builder environment setComment: self comment for: aTrait. + aTrait comment content: self comment. aTrait tagWith: self tag. self realClass: aTrait. From c3334dc6517ef4dbf54cb82dba362a830ccace3d Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 13 Apr 2026 22:38:22 +0200 Subject: [PATCH 002/121] Remove useless parameter --- .../FmxMBClass.class.st | 5 ++--- .../FmxMBImportingContext.class.st | 5 ++--- .../FmxMBRingEnvironment.class.st | 17 +++++------------ .../FmxMBTrait.class.st | 3 +-- .../FmxMBVisitorTrait.class.st | 3 +-- 5 files changed, 11 insertions(+), 22 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index b953d6ad7..e2b151ec4 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -70,11 +70,10 @@ FmxMBClass >> generate [ aClass := self builder environment createClassNamed: aClassName asSymbol - superclass: aSuperclass + superclass: aSuperclass name traitNames: self allTraitNames slots: self slotDefinitions - in: self packageName - overwrite: true. + in: self packageName. aClass tagWith: self tag. aClass comment content: self commentWithRelations. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index 24432c6d4..89afe2d6c 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -57,11 +57,10 @@ FmxMBImportingContext >> generate [ aClass := self builder environment createClassNamed: self fullName asSymbol - superclass: superclass + superclass: superclass name traitNames: self allTraitNames slots: self slotDefinitions - in: self packageName - overwrite: true. + in: self packageName. aClass tagWith: self tag. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index b5d08ed38..c4d5b0bd8 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -86,18 +86,14 @@ FmxMBRingEnvironment >> compile: aSource in: aClass classified: aProtocol packag ] { #category : 'initialization' } -FmxMBRingEnvironment >> createClassNamed: aClassName superclass: aSuperclass traitNames: traitNames slots: slots in: packageName overwrite: shouldOverwrite [ +FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitNames: traitNames slots: slots in: packageName [ | aClass existingClass composition | existingClass := self ringEnvironment ask behaviorNamed: - aClassName asSymbol. + className asSymbol. - (existingClass isNotNil and: [ shouldOverwrite not ]) ifTrue: [ - ^ existingClass ]. - - aClass := self ringEnvironment ensureClassNamed: aClassName. - aClass superclass: - (self ringEnvironment ensureClassNamed: aSuperclass name). + aClass := self ringEnvironment ensureClassNamed: className. + aClass superclass: (self ringEnvironment ensureClassNamed: superclassName). composition := RGTraitComposition parent: aClass. aClass traitComposition: composition. @@ -126,18 +122,15 @@ FmxMBRingEnvironment >> createClassNamed: aClassName superclass: aSuperclass tra aClass layout addSlot: slot. slot propertyNamed: #isGenerated put: true ]. - ^ aClass ] { #category : 'initialization' } -FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slots in: packageName overwrite: shouldOverwrite [ +FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slots in: packageName [ | aPackage aTrait existingClass composition | existingClass := self ringEnvironment ask behaviorNamed: traitName asSymbol. - (existingClass isNotNil and: [ shouldOverwrite not ]) ifTrue: [ - ^ existingClass ]. aPackage := self ringEnvironment ensurePackageNamed: packageName. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index 987464699..427e481aa 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -62,8 +62,7 @@ FmxMBTrait >> generate [ createTraitNamed: traitName asSymbol uses: self allTraitNames slots: self slotDefinitions - in: self packageName - overwrite: true. + in: self packageName. aTrait tagWith: self tag. aTrait comment content: self commentWithRelations. diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index b9a8c58b0..f74ca272d 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -37,8 +37,7 @@ FmxMBVisitorTrait >> generate [ createTraitNamed: self fullName asSymbol uses: self allTraitNames slots: self slotDefinitions - in: self packageName - overwrite: true. + in: self packageName. aTrait comment content: self comment. From 95012be2357e2b48fd08560d1c0f1db581844604 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 13 Apr 2026 22:54:01 +0200 Subject: [PATCH 003/121] Remove an extra parameter and reduce the usage of #realClass (because it returns ring elements, not real classes...) --- .../FmxMBBehavior.class.st | 20 ++++++++----------- .../FmxMBClass.class.st | 16 +++++++-------- .../FmxMBImportingContext.class.st | 6 +++--- .../FmxMBRingEnvironment.class.st | 3 +-- .../FmxMBTrait.class.st | 2 +- .../FmxMBVisitorTrait.class.st | 2 +- 6 files changed, 21 insertions(+), 28 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index bcb53203d..b492ac75f 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -285,19 +285,15 @@ FmxMBBehavior >> generateAddToCollectionFor: aClass [ ] { #category : 'generating' } -FmxMBBehavior >> generateAnnotationIn: aRealClass superclass: aSuperclass [ +FmxMBBehavior >> generateAnnotationIn: aRealClass [ | aSuperclassName | - aSuperclassName := aSuperclass - ifNotNil: [ aSuperclass name ] - ifNil: [ - self classGeneralization - = self defaultSuperclass - ifTrue: [ self defaultSuperclassName ] - ifFalse: [ - self classGeneralization - ifNil: [ self defaultSuperclassName ] - ifNotNil: [ :cg | cg realClass name ] ] ]. + aSuperclassName := self classGeneralization = self defaultSuperclass + ifTrue: [ self defaultSuperclassName ] + ifFalse: [ + self classGeneralization + ifNil: [ self defaultSuperclassName ] + ifNotNil: [ :cg | cg realClass name ] ]. aRealClass classSide compile: ('annotation @@ -305,7 +301,7 @@ FmxMBBehavior >> generateAnnotationIn: aRealClass superclass: aSuperclass [ {4} - ^ self' format: { + ^ self' format: { self name. aSuperclassName. self builder safeAnnotationPackageName. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index e2b151ec4..cf5479fbe 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -59,18 +59,16 @@ FmxMBClass >> classGeneralization: anObject [ { #category : 'generating' } FmxMBClass >> generate [ - | aClass aSuperclass aClassName | + | aClass superclassName | self willGenerate ifFalse: [ ^ self ]. - aClassName := self fullName. - - aSuperclass := self classGeneralization - ifNil: [ self defaultSuperclass ] - ifNotNil: [ self classGeneralization realClass ]. + superclassName := self classGeneralization + ifNil: [ self defaultSuperclassName ] + ifNotNil: [ :class | class realClass name ]. aClass := self builder environment - createClassNamed: aClassName asSymbol - superclass: aSuperclass name + createClassNamed: self fullName asSymbol + superclass: superclassName traitNames: self allTraitNames slots: self slotDefinitions in: self packageName. @@ -81,7 +79,7 @@ FmxMBClass >> generate [ self realClass: aClass. self generateAccessors. - self generateAnnotationIn: aClass superclass: nil. + self generateAnnotationIn: aClass. self generateIsAbstractMethodIfNecessaryIn: aClass. self generateTestingMethodsIn: aClass. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index 89afe2d6c..194f35a63 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -52,12 +52,12 @@ FmxMBImportingContext >> generate [ self willGenerate ifFalse: [ ^ self ]. superclass := self classGeneralization - ifNil: [ self defaultSuperclass ] - ifNotNil: [ self classGeneralization ]. + ifNil: [ self defaultSuperclassName ] + ifNotNil: #name. aClass := self builder environment createClassNamed: self fullName asSymbol - superclass: superclass name + superclass: superclass traitNames: self allTraitNames slots: self slotDefinitions in: self packageName. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index c4d5b0bd8..2b4ed0d6b 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -89,8 +89,7 @@ FmxMBRingEnvironment >> compile: aSource in: aClass classified: aProtocol packag FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitNames: traitNames slots: slots in: packageName [ | aClass existingClass composition | - existingClass := self ringEnvironment ask behaviorNamed: - className asSymbol. + existingClass := self ringEnvironment ask behaviorNamed: className. aClass := self ringEnvironment ensureClassNamed: className. aClass superclass: (self ringEnvironment ensureClassNamed: superclassName). diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index 427e481aa..4c831a991 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -70,7 +70,7 @@ FmxMBTrait >> generate [ self realClass: aTrait. self generateAccessors. - self generateAnnotationIn: aTrait superclass: nil. + self generateAnnotationIn: aTrait. self generateTestingMethodsIn: aTrait. self generateMethodsToRemoveFromTraitCompositionFor: aTrait. diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index f74ca272d..52dfada31 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -44,7 +44,7 @@ FmxMBVisitorTrait >> generate [ aTrait tagWith: self tag. self realClass: aTrait. - self generateAnnotationIn: aTrait superclass: nil. + self generateAnnotationIn: aTrait. self generateCommonMethodsIfNecessary. self generateVisitAndAcceptMethods. ] From 441363a4f4ce56141143195fdc9c4267ae41d464 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 13 Apr 2026 23:20:42 +0200 Subject: [PATCH 004/121] Remove dependency from FmyMethodAddiction/Update to Ring This makes some code a little more complex, but this code should vanish when we finish to cut the dependency to ring --- .../FmxMBRealRingEnvironment.class.st | 13 +++- .../FmxMethodAdditions.class.st | 72 ++++++++----------- .../FmxMethodUpdates.class.st | 27 +------ 3 files changed, 43 insertions(+), 69 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st index e96e95728..f8ee09490 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st @@ -28,7 +28,6 @@ FmxMBRealRingEnvironment >> changesToApply [ { #category : 'accessing' } FmxMBRealRingEnvironment >> collectChangesToApply [ | resolvedClasses resolvedPackages | - changesToApply := OrderedCollection new. resolvedPackages := ringEnvironment ask packages select: [ :each | each isRingResolved ]. resolvedClasses := ringEnvironment ask behaviors select: [ :each | each isRingResolved and: [ each superclass isRingResolved ] ]. @@ -46,6 +45,13 @@ FmxMBRealRingEnvironment >> compile: aSource in: aClass classified: aProtocol pa aClass compile: aSource classified: category ] +{ #category : 'initialization' } +FmxMBRealRingEnvironment >> initialize [ + + super initialize. + changesToApply := OrderedCollection new +] + { #category : 'installing' } FmxMBRealRingEnvironment >> recordAdoptionOfClassDefinitionFrom: currentClass to: anRGClassModel [ @@ -184,13 +190,14 @@ FmxMBRealRingEnvironment >> recordMethodsAdoptionsOf: realClass to: anRGClass re ((anRGClass localSelectors difference: generatedMethodNamesOfRealClass) select: [ :selectorOfMethodToAdd | realClass ifNil: [ true ] ifNotNil: [ (realClass localSelectors includes: selectorOfMethodToAdd) not ] ] thenCollect: [ :selectorOfMethodToAdd | anRGClass methodNamed: selectorOfMethodToAdd ]) - ifNotEmpty: [ :methods | changesToApply add: (FmxMethodAdditions className: aClassName isClassSide: anRGClass isClassSide rgMethods: methods) ]. + ifNotEmpty: [ :methods | + changesToApply add: (FmxMethodAdditions className: aClassName isClassSide: anRGClass isClassSide methodsAndProtocols: ((methods groupedBy: #protocol) collect: [ :ms | ms collect: #sourceCode ])) ]. "Finally, update methods needing updates" ((generatedMethodNamesOfRealClass intersection: anRGClass localSelectors) collect: [ :selectorOfMethodToUpdate | anRGClass methodNamed: selectorOfMethodToUpdate ] thenSelect: [ :method | realClass needToAdaptToMethod: method ]) - ifNotEmpty: [ :methods | changesToApply add: (FmxMethodUpdates className: aClassName isClassSide: anRGClass isClassSide rgMethods: methods) ] + ifNotEmpty: [ :methods | changesToApply add: (FmxMethodUpdates className: aClassName isClassSide: anRGClass isClassSide methodsAndProtocols: ((methods groupedBy: #protocol) collect: [ :ms | ms collect: #sourceCode ])) ] ] { #category : 'installing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMethodAdditions.class.st b/src/Famix-MetamodelBuilder-Core/FmxMethodAdditions.class.st index 2a350ae5e..fc80204c5 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMethodAdditions.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMethodAdditions.class.st @@ -1,36 +1,24 @@ " -Description --------------------- +## Description I represent a change that would create add methods to a class during a Famix generation. -Examples --------------------- +## Examples - method := RGMethod new - sourceCode: 'initialize - - super initialize. - self toto: true; - protocol: #initialization; - name: #initialize; - yourself. - - FmxMethodAdditions className: FmxMethodAddition isClassSide: false rgMethods: {method} - +```st + FmxMethodAdditions className: FmxMethodAddition isClassSide: false methodsAndProtocols: (Dictionary with: 'accessing' -> { 'y ^y' . 'x ^x'}} +``` -Internal Representation and Key Implementation Points. --------------------- +## Internal Representation and Key Implementation Points Instance Variables - rgMethods: A collection of ring methods to add to a class. - + methodsAndProtocols: A dictionary matching a protocol with source code to generate as methods in the protocol " Class { #name : 'FmxMethodAdditions', #superclass : 'FmxLazyClassChange', #instVars : [ - 'rgMethods' + 'methodsAndProtocols' ], #category : 'Famix-MetamodelBuilder-Core-Changes', #package : 'Famix-MetamodelBuilder-Core', @@ -38,27 +26,38 @@ Class { } { #category : 'instance creation' } -FmxMethodAdditions class >> className: aSymbol isClassSide: aBoolean rgMethods: aCollection [ +FmxMethodAdditions class >> className: aSymbol isClassSide: aBoolean methodsAndProtocols: aCollection [ ^ self new className: aSymbol; isClassSide: aBoolean; - rgMethods: aCollection; + methodsAndProtocols: aCollection; yourself ] +{ #category : 'adding' } +FmxMethodAdditions >> addCode: sourceCode protocol: protocol [ + + (methodsAndProtocols at: protocol ifAbsentPut: [ OrderedCollection new ]) add: sourceCode +] + { #category : 'accessing' } FmxMethodAdditions >> apply [ + | class | class := self realClass. - self rgMethods do: [ :method | self compile: method into: class ] + methodsAndProtocols keysAndValuesDo: [ :protocol :codes | codes do: [ :code | class compile: code classified: protocol ] ] ] -{ #category : 'compiling' } -FmxMethodAdditions >> compile: aRGMethod into: realClass [ +{ #category : 'initialization' } +FmxMethodAdditions >> initialize [ + super initialize. + methodsAndProtocols := Dictionary new +] - ^ realClass - compile: aRGMethod sourceCode - classified: aRGMethod protocol +{ #category : 'accessing' } +FmxMethodAdditions >> methodsAndProtocols: aCollection [ + + methodsAndProtocols := aCollection ] { #category : 'printing' } @@ -66,17 +65,8 @@ FmxMethodAdditions >> printOn: aStream [ super printOn: aStream. - aStream nextPutAll: '['. - rgMethods do: [ :method | aStream print: method ] separatedBy: [ aStream nextPutAll: ', ' ]. - aStream nextPutAll: ']' -] - -{ #category : 'accessing' } -FmxMethodAdditions >> rgMethods [ - ^ rgMethods -] - -{ #category : 'accessing' } -FmxMethodAdditions >> rgMethods: anObject [ - rgMethods := anObject + aStream + nextPutAll: '['; + print: methodsAndProtocols; + nextPutAll: ']' ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMethodUpdates.class.st b/src/Famix-MetamodelBuilder-Core/FmxMethodUpdates.class.st index 097ae49d4..9161976bc 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMethodUpdates.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMethodUpdates.class.st @@ -1,30 +1,7 @@ " -Description --------------------- - -I represent a change that would update methods of a class during a Famix generation. - -Examples --------------------- - - method := RGMethod new - sourceCode: 'initialize - - super initialize. - self toto: true; - protocol: #initialization; - name: #initialize; - yourself. - - FmxMethodUpdates className: FmxMethodAddition isClassSide: false rgMethods: {method} - - -Internal Representation and Key Implementation Points. --------------------- - - Instance Variables - rgMethods: A collection of ring methods to update in a class. +## Description +I represent a change that would update methods of a class during a Famix generation " Class { #name : 'FmxMethodUpdates', From 993158f2cbffbe91437d1a22a16b8cc96935ae1e Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 14 Apr 2026 01:54:17 +0200 Subject: [PATCH 005/121] Simplify method addition and updates --- .../FmxMBRealRingEnvironment.class.st | 25 +++++- .../FmxMethodAddition.class.st | 76 +++++++++++++++++++ .../FmxMethodAdditions.class.st | 72 ------------------ .../FmxMethodUpdate.class.st | 12 +++ .../FmxMethodUpdates.class.st | 12 --- 5 files changed, 110 insertions(+), 87 deletions(-) create mode 100644 src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st delete mode 100644 src/Famix-MetamodelBuilder-Core/FmxMethodAdditions.class.st create mode 100644 src/Famix-MetamodelBuilder-Core/FmxMethodUpdate.class.st delete mode 100644 src/Famix-MetamodelBuilder-Core/FmxMethodUpdates.class.st diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st index f8ee09490..c9a8105e0 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st @@ -9,6 +9,16 @@ Class { #tag : 'Implementation' } +{ #category : 'installing' } +FmxMBRealRingEnvironment >> addMethod: sourceCode in: aClassName classSide: aBoolean protocol: protocol [ + + changesToApply add: (FmxMethodAddition + className: aClassName + isClassSide: aBoolean + sourceCode: sourceCode + protocol: protocol) +] + { #category : 'accessing' } FmxMBRealRingEnvironment >> apply [ @@ -190,14 +200,13 @@ FmxMBRealRingEnvironment >> recordMethodsAdoptionsOf: realClass to: anRGClass re ((anRGClass localSelectors difference: generatedMethodNamesOfRealClass) select: [ :selectorOfMethodToAdd | realClass ifNil: [ true ] ifNotNil: [ (realClass localSelectors includes: selectorOfMethodToAdd) not ] ] thenCollect: [ :selectorOfMethodToAdd | anRGClass methodNamed: selectorOfMethodToAdd ]) - ifNotEmpty: [ :methods | - changesToApply add: (FmxMethodAdditions className: aClassName isClassSide: anRGClass isClassSide methodsAndProtocols: ((methods groupedBy: #protocol) collect: [ :ms | ms collect: #sourceCode ])) ]. + ifNotEmpty: [ :methods | methods do: [ :method | self addMethod: method sourceCode in: aClassName classSide: anRGClass isClassSide protocol: method protocol ] ]. "Finally, update methods needing updates" ((generatedMethodNamesOfRealClass intersection: anRGClass localSelectors) collect: [ :selectorOfMethodToUpdate | anRGClass methodNamed: selectorOfMethodToUpdate ] thenSelect: [ :method | realClass needToAdaptToMethod: method ]) - ifNotEmpty: [ :methods | changesToApply add: (FmxMethodUpdates className: aClassName isClassSide: anRGClass isClassSide methodsAndProtocols: ((methods groupedBy: #protocol) collect: [ :ms | ms collect: #sourceCode ])) ] + ifNotEmpty: [ :methods | methods do: [ :method | self updateMethod: method sourceCode in: aClassName classSide: anRGClass isClassSide protocol: method protocol ] ] ] { #category : 'installing' } @@ -256,3 +265,13 @@ FmxMBRealRingEnvironment >> traitStringFrom: realClass to: aRGClass [ nextPutAll: precedingTrait; nextPutAll: ' )' ] ] + +{ #category : 'installing' } +FmxMBRealRingEnvironment >> updateMethod: sourceCode in: aClassName classSide: aBoolean protocol: protocol [ + + changesToApply add: (FmxMethodUpdate + className: aClassName + isClassSide: aBoolean + sourceCode: sourceCode + protocol: protocol) +] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st new file mode 100644 index 000000000..2067069e9 --- /dev/null +++ b/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st @@ -0,0 +1,76 @@ +" +## Description + +I represent a change that would create a method to a class during a Famix generation + +## Examples + +```st + FmxMethodAddition className: FmxMethodAddition isClassSide: false sourceCode: 'x ^ x' protocol: 'accessing' +``` +" +Class { + #name : 'FmxMethodAddition', + #superclass : 'FmxLazyClassChange', + #instVars : [ + 'protocol', + 'sourceCode' + ], + #category : 'Famix-MetamodelBuilder-Core-Changes', + #package : 'Famix-MetamodelBuilder-Core', + #tag : 'Changes' +} + +{ #category : 'instance creation' } +FmxMethodAddition class >> className: aSymbol isClassSide: aBoolean sourceCode: aString protocol: protocol [ + + ^ self new + className: aSymbol; + isClassSide: aBoolean; + sourceCode: aString; + protocol: protocol; + yourself +] + +{ #category : 'accessing' } +FmxMethodAddition >> apply [ + + self realClass compile: sourceCode classified: protocol +] + +{ #category : 'printing' } +FmxMethodAddition >> printOn: aStream [ + + super printOn: aStream. + + aStream + nextPutAll: '['; + nextPutAll: (protocol ifNil: [ 'empty' ]); + nextPutAll: ' - '; + nextPutAll: (sourceCode ifNil: [ 'empty' ]); + nextPutAll: ']' +] + +{ #category : 'accessing' } +FmxMethodAddition >> protocol [ + + ^ protocol +] + +{ #category : 'accessing' } +FmxMethodAddition >> protocol: anObject [ + + protocol := anObject +] + +{ #category : 'accessing' } +FmxMethodAddition >> sourceCode [ + + ^ sourceCode +] + +{ #category : 'accessing' } +FmxMethodAddition >> sourceCode: anObject [ + + sourceCode := anObject +] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMethodAdditions.class.st b/src/Famix-MetamodelBuilder-Core/FmxMethodAdditions.class.st deleted file mode 100644 index fc80204c5..000000000 --- a/src/Famix-MetamodelBuilder-Core/FmxMethodAdditions.class.st +++ /dev/null @@ -1,72 +0,0 @@ -" -## Description - -I represent a change that would create add methods to a class during a Famix generation. - -## Examples - -```st - FmxMethodAdditions className: FmxMethodAddition isClassSide: false methodsAndProtocols: (Dictionary with: 'accessing' -> { 'y ^y' . 'x ^x'}} -``` - -## Internal Representation and Key Implementation Points - - Instance Variables - methodsAndProtocols: A dictionary matching a protocol with source code to generate as methods in the protocol -" -Class { - #name : 'FmxMethodAdditions', - #superclass : 'FmxLazyClassChange', - #instVars : [ - 'methodsAndProtocols' - ], - #category : 'Famix-MetamodelBuilder-Core-Changes', - #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Changes' -} - -{ #category : 'instance creation' } -FmxMethodAdditions class >> className: aSymbol isClassSide: aBoolean methodsAndProtocols: aCollection [ - ^ self new - className: aSymbol; - isClassSide: aBoolean; - methodsAndProtocols: aCollection; - yourself -] - -{ #category : 'adding' } -FmxMethodAdditions >> addCode: sourceCode protocol: protocol [ - - (methodsAndProtocols at: protocol ifAbsentPut: [ OrderedCollection new ]) add: sourceCode -] - -{ #category : 'accessing' } -FmxMethodAdditions >> apply [ - - | class | - class := self realClass. - methodsAndProtocols keysAndValuesDo: [ :protocol :codes | codes do: [ :code | class compile: code classified: protocol ] ] -] - -{ #category : 'initialization' } -FmxMethodAdditions >> initialize [ - super initialize. - methodsAndProtocols := Dictionary new -] - -{ #category : 'accessing' } -FmxMethodAdditions >> methodsAndProtocols: aCollection [ - - methodsAndProtocols := aCollection -] - -{ #category : 'printing' } -FmxMethodAdditions >> printOn: aStream [ - - super printOn: aStream. - - aStream - nextPutAll: '['; - print: methodsAndProtocols; - nextPutAll: ']' -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMethodUpdate.class.st b/src/Famix-MetamodelBuilder-Core/FmxMethodUpdate.class.st new file mode 100644 index 000000000..7b02d4017 --- /dev/null +++ b/src/Famix-MetamodelBuilder-Core/FmxMethodUpdate.class.st @@ -0,0 +1,12 @@ +" +## Description + +I represent a change that would update a method of a class during a Famix generation +" +Class { + #name : 'FmxMethodUpdate', + #superclass : 'FmxMethodAddition', + #category : 'Famix-MetamodelBuilder-Core-Changes', + #package : 'Famix-MetamodelBuilder-Core', + #tag : 'Changes' +} diff --git a/src/Famix-MetamodelBuilder-Core/FmxMethodUpdates.class.st b/src/Famix-MetamodelBuilder-Core/FmxMethodUpdates.class.st deleted file mode 100644 index 9161976bc..000000000 --- a/src/Famix-MetamodelBuilder-Core/FmxMethodUpdates.class.st +++ /dev/null @@ -1,12 +0,0 @@ -" -## Description - -I represent a change that would update methods of a class during a Famix generation -" -Class { - #name : 'FmxMethodUpdates', - #superclass : 'FmxMethodAdditions', - #category : 'Famix-MetamodelBuilder-Core-Changes', - #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Changes' -} From 65572dc705fb28e8c1b971fddaed9b1007304e08 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 14 Apr 2026 02:23:28 +0200 Subject: [PATCH 006/121] refactor environment and start to move out of ring (but both systems are not compatible so a test will fail) --- .../FmxCodeChange.class.st | 6 + .../FmxLazyClassChange.class.st | 2 +- .../FmxMBClass.class.st | 11 +- .../FmxMBRealRingEnvironment.class.st | 223 +++++++++++++++-- .../FmxMBRingEnvironment.class.st | 225 ------------------ .../FmxMethodAddition.class.st | 12 + .../FmxMethodUpdate.class.st | 12 - .../FamixMetamodelBuilder.extension.st | 2 +- .../FamixMetamodelGenerator.extension.st | 2 +- .../FmxMBStubEnvironment.class.st | 22 ++ ...mixTestComposedMetamodelsBuilding.class.st | 2 +- 11 files changed, 258 insertions(+), 261 deletions(-) delete mode 100644 src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st delete mode 100644 src/Famix-MetamodelBuilder-Core/FmxMethodUpdate.class.st create mode 100644 src/Famix-MetamodelBuilder-Tests/FmxMBStubEnvironment.class.st diff --git a/src/Famix-MetamodelBuilder-Core/FmxCodeChange.class.st b/src/Famix-MetamodelBuilder-Core/FmxCodeChange.class.st index ef016555f..7583c5865 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxCodeChange.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxCodeChange.class.st @@ -38,6 +38,12 @@ FmxCodeChange >> apply [ self subclassResponsibility ] +{ #category : 'testing' } +FmxCodeChange >> isRequired [ + + ^ true +] + { #category : 'accessing' } FmxCodeChange >> priority [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxLazyClassChange.class.st b/src/Famix-MetamodelBuilder-Core/FmxLazyClassChange.class.st index c333684fb..5d5431888 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxLazyClassChange.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxLazyClassChange.class.st @@ -69,6 +69,6 @@ FmxLazyClassChange >> printOn: aStream [ { #category : 'accessing' } FmxLazyClassChange >> realClass [ | class | - class := self class environment at: self className. + class := self class environment at: self className ifAbsent: [ ^ nil ]. ^ self isClassSide ifTrue: [ class class ] ifFalse: [ class ] ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index cf5479fbe..36ec26529 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -158,13 +158,16 @@ FmxMBClass >> generateHashMethodFor: aClass [ { #category : 'generating' } FmxMBClass >> generateIsAbstractMethodIfNecessaryIn: aClass [ - self isAbstractClass ifTrue: [ - aClass classSide - compile: ('isAbstract + self isAbstractClass ifTrue: [ + self flag: #todo. "Demeter" + self builder environment + addMethod: ('isAbstract ^ self == {1}' format: { aClass name asString }) - classified: 'testing' ] + in: aClass name + classSide: true + protocol: 'testing' ] ] { #category : 'generating' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st index c9a8105e0..4bfd9b951 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st @@ -1,25 +1,42 @@ Class { #name : 'FmxMBRealRingEnvironment', - #superclass : 'FmxMBRingEnvironment', + #superclass : 'Object', #instVars : [ - 'changesToApply' + 'changesToApply', + 'ringEnvironment', + 'builder' ], #category : 'Famix-MetamodelBuilder-Core-Implementation', #package : 'Famix-MetamodelBuilder-Core', #tag : 'Implementation' } +{ #category : 'instance creation' } +FmxMBRealRingEnvironment class >> for: aBuilder [ + + ^ self new + builder: aBuilder; + yourself. +] + +{ #category : 'adding' } +FmxMBRealRingEnvironment >> addChange: aFamixChange [ + + aFamixChange isRequired ifFalse: [ ^ self ]. + changesToApply add: aFamixChange +] + { #category : 'installing' } FmxMBRealRingEnvironment >> addMethod: sourceCode in: aClassName classSide: aBoolean protocol: protocol [ - changesToApply add: (FmxMethodAddition + self addChange: (FmxMethodAddition className: aClassName isClassSide: aBoolean sourceCode: sourceCode protocol: protocol) ] -{ #category : 'accessing' } +{ #category : 'installing' } FmxMBRealRingEnvironment >> apply [ self collectChangesToApply. @@ -27,6 +44,46 @@ FmxMBRealRingEnvironment >> apply [ (changesToApply sorted: #priority ascending) do: [ :change | change apply ] ] +{ #category : 'accessing' } +FmxMBRealRingEnvironment >> basicGroupSuperclass [ + + ^ self ringEnvironment ensureClassNamed: #MooseSpecializedGroup +] + +{ #category : 'accessing' } +FmxMBRealRingEnvironment >> basicImportingContextSuperclass [ + + ^ self ringEnvironment ensureClassNamed: #FamixImportingContext +] + +{ #category : 'accessing' } +FmxMBRealRingEnvironment >> basicModelSuperclass [ + + ^ self ringEnvironment ensureClassNamed: #MooseModel +] + +{ #category : 'accessing' } +FmxMBRealRingEnvironment >> basicSuperclass [ + + ^ self ringEnvironment ensureClassNamed: #MooseEntity +] + +{ #category : 'accessing' } +FmxMBRealRingEnvironment >> basicTrait [ + + ^ self ringEnvironment ensureClassNamed: #Trait +] + +{ #category : 'accessing' } +FmxMBRealRingEnvironment >> builder [ + ^ builder +] + +{ #category : 'accessing' } +FmxMBRealRingEnvironment >> builder: anObject [ + builder := anObject +] + { #category : 'testing' } FmxMBRealRingEnvironment >> changesToApply [ "Return the list of changes to apply if a regeneration would cause changes in the system." @@ -36,6 +93,12 @@ FmxMBRealRingEnvironment >> changesToApply [ ] { #category : 'accessing' } +FmxMBRealRingEnvironment >> classNamed: aClassName [ + + ^ self ringEnvironment ask behaviorNamed: aClassName +] + +{ #category : 'installing' } FmxMBRealRingEnvironment >> collectChangesToApply [ | resolvedClasses resolvedPackages | resolvedPackages := ringEnvironment ask packages select: [ :each | each isRingResolved ]. @@ -46,6 +109,12 @@ FmxMBRealRingEnvironment >> collectChangesToApply [ self recordRemovalOfGeneratedEntitiesIn: resolvedPackages notPresentIn: resolvedClasses ] +{ #category : 'installing' } +FmxMBRealRingEnvironment >> compile: aSource in: aClass classified: aProtocol [ + + aClass compile: aSource classified: aProtocol. +] + { #category : 'installing' } FmxMBRealRingEnvironment >> compile: aSource in: aClass classified: aProtocol package: aPackageName [ @@ -55,11 +124,104 @@ FmxMBRealRingEnvironment >> compile: aSource in: aClass classified: aProtocol pa aClass compile: aSource classified: category ] +{ #category : 'as yet unclassified' } +FmxMBRealRingEnvironment >> createClassNamed: className superclass: superclassName traitNames: traitNames slots: slots in: packageName [ + + | aClass existingClass composition | + existingClass := self ringEnvironment ask behaviorNamed: className. + + aClass := self ringEnvironment ensureClassNamed: className. + aClass superclass: (self ringEnvironment ensureClassNamed: superclassName). + + composition := RGTraitComposition parent: aClass. + aClass traitComposition: composition. + + traitNames do: [ :each | + composition addTransformation: + (self ringEnvironment ensureTraitNamed: each) ]. + + aClass package: + (self ringEnvironment ensurePackageNamed: packageName). + aClass layout makeResolved. + + slots do: [ :slotInBadEnvironment | + | slot | + slot := slotInBadEnvironment needsFullDefinition + ifTrue: [ + (RGUnknownSlot + named: slotInBadEnvironment name + parent: aClass layout) + expression: slotInBadEnvironment expression; + yourself ] + ifFalse: [ + RGInstanceVariableSlot + named: slotInBadEnvironment name + parent: aClass layout ]. + aClass layout addSlot: slot. + slot propertyNamed: #isGenerated put: true ]. + + ^ aClass +] + +{ #category : 'as yet unclassified' } +FmxMBRealRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slots in: packageName [ + + | aPackage aTrait existingClass composition | + existingClass := self ringEnvironment ask behaviorNamed: + traitName asSymbol. + + aPackage := self ringEnvironment ensurePackageNamed: packageName. + + aTrait := ringEnvironment ensureTraitNamed: traitName. + aTrait superclass: self basicTrait. + + composition := RGTraitComposition parent: aTrait. + aTrait traitComposition: composition. + + traitNames do: [ :each | + composition addTransformation: + (self ringEnvironment ensureTraitNamed: each) ]. + + aTrait package: aPackage. + aTrait layout makeResolved. + + slots do: [ :slotInBadEnvironment | + | slot | + slot := slotInBadEnvironment needsFullDefinition + ifTrue: [ + (RGUnknownSlot + named: slotInBadEnvironment name + parent: aTrait layout) + expression: slotInBadEnvironment expression; + yourself ] + ifFalse: [ + RGInstanceVariableSlot + named: slotInBadEnvironment name + parent: aTrait layout ]. + aTrait layout addSlot: slot. + slot propertyNamed: #isGenerated put: true ]. + + ^ aTrait +] + +{ #category : 'testing' } +FmxMBRealRingEnvironment >> hasBehaviorNamed: aClassName [ + + ^ self ringEnvironment ask includesClassNamed: aClassName +] + { #category : 'initialization' } FmxMBRealRingEnvironment >> initialize [ super initialize. - changesToApply := OrderedCollection new + changesToApply := OrderedCollection new. + ringEnvironment := RGEnvironment new. + ringEnvironment version: 7. + ringEnvironment ensureClassNamed: #FMOne. + ringEnvironment ensureClassNamed: #FMMany. + ringEnvironment ensureClassNamed: #FMMultivalueLink. + ringEnvironment ensureClassNamed: #FMMultiMultivalueLink. + ringEnvironment ensureClassNamed: #MooseSpecializedGroup. ] { #category : 'installing' } @@ -206,7 +368,7 @@ FmxMBRealRingEnvironment >> recordMethodsAdoptionsOf: realClass to: anRGClass re ((generatedMethodNamesOfRealClass intersection: anRGClass localSelectors) collect: [ :selectorOfMethodToUpdate | anRGClass methodNamed: selectorOfMethodToUpdate ] thenSelect: [ :method | realClass needToAdaptToMethod: method ]) - ifNotEmpty: [ :methods | methods do: [ :method | self updateMethod: method sourceCode in: aClassName classSide: anRGClass isClassSide protocol: method protocol ] ] + ifNotEmpty: [ :methods | methods do: [ :method | self addMethod: method sourceCode in: aClassName classSide: anRGClass isClassSide protocol: method protocol ] ] ] { #category : 'installing' } @@ -229,6 +391,45 @@ FmxMBRealRingEnvironment >> recordRemovalOfGeneratedEntitiesIn: resolvedPackages [ package definedClasses select: #isMetamodelEntity thenDo: [ :class | resolvedClasses detect: [ :rgClass | rgClass name = class name ] ifNone: [ changesToApply add: (FmxClassRemoval class: class) ] ] ] ] ] +{ #category : 'public registration' } +FmxMBRealRingEnvironment >> registerPackage: aPackageName [ + + ^ self ringEnvironment ensurePackageNamed: aPackageName. + +] + +{ #category : 'accessing' } +FmxMBRealRingEnvironment >> ringEnvironment [ + ^ ringEnvironment +] + +{ #category : 'accessing' } +FmxMBRealRingEnvironment >> slotNamed: slotName [ + ^ (RGUnknownSlot named: slotName asSymbol) expression: #FMProperty +] + +{ #category : 'accessing' } +FmxMBRealRingEnvironment >> slotNamed: slotName cardinality: cardinality type: type opposite: oppositeName [ + + | cardinalityClassName | + + cardinalityClassName := cardinality = #one + ifTrue: [ #FMOne ] + ifFalse: [ #FMMany ]. + + ^ (RGUnknownSlot named: slotName asSymbol) + expression: ('{1} type: #{2} opposite: #{3}' + format: { cardinalityClassName. type. oppositeName}) +] + +{ #category : 'accessing' } +FmxMBRealRingEnvironment >> slotNamed: slotName defaultValue: aValue [ + + aValue ifNil: [ ^ self slotNamed: slotName ]. + ^ (RGUnknownSlot named: slotName asSymbol) expression: + ('FMProperty defaultValue: {1}' format: { aValue printString }) +] + { #category : 'installing' } FmxMBRealRingEnvironment >> traitStringFrom: realClass to: aRGClass [ @@ -265,13 +466,3 @@ FmxMBRealRingEnvironment >> traitStringFrom: realClass to: aRGClass [ nextPutAll: precedingTrait; nextPutAll: ' )' ] ] - -{ #category : 'installing' } -FmxMBRealRingEnvironment >> updateMethod: sourceCode in: aClassName classSide: aBoolean protocol: protocol [ - - changesToApply add: (FmxMethodUpdate - className: aClassName - isClassSide: aBoolean - sourceCode: sourceCode - protocol: protocol) -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st deleted file mode 100644 index 2b4ed0d6b..000000000 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ /dev/null @@ -1,225 +0,0 @@ -Class { - #name : 'FmxMBRingEnvironment', - #superclass : 'Object', - #instVars : [ - 'ringEnvironment', - 'builder' - ], - #category : 'Famix-MetamodelBuilder-Core-Implementation', - #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' -} - -{ #category : 'instance creation' } -FmxMBRingEnvironment class >> for: aBuilder [ - - ^ self new - builder: aBuilder; - yourself. -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> apply [ - - "do nothing" -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> basicGroupSuperclass [ - - ^ self ringEnvironment ensureClassNamed: #MooseSpecializedGroup -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> basicImportingContextSuperclass [ - - ^ self ringEnvironment ensureClassNamed: #FamixImportingContext -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> basicModelSuperclass [ - - ^ self ringEnvironment ensureClassNamed: #MooseModel -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> basicSuperclass [ - - ^ self ringEnvironment ensureClassNamed: #MooseEntity -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> basicTrait [ - - ^ self ringEnvironment ensureClassNamed: #Trait -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> builder [ - ^ builder -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> builder: anObject [ - builder := anObject -] - -{ #category : 'initialization' } -FmxMBRingEnvironment >> classNamed: aClassName [ - - ^ self ringEnvironment ask behaviorNamed: aClassName -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> compile: aSource in: aClass classified: aProtocol [ - - aClass compile: aSource classified: aProtocol. -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> compile: aSource in: aClass classified: aProtocol package: aPackageName [ - - | selector | - - selector := aClass compile: aSource classified: aProtocol. - (aClass methodNamed: selector) package: (aClass environment ensurePackageNamed: aPackageName). -] - -{ #category : 'initialization' } -FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitNames: traitNames slots: slots in: packageName [ - - | aClass existingClass composition | - existingClass := self ringEnvironment ask behaviorNamed: className. - - aClass := self ringEnvironment ensureClassNamed: className. - aClass superclass: (self ringEnvironment ensureClassNamed: superclassName). - - composition := RGTraitComposition parent: aClass. - aClass traitComposition: composition. - - traitNames do: [ :each | - composition addTransformation: - (self ringEnvironment ensureTraitNamed: each) ]. - - aClass package: - (self ringEnvironment ensurePackageNamed: packageName). - aClass layout makeResolved. - - slots do: [ :slotInBadEnvironment | - | slot | - slot := slotInBadEnvironment needsFullDefinition - ifTrue: [ - (RGUnknownSlot - named: slotInBadEnvironment name - parent: aClass layout) - expression: slotInBadEnvironment expression; - yourself ] - ifFalse: [ - RGInstanceVariableSlot - named: slotInBadEnvironment name - parent: aClass layout ]. - aClass layout addSlot: slot. - slot propertyNamed: #isGenerated put: true ]. - - ^ aClass -] - -{ #category : 'initialization' } -FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slots in: packageName [ - - | aPackage aTrait existingClass composition | - existingClass := self ringEnvironment ask behaviorNamed: - traitName asSymbol. - - aPackage := self ringEnvironment ensurePackageNamed: packageName. - - aTrait := ringEnvironment ensureTraitNamed: traitName. - aTrait superclass: self basicTrait. - - composition := RGTraitComposition parent: aTrait. - aTrait traitComposition: composition. - - traitNames do: [ :each | - composition addTransformation: - (self ringEnvironment ensureTraitNamed: each) ]. - - aTrait package: aPackage. - aTrait layout makeResolved. - - slots do: [ :slotInBadEnvironment | - | slot | - slot := slotInBadEnvironment needsFullDefinition - ifTrue: [ - (RGUnknownSlot - named: slotInBadEnvironment name - parent: aTrait layout) - expression: slotInBadEnvironment expression; - yourself ] - ifFalse: [ - RGInstanceVariableSlot - named: slotInBadEnvironment name - parent: aTrait layout ]. - aTrait layout addSlot: slot. - slot propertyNamed: #isGenerated put: true ]. - - ^ aTrait -] - -{ #category : 'initialization' } -FmxMBRingEnvironment >> hasBehaviorNamed: aClassName [ - - ^ self ringEnvironment ask includesClassNamed: aClassName -] - -{ #category : 'initialization' } -FmxMBRingEnvironment >> initialize [ - - super initialize. - - ringEnvironment := RGEnvironment new. - ringEnvironment version: 7. - ringEnvironment ensureClassNamed: #FMOne. - ringEnvironment ensureClassNamed: #FMMany. - ringEnvironment ensureClassNamed: #FMMultivalueLink. - ringEnvironment ensureClassNamed: #FMMultiMultivalueLink. - ringEnvironment ensureClassNamed: #MooseSpecializedGroup. -] - -{ #category : 'public registration' } -FmxMBRingEnvironment >> registerPackage: aPackageName [ - - ^ self ringEnvironment ensurePackageNamed: aPackageName. - -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> ringEnvironment [ - ^ ringEnvironment -] - -{ #category : 'initialization' } -FmxMBRingEnvironment >> slotNamed: slotName [ - ^ (RGUnknownSlot named: slotName asSymbol) expression: #FMProperty -] - -{ #category : 'initialization' } -FmxMBRingEnvironment >> slotNamed: slotName cardinality: cardinality type: type opposite: oppositeName [ - - | cardinalityClassName | - - cardinalityClassName := cardinality = #one - ifTrue: [ #FMOne ] - ifFalse: [ #FMMany ]. - - ^ (RGUnknownSlot named: slotName asSymbol) - expression: ('{1} type: #{2} opposite: #{3}' - format: { cardinalityClassName. type. oppositeName}) -] - -{ #category : 'initialization' } -FmxMBRingEnvironment >> slotNamed: slotName defaultValue: aValue [ - - aValue ifNil: [ ^ self slotNamed: slotName ]. - ^ (RGUnknownSlot named: slotName asSymbol) expression: - ('FMProperty defaultValue: {1}' format: { aValue printString }) -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st index 2067069e9..4b69a507b 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st @@ -38,6 +38,18 @@ FmxMethodAddition >> apply [ self realClass compile: sourceCode classified: protocol ] +{ #category : 'testing' } +FmxMethodAddition >> isRequired [ + + ^ self realClass + ifNil: [ true ] + ifNotNil: [ :class | + class methods + detect: [ :method | method sourceCode = sourceCode ] + ifFound: [ :method | (method protocolName = protocol) not ] + ifNone: [ true ] ] +] + { #category : 'printing' } FmxMethodAddition >> printOn: aStream [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMethodUpdate.class.st b/src/Famix-MetamodelBuilder-Core/FmxMethodUpdate.class.st deleted file mode 100644 index 7b02d4017..000000000 --- a/src/Famix-MetamodelBuilder-Core/FmxMethodUpdate.class.st +++ /dev/null @@ -1,12 +0,0 @@ -" -## Description - -I represent a change that would update a method of a class during a Famix generation -" -Class { - #name : 'FmxMethodUpdate', - #superclass : 'FmxMethodAddition', - #category : 'Famix-MetamodelBuilder-Core-Changes', - #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Changes' -} diff --git a/src/Famix-MetamodelBuilder-Tests/FamixMetamodelBuilder.extension.st b/src/Famix-MetamodelBuilder-Tests/FamixMetamodelBuilder.extension.st index 195435f72..fa33a8249 100644 --- a/src/Famix-MetamodelBuilder-Tests/FamixMetamodelBuilder.extension.st +++ b/src/Famix-MetamodelBuilder-Tests/FamixMetamodelBuilder.extension.st @@ -4,7 +4,7 @@ Extension { #name : 'FamixMetamodelBuilder' } FamixMetamodelBuilder >> beForTesting [ - self environment: (FmxMBRingEnvironment for: self). + self environment: (FmxMBStubEnvironment for: self). self configuration prefix: 'Tst'; packageName: 'Tst'. diff --git a/src/Famix-MetamodelBuilder-Tests/FamixMetamodelGenerator.extension.st b/src/Famix-MetamodelBuilder-Tests/FamixMetamodelGenerator.extension.st index c17086ad3..e98bf3f7c 100644 --- a/src/Famix-MetamodelBuilder-Tests/FamixMetamodelGenerator.extension.st +++ b/src/Famix-MetamodelBuilder-Tests/FamixMetamodelGenerator.extension.st @@ -3,6 +3,6 @@ Extension { #name : 'FamixMetamodelGenerator' } { #category : '*Famix-MetamodelBuilder-Tests' } FamixMetamodelGenerator >> beForTesting [ - builder environment: (FmxMBRingEnvironment for: builder). + builder environment: (FmxMBStubEnvironment for: builder). ] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBStubEnvironment.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBStubEnvironment.class.st new file mode 100644 index 000000000..43cb101cd --- /dev/null +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBStubEnvironment.class.st @@ -0,0 +1,22 @@ +Class { + #name : 'FmxMBStubEnvironment', + #superclass : 'FmxMBRealRingEnvironment', + #category : 'Famix-MetamodelBuilder-Tests-Helpers', + #package : 'Famix-MetamodelBuilder-Tests', + #tag : 'Helpers' +} + +{ #category : 'accessing' } +FmxMBStubEnvironment >> apply [ + + "do nothing" +] + +{ #category : 'accessing' } +FmxMBStubEnvironment >> compile: aSource in: aClass classified: aProtocol package: aPackageName [ + + | selector | + + selector := aClass compile: aSource classified: aProtocol. + (aClass methodNamed: selector) package: (aClass environment ensurePackageNamed: aPackageName). +] diff --git a/src/Famix-TestComposedMetamodel/FamixTestComposedMetamodelsBuilding.class.st b/src/Famix-TestComposedMetamodel/FamixTestComposedMetamodelsBuilding.class.st index ebdfa910a..58042ea68 100644 --- a/src/Famix-TestComposedMetamodel/FamixTestComposedMetamodelsBuilding.class.st +++ b/src/Famix-TestComposedMetamodel/FamixTestComposedMetamodelsBuilding.class.st @@ -19,7 +19,7 @@ FamixTestComposedMetamodelsBuilding >> setUp [ super setUp. composedBuilder := FamixMetamodelBuilder new. - env := FmxMBRingEnvironment for: composedBuilder. + env := FmxMBStubEnvironment for: composedBuilder. composedBuilder environment: env. composedBuilder configuration prefix: 'TstComposed'; From 705fec91e7ec2f38d6fd8756ae40cf3d600b82db Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 14 Apr 2026 02:36:50 +0200 Subject: [PATCH 007/121] Add a hack for not to make tests pass --- src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st | 10 +++++++++- .../FmxMBRealRingEnvironment.class.st | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 36ec26529..bc3e1eb57 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -167,7 +167,15 @@ FmxMBClass >> generateIsAbstractMethodIfNecessaryIn: aClass [ ^ self == {1}' format: { aClass name asString }) in: aClass name classSide: true - protocol: 'testing' ] + protocol: 'testing'. + + self flag: #todo. "This code should never make it in the dev branch of Famix." + aClass classSide + compile: ('isAbstract + + + ^ self == {1}' format: { aClass name asString }) + classified: 'testing' ] ] { #category : 'generating' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st index 4bfd9b951..520ab4c76 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st @@ -23,6 +23,7 @@ FmxMBRealRingEnvironment class >> for: aBuilder [ FmxMBRealRingEnvironment >> addChange: aFamixChange [ aFamixChange isRequired ifFalse: [ ^ self ]. + changesToApply add: aFamixChange ] From 59af652a50f8990c41a84c2b2defb2a85f38e24d Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 14 Apr 2026 02:41:12 +0200 Subject: [PATCH 008/121] Begin migration of equals and hash generation --- .../FmxMBClass.class.st | 99 +++++++++++-------- 1 file changed, 57 insertions(+), 42 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index bc3e1eb57..1de6158ed 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -99,60 +99,75 @@ FmxMBClass >> generate [ FmxMBClass >> generateEqualsMethodFor: aClass [ propertiesForEqualityCheck ifNotNil: [ - | variableName | - variableName := 'a' , aClass name. - self builder environment - compile: (String streamContents: [ :stream | - stream << '= '. - stream << variableName. - stream << ' + | code | + code := String streamContents: [ :stream | + | variableName | + variableName := 'a' , aClass name. + stream << '= '. + stream << variableName. + stream << ' ^ '. - stream - << variableName; - << ' '; - << propertiesForEqualityCheck first; - << ' = self '; - << propertiesForEqualityCheck first. - propertiesForEqualityCheck size > 1 ifTrue: [ - 2 to: propertiesForEqualityCheck size do: [ :idx | - stream << ' and: [ '. - stream - << variableName; - << ' '; - << (propertiesForEqualityCheck at: idx); - << ' = self '; - << (propertiesForEqualityCheck at: idx) ]. - 2 to: propertiesForEqualityCheck size do: [ :idx | - stream << '] ' ] ] ]) - in: aClass instanceSide - classified: #comparing ] + stream + << variableName; + << ' '; + << propertiesForEqualityCheck first; + << ' = self '; + << propertiesForEqualityCheck first. + propertiesForEqualityCheck size > 1 ifTrue: [ + 2 to: propertiesForEqualityCheck size do: [ :idx | + stream << ' and: [ '. + stream + << variableName; + << ' '; + << (propertiesForEqualityCheck at: idx); + << ' = self '; + << (propertiesForEqualityCheck at: idx) ]. + 2 to: propertiesForEqualityCheck size do: [ :idx | stream << '] ' ] ] ]. + + self flag: #todo. "Demeter" + self builder environment + addMethod: code + in: aClass name + classSide: false + protocol: 'comparing'. + + self flag: #todo. "This code should never make it in the dev branch of Famix." + self builder environment compile: code in: aClass instanceSide classified: #comparing ] ] { #category : 'generating-methods' } FmxMBClass >> generateHashMethodFor: aClass [ propertiesForEqualityCheck ifNotNil: [ - self builder environment - compile: (String streamContents: [ :stream | - stream << 'hash'. - stream << ' + | code | + code := String streamContents: [ :stream | + stream << 'hash'. + stream << ' ^ '. - stream - << 'self '; - << propertiesForEqualityCheck first; - << ' hash '. - propertiesForEqualityCheck size > 1 ifTrue: [ - 2 to: propertiesForEqualityCheck size do: [ :idx | - stream - << 'bitXor: self '; - << (propertiesForEqualityCheck at: idx); - << ' hash ' ] ] ]) - in: aClass instanceSide - classified: #comparing ] + stream + << 'self '; + << propertiesForEqualityCheck first; + << ' hash '. + propertiesForEqualityCheck size > 1 ifTrue: [ + 2 to: propertiesForEqualityCheck size do: [ :idx | + stream + << 'bitXor: self '; + << (propertiesForEqualityCheck at: idx); + << ' hash ' ] ] ]. + + self flag: #todo. "Demeter" + self builder environment + addMethod: code + in: aClass name + classSide: false + protocol: 'comparing'. + + self flag: #todo. "This code should never make it in the dev branch of Famix." + self builder environment compile: code in: aClass instanceSide classified: #comparing ] ] { #category : 'generating' } From aaf1096387916c4918e64b689f12a5dccdef3162 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 14 Apr 2026 02:55:24 +0200 Subject: [PATCH 009/121] Factorize code --- .../FmxMBClass.class.st | 51 +++++++++---------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 1de6158ed..b006acf2a 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -18,6 +18,22 @@ FmxMBClass >> acceptVisitor: aVisitor [ ^ aVisitor visitClass: self. ] +{ #category : 'generating' } +FmxMBClass >> addMethod: code in: class classSide: boolean protocol: protocol [ + + self flag: #todo. "Demeter" + self builder environment + addMethod: code + in: class name + classSide: boolean + protocol: protocol. + + self flag: #todo. "This code should never make it in the dev branch of Famix. Also we should provide the class name directly" + (boolean + ifTrue: [ class classSide ] + ifFalse: [ class ]) compile: code classified: protocol +] + { #category : 'accessing' } FmxMBClass >> allClassGeneralizations [ | result c g | @@ -126,15 +142,11 @@ FmxMBClass >> generateEqualsMethodFor: aClass [ << (propertiesForEqualityCheck at: idx) ]. 2 to: propertiesForEqualityCheck size do: [ :idx | stream << '] ' ] ] ]. - self flag: #todo. "Demeter" - self builder environment + self addMethod: code - in: aClass name + in: aClass classSide: false - protocol: 'comparing'. - - self flag: #todo. "This code should never make it in the dev branch of Famix." - self builder environment compile: code in: aClass instanceSide classified: #comparing ] + protocol: #comparing ] ] { #category : 'generating-methods' } @@ -159,38 +171,25 @@ FmxMBClass >> generateHashMethodFor: aClass [ << (propertiesForEqualityCheck at: idx); << ' hash ' ] ] ]. - self flag: #todo. "Demeter" - self builder environment + self addMethod: code - in: aClass name + in: aClass classSide: false - protocol: 'comparing'. - - self flag: #todo. "This code should never make it in the dev branch of Famix." - self builder environment compile: code in: aClass instanceSide classified: #comparing ] + protocol: #comparing ] ] { #category : 'generating' } FmxMBClass >> generateIsAbstractMethodIfNecessaryIn: aClass [ self isAbstractClass ifTrue: [ - self flag: #todo. "Demeter" - self builder environment + self addMethod: ('isAbstract ^ self == {1}' format: { aClass name asString }) - in: aClass name + in: aClass classSide: true - protocol: 'testing'. - - self flag: #todo. "This code should never make it in the dev branch of Famix." - aClass classSide - compile: ('isAbstract - - - ^ self == {1}' format: { aClass name asString }) - classified: 'testing' ] + protocol: #testing ] ] { #category : 'generating' } From 61f16e1ebd85d77fe5736d1b5a759ee8daa86cb9 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 14 Apr 2026 03:01:23 +0200 Subject: [PATCH 010/121] Migrate some more generation methods --- .../FmxMBBehavior.class.st | 65 +++++++++++++------ .../FmxMBClass.class.st | 37 ++++------- 2 files changed, 57 insertions(+), 45 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index b492ac75f..0d5840866 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -43,6 +43,22 @@ FmxMBBehavior >> addAllTransitiveTraitsIn: aCollection [ ^ aCollection ] +{ #category : 'generating' } +FmxMBBehavior >> addMethod: code in: class classSide: boolean protocol: protocol [ + + self flag: #todo. "Demeter" + self builder environment + addMethod: code + in: class name + classSide: boolean + protocol: protocol. + + self flag: #todo. "This code should never make it in the dev branch of Famix. Also we should provide the class name directly" + (boolean + ifTrue: [ class classSide ] + ifFalse: [ class ]) compile: code classified: protocol +] + { #category : 'accessing' } FmxMBBehavior >> addRelation: aRelation with: anotherClass [ @@ -269,19 +285,22 @@ FmxMBBehavior >> generateAccessors [ { #category : 'generating' } FmxMBBehavior >> generateAddToCollectionFor: aClass [ + self relations collect: #side - thenDo: [ :side | - side isMany - ifTrue: [ | sideName | - sideName := side name. - self builder environment - compile: - ('add{1}: anObject + thenDo: [ :side | + side isMany ifTrue: [ + | sideName | + sideName := side name. + self + addMethod: ('add{1}: anObject - ^ self {2} add: anObject' format: {sideName capitalized asSingular . sideName}) - in: aClass instanceSide - classified: #adding ] ] + ^ self {2} add: anObject' format: { + sideName capitalized asSingular. + sideName }) + in: aClass + classSide: false + protocol: #adding ] ] ] { #category : 'generating' } @@ -323,24 +342,28 @@ FmxMBBehavior >> generateMethodsToRemoveFromTraitCompositionFor: aBehavioral [ { #category : 'generating' } FmxMBBehavior >> generateNavigationGroupsFor: aClass [ - self allNavigationGroups - do: [ :aNavigationGroup | + + self allNavigationGroups do: [ :aNavigationGroup | | sideName | sideName := aNavigationGroup entity name. - - self builder environment - compile: - ((aNavigationGroup entity isMany - ifTrue: [ '{1} + self + addMethod: ((aNavigationGroup entity isMany + ifTrue: [ + '{1} ^ MooseSpecializedGroup withAll: self {3} asSet' ] - ifFalse: [ '{1} + ifFalse: [ + '{1} - ^ MooseSpecializedGroup with: self {3}' ]) format: {(sideName , 'Group') . sideName capitalized . sideName}) - in: aClass instanceSide - classified: #navigation ] + ^ MooseSpecializedGroup with: self {3}' ]) format: { + (sideName , 'Group'). + sideName capitalized. + sideName }) + in: aClass + classSide: false + protocol: #navigation ] ] { #category : 'generating' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index b006acf2a..67388b98a 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -18,22 +18,6 @@ FmxMBClass >> acceptVisitor: aVisitor [ ^ aVisitor visitClass: self. ] -{ #category : 'generating' } -FmxMBClass >> addMethod: code in: class classSide: boolean protocol: protocol [ - - self flag: #todo. "Demeter" - self builder environment - addMethod: code - in: class name - classSide: boolean - protocol: protocol. - - self flag: #todo. "This code should never make it in the dev branch of Famix. Also we should provide the class name directly" - (boolean - ifTrue: [ class classSide ] - ifFalse: [ class ]) compile: code classified: protocol -] - { #category : 'accessing' } FmxMBClass >> allClassGeneralizations [ | result c g | @@ -206,17 +190,18 @@ FmxMBClass >> generateRemotes [ { #category : 'generating-methods' } FmxMBClass >> generateRootMetamodelMethodIn: aClass [ + self isRoot ifFalse: [ ^ self ]. - self builder model - ifNotNil: [ :model | - aClass classSide - compile: - ('metamodel + self builder model ifNotNil: [ :model | + self + addMethod: ('metamodel - ^ {1} metamodel' format: {model fullName}) - classified: 'meta' ] + ^ {1} metamodel' format: { model fullName }) + in: aClass + classSide: true + protocol: #meta ] ] { #category : 'generating-methods' } @@ -229,7 +214,11 @@ FmxMBClass >> generateTestingMethodsIn: aClass [ | selectorsFromTraits | selectorsFromTraits := self traitGeneralizations flatCollect: #testingSelectors. (selectorsFromTraits includes: sel) ifFalse: [ - aClass instanceSide compile: ('{1}\\ \ ^ false' withCRs format: { sel }) classified: #testing ] ] ] ] ]. + self + addMethod: (sel , '\\ \ ^ false') withCRs + in: aClass + classSide: false + protocol: #testing ] ] ] ] ]. super generateTestingMethodsIn: aClass ] From df102b955d6514ecbb1def9bd6662e13dea8c91f Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 14 Apr 2026 03:18:43 +0200 Subject: [PATCH 011/121] Simplify model annotation generation --- src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st index 3d10bcacb..b7c8bfb0f 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st @@ -25,7 +25,7 @@ FmxMBModel >> generate [ ] { #category : 'generating-methods' } -FmxMBModel >> generateAnnotationMethodIn: aModelClass [ +FmxMBModel >> generateAnnotationIn: aModelClass [ aModelClass classSide compile: ('annotation @@ -60,7 +60,6 @@ FmxMBModel >> generateFileImportMethodsIn: aModelClass [ { #category : 'generating-methods' } FmxMBModel >> generateModelMethods: aModelClass [ - self generateAnnotationMethodIn: aModelClass. self generateFileImportMethodsIn: aModelClass. self generateSubmetamodelsMethodIn: aModelClass ] From 66e4678f19526d34699511206dd35b29fc43770c Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 14 Apr 2026 03:53:08 +0200 Subject: [PATCH 012/121] Fix double generation of MoodeModel + remove useless trait --- .../FamixMetamodelBuilder.class.st | 16 ++++- .../FmxMBEntity.class.st | 1 + .../FmxMBModel.class.st | 10 +-- .../MooseModelGenerator.class.st | 8 +++ src/Moose-Core/MooseTEntityCreator.trait.st | 63 ------------------- 5 files changed, 28 insertions(+), 70 deletions(-) delete mode 100644 src/Moose-Core/MooseTEntityCreator.trait.st diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index 1f9fc5438..eeeac0141 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -56,7 +56,8 @@ Class { 'testingSelectorsMapping', 'configuration', 'parentBuilder', - 'extensionBehaviors' + 'extensionBehaviors', + 'withoutBuilder' ], #category : 'Famix-MetamodelBuilder-Core-Basic', #package : 'Famix-MetamodelBuilder-Core', @@ -370,7 +371,8 @@ FamixMetamodelBuilder >> initialize [ traits := OrderedCollection new. extensionBehaviors := OrderedCollection new. relations := OrderedCollection new. - testingSelectorsMapping := Dictionary new + testingSelectorsMapping := Dictionary new. + withoutBuilder := false ] { #category : 'initialization' } @@ -588,9 +590,11 @@ FamixMetamodelBuilder >> safeAnnotationPackageName [ ^ self configuration packageNameForAnnotations asSymbol printString ] -{ #category : 'generating' } +{ #category : 'asserting' } FamixMetamodelBuilder >> shouldGenerateModel [ + withoutBuilder ifTrue: [ ^ false ]. + ^ self behaviorsCount > 0 or: [ self relations isNotEmpty or: [ self subBuilders isNotEmpty ] ] ] @@ -699,3 +703,9 @@ FamixMetamodelBuilder >> withSubBuildersAddEntityCreatorTraitTo: aClass [ self allSubBuilders do: [ :subBuilder | subBuilder addEntityCreatorTraitToModel: aClass ] ] + +{ #category : 'accessing' } +FamixMetamodelBuilder >> withoutModel [ + + withoutBuilder := true +] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st index 73d3789eb..337383135 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st @@ -76,6 +76,7 @@ FmxMBEntity >> name [ { #category : 'accessing' } FmxMBEntity >> name: anObject [ + name := anObject ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st index b7c8bfb0f..cee06c7d5 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st @@ -27,14 +27,16 @@ FmxMBModel >> generate [ { #category : 'generating-methods' } FmxMBModel >> generateAnnotationIn: aModelClass [ - aModelClass classSide - compile: ('annotation + self + addMethod: ('annotation - ' format: { + ' format: { self fullName. self builder safeAnnotationPackageName }) - classified: 'meta' + in: aModelClass + classSide: true + protocol: #meta ] { #category : 'generating-methods' } diff --git a/src/Moose-Core-Generator/MooseModelGenerator.class.st b/src/Moose-Core-Generator/MooseModelGenerator.class.st index 55b42755e..71d8903b2 100644 --- a/src/Moose-Core-Generator/MooseModelGenerator.class.st +++ b/src/Moose-Core-Generator/MooseModelGenerator.class.st @@ -55,3 +55,11 @@ MooseModelGenerator >> defineHierarchy [ ] + +{ #category : 'definition' } +MooseModelGenerator >> newBuilder [ + + ^ super newBuilder + withoutModel; + yourself +] diff --git a/src/Moose-Core/MooseTEntityCreator.trait.st b/src/Moose-Core/MooseTEntityCreator.trait.st deleted file mode 100644 index e1247b626..000000000 --- a/src/Moose-Core/MooseTEntityCreator.trait.st +++ /dev/null @@ -1,63 +0,0 @@ -" -This trait is used by Famix models. -It provides an API for creating entities and adding them to the model. - - -" -Trait { - #name : 'MooseTEntityCreator', - #category : 'Moose-Core-Model', - #package : 'Moose-Core', - #tag : 'Model' -} - -{ #category : 'meta' } -MooseTEntityCreator classSide >> annotation [ - - - - - ^ self -] - -{ #category : 'entity creation' } -MooseTEntityCreator >> newAbstractGroup [ - - - ^ self add: MooseAbstractGroup new -] - -{ #category : 'entity creation' } -MooseTEntityCreator >> newEntity [ - - - ^ self add: MooseEntity new -] - -{ #category : 'entity creation' } -MooseTEntityCreator >> newGroup [ - - - ^ self add: MooseGroup new -] - -{ #category : 'entity creation' } -MooseTEntityCreator >> newModel [ - - - ^ self add: MooseModel new -] - -{ #category : 'entity creation' } -MooseTEntityCreator >> newObject [ - - - ^ self add: MooseObject new -] - -{ #category : 'entity creation' } -MooseTEntityCreator >> newSpecializedGroup [ - - - ^ self add: MooseSpecializedGroup new -] From ee4afa12f75795822dd7247d3876d139a8043146 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 14 Apr 2026 04:07:30 +0200 Subject: [PATCH 013/121] Fix generated method overriding manual methods + some new migrations --- .../FmxMBModel.class.st | 19 +++++++++++-------- .../FmxMethodAddition.class.st | 10 ++++++---- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st index cee06c7d5..820766c45 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st @@ -42,21 +42,24 @@ FmxMBModel >> generateAnnotationIn: aModelClass [ { #category : 'generating-methods' } FmxMBModel >> generateFileImportMethodsIn: aModelClass [ - self builder configuration shouldGenerateFileImportHelpers ifFalse: [ - ^ self ]. + self builder configuration shouldGenerateFileImportHelpers ifFalse: [ ^ self ]. - aModelClass classSide - compile: 'canBeImportedFromFile + self + addMethod: 'canBeImportedFromFile ^true' - classified: 'testing'. + in: aModelClass + classSide: true + protocol: #testing. - aModelClass classSide - compile: ('importingContextClass + self + addMethod: ('importingContextClass ^ {1}' format: { self builder importingContextName }) - classified: 'accessing' + in: aModelClass + classSide: true + protocol: #accessing ] { #category : 'generating-methods' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st index 4b69a507b..247e940aa 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st @@ -44,10 +44,12 @@ FmxMethodAddition >> isRequired [ ^ self realClass ifNil: [ true ] ifNotNil: [ :class | - class methods - detect: [ :method | method sourceCode = sourceCode ] - ifFound: [ :method | (method protocolName = protocol) not ] - ifNone: [ true ] ] + class + compiledMethodAt: (self class compiler + permitUndeclared: true; + compile: sourceCode) selector + ifPresent: [ :method | (method hasPragmaNamed: #generated) and: (method sourceCode ~= sourceCode or: [ (method protocolName = protocol) not ]) ] + ifAbsent: [ true ] ] ] { #category : 'printing' } From d4ef305a45e44915024d5b8cc9c4933ed450b120 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 14 Apr 2026 17:31:52 +0200 Subject: [PATCH 014/121] Add suggar + migrate one more method --- .../FmxMBBehavior.class.st | 46 ++++++++++--------- .../FmxMBClass.class.st | 19 ++------ 2 files changed, 27 insertions(+), 38 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 0d5840866..85a9e7a94 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -59,6 +59,12 @@ FmxMBBehavior >> addMethod: code in: class classSide: boolean protocol: protocol ifFalse: [ class ]) compile: code classified: protocol ] +{ #category : 'generating' } +FmxMBBehavior >> addMethod: code in: class protocol: protocol [ + + ^ self addMethod: code in: class classSide: false protocol: protocol +] + { #category : 'accessing' } FmxMBBehavior >> addRelation: aRelation with: anotherClass [ @@ -299,7 +305,6 @@ FmxMBBehavior >> generateAddToCollectionFor: aClass [ sideName capitalized asSingular. sideName }) in: aClass - classSide: false protocol: #adding ] ] ] @@ -307,6 +312,7 @@ FmxMBBehavior >> generateAddToCollectionFor: aClass [ FmxMBBehavior >> generateAnnotationIn: aRealClass [ | aSuperclassName | + self flag: #todo. "Simplify" aSuperclassName := self classGeneralization = self defaultSuperclass ifTrue: [ self defaultSuperclassName ] ifFalse: [ @@ -314,8 +320,8 @@ FmxMBBehavior >> generateAnnotationIn: aRealClass [ ifNil: [ self defaultSuperclassName ] ifNotNil: [ :cg | cg realClass name ] ]. - aRealClass classSide - compile: ('annotation + self + addMethod: ('annotation @@ -325,7 +331,9 @@ FmxMBBehavior >> generateAnnotationIn: aRealClass [ aSuperclassName. self builder safeAnnotationPackageName. self optionalPragma }) - classified: 'meta' + in: aRealClass + classSide: true + protocol: #meta ] { #category : 'generating' } @@ -344,26 +352,24 @@ FmxMBBehavior >> generateMethodsToRemoveFromTraitCompositionFor: aBehavioral [ FmxMBBehavior >> generateNavigationGroupsFor: aClass [ self allNavigationGroups do: [ :aNavigationGroup | - | sideName | + | sideName code | sideName := aNavigationGroup entity name. - self - addMethod: ((aNavigationGroup entity isMany - ifTrue: [ - '{1} + code := (aNavigationGroup entity isMany + ifTrue: [ + '{1} ^ MooseSpecializedGroup withAll: self {3} asSet' ] - ifFalse: [ - '{1} + ifFalse: [ + '{1} ^ MooseSpecializedGroup with: self {3}' ]) format: { - (sideName , 'Group'). - sideName capitalized. - sideName }) - in: aClass - classSide: false - protocol: #navigation ] + (sideName , 'Group'). + sideName capitalized. + sideName }. + + self addMethod: code in: aClass protocol: #navigation ] ] { #category : 'generating' } @@ -386,11 +392,7 @@ FmxMBBehavior >> generateRemoteAccessors [ { #category : 'generating' } FmxMBBehavior >> generateTestingMethodsIn: aClass [ - self testingSelectors do: [ :aSelector | - aClass instanceSide compile: ('{1}\\ \ ^ true' withCRs format: { aSelector }) - classified: #testing. ] - - + self testingSelectors do: [ :aSelector | self addMethod: (aSelector , '\\ \ ^ true') withCRs in: aClass protocol: #testing ] ] { #category : 'generalization' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 67388b98a..11f494b3c 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -126,11 +126,7 @@ FmxMBClass >> generateEqualsMethodFor: aClass [ << (propertiesForEqualityCheck at: idx) ]. 2 to: propertiesForEqualityCheck size do: [ :idx | stream << '] ' ] ] ]. - self - addMethod: code - in: aClass - classSide: false - protocol: #comparing ] + self addMethod: code in: aClass protocol: #comparing ] ] { #category : 'generating-methods' } @@ -155,11 +151,7 @@ FmxMBClass >> generateHashMethodFor: aClass [ << (propertiesForEqualityCheck at: idx); << ' hash ' ] ] ]. - self - addMethod: code - in: aClass - classSide: false - protocol: #comparing ] + self addMethod: code in: aClass protocol: #comparing ] ] { #category : 'generating' } @@ -213,12 +205,7 @@ FmxMBClass >> generateTestingMethodsIn: aClass [ selectors do: [ :sel | | selectorsFromTraits | selectorsFromTraits := self traitGeneralizations flatCollect: #testingSelectors. - (selectorsFromTraits includes: sel) ifFalse: [ - self - addMethod: (sel , '\\ \ ^ false') withCRs - in: aClass - classSide: false - protocol: #testing ] ] ] ] ]. + (selectorsFromTraits includes: sel) ifFalse: [ self addMethod: (sel , '\\ \ ^ false') withCRs in: aClass protocol: #testing ] ] ] ] ]. super generateTestingMethodsIn: aClass ] From b61d02ebc055f6ef1b7242e4fd9fd2f491ce2268 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 14 Apr 2026 17:42:01 +0200 Subject: [PATCH 015/121] Migrate more methods to new infra --- .../FmxMBClassGroup.class.st | 8 ++-- .../FmxMBEntityCreatorTrait.class.st | 25 +++++------ .../FmxMBImportingContext.class.st | 42 ++++++++++--------- .../FmxMBModel.class.st | 30 +++++++------ .../FmxMBTrait.class.st | 7 ++-- 5 files changed, 60 insertions(+), 52 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st index bf1f0a0ff..4637844a7 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st @@ -29,12 +29,14 @@ FmxMBClassGroup >> generate [ { #category : 'generating-methods' } FmxMBClassGroup >> generateMooseGroupAnnotationIn: aRealClass as: aName superclass: aSuperclass [ - aRealClass classSide - compile: ('annotation{1} + self + addMethod: ('annotation{1} ^ {1}' format: { aName }) - classified: 'groups' + in: aRealClass + classSide: true + protocol: #groups ] { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st index 683da89cd..75ee211d3 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st @@ -12,16 +12,16 @@ Class { { #category : 'generating' } FmxMBEntityCreatorTrait >> generateEntityCreationMethodFor: aClass [ - - self builder environment - compile: ('new{1} + self flag: #todo. "Do we need the real class? Isn't it the parameter?" + self + addMethod: ('new{1} - ^ self add: {2} new' format: { + ^ self add: {2} new' format: { aClass name. aClass fullName }) in: self realClass - classified: 'entity creation' + protocol: #'entity creation' ] { #category : 'generating' } @@ -38,15 +38,16 @@ FmxMBEntityCreatorTrait >> generateEntityCreationMethods [ { #category : 'generating' } FmxMBEntityCreatorTrait >> generateNamedEntityCreationMethodFor: aClass [ - ^ self builder environment - compile: ('new{1}Named: aName + self flag: #todo. "Do we need the real class? Isn't it the parameter?" + self + addMethod: ('new{1}Named: aName - ^ self add: ({2} named: aName)' format: { - aClass name. - aClass fullName }) - in: self realClass - classified: 'entity creation' + ^ self add: ({2} named: aName)' format: { + aClass name. + aClass fullName }) + in: self realClass + protocol: #'entity creation' ] { #category : 'initialization' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index 194f35a63..f37a3fcdd 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -74,25 +74,25 @@ FmxMBImportingContext >> generate [ { #category : 'generating-methods' } FmxMBImportingContext >> generateImportAssociation: aFmxMBAssociationClass in: aClass [ - aClass - compile: ('import{1} + self + addMethod: ('import{1} - ^ self importAssociation: (self class fm3ClassNamed: #{1})' format: - { aFmxMBAssociationClass name }) - classified: 'importing' + ^ self importAssociation: (self class fm3ClassNamed: #{1})' format: { aFmxMBAssociationClass name }) + in: aClass + protocol: #importing ] { #category : 'generating-methods' } FmxMBImportingContext >> generateImportConcreteEntity: aFmxMBClass in: aClass [ - aClass - compile: ('import{1} + self + addMethod: ('import{1} - ^ self importConcreteEntity: (self class fm3ClassNamed: #{1})' - format: { aFmxMBClass name }) - classified: 'importing' + ^ self importConcreteEntity: (self class fm3ClassNamed: #{1})' format: { aFmxMBClass name }) + in: aClass + protocol: #importing ] { #category : 'generating-methods' } @@ -113,12 +113,14 @@ FmxMBImportingContext >> generateImportIn: aClass [ { #category : 'generating-methods' } FmxMBImportingContext >> generateImportingContextMetamodelIn: aClass [ - aClass classSide - compile: ('importedMetamodel + self + addMethod: ('importedMetamodel ^ {1}Model metamodel' format: { self prefix }) - classified: 'accessing' + in: aClass + classSide: true + protocol: #accessing ] { #category : 'generating' } @@ -132,16 +134,16 @@ FmxMBImportingContext >> generateMethodsIn: aClass [ { #category : 'generating-methods' } FmxMBImportingContext >> generateShouldImportIn: aClass [ - self builder classes do: [ :each | - "No need to generate methods for model and groups." - (each isModelClass or: [ - each isMetamodelClassGroup or: [ each isAbstractClass ] ]) ifFalse: [ - aClass - compile: ('shouldImport{1} + self builder classes do: [ :each | + "No need to generate methods for model and groups." + (each isModelClass or: [ each isMetamodelClassGroup or: [ each isAbstractClass ] ]) ifFalse: [ + self + addMethod: ('shouldImport{1} ^ self shouldImport: #{1}' format: { each name }) - classified: 'testing' ] ] + in: aClass + protocol: #testing ] ] ] { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st index 820766c45..186d08093 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st @@ -81,20 +81,24 @@ FmxMBModel >> generateRootMetamodelMethodIn: aClass [ { #category : 'generating-methods' } FmxMBModel >> generateSubmetamodelsMethodIn: aModelClass [ - self builder allSubBuilders ifNotEmpty: [ :subBuilders | - aModelClass classSide - compile: ('allSubmetamodelsPackagesNames + self builder allSubBuilders ifNotEmpty: [ :subBuilders | + | code | + code := String streamContents: [ :stream | + | packages | + stream nextPutAll: 'allSubmetamodelsPackagesNames - ^ #({1})' format: { (String streamContents: [ :stream | - | packages | - packages := (subBuilders collect: [ :subBuilder | - subBuilder configuration packageName ]) - asOrderedCollection. - packages sort: #yourself descending. - packages - do: [ :package | stream print: package ] - separatedBy: [ stream space ] ]) }) - classified: 'accessing' ] + ^ #('. + + packages := (subBuilders collect: [ :subBuilder | subBuilder configuration packageName ]) asOrderedCollection sorted: #yourself descending. + packages do: [ :package | stream print: package ] separatedBy: [ stream space ]. + + stream nextPut: $) ]. + + self + addMethod: code + in: aModelClass + classSide: true + protocol: #accessing ] ] { #category : 'generating-methods' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index 4c831a991..0ddace458 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -82,10 +82,9 @@ FmxMBTrait >> generate [ { #category : 'generating' } FmxMBTrait >> generateRemoteAccessors [ - (self properties select: [ :prop | - prop isRemote and: [ - (self realClass localSelectors includes: prop name) not ] ]) do: [ - :each | each generateAccessorsIn: self realClass ] + + (self properties select: [ :prop | prop isRemote and: [ (self realClass localSelectors includes: prop name) not ] ]) do: [ :each | + each generateAccessorsIn: self realClass ] ] { #category : 'generating' } From a7658e6b7bfe5166cf0a54e7f90d940a8b65d45a Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 14 Apr 2026 17:51:46 +0200 Subject: [PATCH 016/121] Save the changes to apply before rejecting those that would not have any impact until the end of the collection in order to manage removals later --- .../FmxMBRealRingEnvironment.class.st | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st index 520ab4c76..c717a0e64 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st @@ -19,18 +19,10 @@ FmxMBRealRingEnvironment class >> for: aBuilder [ yourself. ] -{ #category : 'adding' } -FmxMBRealRingEnvironment >> addChange: aFamixChange [ - - aFamixChange isRequired ifFalse: [ ^ self ]. - - changesToApply add: aFamixChange -] - { #category : 'installing' } FmxMBRealRingEnvironment >> addMethod: sourceCode in: aClassName classSide: aBoolean protocol: protocol [ - self addChange: (FmxMethodAddition + changesToApply add: (FmxMethodAddition className: aClassName isClassSide: aBoolean sourceCode: sourceCode @@ -42,6 +34,7 @@ FmxMBRealRingEnvironment >> apply [ self collectChangesToApply. "Sort the changes before applying them" + (changesToApply sorted: #priority ascending) do: [ :change | change apply ] ] @@ -107,7 +100,10 @@ FmxMBRealRingEnvironment >> collectChangesToApply [ self recordPackagesChangesFor: resolvedPackages. self recordClassesChangesFor: resolvedClasses. - self recordRemovalOfGeneratedEntitiesIn: resolvedPackages notPresentIn: resolvedClasses + self recordRemovalOfGeneratedEntitiesIn: resolvedPackages notPresentIn: resolvedClasses. + + "Reject changes that would not change anything on the current system." + changesToApply := changesToApply select: [ :change | change isRequired ]. ] { #category : 'installing' } From 711a9421f3163345cea5534680f0b8d972666504 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 14 Apr 2026 17:53:11 +0200 Subject: [PATCH 017/121] There is npo need for a "real" environment since now the other one is ramed stub --- .../FamixMetamodelBuilder.class.st | 2 +- ...class.st => FmxMBRingEnvironment.class.st} | 68 +++++++++---------- .../FmxMBStubEnvironment.class.st | 2 +- 3 files changed, 36 insertions(+), 36 deletions(-) rename src/Famix-MetamodelBuilder-Core/{FmxMBRealRingEnvironment.class.st => FmxMBRingEnvironment.class.st} (85%) diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index eeeac0141..65cb1250d 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -363,7 +363,7 @@ FamixMetamodelBuilder >> importingContextName [ FamixMetamodelBuilder >> initialize [ super initialize. - environment := FmxMBRealRingEnvironment for: self. + environment := FmxMBRingEnvironment for: self. configuration := FmxMBConfiguration new. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st similarity index 85% rename from src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st rename to src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index c717a0e64..81803ea61 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRealRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -1,5 +1,5 @@ Class { - #name : 'FmxMBRealRingEnvironment', + #name : 'FmxMBRingEnvironment', #superclass : 'Object', #instVars : [ 'changesToApply', @@ -12,7 +12,7 @@ Class { } { #category : 'instance creation' } -FmxMBRealRingEnvironment class >> for: aBuilder [ +FmxMBRingEnvironment class >> for: aBuilder [ ^ self new builder: aBuilder; @@ -20,7 +20,7 @@ FmxMBRealRingEnvironment class >> for: aBuilder [ ] { #category : 'installing' } -FmxMBRealRingEnvironment >> addMethod: sourceCode in: aClassName classSide: aBoolean protocol: protocol [ +FmxMBRingEnvironment >> addMethod: sourceCode in: aClassName classSide: aBoolean protocol: protocol [ changesToApply add: (FmxMethodAddition className: aClassName @@ -30,7 +30,7 @@ FmxMBRealRingEnvironment >> addMethod: sourceCode in: aClassName classSide: aBoo ] { #category : 'installing' } -FmxMBRealRingEnvironment >> apply [ +FmxMBRingEnvironment >> apply [ self collectChangesToApply. "Sort the changes before applying them" @@ -39,47 +39,47 @@ FmxMBRealRingEnvironment >> apply [ ] { #category : 'accessing' } -FmxMBRealRingEnvironment >> basicGroupSuperclass [ +FmxMBRingEnvironment >> basicGroupSuperclass [ ^ self ringEnvironment ensureClassNamed: #MooseSpecializedGroup ] { #category : 'accessing' } -FmxMBRealRingEnvironment >> basicImportingContextSuperclass [ +FmxMBRingEnvironment >> basicImportingContextSuperclass [ ^ self ringEnvironment ensureClassNamed: #FamixImportingContext ] { #category : 'accessing' } -FmxMBRealRingEnvironment >> basicModelSuperclass [ +FmxMBRingEnvironment >> basicModelSuperclass [ ^ self ringEnvironment ensureClassNamed: #MooseModel ] { #category : 'accessing' } -FmxMBRealRingEnvironment >> basicSuperclass [ +FmxMBRingEnvironment >> basicSuperclass [ ^ self ringEnvironment ensureClassNamed: #MooseEntity ] { #category : 'accessing' } -FmxMBRealRingEnvironment >> basicTrait [ +FmxMBRingEnvironment >> basicTrait [ ^ self ringEnvironment ensureClassNamed: #Trait ] { #category : 'accessing' } -FmxMBRealRingEnvironment >> builder [ +FmxMBRingEnvironment >> builder [ ^ builder ] { #category : 'accessing' } -FmxMBRealRingEnvironment >> builder: anObject [ +FmxMBRingEnvironment >> builder: anObject [ builder := anObject ] { #category : 'testing' } -FmxMBRealRingEnvironment >> changesToApply [ +FmxMBRingEnvironment >> changesToApply [ "Return the list of changes to apply if a regeneration would cause changes in the system." self collectChangesToApply. @@ -87,13 +87,13 @@ FmxMBRealRingEnvironment >> changesToApply [ ] { #category : 'accessing' } -FmxMBRealRingEnvironment >> classNamed: aClassName [ +FmxMBRingEnvironment >> classNamed: aClassName [ ^ self ringEnvironment ask behaviorNamed: aClassName ] { #category : 'installing' } -FmxMBRealRingEnvironment >> collectChangesToApply [ +FmxMBRingEnvironment >> collectChangesToApply [ | resolvedClasses resolvedPackages | resolvedPackages := ringEnvironment ask packages select: [ :each | each isRingResolved ]. resolvedClasses := ringEnvironment ask behaviors select: [ :each | each isRingResolved and: [ each superclass isRingResolved ] ]. @@ -107,13 +107,13 @@ FmxMBRealRingEnvironment >> collectChangesToApply [ ] { #category : 'installing' } -FmxMBRealRingEnvironment >> compile: aSource in: aClass classified: aProtocol [ +FmxMBRingEnvironment >> compile: aSource in: aClass classified: aProtocol [ aClass compile: aSource classified: aProtocol. ] { #category : 'installing' } -FmxMBRealRingEnvironment >> compile: aSource in: aClass classified: aProtocol package: aPackageName [ +FmxMBRingEnvironment >> compile: aSource in: aClass classified: aProtocol package: aPackageName [ | category | category := '*' , aPackageName. @@ -122,7 +122,7 @@ FmxMBRealRingEnvironment >> compile: aSource in: aClass classified: aProtocol pa ] { #category : 'as yet unclassified' } -FmxMBRealRingEnvironment >> createClassNamed: className superclass: superclassName traitNames: traitNames slots: slots in: packageName [ +FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitNames: traitNames slots: slots in: packageName [ | aClass existingClass composition | existingClass := self ringEnvironment ask behaviorNamed: className. @@ -161,7 +161,7 @@ FmxMBRealRingEnvironment >> createClassNamed: className superclass: superclassNa ] { #category : 'as yet unclassified' } -FmxMBRealRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slots in: packageName [ +FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slots in: packageName [ | aPackage aTrait existingClass composition | existingClass := self ringEnvironment ask behaviorNamed: @@ -202,13 +202,13 @@ FmxMBRealRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: ] { #category : 'testing' } -FmxMBRealRingEnvironment >> hasBehaviorNamed: aClassName [ +FmxMBRingEnvironment >> hasBehaviorNamed: aClassName [ ^ self ringEnvironment ask includesClassNamed: aClassName ] { #category : 'initialization' } -FmxMBRealRingEnvironment >> initialize [ +FmxMBRingEnvironment >> initialize [ super initialize. changesToApply := OrderedCollection new. @@ -222,7 +222,7 @@ FmxMBRealRingEnvironment >> initialize [ ] { #category : 'installing' } -FmxMBRealRingEnvironment >> recordAdoptionOfClassDefinitionFrom: currentClass to: anRGClassModel [ +FmxMBRingEnvironment >> recordAdoptionOfClassDefinitionFrom: currentClass to: anRGClassModel [ | currentCustomSlots currentCustomSlotNames modelSlotDefinitions currentGeneratedSlots modelGeneratedSlots slotRemovals | (currentClass needToAdaptTo: anRGClassModel) ifFalse: [ ^ self ]. @@ -267,7 +267,7 @@ FmxMBRealRingEnvironment >> recordAdoptionOfClassDefinitionFrom: currentClass to ] { #category : 'installing' } -FmxMBRealRingEnvironment >> recordClassAdditionFromClass: aRGClass traits: traitsString slots: slotsString classSlots: classSlotsString sharedVariables: sharedVariablesString package: packageName tag: tagName [ +FmxMBRingEnvironment >> recordClassAdditionFromClass: aRGClass traits: traitsString slots: slotsString classSlots: classSlotsString sharedVariables: sharedVariablesString package: packageName tag: tagName [ self flag: #todo. "When P12 will be the minimal version used we should use the ShiftClassBuilder instead of manipulation a string. This would make the code a lot easier and we would not rely on compiler evaluation of strings to generate the classes." changesToApply add: (FmxClassAddition creationCode: ('Smalltalk classInstaller @@ -295,7 +295,7 @@ FmxMBRealRingEnvironment >> recordClassAdditionFromClass: aRGClass traits: trait ] { #category : 'installing' } -FmxMBRealRingEnvironment >> recordClassChangesFor: aRGClass [ +FmxMBRingEnvironment >> recordClassChangesFor: aRGClass [ | realClass | realClass := self class environment classNamed: aRGClass name. @@ -316,7 +316,7 @@ FmxMBRealRingEnvironment >> recordClassChangesFor: aRGClass [ ] { #category : 'installing' } -FmxMBRealRingEnvironment >> recordClassCommentChangeOf: realClass to: anRGClass [ +FmxMBRingEnvironment >> recordClassCommentChangeOf: realClass to: anRGClass [ | newComment | newComment := anRGClass comment content. @@ -326,7 +326,7 @@ FmxMBRealRingEnvironment >> recordClassCommentChangeOf: realClass to: anRGClass ] { #category : 'installing' } -FmxMBRealRingEnvironment >> recordClassesChangesFor: resolvedClasses [ +FmxMBRingEnvironment >> recordClassesChangesFor: resolvedClasses [ | sorted notSorted toMove | resolvedClasses ifEmpty: [ ^ self ]. @@ -343,7 +343,7 @@ FmxMBRealRingEnvironment >> recordClassesChangesFor: resolvedClasses [ ] { #category : 'installing' } -FmxMBRealRingEnvironment >> recordMethodsAdoptionsOf: realClass to: anRGClass realClassName: aClassName [ +FmxMBRingEnvironment >> recordMethodsAdoptionsOf: realClass to: anRGClass realClassName: aClassName [ | generatedMethodsOfRealClass generatedMethodNamesOfRealClass | generatedMethodsOfRealClass := realClass ifNil: [ {} ] @@ -369,7 +369,7 @@ FmxMBRealRingEnvironment >> recordMethodsAdoptionsOf: realClass to: anRGClass re ] { #category : 'installing' } -FmxMBRealRingEnvironment >> recordPackagesChangesFor: resolvedPackages [ +FmxMBRingEnvironment >> recordPackagesChangesFor: resolvedPackages [ resolvedPackages reject: [ :each | self packageOrganizer hasPackage: each name ] @@ -377,7 +377,7 @@ FmxMBRealRingEnvironment >> recordPackagesChangesFor: resolvedPackages [ ] { #category : 'accessing' } -FmxMBRealRingEnvironment >> recordRemovalOfGeneratedEntitiesIn: resolvedPackages notPresentIn: resolvedClasses [ +FmxMBRingEnvironment >> recordRemovalOfGeneratedEntitiesIn: resolvedPackages notPresentIn: resolvedClasses [ "Since the last generation it is possible some behaviorals were removed from the generator. In that case we should remove them. We will remove all classes and traits of Famix that are not part of the current generator." resolvedPackages @@ -389,24 +389,24 @@ FmxMBRealRingEnvironment >> recordRemovalOfGeneratedEntitiesIn: resolvedPackages ] { #category : 'public registration' } -FmxMBRealRingEnvironment >> registerPackage: aPackageName [ +FmxMBRingEnvironment >> registerPackage: aPackageName [ ^ self ringEnvironment ensurePackageNamed: aPackageName. ] { #category : 'accessing' } -FmxMBRealRingEnvironment >> ringEnvironment [ +FmxMBRingEnvironment >> ringEnvironment [ ^ ringEnvironment ] { #category : 'accessing' } -FmxMBRealRingEnvironment >> slotNamed: slotName [ +FmxMBRingEnvironment >> slotNamed: slotName [ ^ (RGUnknownSlot named: slotName asSymbol) expression: #FMProperty ] { #category : 'accessing' } -FmxMBRealRingEnvironment >> slotNamed: slotName cardinality: cardinality type: type opposite: oppositeName [ +FmxMBRingEnvironment >> slotNamed: slotName cardinality: cardinality type: type opposite: oppositeName [ | cardinalityClassName | @@ -420,7 +420,7 @@ FmxMBRealRingEnvironment >> slotNamed: slotName cardinality: cardinality type: t ] { #category : 'accessing' } -FmxMBRealRingEnvironment >> slotNamed: slotName defaultValue: aValue [ +FmxMBRingEnvironment >> slotNamed: slotName defaultValue: aValue [ aValue ifNil: [ ^ self slotNamed: slotName ]. ^ (RGUnknownSlot named: slotName asSymbol) expression: @@ -428,7 +428,7 @@ FmxMBRealRingEnvironment >> slotNamed: slotName defaultValue: aValue [ ] { #category : 'installing' } -FmxMBRealRingEnvironment >> traitStringFrom: realClass to: aRGClass [ +FmxMBRingEnvironment >> traitStringFrom: realClass to: aRGClass [ "We need to collect the generated traits + the custom traits added by the user." diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBStubEnvironment.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBStubEnvironment.class.st index 43cb101cd..a40704d0f 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBStubEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBStubEnvironment.class.st @@ -1,6 +1,6 @@ Class { #name : 'FmxMBStubEnvironment', - #superclass : 'FmxMBRealRingEnvironment', + #superclass : 'FmxMBRingEnvironment', #category : 'Famix-MetamodelBuilder-Tests-Helpers', #package : 'Famix-MetamodelBuilder-Tests', #tag : 'Helpers' From 8d93889d53eddff187e702cdaa81b91597a5f798 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 14 Apr 2026 18:08:20 +0200 Subject: [PATCH 018/121] Create packages without using ring --- .../FmxMBRingEnvironment.class.st | 59 +++++++++---------- .../FmxPackageAddition.class.st | 6 ++ 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 81803ea61..e4c4f0837 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -78,6 +78,12 @@ FmxMBRingEnvironment >> builder: anObject [ builder := anObject ] +{ #category : 'cleaning' } +FmxMBRingEnvironment >> changesOfType: aClass [ + + ^ changesToApply select: [ :change | change isKindOf: aClass ] +] + { #category : 'testing' } FmxMBRingEnvironment >> changesToApply [ "Return the list of changes to apply if a regeneration would cause changes in the system." @@ -98,10 +104,9 @@ FmxMBRingEnvironment >> collectChangesToApply [ resolvedPackages := ringEnvironment ask packages select: [ :each | each isRingResolved ]. resolvedClasses := ringEnvironment ask behaviors select: [ :each | each isRingResolved and: [ each superclass isRingResolved ] ]. - self recordPackagesChangesFor: resolvedPackages. self recordClassesChangesFor: resolvedClasses. self recordRemovalOfGeneratedEntitiesIn: resolvedPackages notPresentIn: resolvedClasses. - + "Reject changes that would not change anything on the current system." changesToApply := changesToApply select: [ :change | change isRequired ]. ] @@ -133,29 +138,23 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t composition := RGTraitComposition parent: aClass. aClass traitComposition: composition. - traitNames do: [ :each | - composition addTransformation: - (self ringEnvironment ensureTraitNamed: each) ]. + traitNames do: [ :each | composition addTransformation: (self ringEnvironment ensureTraitNamed: each) ]. - aClass package: - (self ringEnvironment ensurePackageNamed: packageName). + self flag: #todo. "Should not make it in dev branch of Moose. The ring package creation should be removed." + self ensurePackageNamed: packageName. + aClass package: (self ringEnvironment ensurePackageNamed: packageName). aClass layout makeResolved. - slots do: [ :slotInBadEnvironment | - | slot | - slot := slotInBadEnvironment needsFullDefinition - ifTrue: [ - (RGUnknownSlot - named: slotInBadEnvironment name - parent: aClass layout) - expression: slotInBadEnvironment expression; - yourself ] - ifFalse: [ - RGInstanceVariableSlot - named: slotInBadEnvironment name - parent: aClass layout ]. - aClass layout addSlot: slot. - slot propertyNamed: #isGenerated put: true ]. + slots do: [ :slotInBadEnvironment | + | slot | + slot := slotInBadEnvironment needsFullDefinition + ifTrue: [ + (RGUnknownSlot named: slotInBadEnvironment name parent: aClass layout) + expression: slotInBadEnvironment expression; + yourself ] + ifFalse: [ RGInstanceVariableSlot named: slotInBadEnvironment name parent: aClass layout ]. + aClass layout addSlot: slot. + slot propertyNamed: #isGenerated put: true ]. ^ aClass ] @@ -201,6 +200,14 @@ FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slot ^ aTrait ] +{ #category : 'private' } +FmxMBRingEnvironment >> ensurePackageNamed: packageName [ + + ((self changesOfType: FmxPackageAddition) anySatisfy: [ :change | change packageName = packageName ]) ifTrue: [ ^ self ]. + + changesToApply add: (FmxPackageAddition named: packageName) +] + { #category : 'testing' } FmxMBRingEnvironment >> hasBehaviorNamed: aClassName [ @@ -368,14 +375,6 @@ FmxMBRingEnvironment >> recordMethodsAdoptionsOf: realClass to: anRGClass realCl ifNotEmpty: [ :methods | methods do: [ :method | self addMethod: method sourceCode in: aClassName classSide: anRGClass isClassSide protocol: method protocol ] ] ] -{ #category : 'installing' } -FmxMBRingEnvironment >> recordPackagesChangesFor: resolvedPackages [ - - resolvedPackages - reject: [ :each | self packageOrganizer hasPackage: each name ] - thenDo: [ :each | changesToApply add: (FmxPackageAddition named: each name) ] -] - { #category : 'accessing' } FmxMBRingEnvironment >> recordRemovalOfGeneratedEntitiesIn: resolvedPackages notPresentIn: resolvedClasses [ "Since the last generation it is possible some behaviorals were removed from the generator. In that case we should remove them. We will remove all classes and traits of Famix that are not part of the current generator." diff --git a/src/Famix-MetamodelBuilder-Core/FmxPackageAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxPackageAddition.class.st index ebf584ef2..77fa17849 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxPackageAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxPackageAddition.class.st @@ -46,6 +46,12 @@ FmxPackageAddition >> apply [ self packageOrganizer ensurePackage: self packageName ] +{ #category : 'testing' } +FmxPackageAddition >> isRequired [ + + ^ (self packageOrganizer hasPackage: self packageName) not +] + { #category : 'accessing' } FmxPackageAddition >> packageName [ From 7be9c8aa887b33a088df25b49d476af5b49ba39c Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 14 Apr 2026 18:18:38 +0200 Subject: [PATCH 019/121] Remove the need of Ring package to find entities to remove during Metamodel generation --- .../FmxMBRingEnvironment.class.st | 23 +++++++++++-------- .../FmxPackageAddition.class.st | 8 ++++++- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index e4c4f0837..4511e7892 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -100,12 +100,11 @@ FmxMBRingEnvironment >> classNamed: aClassName [ { #category : 'installing' } FmxMBRingEnvironment >> collectChangesToApply [ - | resolvedClasses resolvedPackages | - resolvedPackages := ringEnvironment ask packages select: [ :each | each isRingResolved ]. + | resolvedClasses | resolvedClasses := ringEnvironment ask behaviors select: [ :each | each isRingResolved and: [ each superclass isRingResolved ] ]. self recordClassesChangesFor: resolvedClasses. - self recordRemovalOfGeneratedEntitiesIn: resolvedPackages notPresentIn: resolvedClasses. + self recordRemovalOfGeneratedEntitiesNotPresentIn: resolvedClasses. "Reject changes that would not change anything on the current system." changesToApply := changesToApply select: [ :change | change isRequired ]. @@ -376,15 +375,19 @@ FmxMBRingEnvironment >> recordMethodsAdoptionsOf: realClass to: anRGClass realCl ] { #category : 'accessing' } -FmxMBRingEnvironment >> recordRemovalOfGeneratedEntitiesIn: resolvedPackages notPresentIn: resolvedClasses [ +FmxMBRingEnvironment >> recordRemovalOfGeneratedEntitiesNotPresentIn: resolvedClasses [ "Since the last generation it is possible some behaviorals were removed from the generator. In that case we should remove them. We will remove all classes and traits of Famix that are not part of the current generator." - resolvedPackages - collect: [ :e | e name asPackageIfAbsent: [ nil ] ] - thenDo: [ :package | - package - ifNotNil: - [ package definedClasses select: #isMetamodelEntity thenDo: [ :class | resolvedClasses detect: [ :rgClass | rgClass name = class name ] ifNone: [ changesToApply add: (FmxClassRemoval class: class) ] ] ] ] + (self changesOfType: FmxPackageAddition) + collect: #systemPackage + thenDo: [ :package | + package ifNotNil: [ + package definedClasses + select: #isMetamodelEntity + thenDo: [ :class | + resolvedClasses + detect: [ :rgClass | rgClass name = class name ] + ifNone: [ changesToApply add: (FmxClassRemoval class: class) ] ] ] ] ] { #category : 'public registration' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxPackageAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxPackageAddition.class.st index 77fa17849..1895c2846 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxPackageAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxPackageAddition.class.st @@ -49,7 +49,7 @@ FmxPackageAddition >> apply [ { #category : 'testing' } FmxPackageAddition >> isRequired [ - ^ (self packageOrganizer hasPackage: self packageName) not + ^ self systemPackage isNil ] { #category : 'accessing' } @@ -72,3 +72,9 @@ FmxPackageAddition >> printOn: aStream [ nextPutAll: (packageName ifNil: [ #unamed ]); nextPut: $) ] + +{ #category : 'accessing' } +FmxPackageAddition >> systemPackage [ + + ^ self packageOrganizer packageNamed: self packageName ifAbsent: [ nil ] +] From 3600d62171d633641abd64f23741e48ab1d4a30f Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 14 Apr 2026 18:36:34 +0200 Subject: [PATCH 020/121] Factorize some code --- .../FmxMBClass.class.st | 15 ++++--- .../FmxMBRingEnvironment.class.st | 42 +++++++++---------- .../FmxMBTrait.class.st | 7 ++-- .../FmxMBVisitorTrait.class.st | 9 ++-- 4 files changed, 34 insertions(+), 39 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 11f494b3c..fb3158c7f 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -63,18 +63,17 @@ FmxMBClass >> generate [ self willGenerate ifFalse: [ ^ self ]. superclassName := self classGeneralization - ifNil: [ self defaultSuperclassName ] - ifNotNil: [ :class | class realClass name ]. + ifNil: [ self defaultSuperclassName ] + ifNotNil: [ :class | class realClass name ]. aClass := self builder environment createClassNamed: self fullName asSymbol superclass: superclassName traitNames: self allTraitNames slots: self slotDefinitions - in: self packageName. - - aClass tagWith: self tag. - aClass comment content: self commentWithRelations. + in: self packageName + tag: self tag + comment: self commentWithRelations. self realClass: aClass. @@ -90,9 +89,9 @@ FmxMBClass >> generate [ self generateNavigationGroupsFor: aClass. self generateAddToCollectionFor: aClass. - + self generateEqualsMethodFor: aClass. - self generateHashMethodFor: aClass. + self generateHashMethodFor: aClass ] { #category : 'generating-methods' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 4511e7892..f74119c08 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -126,7 +126,7 @@ FmxMBRingEnvironment >> compile: aSource in: aClass classified: aProtocol packag ] { #category : 'as yet unclassified' } -FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitNames: traitNames slots: slots in: packageName [ +FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitNames: traitNames slots: slots in: packageName tag: tag comment: comment [ | aClass existingClass composition | existingClass := self ringEnvironment ask behaviorNamed: className. @@ -154,16 +154,18 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t ifFalse: [ RGInstanceVariableSlot named: slotInBadEnvironment name parent: aClass layout ]. aClass layout addSlot: slot. slot propertyNamed: #isGenerated put: true ]. + + aClass tagWith: tag. + aClass comment content: comment. ^ aClass ] { #category : 'as yet unclassified' } -FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slots in: packageName [ +FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slots in: packageName tag: tag comment: comment [ | aPackage aTrait existingClass composition | - existingClass := self ringEnvironment ask behaviorNamed: - traitName asSymbol. + existingClass := self ringEnvironment ask behaviorNamed: traitName asSymbol. aPackage := self ringEnvironment ensurePackageNamed: packageName. @@ -173,28 +175,24 @@ FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slot composition := RGTraitComposition parent: aTrait. aTrait traitComposition: composition. - traitNames do: [ :each | - composition addTransformation: - (self ringEnvironment ensureTraitNamed: each) ]. + traitNames do: [ :each | composition addTransformation: (self ringEnvironment ensureTraitNamed: each) ]. aTrait package: aPackage. aTrait layout makeResolved. - slots do: [ :slotInBadEnvironment | - | slot | - slot := slotInBadEnvironment needsFullDefinition - ifTrue: [ - (RGUnknownSlot - named: slotInBadEnvironment name - parent: aTrait layout) - expression: slotInBadEnvironment expression; - yourself ] - ifFalse: [ - RGInstanceVariableSlot - named: slotInBadEnvironment name - parent: aTrait layout ]. - aTrait layout addSlot: slot. - slot propertyNamed: #isGenerated put: true ]. + slots do: [ :slotInBadEnvironment | + | slot | + slot := slotInBadEnvironment needsFullDefinition + ifTrue: [ + (RGUnknownSlot named: slotInBadEnvironment name parent: aTrait layout) + expression: slotInBadEnvironment expression; + yourself ] + ifFalse: [ RGInstanceVariableSlot named: slotInBadEnvironment name parent: aTrait layout ]. + aTrait layout addSlot: slot. + slot propertyNamed: #isGenerated put: true ]. + + aTrait tagWith: tag. + aTrait comment content: comment. ^ aTrait ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index 0ddace458..6a5599e7f 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -62,10 +62,9 @@ FmxMBTrait >> generate [ createTraitNamed: traitName asSymbol uses: self allTraitNames slots: self slotDefinitions - in: self packageName. - - aTrait tagWith: self tag. - aTrait comment content: self commentWithRelations. + in: self packageName + tag: self tag + comment: self commentWithRelations. self realClass: aTrait. diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index 52dfada31..fcdd1997d 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -37,16 +37,15 @@ FmxMBVisitorTrait >> generate [ createTraitNamed: self fullName asSymbol uses: self allTraitNames slots: self slotDefinitions - in: self packageName. + in: self packageName + tag: self tag + comment: self comment. - aTrait comment content: self comment. - - aTrait tagWith: self tag. self realClass: aTrait. self generateAnnotationIn: aTrait. self generateCommonMethodsIfNecessary. - self generateVisitAndAcceptMethods. + self generateVisitAndAcceptMethods ] { #category : 'generating' } From 3a75321dc61e6d818b56dba8b5bb4e3900334290 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Thu, 16 Apr 2026 17:44:31 +0200 Subject: [PATCH 021/121] Start to make FmxClassAddition more flexible to be used without Ring --- .../FmxClassAddition.class.st | 66 +++++++++++++++++-- .../FmxMBImportingContext.class.st | 8 +-- .../FmxMBRingEnvironment.class.st | 41 +++++------- .../FmxTraitAddition.class.st | 13 ++++ 4 files changed, 94 insertions(+), 34 deletions(-) create mode 100644 src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st diff --git a/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st index d64e26530..97163f225 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st @@ -23,7 +23,14 @@ Class { #name : 'FmxClassAddition', #superclass : 'FmxCodeChange', #instVars : [ - 'creationCode' + 'name', + 'superclass', + 'traits', + 'slots', + 'classSlots', + 'sharedVariables', + 'package', + 'tag' ], #category : 'Famix-MetamodelBuilder-Core-Changes', #package : 'Famix-MetamodelBuilder-Core', @@ -47,15 +54,62 @@ FmxClassAddition class >> priority [ { #category : 'accessing' } FmxClassAddition >> apply [ - self class compiler evaluate: self creationCode + Smalltalk classInstaller make: [ :builder | + self flag: #todo. "Check if we can avoid the compilier evaluation" + self initialize: builder. + builder + superclassName: superclass; + name: name; + traits: (self class compiler evaluate: traits); + slots: (self class compiler evaluate: slots); + classSlots: (self class compiler evaluate: classSlots); + sharedVariables: (self class compiler evaluate: sharedVariables); + package: package; + tag: tag ] ] { #category : 'accessing' } -FmxClassAddition >> creationCode [ - ^ creationCode +FmxClassAddition >> classSlots: anObject [ + classSlots := anObject ] { #category : 'accessing' } -FmxClassAddition >> creationCode: anObject [ - creationCode := anObject +FmxClassAddition >> initialize: builder [ + + builder superclassName: superclass +] + +{ #category : 'accessing' } +FmxClassAddition >> name: anObject [ + name := anObject +] + +{ #category : 'accessing' } +FmxClassAddition >> package: anObject [ + package := anObject +] + +{ #category : 'accessing' } +FmxClassAddition >> sharedVariables: anObject [ + sharedVariables := anObject +] + +{ #category : 'accessing' } +FmxClassAddition >> slots: anObject [ + slots := anObject +] + +{ #category : 'accessing' } +FmxClassAddition >> superclass: anObject [ + superclass := anObject +] + +{ #category : 'accessing' } +FmxClassAddition >> tag: anObject [ + tag := anObject +] + +{ #category : 'accessing' } +FmxClassAddition >> traits: anObject [ + traits := anObject ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index f37a3fcdd..10aa639e5 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -60,11 +60,9 @@ FmxMBImportingContext >> generate [ superclass: superclass traitNames: self allTraitNames slots: self slotDefinitions - in: self packageName. - - aClass tagWith: self tag. - - aClass comment content: self comment. + in: self packageName + tag: self tag + comment: self comment. self realClass: aClass. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index f74119c08..4a846df89 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -273,29 +273,24 @@ FmxMBRingEnvironment >> recordAdoptionOfClassDefinitionFrom: currentClass to: an { #category : 'installing' } FmxMBRingEnvironment >> recordClassAdditionFromClass: aRGClass traits: traitsString slots: slotsString classSlots: classSlotsString sharedVariables: sharedVariablesString package: packageName tag: tagName [ - self flag: #todo. "When P12 will be the minimal version used we should use the ShiftClassBuilder instead of manipulation a string. This would make the code a lot easier and we would not rely on compiler evaluation of strings to generate the classes." - changesToApply add: (FmxClassAddition creationCode: ('Smalltalk classInstaller - make: [ :builder | - builder - {superclassOrTraitDeclaration}; - name: {className}; - traits: {traits}; - slots: {slots}; - classSlots: {classSlots}; - sharedVariables: {classVariables}; - package: {package}; - tag: {tag} - ]' format: (Dictionary newFrom: { - (#superclassOrTraitDeclaration -> (aRGClass isTrait - ifTrue: [ 'beTrait' ] - ifFalse: [ 'superclass: ' , aRGClass superclass name ])). - (#className -> aRGClass name asSymbol printString). - (#traits -> traitsString). - (#slots -> slotsString). - (#classSlots -> classSlotsString). - (#classVariables -> sharedVariablesString). - (#package -> packageName printString). - (#tag -> tagName printString) }))) + | change | + change := aRGClass isTrait + ifTrue: [ FmxTraitAddition new ] + ifFalse: [ + FmxClassAddition new + superclass: aRGClass superclass name; + yourself ]. + + change + name: aRGClass name; + traits: traitsString; + slots: slotsString; + classSlots: classSlotsString; + sharedVariables: sharedVariablesString; + package: packageName; + tag: tagName. + + changesToApply add: change ] { #category : 'installing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st new file mode 100644 index 000000000..abe57685c --- /dev/null +++ b/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st @@ -0,0 +1,13 @@ +Class { + #name : 'FmxTraitAddition', + #superclass : 'FmxClassAddition', + #category : 'Famix-MetamodelBuilder-Core-Changes', + #package : 'Famix-MetamodelBuilder-Core', + #tag : 'Changes' +} + +{ #category : 'accessing' } +FmxTraitAddition >> initialize: builder [ + + builder beTrait +] From beba676d0f636f7967108c9701ecb984a8580781 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Fri, 17 Apr 2026 20:33:27 +0200 Subject: [PATCH 022/121] Simplify class addition --- .../FmxClassAddition.class.st | 47 +++++++++---------- .../FmxMBRingEnvironment.class.st | 28 ++++------- 2 files changed, 31 insertions(+), 44 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st index 97163f225..cb219e9fd 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st @@ -27,8 +27,6 @@ Class { 'superclass', 'traits', 'slots', - 'classSlots', - 'sharedVariables', 'package', 'tag' ], @@ -54,29 +52,33 @@ FmxClassAddition class >> priority [ { #category : 'accessing' } FmxClassAddition >> apply [ - Smalltalk classInstaller make: [ :builder | - self flag: #todo. "Check if we can avoid the compilier evaluation" - self initialize: builder. - builder - superclassName: superclass; - name: name; - traits: (self class compiler evaluate: traits); - slots: (self class compiler evaluate: slots); - classSlots: (self class compiler evaluate: classSlots); - sharedVariables: (self class compiler evaluate: sharedVariables); - package: package; - tag: tag ] -] - -{ #category : 'accessing' } -FmxClassAddition >> classSlots: anObject [ - classSlots := anObject + | makeBlock | + makeBlock := [ :builder | + self flag: #todo. "Check if we can avoid the compilier evaluation" + self initialize: builder. + builder + name: name; + package: package; + tag: tag. + + traits ifNotNil: [ builder traits: (self class compiler evaluate: traits) ]. + slots ifNotNil: [ builder slots: (self class compiler evaluate: slots) ] ]. + + "If the class already exist we update it to not remove the class slots and shared variables." + self class environment + at: name + ifPresent: [ :class | self class classInstaller update: class to: makeBlock ] + ifAbsent: [ self class classInstaller make: makeBlock ] ] { #category : 'accessing' } FmxClassAddition >> initialize: builder [ - builder superclassName: superclass + self flag: #todo. "Traits should not have a superclass name." + self flag: #todo. "Remove the nil setting once this will be fixed: https://github.com/pharo-project/pharo/issues/19572" + builder + superclass: nil; + superclassName: superclass ] { #category : 'accessing' } @@ -89,11 +91,6 @@ FmxClassAddition >> package: anObject [ package := anObject ] -{ #category : 'accessing' } -FmxClassAddition >> sharedVariables: anObject [ - sharedVariables := anObject -] - { #category : 'accessing' } FmxClassAddition >> slots: anObject [ slots := anObject diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 4a846df89..e53797e85 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -259,19 +259,12 @@ FmxMBRingEnvironment >> recordAdoptionOfClassDefinitionFrom: currentClass to: an recordClassAdditionFromClass: anRGClassModel traits: (self traitStringFrom: currentClass to: anRGClassModel) slots: '{' , (modelSlotDefinitions joinUsing: '. ') , '}' - classSlots: - '{' , ((currentClass class localSlots collect: #definitionString) - joinUsing: ' . ') , '}' - sharedVariables: - '{' - , ((currentClass classVarNames collect: [ :each | '#' , each ]) - joinUsing: ' ') , '}' package: currentClass package name tag: currentClass packageTag name ] { #category : 'installing' } -FmxMBRingEnvironment >> recordClassAdditionFromClass: aRGClass traits: traitsString slots: slotsString classSlots: classSlotsString sharedVariables: sharedVariablesString package: packageName tag: tagName [ +FmxMBRingEnvironment >> recordClassAdditionFromClass: aRGClass traits: traitsString slots: slotsString package: packageName tag: tagName [ | change | change := aRGClass isTrait @@ -285,8 +278,6 @@ FmxMBRingEnvironment >> recordClassAdditionFromClass: aRGClass traits: traitsStr name: aRGClass name; traits: traitsString; slots: slotsString; - classSlots: classSlotsString; - sharedVariables: sharedVariablesString; package: packageName; tag: tagName. @@ -297,17 +288,16 @@ FmxMBRingEnvironment >> recordClassAdditionFromClass: aRGClass traits: traitsStr FmxMBRingEnvironment >> recordClassChangesFor: aRGClass [ | realClass | + self flag: #todo. "Kill ring." realClass := self class environment classNamed: aRGClass name. realClass - ifNil: [ - self - recordClassAdditionFromClass: aRGClass - traits: aRGClass traitCompositionString - slots: aRGClass slotDefinitionString - classSlots: '{}' - sharedVariables: '{}' - package: aRGClass package name - tag: aRGClass tags anyOne ] + ifNil: [ "1 halt." + self + recordClassAdditionFromClass: aRGClass + traits: aRGClass traitCompositionString + slots: aRGClass slotDefinitionString + package: aRGClass package name + tag: aRGClass tags anyOne ] ifNotNil: [ self recordAdoptionOfClassDefinitionFrom: realClass to: aRGClass ]. self recordClassCommentChangeOf: realClass to: aRGClass. self recordMethodsAdoptionsOf: realClass to: aRGClass realClassName: aRGClass name. From e8d8480609bef435e16d4ce54a3bea8727b803e7 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Fri, 17 Apr 2026 20:41:56 +0200 Subject: [PATCH 023/121] Add tests on class comment updates --- ...MetamodelCleaningStrategiesTestGenerator.class.st | 1 + .../FmxMBGeneratorCleaningStrategyTest.class.st | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Tests/FamixMetamodelCleaningStrategiesTestGenerator.class.st b/src/Famix-MetamodelBuilder-Tests/FamixMetamodelCleaningStrategiesTestGenerator.class.st index 153da60e7..e62b1c056 100644 --- a/src/Famix-MetamodelBuilder-Tests/FamixMetamodelCleaningStrategiesTestGenerator.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FamixMetamodelCleaningStrategiesTestGenerator.class.st @@ -31,6 +31,7 @@ FamixMetamodelCleaningStrategiesTestGenerator class >> prefix [ FamixMetamodelCleaningStrategiesTestGenerator >> defineClasses [ super defineClasses. fmx := builder newClassNamed: #FmxTestEntity. + fmx comment: 'Comment'. fmx2 := builder newClassNamed: #FmxTestEntityWithDifferentSuperclass. fmx3 := builder newClassNamed: #FmxTestEntityWithTraitPrecedenceToRemove ] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBGeneratorCleaningStrategyTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBGeneratorCleaningStrategyTest.class.st index ca9992206..789d47a1e 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBGeneratorCleaningStrategyTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBGeneratorCleaningStrategyTest.class.st @@ -53,7 +53,8 @@ FmxMBGeneratorCleaningStrategyTest >> generateClasses [ class addInstVarNamed: 'bananaTree'. class addClassVarNamed: 'Fuhrmanator'. class class addInstVarNamed: 'grandFrais'. - (class slotNamed: #fursonas) inClass: #FmxTestCleaningStrategyFmxTestEntity "Here we change the type of the slot to ensure it is regenerated correctly" ] + (class slotNamed: #fursonas) inClass: #FmxTestCleaningStrategyFmxTestEntity. "Here we change the type of the slot to ensure it is regenerated correctly" + class comment: 'Test' ] ifAbsent: [ self fail ]. self class classInstaller make: [ :aBuilder | aBuilder @@ -141,7 +142,8 @@ FmxMBGeneratorCleaningStrategyTest >> testGenerateNoCleaningCleaning [ self assert: (class hasClassVarNamed: #Fuhrmanator). self assert: (class class hasInstVarNamed: #grandFrais). self assert: (class hasInstVarNamed: #fursonas). - self assert: (class slotNamed: #fursonas) definitionString equals: '#fursonas => FMMany type: #FmxTestCleaningStrategyFmxTestEntity opposite: #furry' ] + self assert: (class slotNamed: #fursonas) definitionString equals: '#fursonas => FMMany type: #FmxTestCleaningStrategyFmxTestEntity opposite: #furry'. + self assert: class comment equals: 'Test' ] ifAbsent: [ self fail ]. "Before the generation the precedence we added should still be here." @@ -197,7 +199,8 @@ FmxMBGeneratorCleaningStrategyTest >> testGenerateNoCleaningGeneration [ self assert: (class hasClassVarNamed: #Fuhrmanator). self assert: (class class hasInstVarNamed: #grandFrais). self assert: (class hasInstVarNamed: #fursonas). - self assert: (class slotNamed: #fursonas) definitionString equals: '#fursonas => FMMany type: #FmxTestCleaningStrategyFmxTestEntityWithDifferentSuperclass opposite: #furry' ] + self assert: (class slotNamed: #fursonas) definitionString equals: '#fursonas => FMMany type: #FmxTestCleaningStrategyFmxTestEntityWithDifferentSuperclass opposite: #furry'. + self assert: (class comment beginsWith: 'Comment') ] ifAbsent: [ self fail ]. "The generation should remove the precedence that is not present anymore" @@ -252,7 +255,8 @@ FmxMBGeneratorCleaningStrategyTest >> testGenerateTotalCleaningGeneration [ self deny: (class hasClassVarNamed: #Fuhrmanator). self deny: (class class hasInstVarNamed: #grandFrais). self assert: (class hasInstVarNamed: #fursonas). - self assert: (class slotNamed: #fursonas) definitionString equals: '#fursonas => FMMany type: #FmxTestCleaningStrategyFmxTestEntityWithDifferentSuperclass opposite: #furry' ] + self assert: (class slotNamed: #fursonas) definitionString equals: '#fursonas => FMMany type: #FmxTestCleaningStrategyFmxTestEntityWithDifferentSuperclass opposite: #furry'. + self assert: (class comment beginsWith: 'Comment') ] ifAbsent: [ self fail ]. "The generation should remove the precedence that is not present anymore" From 10b18d7e0be9d34be64f1cd43a994a608e632fc4 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Fri, 17 Apr 2026 22:53:02 +0200 Subject: [PATCH 024/121] Do not use ring anymore for class comments --- .../FmxClassCommentUpdate.class.st | 9 +++++ .../FmxMBRingEnvironment.class.st | 33 +++++++++++-------- .../FmxMBBehaviorTest.class.st | 13 -------- .../FmxMBBuilderTest.class.st | 28 ---------------- .../FmxMBClassTest.class.st | 13 -------- 5 files changed, 28 insertions(+), 68 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxClassCommentUpdate.class.st b/src/Famix-MetamodelBuilder-Core/FmxClassCommentUpdate.class.st index ecd0dd60e..f3e308b4a 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxClassCommentUpdate.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxClassCommentUpdate.class.st @@ -37,6 +37,7 @@ FmxClassCommentUpdate class >> className: aSymbol comment: aString [ { #category : 'accessing' } FmxClassCommentUpdate >> apply [ + self realClass comment: self comment ] @@ -49,3 +50,11 @@ FmxClassCommentUpdate >> comment [ FmxClassCommentUpdate >> comment: anObject [ comment := anObject ] + +{ #category : 'testing' } +FmxClassCommentUpdate >> isRequired [ + + ^ self realClass + ifNil: [ true ] + ifNotNil: [ :class | class comment ~= comment ] +] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index e53797e85..6d671b770 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -154,9 +154,9 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t ifFalse: [ RGInstanceVariableSlot named: slotInBadEnvironment name parent: aClass layout ]. aClass layout addSlot: slot. slot propertyNamed: #isGenerated put: true ]. - + aClass tagWith: tag. - aClass comment content: comment. + comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: className comment: comment) ]. ^ aClass ] @@ -167,6 +167,21 @@ FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slot | aPackage aTrait existingClass composition | existingClass := self ringEnvironment ask behaviorNamed: traitName asSymbol. +" existingClass + ifNil: [ + | change | + change := FmxTraitAddition new. + self flag: #todo. + change + name: traitName; + package: packageName; + tag: tag. + + traitNames ifNotEmpty: [ change traits: self halt ]. + slots ifNotEmpty: [ change slots: self halt ]. + changesToApply add: change ] + ifNotNil: [ self flag: #todo ]." + aPackage := self ringEnvironment ensurePackageNamed: packageName. aTrait := ringEnvironment ensureTraitNamed: traitName. @@ -192,7 +207,8 @@ FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slot slot propertyNamed: #isGenerated put: true ]. aTrait tagWith: tag. - aTrait comment content: comment. + + comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: traitName comment: comment) ]. ^ aTrait ] @@ -299,21 +315,10 @@ FmxMBRingEnvironment >> recordClassChangesFor: aRGClass [ package: aRGClass package name tag: aRGClass tags anyOne ] ifNotNil: [ self recordAdoptionOfClassDefinitionFrom: realClass to: aRGClass ]. - self recordClassCommentChangeOf: realClass to: aRGClass. self recordMethodsAdoptionsOf: realClass to: aRGClass realClassName: aRGClass name. self recordMethodsAdoptionsOf: (realClass ifNotNil: [ realClass class ]) to: aRGClass classSide realClassName: aRGClass name ] -{ #category : 'installing' } -FmxMBRingEnvironment >> recordClassCommentChangeOf: realClass to: anRGClass [ - - | newComment | - newComment := anRGClass comment content. - (realClass isNotNil and: [ newComment = realClass comment ]) ifTrue: [ ^ self ]. - - newComment isEmptyOrNil ifFalse: [ changesToApply add: (FmxClassCommentUpdate className: anRGClass name comment: newComment) ] -] - { #category : 'installing' } FmxMBRingEnvironment >> recordClassesChangesFor: resolvedClasses [ | sorted notSorted toMove | diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBBehaviorTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBBehaviorTest.class.st index 296de2486..1c1b0ed28 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBBehaviorTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBBehaviorTest.class.st @@ -24,19 +24,6 @@ FmxMBBehaviorTest >> newEntityNamed: aString [ self subclassResponsibility ] -{ #category : 'tests' } -FmxMBBehaviorTest >> testComment [ - "test assigning of a comment to a class" - - | simpleClass generated commentString | - simpleClass := self newEntityNamed: #Comment. - commentString := 'Simple testing class'. - simpleClass comment: commentString. - builder generate. - generated := builder testingEnvironment ask classNamed: 'TstComment'. - self assert: (generated comment content beginsWith: commentString) -] - { #category : 'tests' } FmxMBBehaviorTest >> testCustomTestingSelectors [ diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st index f0a51c4f0..5402dd823 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st @@ -119,34 +119,6 @@ FmxMBBuilderTest >> testMultipleTraitsCreation [ ] -{ #category : 'tests' } -FmxMBBuilderTest >> testNewClassNamedComment [ - - | c1 aClass | - aClass := builder newClassNamed: #C1 comment: 'comment'. - self assert: aClass comment equals: 'comment'. - self assert: aClass isMetamodelClass. - - builder generate. - - c1 := builder testingEnvironment ask classNamed: 'TstC1'. - self assert: (c1 comment content beginsWith: 'comment') -] - -{ #category : 'tests' } -FmxMBBuilderTest >> testNewTraitNamedComment [ - - | t1 aTrait | - aTrait := builder newTraitNamed: #T1 comment: 'comment'. - self assert: aTrait comment equals: 'comment'. - self assert: aTrait isMetamodelTrait. - - builder generate. - - t1 := builder testingEnvironment ask traitNamed: 'TstT1'. - self assert: (t1 comment content beginsWith: 'comment') -] - { #category : 'tests' } FmxMBBuilderTest >> testParentBuilder [ diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st index f778d3cf2..a3703f583 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st @@ -98,19 +98,6 @@ FmxMBClassTest >> testBuilderPrefixChange [ self assert: generated package name equals: #Tst ] -{ #category : 'tests' } -FmxMBClassTest >> testCommentOnTrait [ - "test assigning of a comment to a trait" - - | simpleTrait generated commentString | - simpleTrait := builder newTraitNamed: #TComment. - commentString := 'Simple testing class'. - simpleTrait comment: commentString. - builder generate. - generated := builder testingEnvironment ask classNamed: 'TstTComment'. - self assert: (generated comment content beginsWith: commentString) -] - { #category : 'tests' } FmxMBClassTest >> testCustomPackageForUserClasses [ From d803ca82e2346d55f68254eb8c561c12a06c6e83 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Fri, 17 Apr 2026 23:42:51 +0200 Subject: [PATCH 025/121] Begin to migrate class creation --- .../FmxMBRingEnvironment.class.st | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 6d671b770..517ee464f 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -131,6 +131,25 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t | aClass existingClass composition | existingClass := self ringEnvironment ask behaviorNamed: className. + "existingClass + ifNil: [ + | change | + change := FmxClassAddition new. + self flag: #todo. ""Finish"" + change + name: className; + superclass: superclassName; + package: packageName; + tag: tag. + + self flag: #todo. ""Manage precedence + factorize code"" + traitNames ifNotEmpty: [ change traits: '{' , ($+ join: traitNames) , '}' ]. + self flag: #todo. ""Kill ring in slot usages."" + slots ifNotEmpty: [ change slots: '{' , ('. ' join: (slots collect: #definitionString)) , '}' ]. + changesToApply add: change ] + ifNotNil: [ self flag: #todo ]." + + aClass := self ringEnvironment ensureClassNamed: className. aClass superclass: (self ringEnvironment ensureClassNamed: superclassName). @@ -167,18 +186,20 @@ FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slot | aPackage aTrait existingClass composition | existingClass := self ringEnvironment ask behaviorNamed: traitName asSymbol. -" existingClass + "existingClass ifNil: [ | change | change := FmxTraitAddition new. - self flag: #todo. + self flag: #todo. ""Finish"" change name: traitName; package: packageName; tag: tag. - traitNames ifNotEmpty: [ change traits: self halt ]. - slots ifNotEmpty: [ change slots: self halt ]. + self flag: #todo. ""Manage precedence + factorize code"" + traitNames ifNotEmpty: [ change traits: '{' , ($+ join: traitNames) , '}' ]. + self flag: #todo. ""Kill ring in slot usages."" + slots ifNotEmpty: [ change slots: '{' , ('. ' join: (slots collect: #definitionString)) , '}' ]. changesToApply add: change ] ifNotNil: [ self flag: #todo ]." @@ -207,8 +228,8 @@ FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slot slot propertyNamed: #isGenerated put: true ]. aTrait tagWith: tag. - - comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: traitName comment: comment) ]. + + comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: traitName comment: comment) ]. ^ aTrait ] From 4b7e6f751f050dbdc8f3327fa5a93a7062532eb3 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Fri, 17 Apr 2026 23:51:03 +0200 Subject: [PATCH 026/121] Add missing slot --- src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 517ee464f..1158ca6b8 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -2,9 +2,9 @@ Class { #name : 'FmxMBRingEnvironment', #superclass : 'Object', #instVars : [ - 'changesToApply', 'ringEnvironment', - 'builder' + 'builder', + 'changesToApply' ], #category : 'Famix-MetamodelBuilder-Core-Implementation', #package : 'Famix-MetamodelBuilder-Core', From 355eaf2cdcb375ecdf5f45ad88b7db1337792cae Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 20 Apr 2026 20:00:52 +0200 Subject: [PATCH 027/121] Do not use ring to sort entities to generate --- .../FmxBehavioralAddition.class.st | 82 +++++++++++++++++++ .../FmxClassAddition.class.st | 56 +++---------- .../FmxCodeChange.class.st | 12 +++ .../FmxMBRingEnvironment.class.st | 23 +++--- .../FmxTraitAddition.class.st | 26 +++++- 5 files changed, 139 insertions(+), 60 deletions(-) create mode 100644 src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st diff --git a/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st new file mode 100644 index 000000000..b4346cca2 --- /dev/null +++ b/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st @@ -0,0 +1,82 @@ +Class { + #name : 'FmxBehavioralAddition', + #superclass : 'FmxCodeChange', + #instVars : [ + 'name', + 'traits', + 'slots', + 'package', + 'tag' + ], + #category : 'Famix-MetamodelBuilder-Core-Changes', + #package : 'Famix-MetamodelBuilder-Core', + #tag : 'Changes' +} + +{ #category : 'accessing' } +FmxBehavioralAddition >> apply [ + + | makeBlock | + makeBlock := [ :builder | + self initialize: builder. + builder + name: name; + package: package; + tag: tag. + + traits ifNotNil: [ builder traits: (self class compiler evaluate: traits) ]. + slots ifNotNil: [ builder slots: (self class compiler evaluate: slots) ] ]. + + "If the class already exist we update it to not remove the class slots and shared variables." + self class environment + at: name + ifPresent: [ :class | self class classInstaller update: class to: makeBlock ] + ifAbsent: [ self class classInstaller make: makeBlock ] +] + +{ #category : 'initialization' } +FmxBehavioralAddition >> initialize: aBuilder [ + + self subclassResponsibility +] + +{ #category : 'accessing' } +FmxBehavioralAddition >> name [ + ^ name +] + +{ #category : 'accessing' } +FmxBehavioralAddition >> name: anObject [ + name := anObject +] + +{ #category : 'accessing' } +FmxBehavioralAddition >> package: anObject [ + package := anObject +] + +{ #category : 'printing' } +FmxBehavioralAddition >> printOn: aStream [ + + super printOn: aStream. + + aStream + nextPutAll: '['; + nextPutAll: (name ifNil: [ 'unnumed' ]); + nextPutAll: ']' +] + +{ #category : 'accessing' } +FmxBehavioralAddition >> slots: anObject [ + slots := anObject +] + +{ #category : 'accessing' } +FmxBehavioralAddition >> tag: anObject [ + tag := anObject +] + +{ #category : 'accessing' } +FmxBehavioralAddition >> traits: anObject [ + traits := anObject +] diff --git a/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st index 43c6d7fac..f29494401 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st @@ -21,14 +21,9 @@ Internal Representation and Key Implementation Points. " Class { #name : 'FmxClassAddition', - #superclass : 'FmxCodeChange', + #superclass : 'FmxBehavioralAddition', #instVars : [ - 'name', - 'superclass', - 'traits', - 'slots', - 'package', - 'tag' + 'superclass' ], #category : 'Famix-MetamodelBuilder-Core-Changes', #package : 'Famix-MetamodelBuilder-Core', @@ -43,24 +38,13 @@ FmxClassAddition class >> priority [ ] { #category : 'accessing' } -FmxClassAddition >> apply [ +FmxClassAddition >> followingChangesIn: changes [ + "I should declare that each class with me as superclass should be built after me." - | makeBlock | - makeBlock := [ :builder | - self initialize: builder. - builder - name: name; - package: package; - tag: tag. - - traits ifNotNil: [ builder traits: (self class compiler evaluate: traits) ]. - slots ifNotNil: [ builder slots: (self class compiler evaluate: slots) ] ]. - - "If the class already exist we update it to not remove the class slots and shared variables." - self class environment - at: name - ifPresent: [ :class | self class classInstaller update: class to: makeBlock ] - ifAbsent: [ self class classInstaller make: makeBlock ] + | result | + result := super followingChangesIn: changes. + result addAll: (changes select: [ :change | change priority = self priority and: [ change superclass = name ] ]). + ^ result ] { #category : 'accessing' } @@ -70,31 +54,11 @@ FmxClassAddition >> initialize: builder [ ] { #category : 'accessing' } -FmxClassAddition >> name: anObject [ - name := anObject -] - -{ #category : 'accessing' } -FmxClassAddition >> package: anObject [ - package := anObject -] - -{ #category : 'accessing' } -FmxClassAddition >> slots: anObject [ - slots := anObject +FmxClassAddition >> superclass [ + ^ superclass ] { #category : 'accessing' } FmxClassAddition >> superclass: anObject [ superclass := anObject ] - -{ #category : 'accessing' } -FmxClassAddition >> tag: anObject [ - tag := anObject -] - -{ #category : 'accessing' } -FmxClassAddition >> traits: anObject [ - traits := anObject -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxCodeChange.class.st b/src/Famix-MetamodelBuilder-Core/FmxCodeChange.class.st index ef016555f..0b5e51122 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxCodeChange.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxCodeChange.class.st @@ -38,8 +38,20 @@ FmxCodeChange >> apply [ self subclassResponsibility ] +{ #category : 'accessing' } +FmxCodeChange >> followingChangesIn: changes [ + "I should filter the changes in parameter to select changes that should be built after me." + + ^ changes select: [ :change | self priority < change priority ] +] + { #category : 'accessing' } FmxCodeChange >> priority [ ^ self class priority ] + +{ #category : 'sorting' } +FmxCodeChange >> threeWayCompareTo: anotherObject [ + ^ self printString threeWayCompareTo: anotherObject printString +] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 5961f330e..166ed4512 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -32,9 +32,15 @@ FmxMBRingEnvironment >> addMethod: sourceCode in: aClassName classSide: aBoolean { #category : 'accessing' } FmxMBRingEnvironment >> apply [ + | dependencies | self collectChangesToApply. - "Sort the changes before applying them" - (changesToApply sorted: #priority ascending) do: [ :change | change apply ] + + "Now we have a list of changes to apply. Some changes needs to by applied before others (for example, we need to create a classe to compile its methods or compile superclasses before their subclasses or traits before their users)." + dependencies := changesToApply inject: Dictionary new into: [ :dictionary :change | + dictionary + at: change put: (change followingChangesIn: (changesToApply copyWithout: change)); + yourself ]. + (AITopologicalSorting sort: changesToApply followingIncomingProperty: [ :change | dependencies at: change ]) do: #apply ] { #category : 'accessing' } @@ -315,19 +321,10 @@ FmxMBRingEnvironment >> recordClassCommentChangeOf: realClass to: anRGClass [ { #category : 'installing' } FmxMBRingEnvironment >> recordClassesChangesFor: resolvedClasses [ - | sorted notSorted toMove | - resolvedClasses ifEmpty: [ ^ self ]. - - notSorted := resolvedClasses asOrderedCollection. - sorted := OrderedCollection new. - [ toMove := notSorted select: [ :each | notSorted noneSatisfy: [ :toCompare | each dependsOn: toCompare ] ]. - toMove ifEmpty: [ self error: 'Classes cycling dependency' ]. - sorted addAll: toMove. - notSorted removeAll: toMove. - notSorted isEmpty ] whileFalse. + resolvedClasses ifEmpty: [ ^ self ]. - sorted do: [ :each | self recordClassChangesFor: each ] + resolvedClasses do: [ :each | self recordClassChangesFor: each ] ] { #category : 'installing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st index abe57685c..397a6d388 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st @@ -1,13 +1,37 @@ Class { #name : 'FmxTraitAddition', - #superclass : 'FmxClassAddition', + #superclass : 'FmxBehavioralAddition', #category : 'Famix-MetamodelBuilder-Core-Changes', #package : 'Famix-MetamodelBuilder-Core', #tag : 'Changes' } +{ #category : 'accessing' } +FmxTraitAddition class >> priority [ + + ^ 3.5 +] + +{ #category : 'accessing' } +FmxTraitAddition >> followingChangesIn: changes [ + + | result | + result := super followingChangesIn: changes. + result addAll: (changes select: [ :change | change priority = self priority and: [ change usesTrait: name ] ]). + ^ result +] + { #category : 'accessing' } FmxTraitAddition >> initialize: builder [ builder beTrait ] + +{ #category : 'testing' } +FmxTraitAddition >> usesTrait: aString [ + "Return true if I use the trait named as the parameter." + + traits ifNil: [ ^ false ]. + + traits includesSubstring: aString +] From f4a98d0cc4332c79224fb019f63d0094109c23d8 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 20 Apr 2026 22:42:40 +0200 Subject: [PATCH 028/121] Simplify code + fix merge artifact --- .../FmxCodeChange.class.st | 12 ++++++------ .../FmxMBRingEnvironment.class.st | 14 +++----------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxCodeChange.class.st b/src/Famix-MetamodelBuilder-Core/FmxCodeChange.class.st index 814b4acf2..5248d3de0 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxCodeChange.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxCodeChange.class.st @@ -38,12 +38,6 @@ FmxCodeChange >> apply [ self subclassResponsibility ] -{ #category : 'testing' } -FmxCodeChange >> isRequired [ - - ^ true -] - { #category : 'accessing' } FmxCodeChange >> followingChangesIn: changes [ "I should filter the changes in parameter to select changes that should be built after me." @@ -51,6 +45,12 @@ FmxCodeChange >> followingChangesIn: changes [ ^ changes select: [ :change | self priority < change priority ] ] +{ #category : 'testing' } +FmxCodeChange >> isRequired [ + + ^ true +] + { #category : 'accessing' } FmxCodeChange >> priority [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 0d9f84727..885ef4f92 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -4,8 +4,7 @@ Class { #instVars : [ 'changesToApply', 'ringEnvironment', - 'builder', - 'changesToApply' + 'builder' ], #category : 'Famix-MetamodelBuilder-Core-Implementation', #package : 'Famix-MetamodelBuilder-Core', @@ -109,7 +108,7 @@ FmxMBRingEnvironment >> collectChangesToApply [ | resolvedClasses | resolvedClasses := ringEnvironment ask behaviors select: [ :each | each isRingResolved and: [ each superclass isRingResolved ] ]. - self recordClassesChangesFor: resolvedClasses. + resolvedClasses do: [ :each | self recordClassChangesFor: each ]. self recordRemovalOfGeneratedEntitiesNotPresentIn: resolvedClasses. "Reject changes that would not change anything on the current system." @@ -335,6 +334,7 @@ FmxMBRingEnvironment >> recordClassChangesFor: aRGClass [ realClass := self class environment classNamed: aRGClass name. realClass ifNil: [ "1 halt." + self recordClassAdditionFromClass: aRGClass traits: (aRGClass traits ifEmpty: [ nil ] ifNotEmpty: [ aRGClass traitCompositionString ]) slots: (aRGClass slots ifEmpty: [ nil ] ifNotEmpty: [ aRGClass slotDefinitionString ]) @@ -345,14 +345,6 @@ FmxMBRingEnvironment >> recordClassChangesFor: aRGClass [ self recordMethodsAdoptionsOf: (realClass ifNotNil: [ realClass class ]) to: aRGClass classSide realClassName: aRGClass name ] -{ #category : 'installing' } -FmxMBRingEnvironment >> recordClassesChangesFor: resolvedClasses [ - - resolvedClasses ifEmpty: [ ^ self ]. - - resolvedClasses do: [ :each | self recordClassChangesFor: each ] -] - { #category : 'installing' } FmxMBRingEnvironment >> recordMethodsAdoptionsOf: realClass to: anRGClass realClassName: aClassName [ | generatedMethodsOfRealClass generatedMethodNamesOfRealClass | From f3c17752a71abd1132a86fa6dfaecf9b647e9a8d Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 21 Apr 2026 19:30:52 +0200 Subject: [PATCH 029/121] Do not use ring to add TraitAddition of traits that are not in the system --- .../FmxMBRingEnvironment.class.st | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 885ef4f92..dec038d93 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -191,22 +191,23 @@ FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slot | aPackage aTrait existingClass composition | existingClass := self ringEnvironment ask behaviorNamed: traitName asSymbol. - "existingClass - ifNil: [ + self class environment + at: traitName + ifPresent: [ :realClass | self flag: #todo ] + ifAbsent: [ | change | change := FmxTraitAddition new. - self flag: #todo. ""Finish"" + self flag: #todo. "Finish" change name: traitName; package: packageName; tag: tag. - self flag: #todo. ""Manage precedence + factorize code"" + self flag: #todo. "Manage precedence + factorize code" traitNames ifNotEmpty: [ change traits: '{' , ($+ join: traitNames) , '}' ]. - self flag: #todo. ""Kill ring in slot usages."" + self flag: #todo. "Kill ring in slot usages." slots ifNotEmpty: [ change slots: '{' , ('. ' join: (slots collect: #definitionString)) , '}' ]. - changesToApply add: change ] - ifNotNil: [ self flag: #todo ]." + changesToApply add: change ]. aPackage := self ringEnvironment ensurePackageNamed: packageName. @@ -334,12 +335,13 @@ FmxMBRingEnvironment >> recordClassChangesFor: aRGClass [ realClass := self class environment classNamed: aRGClass name. realClass ifNil: [ "1 halt." - self - recordClassAdditionFromClass: aRGClass - traits: (aRGClass traits ifEmpty: [ nil ] ifNotEmpty: [ aRGClass traitCompositionString ]) - slots: (aRGClass slots ifEmpty: [ nil ] ifNotEmpty: [ aRGClass slotDefinitionString ]) - package: aRGClass package name - tag: aRGClass tags anyOne ] + aRGClass isTrait ifFalse: [ + self + recordClassAdditionFromClass: aRGClass + traits: (aRGClass traits ifEmpty: [ nil ] ifNotEmpty: [ aRGClass traitCompositionString ]) + slots: (aRGClass slots ifEmpty: [ nil ] ifNotEmpty: [ aRGClass slotDefinitionString ]) + package: aRGClass package name + tag: aRGClass tags anyOne ] ] ifNotNil: [ self recordAdoptionOfClassDefinitionFrom: realClass to: aRGClass ]. self recordMethodsAdoptionsOf: realClass to: aRGClass realClassName: aRGClass name. self recordMethodsAdoptionsOf: (realClass ifNotNil: [ realClass class ]) to: aRGClass classSide realClassName: aRGClass name From 3f6f9de002b9e7831bba05284acccf2331cef0e1 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Sat, 25 Apr 2026 03:46:51 +0200 Subject: [PATCH 030/121] Move package and tag resolution of class before ring class creation --- .../FmxMBRingEnvironment.class.st | 36 +++++++++++++------ .../FmxTraitAddition.class.st | 2 +- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 2ee8958bd..6d61d03c6 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -131,11 +131,20 @@ FmxMBRingEnvironment >> compile: aSource in: aClass classified: aProtocol packag ] { #category : 'installing' } -FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitNames: traitNames slots: slots in: packageName tag: tag comment: comment [ +FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitNames: traitNames slots: slots in: defaultPackage tag: defaultTag comment: comment [ - | aClass existingClass composition | + | aClass existingClass composition realClass packageName tag | existingClass := self ringEnvironment ask behaviorNamed: className. + realClass := self class environment at: className ifAbsent: [ nil ]. + + packageName := realClass + ifNil: [ defaultPackage ] + ifNotNil: [ realClass package name ]. + tag := realClass + ifNil: [ defaultTag ] + ifNotNil: [ realClass packageTag name ]. + "existingClass ifNil: [ | change | @@ -186,14 +195,19 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t ] { #category : 'initialization' } -FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slots in: packageName tag: tag comment: comment [ +FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slots in: defaultPackage tag: defaultTag comment: comment [ - | aPackage aTrait existingClass composition | - existingClass := self ringEnvironment ask behaviorNamed: traitName asSymbol. + | aPackage aTrait existingRGClass composition packageName tag realClass | + existingRGClass := self ringEnvironment ask behaviorNamed: traitName asSymbol. + + realClass := self class environment at: traitName ifAbsent: [ nil ]. + + packageName := realClass ifNil: [ defaultPackage ] ifNotNil: [ realClass package name ]. + tag := realClass ifNil: [ defaultTag ] ifNotNil: [ realClass packageTag name ]. self class environment at: traitName - ifPresent: [ :realClass | self flag: #todo ] + ifPresent: [ :class | self flag: #todo ] ifAbsent: [ | change | change := FmxTraitAddition new. @@ -206,7 +220,7 @@ FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slot self flag: #todo. "Manage precedence + factorize code" traitNames ifNotEmpty: [ change traits: '{' , ($+ join: traitNames) , '}' ]. self flag: #todo. "Kill ring in slot usages." - slots ifNotEmpty: [ change slots: '{' , ('. ' join: (slots collect: #definitionString)) , '}' ]. + slots ifNotEmpty: [ change slots: '{' , ('. ' join: (slots collect: #definitionString)) , '}' ] "changesToApply add: change" ]. aPackage := self ringEnvironment ensurePackageNamed: packageName. @@ -219,6 +233,8 @@ FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slot traitNames do: [ :each | composition addTransformation: (self ringEnvironment ensureTraitNamed: each) ]. + self flag: #todo. "Should not make it in dev branch of Moose. The ring package creation should be removed." + self ensurePackageNamed: packageName. aTrait package: aPackage. aTrait layout makeResolved. @@ -299,10 +315,8 @@ FmxMBRingEnvironment >> recordAdoptionOfClassDefinitionFrom: currentClass to: an recordClassAdditionFromClass: anRGClassModel traits: (self traitStringFrom: currentClass to: anRGClassModel) slots: '{' , (modelSlotDefinitions joinUsing: '. ') , '}' - package: (currentClass ifNil: [ anRGClassModel ]) package name - tag: (currentClass - ifNil: [ anRGClassModel packageTag ] - ifNotNil: [ :class | class packageTag name ]) + package: anRGClassModel package name + tag: anRGClassModel packageTag ] { #category : 'installing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st index 397a6d388..7e5942fb9 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st @@ -33,5 +33,5 @@ FmxTraitAddition >> usesTrait: aString [ traits ifNil: [ ^ false ]. - traits includesSubstring: aString + ^ traits includesSubstring: aString ] From dd620cdacb94aa8e6c330327ae8f3ba73ed6b4c4 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Sun, 26 Apr 2026 19:20:31 +0200 Subject: [PATCH 031/121] Do not provive ring slots to the RingEnvironment to create a class or trait (This minimize the dependencies of Ring in the intermediate model --- .../FmxMBBehavior.class.st | 11 ------ .../FmxMBClass.class.st | 2 +- .../FmxMBImportingContext.class.st | 2 +- .../FmxMBRingEnvironment.class.st | 34 ++++++++++++++----- .../FmxMBTrait.class.st | 2 +- .../FmxMBVisitorTrait.class.st | 2 +- 6 files changed, 29 insertions(+), 24 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 4bca47bc3..9bbbecdfe 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -582,17 +582,6 @@ FmxMBBehavior >> singularPropertyName [ ] -{ #category : 'generating' } -FmxMBBehavior >> slotDefinitions [ - | slotGroups | - slotGroups := (self properties select: #producesSlot thenCollect: [ :property | property asSlot ]) groupedBy: #name. - - "check that all slots with the same name have the same properties" - slotGroups valuesDo: [ :similarSlots | self assert: (similarSlots collect: #name) asSet size = 1 ]. - - ^ slotGroups values collect: [ :each | each anyOne ] -] - { #category : 'associations' } FmxMBBehavior >> source: aFmxTrait [ "By default, a source property is *-" diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 66d82e949..7eadeb87d 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -70,7 +70,7 @@ FmxMBClass >> generate [ createClassNamed: self fullName asSymbol superclass: superclassName traitNames: self allTraitNames - slots: self slotDefinitions + properties: self properties in: self packageName tag: self tag comment: self commentWithRelations. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index 10aa639e5..155e1239d 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -59,7 +59,7 @@ FmxMBImportingContext >> generate [ createClassNamed: self fullName asSymbol superclass: superclass traitNames: self allTraitNames - slots: self slotDefinitions + properties: self properties in: self packageName tag: self tag comment: self comment. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 6d61d03c6..8201dea1b 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -131,9 +131,9 @@ FmxMBRingEnvironment >> compile: aSource in: aClass classified: aProtocol packag ] { #category : 'installing' } -FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitNames: traitNames slots: slots in: defaultPackage tag: defaultTag comment: comment [ +FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitNames: traitNames properties: properties in: defaultPackage tag: defaultTag comment: comment [ - | aClass existingClass composition realClass packageName tag | + | slots aClass existingClass composition realClass packageName tag | existingClass := self ringEnvironment ask behaviorNamed: className. realClass := self class environment at: className ifAbsent: [ nil ]. @@ -144,6 +144,8 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t tag := realClass ifNil: [ defaultTag ] ifNotNil: [ realClass packageTag name ]. + + slots := self slotsFrom: properties. "existingClass ifNil: [ @@ -195,15 +197,17 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t ] { #category : 'initialization' } -FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slots in: defaultPackage tag: defaultTag comment: comment [ +FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames properties: properties in: defaultPackage tag: defaultTag comment: comment [ - | aPackage aTrait existingRGClass composition packageName tag realClass | + | aTrait existingRGClass composition packageName tag realClass slots | existingRGClass := self ringEnvironment ask behaviorNamed: traitName asSymbol. realClass := self class environment at: traitName ifAbsent: [ nil ]. packageName := realClass ifNil: [ defaultPackage ] ifNotNil: [ realClass package name ]. tag := realClass ifNil: [ defaultTag ] ifNotNil: [ realClass packageTag name ]. + + slots := self slotsFrom: properties. self class environment at: traitName @@ -223,9 +227,7 @@ FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slot slots ifNotEmpty: [ change slots: '{' , ('. ' join: (slots collect: #definitionString)) , '}' ] "changesToApply add: change" ]. - aPackage := self ringEnvironment ensurePackageNamed: packageName. - - aTrait := ringEnvironment ensureTraitNamed: traitName. + aTrait := self ringEnvironment ensureTraitNamed: traitName. aTrait superclass: self basicTrait. composition := RGTraitComposition parent: aTrait. @@ -235,7 +237,7 @@ FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slot self flag: #todo. "Should not make it in dev branch of Moose. The ring package creation should be removed." self ensurePackageNamed: packageName. - aTrait package: aPackage. + aTrait package: (self ringEnvironment ensurePackageNamed: packageName). aTrait layout makeResolved. slots do: [ :slotInBadEnvironment | @@ -250,7 +252,6 @@ FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames slots: slot slot propertyNamed: #isGenerated put: true ]. aTrait tagWith: tag. - comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: traitName comment: comment) ]. ^ aTrait @@ -432,6 +433,21 @@ FmxMBRingEnvironment >> slotNamed: slotName defaultValue: aValue [ ('FMProperty defaultValue: {1}' format: { aValue printString }) ] +{ #category : 'initialization' } +FmxMBRingEnvironment >> slotsFrom: properties [ + + | slotGroups | + self flag: #todo. "To kill with Ring usage." + slotGroups := (properties + select: #producesSlot + thenCollect: [ :property | property asSlot ]) groupedBy: #name. + + "check that all slots with the same name have the same properties" + slotGroups valuesDo: [ :similarSlots | self assert: (similarSlots collect: #name) asSet size = 1 ]. + + ^ slotGroups values collect: [ :each | each anyOne ] +] + { #category : 'installing' } FmxMBRingEnvironment >> traitStringFrom: realClass to: aRGClass [ "We need to collect the generated traits + the custom traits added by the user." diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index 4c72fa695..e4fbe7326 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -61,7 +61,7 @@ FmxMBTrait >> generate [ aTrait := self builder environment createTraitNamed: traitName asSymbol uses: self allTraitNames - slots: self slotDefinitions + properties: self properties in: self packageName tag: self tag comment: self commentWithRelations. diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index fcdd1997d..411fda2c5 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -36,7 +36,7 @@ FmxMBVisitorTrait >> generate [ aTrait := self builder environment createTraitNamed: self fullName asSymbol uses: self allTraitNames - slots: self slotDefinitions + properties: self properties in: self packageName tag: self tag comment: self comment. From 79042212c2c5fb0610a15af46cd2faefefb8a862 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Sun, 26 Apr 2026 19:42:38 +0200 Subject: [PATCH 032/121] Clean slots management - Extract properties validation - Rename #asSlot to #asRGSlot - Simplify a verification --- .../FmxMBProperty.class.st | 8 +++++- .../FmxMBRelationSide.class.st | 27 +++++++++++-------- .../FmxMBRingEnvironment.class.st | 25 ++++++++++------- .../FmxMBTypedProperty.class.st | 11 +++++--- 4 files changed, 47 insertions(+), 24 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st index ac144db75..ee8361200 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st @@ -12,7 +12,7 @@ FmxMBProperty class >> isAbstract [ ] { #category : 'accessing' } -FmxMBProperty >> asSlot [ +FmxMBProperty >> asRGSlot [ self subclassResponsibility @@ -80,3 +80,9 @@ FmxMBProperty >> printOn: aStream [ FmxMBProperty >> producesSlot [ ^ true ] + +{ #category : 'validation' } +FmxMBProperty >> validate [ + + self subclassResponsibility +] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st index e5a23e979..0100097b0 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st @@ -29,6 +29,16 @@ FmxMBRelationSide >> acceptVisitor: aVisitor [ ^ aVisitor visitRelationSide: self. ] +{ #category : 'generating' } +FmxMBRelationSide >> asRGSlot [ + + ^ self builder environment + slotNamed: self name asSymbol + cardinality: self cardinality + type: self oppositeType + opposite: self oppositeName +] + { #category : 'converting' } FmxMBRelationSide >> asRelationSideNamed: aPropertyName [ @@ -36,17 +46,6 @@ FmxMBRelationSide >> asRelationSideNamed: aPropertyName [ ^ self ] -{ #category : 'generating' } -FmxMBRelationSide >> asSlot [ - self hasRelation ifFalse: [ FmxMBIncompletePropertyDefiniton signal ]. - - ^ self builder environment - slotNamed: self name asSymbol - cardinality: self cardinality - type: self oppositeType - opposite: self oppositeName -] - { #category : 'accessing' } FmxMBRelationSide >> cardinality [ ^ cardinality @@ -355,3 +354,9 @@ FmxMBRelationSide >> type [ ^ (self builder configuration prefix , self relatedEntityName) asSymbol ] + +{ #category : 'generating' } +FmxMBRelationSide >> validate [ + + self hasRelation ifFalse: [ FmxMBIncompletePropertyDefiniton signal ] +] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 8201dea1b..e7b958120 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -145,6 +145,7 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t ifNil: [ defaultTag ] ifNotNil: [ realClass packageTag name ]. + self validateProperties: properties. slots := self slotsFrom: properties. "existingClass @@ -207,6 +208,7 @@ FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames properties: packageName := realClass ifNil: [ defaultPackage ] ifNotNil: [ realClass package name ]. tag := realClass ifNil: [ defaultTag ] ifNotNil: [ realClass packageTag name ]. + self validateProperties: properties. slots := self slotsFrom: properties. self class environment @@ -436,16 +438,10 @@ FmxMBRingEnvironment >> slotNamed: slotName defaultValue: aValue [ { #category : 'initialization' } FmxMBRingEnvironment >> slotsFrom: properties [ - | slotGroups | self flag: #todo. "To kill with Ring usage." - slotGroups := (properties - select: #producesSlot - thenCollect: [ :property | property asSlot ]) groupedBy: #name. - - "check that all slots with the same name have the same properties" - slotGroups valuesDo: [ :similarSlots | self assert: (similarSlots collect: #name) asSet size = 1 ]. - - ^ slotGroups values collect: [ :each | each anyOne ] + ^ properties + select: #producesSlot + thenCollect: [ :property | property asRGSlot ] ] { #category : 'installing' } @@ -477,3 +473,14 @@ FmxMBRingEnvironment >> traitStringFrom: realClass to: aRGClass [ nextPutAll: precedingTrait; nextPutAll: ' )' ] ] + +{ #category : 'installing' } +FmxMBRingEnvironment >> validateProperties: properties [ + + | names | + names := properties collect: #name. + self assert: names size = names asSet size description: 'Two properties of the same class cannot have the same names.'. + properties + select: #producesSlot + thenDo: [ :property | property validate ] +] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st index 2429bf472..b9624c5b0 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st @@ -21,10 +21,9 @@ FmxMBTypedProperty >> acceptVisitor: aVisitor [ ] { #category : 'generating' } -FmxMBTypedProperty >> asSlot [ - self propertyType ifNil: [ FmxMBIncompletePropertyDefiniton signal ]. +FmxMBTypedProperty >> asRGSlot [ - ^ self builder environment slotNamed: self name asSymbol defaultValue: self defaultValue + ^ self builder environment slotNamed: self name asSymbol defaultValue: self defaultValue ] { #category : 'accessing' } @@ -156,3 +155,9 @@ FmxMBTypedProperty >> propertyType [ FmxMBTypedProperty >> propertyType: anObject [ propertyType := anObject ] + +{ #category : 'generating' } +FmxMBTypedProperty >> validate [ + + self propertyType ifNil: [ FmxMBIncompletePropertyDefiniton signal ] +] From c8f89f834167fe1484a8d10c0f834ae4adf3c33f Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Sun, 26 Apr 2026 19:47:48 +0200 Subject: [PATCH 033/121] Inline methods with only 1 sender --- .../FmxMBRelationSide.class.st | 14 ++++++---- .../FmxMBRingEnvironment.class.st | 27 ------------------- .../FmxMBTypedProperty.class.st | 4 ++- 3 files changed, 12 insertions(+), 33 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st index 0100097b0..a1c2441dc 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st @@ -32,11 +32,15 @@ FmxMBRelationSide >> acceptVisitor: aVisitor [ { #category : 'generating' } FmxMBRelationSide >> asRGSlot [ - ^ self builder environment - slotNamed: self name asSymbol - cardinality: self cardinality - type: self oppositeType - opposite: self oppositeName + | cardinalityClassName | + cardinalityClassName := cardinality = #one + ifTrue: [ #FMOne ] + ifFalse: [ #FMMany ]. + + ^ (RGUnknownSlot named: self name asSymbol) expression: ('{1} type: #{2} opposite: #{3}' format: { + cardinalityClassName. + self oppositeType. + self oppositeName }) ] { #category : 'converting' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index e7b958120..f947a0cc1 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -408,33 +408,6 @@ FmxMBRingEnvironment >> ringEnvironment [ ^ ringEnvironment ] -{ #category : 'accessing' } -FmxMBRingEnvironment >> slotNamed: slotName [ - ^ (RGUnknownSlot named: slotName asSymbol) expression: #FMProperty -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> slotNamed: slotName cardinality: cardinality type: type opposite: oppositeName [ - - | cardinalityClassName | - - cardinalityClassName := cardinality = #one - ifTrue: [ #FMOne ] - ifFalse: [ #FMMany ]. - - ^ (RGUnknownSlot named: slotName asSymbol) - expression: ('{1} type: #{2} opposite: #{3}' - format: { cardinalityClassName. type. oppositeName}) -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> slotNamed: slotName defaultValue: aValue [ - - aValue ifNil: [ ^ self slotNamed: slotName ]. - ^ (RGUnknownSlot named: slotName asSymbol) expression: - ('FMProperty defaultValue: {1}' format: { aValue printString }) -] - { #category : 'initialization' } FmxMBRingEnvironment >> slotsFrom: properties [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st index b9624c5b0..89bfbed67 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st @@ -23,7 +23,9 @@ FmxMBTypedProperty >> acceptVisitor: aVisitor [ { #category : 'generating' } FmxMBTypedProperty >> asRGSlot [ - ^ self builder environment slotNamed: self name asSymbol defaultValue: self defaultValue + ^ (RGUnknownSlot named: self name asSymbol) expression: (self defaultValue + ifNil: [ #FMProperty ] + ifNotNil: [ :value | 'FMProperty defaultValue: ' , value printString ]) ] { #category : 'accessing' } From 70409e7f0a27be5b5225b440730a3d276b47a52c Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 27 Apr 2026 01:43:43 +0200 Subject: [PATCH 034/121] Reduce complexity of a method + improve comment --- .../FmxMBRingEnvironment.class.st | 28 +++++++++---------- .../FmxSlotRemovals.class.st | 1 + 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index f947a0cc1..f9394c365 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -290,29 +290,29 @@ FmxMBRingEnvironment >> initialize [ { #category : 'installing' } FmxMBRingEnvironment >> recordAdoptionOfClassDefinitionFrom: currentClass to: anRGClassModel [ - | currentCustomSlots currentCustomSlotNames modelSlotDefinitions currentGeneratedSlots modelGeneratedSlots slotRemovals | + | modelSlotDefinitions | (currentClass isNil or: [ currentClass needToAdaptTo: anRGClassModel ]) ifFalse: [ ^ self ]. "We are updating a class installed in the system (currentClass) to a new representation defined in the model (anRGClass). This has to be done in order to allow updating the class at run time" - currentGeneratedSlots := currentClass - ifNil: [ #( ) ] - ifNotNil: #generatedSlots. - currentCustomSlots := currentClass - ifNil: [ #( ) ] - ifNotNil: [ :class | class localSlots copyWithoutAll: currentGeneratedSlots ]. - currentCustomSlotNames := currentCustomSlots collect: #name. + modelSlotDefinitions := currentClass + ifNil: [ modelSlotDefinitions := (anRGClassModel slots collect: #definitionString) asOrderedCollection sorted ] + ifNotNil: [ + | currentCustomSlots currentCustomSlotNames currentGeneratedSlots modelGeneratedSlots | + currentGeneratedSlots := currentClass generatedSlots. + currentCustomSlots := currentClass localSlots copyWithoutAll: currentGeneratedSlots. + currentCustomSlotNames := currentCustomSlots collect: #name. - modelGeneratedSlots := anRGClassModel slots reject: [ :each | currentCustomSlotNames includes: each name ]. + modelGeneratedSlots := anRGClassModel slots reject: [ :each | currentCustomSlotNames includes: each name ]. - modelSlotDefinitions := (modelGeneratedSlots collect: #definitionString) asOrderedCollection. - modelSlotDefinitions addAll: (currentCustomSlots collect: #definitionString). - modelSlotDefinitions := modelSlotDefinitions sorted. + modelSlotDefinitions := (modelGeneratedSlots collect: #definitionString) asOrderedCollection. + modelSlotDefinitions addAll: (currentCustomSlots collect: #definitionString). - slotRemovals := currentGeneratedSlots reject: [ :e | modelGeneratedSlots anySatisfy: [ :current | current name = e name ] ]. + (currentGeneratedSlots reject: [ :e | modelGeneratedSlots anySatisfy: [ :current | current name = e name ] ]) ifNotEmpty: [ + :slotRemovals | changesToApply add: (FmxSlotRemovals slots: slotRemovals) ]. - slotRemovals ifNotEmpty: [ changesToApply add: (FmxSlotRemovals slots: slotRemovals) ]. + modelSlotDefinitions sorted ]. self recordClassAdditionFromClass: anRGClassModel diff --git a/src/Famix-MetamodelBuilder-Core/FmxSlotRemovals.class.st b/src/Famix-MetamodelBuilder-Core/FmxSlotRemovals.class.st index d3fbbeff6..12a290f3c 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxSlotRemovals.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxSlotRemovals.class.st @@ -4,6 +4,7 @@ Description I represent a the removal of slots from a class when updating an already generated metamodel. +The slot removal is also managed in `FmxBehavioralAddition`, but if we do not do it before, we might end up with a duplicated slot in a hierarchy. So we first remove slots to remove and then we update the hierarchy. " Class { #name : 'FmxSlotRemovals', From 4838fa352a878bcca9185c8964aafa1399bcb732 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 27 Apr 2026 02:21:22 +0200 Subject: [PATCH 035/121] Implement a building of slots definitions without ring (not yet used) --- .../FmxMBClass.class.st | 2 +- .../FmxMBImportingContext.class.st | 2 +- .../FmxMBProperty.class.st | 12 ++ .../FmxMBRelationSide.class.st | 8 ++ .../FmxMBRingEnvironment.class.st | 123 ++++++++++-------- .../FmxMBTrait.class.st | 2 +- .../FmxMBTypedProperty.class.st | 8 ++ .../FmxMBVisitorTrait.class.st | 2 +- 8 files changed, 98 insertions(+), 61 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 7eadeb87d..6359efb9c 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -70,7 +70,7 @@ FmxMBClass >> generate [ createClassNamed: self fullName asSymbol superclass: superclassName traitNames: self allTraitNames - properties: self properties + properties: (self properties select: #producesSlot) in: self packageName tag: self tag comment: self commentWithRelations. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index 155e1239d..a06856b81 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -59,7 +59,7 @@ FmxMBImportingContext >> generate [ createClassNamed: self fullName asSymbol superclass: superclass traitNames: self allTraitNames - properties: self properties + properties: (self properties select: #producesSlot) in: self packageName tag: self tag comment: self comment. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st index ee8361200..df0ad53d0 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st @@ -81,6 +81,18 @@ FmxMBProperty >> producesSlot [ ^ true ] +{ #category : 'accessing' } +FmxMBProperty >> slotDefinition [ + + ^ '#' , self name , ' => ' , self slotExpression +] + +{ #category : 'accessing' } +FmxMBProperty >> slotExpression [ + + self subclassResponsibility +] + { #category : 'validation' } FmxMBProperty >> validate [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st index a1c2441dc..bcb7adac7 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st @@ -313,6 +313,14 @@ FmxMBRelationSide >> singularPropertyName [ ] +{ #category : 'generating' } +FmxMBRelationSide >> slotExpression [ + + ^ (cardinality = #one + ifTrue: [ 'FMOne' ] + ifFalse: [ 'FMMany' ]) , ' type: #' , self oppositeType , ' opposite: #' , self oppositeName +] + { #category : 'properties' } FmxMBRelationSide >> source [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index f9394c365..e3c669d3e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -40,6 +40,7 @@ FmxMBRingEnvironment >> apply [ dictionary at: change put: (change followingChangesIn: (changesToApply copyWithout: change)); yourself ]. + (changesToApply select: [ :c | c isKindOf: FmxBehavioralAddition ]) groupedBy: #name. (AITopologicalSorting sort: changesToApply followingIncomingProperty: [ :change | dependencies at: change ]) do: #apply ] @@ -73,6 +74,28 @@ FmxMBRingEnvironment >> basicTrait [ ^ self ringEnvironment ensureClassNamed: #Trait ] +{ #category : 'initialization' } +FmxMBRingEnvironment >> buildSlotsDefinitionFor: properties existingClass: currentClass [ + + | modelSlotDefinitions | + currentClass + ifNil: [ modelSlotDefinitions := properties collect: [ :property | property slotDefinition ] ] + ifNotNil: [ + | currentCustomSlots | + currentCustomSlots := currentClass localSlots copyWithoutAll: currentClass generatedSlots. + + (currentClass generatedSlots reject: [ :generatedSlot | properties anySatisfy: [ :property | property name = generatedSlot name ] ]) + ifNotEmpty: [ :slotRemovals | changesToApply add: (FmxSlotRemovals slots: slotRemovals) ]. + + modelSlotDefinitions := properties + reject: [ :property | currentCustomSlots anySatisfy: [ :slot | slot name = property name ] ] + thenCollect: [ :property | property slotDefinition ]. + + modelSlotDefinitions addAll: (currentCustomSlots collect: #definitionString) ]. + + ^ '{' , (modelSlotDefinitions sorted joinUsing: '. ') , '}' +] + { #category : 'accessing' } FmxMBRingEnvironment >> builder [ ^ builder @@ -133,7 +156,7 @@ FmxMBRingEnvironment >> compile: aSource in: aClass classified: aProtocol packag { #category : 'installing' } FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitNames: traitNames properties: properties in: defaultPackage tag: defaultTag comment: comment [ - | slots aClass existingClass composition realClass packageName tag | + | slots aClass existingClass composition realClass packageName tag change | existingClass := self ringEnvironment ask behaviorNamed: className. realClass := self class environment at: className ifAbsent: [ nil ]. @@ -144,28 +167,25 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t tag := realClass ifNil: [ defaultTag ] ifNotNil: [ realClass packageTag name ]. - + self validateProperties: properties. - slots := self slotsFrom: properties. - - "existingClass - ifNil: [ - | change | - change := FmxClassAddition new. - self flag: #todo. ""Finish"" - change - name: className; - superclass: superclassName; - package: packageName; - tag: tag. - - self flag: #todo. ""Manage precedence + factorize code"" - traitNames ifNotEmpty: [ change traits: '{' , ($+ join: traitNames) , '}' ]. - self flag: #todo. ""Kill ring in slot usages."" - slots ifNotEmpty: [ change slots: '{' , ('. ' join: (slots collect: #definitionString)) , '}' ]. - changesToApply add: change ] - ifNotNil: [ self flag: #todo ]." + slots := properties collect: [ :property | property asRGSlot ]. + + + "===========================" + change := FmxClassAddition new. + change + name: className; + superclass: superclassName; + package: packageName; + tag: tag. + + self flag: #todo. "Manage precedence + factorize code" + traitNames ifNotEmpty: [ change traits: '{' , ($+ join: traitNames) , '}' ]. + properties ifNotEmpty: [ change slots: (self buildSlotsDefinitionFor: properties existingClass: (self class environment at: className ifAbsent: [ nil ])) ]. + "changesToApply add: change." + "===========================" aClass := self ringEnvironment ensureClassNamed: className. aClass superclass: (self ringEnvironment ensureClassNamed: superclassName). @@ -200,34 +220,34 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t { #category : 'initialization' } FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames properties: properties in: defaultPackage tag: defaultTag comment: comment [ - | aTrait existingRGClass composition packageName tag realClass slots | + | aTrait existingRGClass composition packageName tag realClass slots change | existingRGClass := self ringEnvironment ask behaviorNamed: traitName asSymbol. realClass := self class environment at: traitName ifAbsent: [ nil ]. - - packageName := realClass ifNil: [ defaultPackage ] ifNotNil: [ realClass package name ]. - tag := realClass ifNil: [ defaultTag ] ifNotNil: [ realClass packageTag name ]. - + + packageName := realClass + ifNil: [ defaultPackage ] + ifNotNil: [ realClass package name ]. + tag := realClass + ifNil: [ defaultTag ] + ifNotNil: [ realClass packageTag name ]. + self validateProperties: properties. - slots := self slotsFrom: properties. - - self class environment - at: traitName - ifPresent: [ :class | self flag: #todo ] - ifAbsent: [ - | change | - change := FmxTraitAddition new. - self flag: #todo. "Finish" - change - name: traitName; - package: packageName; - tag: tag. - - self flag: #todo. "Manage precedence + factorize code" - traitNames ifNotEmpty: [ change traits: '{' , ($+ join: traitNames) , '}' ]. - self flag: #todo. "Kill ring in slot usages." - slots ifNotEmpty: [ change slots: '{' , ('. ' join: (slots collect: #definitionString)) , '}' ] - "changesToApply add: change" ]. + slots := properties collect: [ :property | property asRGSlot ]. + + "===========================" + change := FmxTraitAddition new. + change + name: traitName; + package: packageName; + tag: tag. + + self flag: #todo. "Manage precedence + factorize code" + traitNames ifNotEmpty: [ change traits: '{' , ($+ join: traitNames) , '}' ]. + + properties ifNotEmpty: [ change slots: (self buildSlotsDefinitionFor: properties existingClass: (self class environment at: traitName ifAbsent: [ nil ])) ]. + "changesToApply add: change." + "===========================" aTrait := self ringEnvironment ensureTraitNamed: traitName. aTrait superclass: self basicTrait. @@ -408,15 +428,6 @@ FmxMBRingEnvironment >> ringEnvironment [ ^ ringEnvironment ] -{ #category : 'initialization' } -FmxMBRingEnvironment >> slotsFrom: properties [ - - self flag: #todo. "To kill with Ring usage." - ^ properties - select: #producesSlot - thenCollect: [ :property | property asRGSlot ] -] - { #category : 'installing' } FmxMBRingEnvironment >> traitStringFrom: realClass to: aRGClass [ "We need to collect the generated traits + the custom traits added by the user." @@ -453,7 +464,5 @@ FmxMBRingEnvironment >> validateProperties: properties [ | names | names := properties collect: #name. self assert: names size = names asSet size description: 'Two properties of the same class cannot have the same names.'. - properties - select: #producesSlot - thenDo: [ :property | property validate ] + properties do: [ :property | property validate ] ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index e4fbe7326..9c4f0b06f 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -61,7 +61,7 @@ FmxMBTrait >> generate [ aTrait := self builder environment createTraitNamed: traitName asSymbol uses: self allTraitNames - properties: self properties + properties: (self properties select: #producesSlot) in: self packageName tag: self tag comment: self commentWithRelations. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st index 89bfbed67..75061c828 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st @@ -158,6 +158,14 @@ FmxMBTypedProperty >> propertyType: anObject [ propertyType := anObject ] +{ #category : 'generating' } +FmxMBTypedProperty >> slotExpression [ + + ^ self defaultValue + ifNil: [ 'FMProperty' ] + ifNotNil: [ :value | 'FMProperty defaultValue: ' , value printString ] +] + { #category : 'generating' } FmxMBTypedProperty >> validate [ diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index 411fda2c5..10332f74b 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -36,7 +36,7 @@ FmxMBVisitorTrait >> generate [ aTrait := self builder environment createTraitNamed: self fullName asSymbol uses: self allTraitNames - properties: self properties + properties: (self properties select: #producesSlot) in: self packageName tag: self tag comment: self comment. From 7d3871e4561be0ef94a141e49aba2a688b1e64e4 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 27 Apr 2026 02:35:59 +0200 Subject: [PATCH 036/121] Simplify trait composition building --- .../FmxMBRingEnvironment.class.st | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index e3c669d3e..6f80e4dc9 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -435,10 +435,8 @@ FmxMBRingEnvironment >> traitStringFrom: realClass to: aRGClass [ | customTraitNames traitsDefinitions traitCompositionString precedingTrait | customTraitNames := ((realClass ifNil: [ #( ) ] - ifNotNil: [ :class | class traitComposition rootMembers ]) select: [ :e | - realClass - ifNil: [ false ] - ifNotNil: [ :class | class customTraitNames includes: e name ] ]) collect: #traitCompositionExpression. + ifNotNil: [ :class | class traitComposition rootMembers ]) select: [ :e | realClass customTraitNames includes: e name ]) collect: + #traitCompositionExpression. traitsDefinitions := aRGClass traitsDefinitions ifEmpty: [ { } ] From 1098b099e8d6aa34244b5ec1ecb330c9d50b7c93 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 27 Apr 2026 02:56:45 +0200 Subject: [PATCH 037/121] Manage building of trait composition without ring (Implemented but not yet used) --- .../FmxMBBehavior.class.st | 14 ++++++ .../FmxMBClass.class.st | 2 + .../FmxMBImportingContext.class.st | 2 + .../FmxMBRingEnvironment.class.st | 43 ++++++++++++++----- .../FmxMBTrait.class.st | 2 + .../FmxMBVisitorTrait.class.st | 2 + 6 files changed, 54 insertions(+), 11 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 9bbbecdfe..f79508dde 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -112,6 +112,20 @@ FmxMBBehavior >> allRelations [ ^ (self allTransitiveTraits flatCollect: [ :trait | trait relations ]) , self relations ] +{ #category : 'accessing' } +FmxMBBehavior >> allTraitDefinitions [ + + ^ self allLocalTraits ifEmpty: [ #( ) ] ifNotEmpty: [ :traits | + | methodsToRemove | + methodsToRemove := self additionalProperties at: #methodsToRemoveFromTraitComposition ifAbsent: [ Dictionary new ]. + + (traits collect: [ :trait | + methodsToRemove + at: trait fullName + ifPresent: [ :methods | trait fullName , ' - {' , ('. ' join: (methods collect: #printString)) , '}' ] + ifAbsent: [ trait fullName ] ]) sorted ] +] + { #category : 'accessing' } FmxMBBehavior >> allTraitNames [ ^ (self allLocalTraits collect: #fullName) sorted diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 6359efb9c..56e781591 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -69,7 +69,9 @@ FmxMBClass >> generate [ aClass := self builder environment createClassNamed: self fullName asSymbol superclass: superclassName + traitDefinitions: self allTraitDefinitions traitNames: self allTraitNames + precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) properties: (self properties select: #producesSlot) in: self packageName tag: self tag diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index a06856b81..cfa3d7c1e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -58,7 +58,9 @@ FmxMBImportingContext >> generate [ aClass := self builder environment createClassNamed: self fullName asSymbol superclass: superclass + traitDefinitions: self allTraitDefinitions traitNames: self allTraitNames + precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) properties: (self properties select: #producesSlot) in: self packageName tag: self tag diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 6f80e4dc9..e551ea262 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -154,7 +154,7 @@ FmxMBRingEnvironment >> compile: aSource in: aClass classified: aProtocol packag ] { #category : 'installing' } -FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitNames: traitNames properties: properties in: defaultPackage tag: defaultTag comment: comment [ +FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitDefinitions: traitDefinitions traitNames: traitNames precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ | slots aClass existingClass composition realClass packageName tag change | existingClass := self ringEnvironment ask behaviorNamed: className. @@ -180,10 +180,9 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t package: packageName; tag: tag. - self flag: #todo. "Manage precedence + factorize code" - traitNames ifNotEmpty: [ change traits: '{' , ($+ join: traitNames) , '}' ]. + traitDefinitions ifNotEmpty: [ change traits: (self traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass) ]. - properties ifNotEmpty: [ change slots: (self buildSlotsDefinitionFor: properties existingClass: (self class environment at: className ifAbsent: [ nil ])) ]. + properties ifNotEmpty: [ change slots: (self buildSlotsDefinitionFor: properties existingClass: realClass) ]. "changesToApply add: change." "===========================" @@ -218,7 +217,7 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t ] { #category : 'initialization' } -FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames properties: properties in: defaultPackage tag: defaultTag comment: comment [ +FmxMBRingEnvironment >> createTraitNamed: traitName traitDefinitions: traitDefinitions uses: traitNames precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ | aTrait existingRGClass composition packageName tag realClass slots change | existingRGClass := self ringEnvironment ask behaviorNamed: traitName asSymbol. @@ -242,10 +241,9 @@ FmxMBRingEnvironment >> createTraitNamed: traitName uses: traitNames properties: package: packageName; tag: tag. - self flag: #todo. "Manage precedence + factorize code" - traitNames ifNotEmpty: [ change traits: '{' , ($+ join: traitNames) , '}' ]. + traitDefinitions ifNotEmpty: [ change traits: (self traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass) ]. - properties ifNotEmpty: [ change slots: (self buildSlotsDefinitionFor: properties existingClass: (self class environment at: traitName ifAbsent: [ nil ])) ]. + properties ifNotEmpty: [ change slots: (self buildSlotsDefinitionFor: properties existingClass: realClass) ]. "changesToApply add: change." "===========================" @@ -428,6 +426,29 @@ FmxMBRingEnvironment >> ringEnvironment [ ^ ringEnvironment ] +{ #category : 'installing' } +FmxMBRingEnvironment >> traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass [ + "We need to collect the generated traits + the custom traits added by the user." + + | customTraitNames traitCompositionString | + customTraitNames := ((realClass + ifNil: [ #( ) ] + ifNotNil: [ :class | class traitComposition rootMembers ]) select: [ :e | realClass customTraitNames includes: e name ]) collect: + #traitCompositionExpression. + "manage methods to remove." + traitCompositionString := traitDefinitions , customTraitNames ifEmpty: [ ^ '{ }' ] ifNotEmpty: [ :definitions | definitions joinUsing: ' + ' ]. + + precedingTrait ifNil: [ ^ traitCompositionString ]. + + ^ String streamContents: [ :s | + s + nextPutAll: '('; + nextPutAll: traitCompositionString; + nextPutAll: ' withPrecedenceOf: '; + nextPutAll: precedingTrait; + nextPutAll: ')' ] +] + { #category : 'installing' } FmxMBRingEnvironment >> traitStringFrom: realClass to: aRGClass [ "We need to collect the generated traits + the custom traits added by the user." @@ -449,11 +470,11 @@ FmxMBRingEnvironment >> traitStringFrom: realClass to: aRGClass [ ^ String streamContents: [ :s | s - nextPutAll: '(( '; + nextPutAll: '('; nextPutAll: traitCompositionString; - nextPutAll: ' ) withPrecedenceOf: '; + nextPutAll: ' withPrecedenceOf: '; nextPutAll: precedingTrait; - nextPutAll: ' )' ] + nextPutAll: ')' ] ] { #category : 'installing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index 9c4f0b06f..bb278420a 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -60,7 +60,9 @@ FmxMBTrait >> generate [ aTrait := self builder environment createTraitNamed: traitName asSymbol + traitDefinitions: self allTraitDefinitions uses: self allTraitNames + precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) properties: (self properties select: #producesSlot) in: self packageName tag: self tag diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index 10332f74b..bdfb44743 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -35,7 +35,9 @@ FmxMBVisitorTrait >> generate [ aTrait := self builder environment createTraitNamed: self fullName asSymbol + traitDefinitions: self allTraitDefinitions uses: self allTraitNames + precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) properties: (self properties select: #producesSlot) in: self packageName tag: self tag From b952e5ed127890424d3dbcb2cbe4aaa2527b12f3 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 27 Apr 2026 04:03:11 +0200 Subject: [PATCH 038/121] Do not use ring to generate classes and traits anymore! (there is still some cleaning to do) --- .../FmxBehavioralAddition.class.st | 50 ++++++++++++++++++- .../FmxClassAddition.class.st | 10 ++++ .../FmxMBRingEnvironment.class.st | 21 ++++---- .../FmxTraitAddition.class.st | 8 +++ 4 files changed, 78 insertions(+), 11 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st index b4346cca2..f942c6d9d 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st @@ -25,7 +25,7 @@ FmxBehavioralAddition >> apply [ tag: tag. traits ifNotNil: [ builder traits: (self class compiler evaluate: traits) ]. - slots ifNotNil: [ builder slots: (self class compiler evaluate: slots) ] ]. + slots ifNotNil: [ builder slots: (self class compiler evaluate: '{' , (slots joinUsing: '. ') , '}') ] ]. "If the class already exist we update it to not remove the class slots and shared variables." self class environment @@ -40,6 +40,28 @@ FmxBehavioralAddition >> initialize: aBuilder [ self subclassResponsibility ] +{ #category : 'testing' } +FmxBehavioralAddition >> isRequired [ + + ^ self realClass + ifNil: [ true ] + ifNotNil: [ :realClass | + realClass localSlots ifEmpty: [ self slots ifNotNil: [ ^ true ] ] ifNotEmpty: [ :currentSlots | + self slots size = currentSlots size ifFalse: [ ^ true ]. + (self slots allSatisfy: [ :slotDefinition | currentSlots anySatisfy: [ :slot | slot definitionString = slotDefinition ] ]) ifFalse: [ ^ true ] ]. + + realClass traitComposition isEmpty + ifTrue: [ self traits ifNotNil: [ ^ true ] ] + ifFalse: [ + (OpalCompiler new + failBlock: [ ^ true ]; + source: self traits; + evaluate) asTraitComposition = realClass traitComposition ifFalse: [ ^ true ] ]. + + realClass package name = self package ifFalse: [ ^ true ]. + realClass packageTag name ~= self tag ] +] + { #category : 'accessing' } FmxBehavioralAddition >> name [ ^ name @@ -50,6 +72,11 @@ FmxBehavioralAddition >> name: anObject [ name := anObject ] +{ #category : 'accessing' } +FmxBehavioralAddition >> package [ + ^ package +] + { #category : 'accessing' } FmxBehavioralAddition >> package: anObject [ package := anObject @@ -66,16 +93,37 @@ FmxBehavioralAddition >> printOn: aStream [ nextPutAll: ']' ] +{ #category : 'accessing' } +FmxBehavioralAddition >> realClass [ + + ^ self class environment at: self name ifAbsent: [ nil ] +] + +{ #category : 'accessing' } +FmxBehavioralAddition >> slots [ + ^ slots +] + { #category : 'accessing' } FmxBehavioralAddition >> slots: anObject [ slots := anObject ] +{ #category : 'accessing' } +FmxBehavioralAddition >> tag [ + ^ tag +] + { #category : 'accessing' } FmxBehavioralAddition >> tag: anObject [ tag := anObject ] +{ #category : 'accessing' } +FmxBehavioralAddition >> traits [ + ^ traits +] + { #category : 'accessing' } FmxBehavioralAddition >> traits: anObject [ traits := anObject diff --git a/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st index f29494401..1777578f9 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st @@ -53,6 +53,16 @@ FmxClassAddition >> initialize: builder [ builder superclass: (self class environment at: superclass) ] +{ #category : 'testing' } +FmxClassAddition >> isRequired [ + + | realClass | + super isRequired ifTrue: [ ^ true ]. + + (realClass := self realClass) isTrait ifTrue: [ ^ true ]. + ^ self superclass ~= realClass superclass name +] + { #category : 'accessing' } FmxClassAddition >> superclass [ ^ superclass diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index e551ea262..824bd1fde 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -75,7 +75,7 @@ FmxMBRingEnvironment >> basicTrait [ ] { #category : 'initialization' } -FmxMBRingEnvironment >> buildSlotsDefinitionFor: properties existingClass: currentClass [ +FmxMBRingEnvironment >> buildSlotsDefinitionsFor: properties existingClass: currentClass [ | modelSlotDefinitions | currentClass @@ -84,8 +84,8 @@ FmxMBRingEnvironment >> buildSlotsDefinitionFor: properties existingClass: curre | currentCustomSlots | currentCustomSlots := currentClass localSlots copyWithoutAll: currentClass generatedSlots. - (currentClass generatedSlots reject: [ :generatedSlot | properties anySatisfy: [ :property | property name = generatedSlot name ] ]) - ifNotEmpty: [ :slotRemovals | changesToApply add: (FmxSlotRemovals slots: slotRemovals) ]. + (currentClass generatedSlots reject: [ :generatedSlot | properties anySatisfy: [ :property | property name = generatedSlot name ] ]) ifNotEmpty: [ + :slotRemovals | changesToApply add: (FmxSlotRemovals slots: slotRemovals) ]. modelSlotDefinitions := properties reject: [ :property | currentCustomSlots anySatisfy: [ :slot | slot name = property name ] ] @@ -93,7 +93,8 @@ FmxMBRingEnvironment >> buildSlotsDefinitionFor: properties existingClass: curre modelSlotDefinitions addAll: (currentCustomSlots collect: #definitionString) ]. - ^ '{' , (modelSlotDefinitions sorted joinUsing: '. ') , '}' + modelSlotDefinitions ifEmpty: [ ^ nil ]. + ^ modelSlotDefinitions sorted ] { #category : 'accessing' } @@ -182,8 +183,8 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t traitDefinitions ifNotEmpty: [ change traits: (self traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass) ]. - properties ifNotEmpty: [ change slots: (self buildSlotsDefinitionFor: properties existingClass: realClass) ]. - "changesToApply add: change." + change slots: (self buildSlotsDefinitionsFor: properties existingClass: realClass). + changesToApply add: change. "===========================" aClass := self ringEnvironment ensureClassNamed: className. @@ -243,8 +244,8 @@ FmxMBRingEnvironment >> createTraitNamed: traitName traitDefinitions: traitDefi traitDefinitions ifNotEmpty: [ change traits: (self traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass) ]. - properties ifNotEmpty: [ change slots: (self buildSlotsDefinitionFor: properties existingClass: realClass) ]. - "changesToApply add: change." + properties ifNotEmpty: [ change slots: (self buildSlotsDefinitionsFor: properties existingClass: realClass) ]. + changesToApply add: change. "===========================" aTrait := self ringEnvironment ensureTraitNamed: traitName. @@ -335,7 +336,7 @@ FmxMBRingEnvironment >> recordAdoptionOfClassDefinitionFrom: currentClass to: an self recordClassAdditionFromClass: anRGClassModel traits: (self traitStringFrom: currentClass to: anRGClassModel) - slots: '{' , (modelSlotDefinitions joinUsing: '. ') , '}' + slots: modelSlotDefinitions package: anRGClassModel package name tag: anRGClassModel packageTag ] @@ -367,7 +368,7 @@ FmxMBRingEnvironment >> recordClassChangesFor: aRGClass [ | realClass | self flag: #todo. "Kill ring." realClass := self class environment classNamed: aRGClass name. - self recordAdoptionOfClassDefinitionFrom: realClass to: aRGClass. +" self recordAdoptionOfClassDefinitionFrom: realClass to: aRGClass." self recordMethodsAdoptionsOf: realClass to: aRGClass realClassName: aRGClass name. self recordMethodsAdoptionsOf: (realClass ifNotNil: [ realClass class ]) to: aRGClass classSide realClassName: aRGClass name ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st index 7e5942fb9..dc81b3e22 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st @@ -27,6 +27,14 @@ FmxTraitAddition >> initialize: builder [ builder beTrait ] +{ #category : 'testing' } +FmxTraitAddition >> isRequired [ + + super isRequired ifTrue: [ ^ true ]. + + ^ self realClass isTrait not +] + { #category : 'testing' } FmxTraitAddition >> usesTrait: aString [ "Return true if I use the trait named as the parameter." From 1774897e7dd07059116d7c4b372f2792c28bab69 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 27 Apr 2026 04:09:47 +0200 Subject: [PATCH 039/121] Remove some code that is dead since the last commit --- .../Class.extension.st | 34 -------- .../FmxMBRingEnvironment.class.st | 85 ------------------- .../RGBehavior.extension.st | 31 ------- 3 files changed, 150 deletions(-) delete mode 100644 src/Famix-MetamodelBuilder-Core/RGBehavior.extension.st diff --git a/src/Famix-MetamodelBuilder-Core/Class.extension.st b/src/Famix-MetamodelBuilder-Core/Class.extension.st index 082ea907a..c1b7e0252 100644 --- a/src/Famix-MetamodelBuilder-Core/Class.extension.st +++ b/src/Famix-MetamodelBuilder-Core/Class.extension.st @@ -9,37 +9,3 @@ Class >> customTraitNames [ Class >> generatedSlots [ ^ self localSlots select: #isFameSlot ] - -{ #category : '*Famix-MetamodelBuilder-Core' } -Class >> generatedTraitNames [ - ^ self generatedTraits collect: #name -] - -{ #category : '*Famix-MetamodelBuilder-Core' } -Class >> generatedTraits [ - ^ self traits select: #isMetamodelEntity -] - -{ #category : '*Famix-MetamodelBuilder-Core' } -Class >> needToAdaptTo: aRGClass [ - | generatedTraitNames generatedTraitDefinitions | - generatedTraitNames := self generatedTraitNames. - - "We need to manage the cases where it will be things like `FamixJavaTStructuralEntity - {#mooseNameOn:}`" - generatedTraitDefinitions := self traitComposition rootMembers - select: [ :member | generatedTraitNames includes: member name ] - thenCollect: #traitCompositionExpression. - - "If the new class has a trait precedence, we check that the current one also have the same. Else we need to adapt. - If the new class does not have a trait precedent, we check that the current one also does not have one. Else we need to adapt." - aRGClass properties - at: #precedingTrait - ifPresent: [ :aTrait | (self traitComposition isPrecedingSequence and: [ self traitComposition preferedTrait name = aTrait ]) ifFalse: [ ^ true ] ] - ifAbsent: [ self traitComposition isPrecedingSequence ifTrue: [ ^ true ] ]. - - (generatedTraitDefinitions equalsTo: aRGClass traitsDefinitions) ifFalse: [ ^ true ]. - - ((self generatedSlots collect: #definitionString) equalsTo: (aRGClass slots collect: #definitionString)) ifFalse: [ ^ true ]. - - ^ (self superclass ifNil: [ Trait ]) name ~= aRGClass superclass name -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 824bd1fde..ab5bc0e73 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -306,69 +306,12 @@ FmxMBRingEnvironment >> initialize [ ringEnvironment ensureClassNamed: #MooseSpecializedGroup. ] -{ #category : 'installing' } -FmxMBRingEnvironment >> recordAdoptionOfClassDefinitionFrom: currentClass to: anRGClassModel [ - - | modelSlotDefinitions | - (currentClass isNil or: [ currentClass needToAdaptTo: anRGClassModel ]) ifFalse: [ ^ self ]. - - "We are updating a class installed in the system (currentClass) to a new representation defined in the model (anRGClass). - This has to be done in order to allow updating the class at run time" - - modelSlotDefinitions := currentClass - ifNil: [ modelSlotDefinitions := (anRGClassModel slots collect: #definitionString) asOrderedCollection sorted ] - ifNotNil: [ - | currentCustomSlots currentCustomSlotNames currentGeneratedSlots modelGeneratedSlots | - currentGeneratedSlots := currentClass generatedSlots. - currentCustomSlots := currentClass localSlots copyWithoutAll: currentGeneratedSlots. - currentCustomSlotNames := currentCustomSlots collect: #name. - - modelGeneratedSlots := anRGClassModel slots reject: [ :each | currentCustomSlotNames includes: each name ]. - - modelSlotDefinitions := (modelGeneratedSlots collect: #definitionString) asOrderedCollection. - modelSlotDefinitions addAll: (currentCustomSlots collect: #definitionString). - - (currentGeneratedSlots reject: [ :e | modelGeneratedSlots anySatisfy: [ :current | current name = e name ] ]) ifNotEmpty: [ - :slotRemovals | changesToApply add: (FmxSlotRemovals slots: slotRemovals) ]. - - modelSlotDefinitions sorted ]. - - self - recordClassAdditionFromClass: anRGClassModel - traits: (self traitStringFrom: currentClass to: anRGClassModel) - slots: modelSlotDefinitions - package: anRGClassModel package name - tag: anRGClassModel packageTag -] - -{ #category : 'installing' } -FmxMBRingEnvironment >> recordClassAdditionFromClass: aRGClass traits: traitsString slots: slotsString package: packageName tag: tagName [ - - | change | - change := aRGClass isTrait - ifTrue: [ FmxTraitAddition new ] - ifFalse: [ - FmxClassAddition new - superclass: aRGClass superclass name; - yourself ]. - - change - name: aRGClass name; - traits: traitsString; - slots: slotsString; - package: packageName; - tag: tagName. - - changesToApply add: change -] - { #category : 'installing' } FmxMBRingEnvironment >> recordClassChangesFor: aRGClass [ | realClass | self flag: #todo. "Kill ring." realClass := self class environment classNamed: aRGClass name. -" self recordAdoptionOfClassDefinitionFrom: realClass to: aRGClass." self recordMethodsAdoptionsOf: realClass to: aRGClass realClassName: aRGClass name. self recordMethodsAdoptionsOf: (realClass ifNotNil: [ realClass class ]) to: aRGClass classSide realClassName: aRGClass name ] @@ -450,34 +393,6 @@ FmxMBRingEnvironment >> traitStringFrom: traitDefinitions precedingTrait: preced nextPutAll: ')' ] ] -{ #category : 'installing' } -FmxMBRingEnvironment >> traitStringFrom: realClass to: aRGClass [ - "We need to collect the generated traits + the custom traits added by the user." - - | customTraitNames traitsDefinitions traitCompositionString precedingTrait | - customTraitNames := ((realClass - ifNil: [ #( ) ] - ifNotNil: [ :class | class traitComposition rootMembers ]) select: [ :e | realClass customTraitNames includes: e name ]) collect: - #traitCompositionExpression. - - traitsDefinitions := aRGClass traitsDefinitions - ifEmpty: [ { } ] - ifNotEmpty: [ :rgDefinitions | { rgDefinitions anyOne } , (rgDefinitions allButFirst collect: [ :e | '(' , e , ')' ]) ]. - traitsDefinitions := traitsDefinitions , customTraitNames. - - traitCompositionString := traitsDefinitions ifEmpty: [ ^ '{ }' ] ifNotEmpty: [ traitsDefinitions joinUsing: ' + ' ]. - - precedingTrait := aRGClass propertyNamed: #precedingTrait ifAbsent: [ ^ traitCompositionString ]. - - ^ String streamContents: [ :s | - s - nextPutAll: '('; - nextPutAll: traitCompositionString; - nextPutAll: ' withPrecedenceOf: '; - nextPutAll: precedingTrait; - nextPutAll: ')' ] -] - { #category : 'installing' } FmxMBRingEnvironment >> validateProperties: properties [ diff --git a/src/Famix-MetamodelBuilder-Core/RGBehavior.extension.st b/src/Famix-MetamodelBuilder-Core/RGBehavior.extension.st deleted file mode 100644 index 3fc146535..000000000 --- a/src/Famix-MetamodelBuilder-Core/RGBehavior.extension.st +++ /dev/null @@ -1,31 +0,0 @@ -Extension { #name : 'RGBehavior' } - -{ #category : '*Famix-MetamodelBuilder-Core' } -RGBehavior >> dependsOn: anotherBehavior [ - - (self allSuperclasses includes: anotherBehavior) ifTrue: [ ^ true ]. - - ((self withAllSuperclasses flatCollect: [:each | each traitComposition traits]) includes: anotherBehavior) ifTrue: [ ^ true ]. - - ^ false -] - -{ #category : '*Famix-MetamodelBuilder-Core' } -RGBehavior >> traitsDefinitions [ - | methodsToRemoveMap | - methodsToRemoveMap := self propertyNamed: #methodsToRemoveFromTraitComposition ifAbsent: [ Dictionary new ]. - ^ self traitComposition transformations - collect: [ :trait | - methodsToRemoveMap - at: trait name - ifPresent: [ :methods | - String - streamContents: [ :s | - s - nextPutAll: trait asString; - nextPutAll: ' - '. - methods sorted printAsSelfEvaluatingFormOn: s ] ] - ifAbsent: [ trait asString ] ]. - - -] From e868a6ab89c33dccd49e69c6b645f3f0865f05b8 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 27 Apr 2026 04:27:42 +0200 Subject: [PATCH 040/121] Ensure we create all methods without ring (but it still has the ring generated version) --- .../FmxMBRelationSideGenerationStrategy.class.st | 11 ++++++++--- .../FmxMBRingEnvironment.class.st | 1 - 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st index 13ad02bb7..fd415be2b 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st @@ -24,10 +24,15 @@ FmxMBRelationSideGenerationStrategy >> category [ { #category : 'generation' } FmxMBRelationSideGenerationStrategy >> compileMethod: methodSource for: aRelationSide in: aClassOrTrait [ + self flag: #todo. "Should be linked to the FmxMBBehavior and not duplicate the code" aRelationSide builder environment - compile: methodSource - in: aClassOrTrait - classified: self category + addMethod: methodSource + in: aClassOrTrait name + classSide: false + protocol: self category. + + self flag: #todo. "This code should never make it in the dev branch of Famix. Also we should provide the class name directly" + aClassOrTrait compile: methodSource classified: self category ] { #category : 'generation' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index ab5bc0e73..ef09df480 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -40,7 +40,6 @@ FmxMBRingEnvironment >> apply [ dictionary at: change put: (change followingChangesIn: (changesToApply copyWithout: change)); yourself ]. - (changesToApply select: [ :c | c isKindOf: FmxBehavioralAddition ]) groupedBy: #name. (AITopologicalSorting sort: changesToApply followingIncomingProperty: [ :change | dependencies at: change ]) do: #apply ] From 675ca3767301dc95f4e0b9d9f279d3784d9b2fbf Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 27 Apr 2026 04:54:06 +0200 Subject: [PATCH 041/121] Simplify methods removals Next step is to not use Ring for that --- .../FmxMBRingEnvironment.class.st | 33 ++++++------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index ef09df480..2ea04ffe5 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -308,37 +308,24 @@ FmxMBRingEnvironment >> initialize [ { #category : 'installing' } FmxMBRingEnvironment >> recordClassChangesFor: aRGClass [ - | realClass | - self flag: #todo. "Kill ring." - realClass := self class environment classNamed: aRGClass name. - self recordMethodsAdoptionsOf: realClass to: aRGClass realClassName: aRGClass name. - self recordMethodsAdoptionsOf: (realClass ifNotNil: [ realClass class ]) to: aRGClass classSide realClassName: aRGClass name + self class environment at: aRGClass name asSymbol ifPresent: [ :realClass | + self recordMethodRemovalsOf: realClass to: aRGClass realClassName: aRGClass name. + self recordMethodRemovalsOf: (realClass ifNotNil: [ realClass class ]) to: aRGClass classSide realClassName: aRGClass name ] ] { #category : 'installing' } -FmxMBRingEnvironment >> recordMethodsAdoptionsOf: realClass to: anRGClass realClassName: aClassName [ +FmxMBRingEnvironment >> recordMethodRemovalsOf: realClass to: anRGClass realClassName: aClassName [ + | generatedMethodsOfRealClass generatedMethodNamesOfRealClass | - generatedMethodsOfRealClass := realClass - ifNil: [ {} ] - ifNotNil: [ (Pragma allNamed: #generated in: realClass) collect: #method thenReject: [ :m | m isFromTrait ] ] . + generatedMethodsOfRealClass := (Pragma allNamed: #generated in: realClass) + collect: #method + thenReject: [ :m | m isFromTrait ]. generatedMethodNamesOfRealClass := generatedMethodsOfRealClass collect: #selector. "First we removed the generated methods should not be here anymore" - (generatedMethodNamesOfRealClass difference: anRGClass localSelectors) - ifNotEmpty: [ :selectorsOfRemovedGeneratedMethod | changesToApply add: (FmxMethodRemovals className: aClassName isClassSide: anRGClass isClassSide selectors: selectorsOfRemovedGeneratedMethod) ]. - - "Add new generated methods" - ((anRGClass localSelectors difference: generatedMethodNamesOfRealClass) - select: [ :selectorOfMethodToAdd | realClass ifNil: [ true ] ifNotNil: [ (realClass localSelectors includes: selectorOfMethodToAdd) not ] ] - thenCollect: [ :selectorOfMethodToAdd | anRGClass methodNamed: selectorOfMethodToAdd ]) - ifNotEmpty: [ :methods | methods do: [ :method | self addMethod: method sourceCode in: aClassName classSide: anRGClass isClassSide protocol: method protocol ] ]. - - "Finally, update methods needing updates" - ((generatedMethodNamesOfRealClass intersection: anRGClass localSelectors) - collect: [ :selectorOfMethodToUpdate | anRGClass methodNamed: selectorOfMethodToUpdate ] - thenSelect: [ :method | realClass needToAdaptToMethod: method ]) - ifNotEmpty: [ :methods | methods do: [ :method | self addMethod: method sourceCode in: aClassName classSide: anRGClass isClassSide protocol: method protocol ] ] + (generatedMethodNamesOfRealClass difference: anRGClass localSelectors) ifNotEmpty: [ :selectorsOfRemovedGeneratedMethod | + changesToApply add: (FmxMethodRemovals className: aClassName isClassSide: anRGClass isClassSide selectors: selectorsOfRemovedGeneratedMethod) ] ] { #category : 'accessing' } From 21f8aadb73c78f03158fd6e99a39d161f9384882 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 27 Apr 2026 18:55:32 +0200 Subject: [PATCH 042/121] Work on removing ring dependency for method removal computation (WIP) --- .../FmxMBBehavior.class.st | 22 ---- .../FmxMBEntity.class.st | 22 ++++ .../FmxMBRingEnvironment.class.st | 17 ++- .../FmxMBTypedProperty.class.st | 106 ++++++++++-------- .../FmxMethodAddition.class.st | 17 ++- 5 files changed, 103 insertions(+), 81 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index f79508dde..158abbecf 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -43,28 +43,6 @@ FmxMBBehavior >> addAllTransitiveTraitsIn: aCollection [ ^ aCollection ] -{ #category : 'generating' } -FmxMBBehavior >> addMethod: code in: class classSide: boolean protocol: protocol [ - - self flag: #todo. "Demeter" - self builder environment - addMethod: code - in: class name - classSide: boolean - protocol: protocol. - - self flag: #todo. "This code should never make it in the dev branch of Famix. Also we should provide the class name directly" - (boolean - ifTrue: [ class classSide ] - ifFalse: [ class ]) compile: code classified: protocol -] - -{ #category : 'generating' } -FmxMBBehavior >> addMethod: code in: class protocol: protocol [ - - ^ self addMethod: code in: class classSide: false protocol: protocol -] - { #category : 'accessing' } FmxMBBehavior >> addRelation: aRelation with: anotherClass [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st index 3f9aeb8e8..4ae55e396 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st @@ -19,6 +19,28 @@ FmxMBEntity >> acceptVisitor: aVisitor [ ^ self subclassResponsibility ] +{ #category : 'generating' } +FmxMBEntity >> addMethod: code in: class classSide: boolean protocol: protocol [ + + self flag: #todo. "Demeter" + self builder environment + addMethod: code + in: class name + classSide: boolean + protocol: protocol. + + self flag: #todo. "This code should never make it in the dev branch of Famix. Also we should provide the class name directly" + (boolean + ifTrue: [ class classSide ] + ifFalse: [ class ]) compile: code classified: protocol +] + +{ #category : 'generating' } +FmxMBEntity >> addMethod: code in: class protocol: protocol [ + + ^ self addMethod: code in: class classSide: false protocol: protocol +] + { #category : 'accessing' } FmxMBEntity >> additionalProperties [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 2ea04ffe5..e8e4113d4 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -141,7 +141,7 @@ FmxMBRingEnvironment >> collectChangesToApply [ { #category : 'installing' } FmxMBRingEnvironment >> compile: aSource in: aClass classified: aProtocol [ - aClass compile: aSource classified: aProtocol. + aClass compile: aSource classified: aProtocol ] { #category : 'installing' } @@ -309,23 +309,28 @@ FmxMBRingEnvironment >> initialize [ FmxMBRingEnvironment >> recordClassChangesFor: aRGClass [ self class environment at: aRGClass name asSymbol ifPresent: [ :realClass | - self recordMethodRemovalsOf: realClass to: aRGClass realClassName: aRGClass name. - self recordMethodRemovalsOf: (realClass ifNotNil: [ realClass class ]) to: aRGClass classSide realClassName: aRGClass name ] + self recordMethodRemovalsOf: realClass to: aRGClass. + self recordMethodRemovalsOf: realClass class to: aRGClass classSide ] ] { #category : 'installing' } -FmxMBRingEnvironment >> recordMethodRemovalsOf: realClass to: anRGClass realClassName: aClassName [ +FmxMBRingEnvironment >> recordMethodRemovalsOf: realClass to: anRGClass [ - | generatedMethodsOfRealClass generatedMethodNamesOfRealClass | + | generatedMethodsOfRealClass generatedMethodNamesOfRealClass selectorsToGenerate | generatedMethodsOfRealClass := (Pragma allNamed: #generated in: realClass) collect: #method thenReject: [ :m | m isFromTrait ]. generatedMethodNamesOfRealClass := generatedMethodsOfRealClass collect: #selector. + selectorsToGenerate := ((self changesOfType: FmxMethodAddition) select: [ :change | + change className = realClass instanceSide name and: [ change isClassSide = realClass isClassSide ] ]) collect: #selector. + + "selectorsToGenerate size = anRGClass localSelectors size ifFalse: [ self halt ]." + "First we removed the generated methods should not be here anymore" (generatedMethodNamesOfRealClass difference: anRGClass localSelectors) ifNotEmpty: [ :selectorsOfRemovedGeneratedMethod | - changesToApply add: (FmxMethodRemovals className: aClassName isClassSide: anRGClass isClassSide selectors: selectorsOfRemovedGeneratedMethod) ] + changesToApply add: (FmxMethodRemovals className: realClass name isClassSide: realClass isClassSide selectors: selectorsOfRemovedGeneratedMethod) ] ] { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st index 75061c828..3edb04219 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st @@ -42,53 +42,67 @@ FmxMBTypedProperty >> defaultValue: aValue [ FmxMBTypedProperty >> generateGetterIn: aClassOrTrait [ | methodSource propertyDefinition commentDefinition pragmaFormat | + pragmaFormat := self defaultValue + ifNil: [ '' ] + ifNotNil: [ '' ]. + propertyDefinition := pragmaFormat format: { + self name. + self propertyType. + self defaultValue printString }. - pragmaFormat := self defaultValue ifNil: [ '' ] - ifNotNil: [ '' ]. - propertyDefinition := pragmaFormat - format: { self name. self propertyType. self defaultValue printString}. - - commentDefinition := self comment - ifNotEmpty: [ '' format: { self comment printString } ]. + commentDefinition := self comment ifNotEmpty: [ '' format: { self comment printString } ]. methodSource := String streamContents: [ :s | - s nextPutAll: self name; cr; cr. - s tab; nextPutAll: propertyDefinition; cr. - s tab; nextPutAll: ''; cr. - self isMultivalued ifTrue: [ - s tab; nextPutAll: ''; cr. ]. - commentDefinition - ifNotEmpty: [ s tab; nextPutAll: commentDefinition; cr]. - s tab; nextPutAll: '^ '. - - self isRemote - ifTrue: [ s nextPutAll: 'self attributeAt: #'; - nextPutAll: self name; - nextPutAll: ' ifAbsent: [ nil ]' ] - ifFalse: [ s nextPutAll: self name ]. - - - self defaultValue ifNotNil: [ - s nextPutAll: (' ifNil: [ {1} := {2} ]' format: { self name. self defaultValue printString }) ] ]. - + s + nextPutAll: self name; + cr; + cr. + s + tab; + nextPutAll: propertyDefinition; + cr. + s + tab; + nextPutAll: ''; + cr. + self isMultivalued ifTrue: [ + s + tab; + nextPutAll: ''; + cr ]. + commentDefinition ifNotEmpty: [ + s + tab; + nextPutAll: commentDefinition; + cr ]. + s + tab; + nextPutAll: '^ '. + + self isRemote + ifTrue: [ + s + nextPutAll: 'self attributeAt: #'; + nextPutAll: self name; + nextPutAll: ' ifAbsent: [ nil ]' ] + ifFalse: [ s nextPutAll: self name ]. + + + self defaultValue ifNotNil: [ + s nextPutAll: (' ifNil: [ {1} := {2} ]' format: { + self name. + self defaultValue printString }) ] ]. + "cannot merge both builder of the accessing disapear for non remote entity" self isRemote - ifTrue: [ + ifTrue: [ + self flag: #todo. "This breaks generation layers and should be kill" self builder environment compile: methodSource in: aClassOrTrait classified: 'accessing' - package: self builder parentBuilderPackageName - ] - ifFalse: [ - self builder environment - compile: methodSource - in: aClassOrTrait - classified: 'accessing' ] - - - - + package: self builder parentBuilderPackageName ] + ifFalse: [ self addMethod: methodSource in: aClassOrTrait protocol: #accessing ] ] { #category : 'generating' } @@ -100,25 +114,19 @@ FmxMBTypedProperty >> generateSetterIn: aClassOrTrait [ '. self isRemote - ifTrue: [ - stream nextPutAll: - 'self attributeAt: #{1} put: anObject' ] + ifTrue: [ stream nextPutAll: 'self attributeAt: #{1} put: anObject' ] ifFalse: [ stream nextPutAll: '{1} := anObject' ] ]. "cannot merge both builder of the accessing disapear for non remote entity" self isRemote - ifTrue: [ + ifTrue: [ + self flag: #todo. "This breaks generation layers and should be kill" self builder environment compile: (methodToFormat format: { self name }) in: aClassOrTrait classified: 'accessing' - package: self builder parentBuilderPackageName - ] - ifFalse: [ - self builder environment - compile: (methodToFormat format: { self name }) - in: aClassOrTrait - classified: 'accessing' ] + package: self builder parentBuilderPackageName ] + ifFalse: [ self addMethod: (methodToFormat format: { self name }) in: aClassOrTrait protocol: 'accessing' ] ] { #category : 'generating' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st index 247e940aa..79d09efe6 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st @@ -14,7 +14,8 @@ Class { #superclass : 'FmxLazyClassChange', #instVars : [ 'protocol', - 'sourceCode' + 'sourceCode', + 'selector' ], #category : 'Famix-MetamodelBuilder-Core-Changes', #package : 'Famix-MetamodelBuilder-Core', @@ -45,9 +46,7 @@ FmxMethodAddition >> isRequired [ ifNil: [ true ] ifNotNil: [ :class | class - compiledMethodAt: (self class compiler - permitUndeclared: true; - compile: sourceCode) selector + compiledMethodAt: self selector ifPresent: [ :method | (method hasPragmaNamed: #generated) and: (method sourceCode ~= sourceCode or: [ (method protocolName = protocol) not ]) ] ifAbsent: [ true ] ] ] @@ -77,6 +76,16 @@ FmxMethodAddition >> protocol: anObject [ protocol := anObject ] +{ #category : 'testing' } +FmxMethodAddition >> selector [ + "Cached" + + ^ selector ifNil: [ + selector := (self class compiler + permitUndeclared: true; + compile: sourceCode) selector ] +] + { #category : 'accessing' } FmxMethodAddition >> sourceCode [ From a0f7b8999a7f03395aab2eee096091d86a526b28 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 27 Apr 2026 19:48:49 +0200 Subject: [PATCH 043/121] Do not use ring anymore to generate changes (still not removed, but not used in the end) --- .../FmxBehavioralAddition.class.st | 2 + .../FmxMBClass.class.st | 11 ++-- .../FmxMBRingEnvironment.class.st | 53 ++++++++++++------- .../FmxMBVisitorTrait.class.st | 26 +++++---- 4 files changed, 54 insertions(+), 38 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st index f942c6d9d..275e8c4c7 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st @@ -47,12 +47,14 @@ FmxBehavioralAddition >> isRequired [ ifNil: [ true ] ifNotNil: [ :realClass | realClass localSlots ifEmpty: [ self slots ifNotNil: [ ^ true ] ] ifNotEmpty: [ :currentSlots | + self slots ifNil: [ ^ true ]. self slots size = currentSlots size ifFalse: [ ^ true ]. (self slots allSatisfy: [ :slotDefinition | currentSlots anySatisfy: [ :slot | slot definitionString = slotDefinition ] ]) ifFalse: [ ^ true ] ]. realClass traitComposition isEmpty ifTrue: [ self traits ifNotNil: [ ^ true ] ] ifFalse: [ + self traits ifNil: [ ^ true ]. (OpalCompiler new failBlock: [ ^ true ]; source: self traits; diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 56e781591..71f510bef 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -200,12 +200,13 @@ FmxMBClass >> generateRootMetamodelMethodIn: aClass [ FmxMBClass >> generateTestingMethodsIn: aClass [ self isRoot ifTrue: [ + | selectorsToGenerate | + selectorsToGenerate := Set new. builder testingSelectorsMapping keysAndValuesDo: [ :concernedClass :selectors | - (builder shouldGeneratorTestingMethodsOf: concernedClass in: self) ifTrue: [ - selectors do: [ :sel | - | selectorsFromTraits | - selectorsFromTraits := self traitGeneralizations flatCollect: #testingSelectors. - (selectorsFromTraits includes: sel) ifFalse: [ self addMethod: (sel , '\\ \ ^ false') withCRs in: aClass protocol: #testing ] ] ] ] ]. + (builder shouldGeneratorTestingMethodsOf: concernedClass in: self) ifTrue: [ selectorsToGenerate addAll: selectors ] ]. + + (selectorsToGenerate difference: (self traitGeneralizations flatCollect: #testingSelectors)) do: [ :sel | + self addMethod: (sel , '\\ \ ^ false') withCRs in: aClass protocol: #testing ] ]. super generateTestingMethodsIn: aClass ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index e8e4113d4..e7b253a0b 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -22,6 +22,10 @@ FmxMBRingEnvironment class >> for: aBuilder [ { #category : 'installing' } FmxMBRingEnvironment >> addMethod: sourceCode in: aClassName classSide: aBoolean protocol: protocol [ + self + assert: ((self changesOfType: FmxBehavioralAddition) anySatisfy: [ :change | change name = aClassName ]) + description: 'Method additions should be done on classes to generate.'. + changesToApply add: (FmxMethodAddition className: aClassName isClassSide: aBoolean @@ -34,13 +38,13 @@ FmxMBRingEnvironment >> apply [ | dependencies | self collectChangesToApply. - "Now we have a list of changes to apply. Some changes needs to by applied before others (for example, we need to create a classe to compile its methods or compile superclasses before their subclasses or traits before their users)." dependencies := changesToApply inject: Dictionary new into: [ :dictionary :change | dictionary at: change put: (change followingChangesIn: (changesToApply copyWithout: change)); yourself ]. - (AITopologicalSorting sort: changesToApply followingIncomingProperty: [ :change | dependencies at: change ]) do: #apply + (AITopologicalSorting sort: changesToApply followingIncomingProperty: [ :change | dependencies at: change ]) do: #apply. + changesToApply := OrderedCollection new ] { #category : 'accessing' } @@ -128,14 +132,19 @@ FmxMBRingEnvironment >> classNamed: aClassName [ { #category : 'installing' } FmxMBRingEnvironment >> collectChangesToApply [ - | resolvedClasses | - resolvedClasses := ringEnvironment ask behaviors select: [ :each | each isRingResolved and: [ each superclass isRingResolved ] ]. - resolvedClasses do: [ :each | self recordClassChangesFor: each ]. - self recordRemovalOfGeneratedEntitiesNotPresentIn: resolvedClasses. + | classesToGenerate | + classesToGenerate := (self changesOfType: FmxBehavioralAddition) collectAsSet: #name. + + classesToGenerate do: [ :className | + self class environment at: className asSymbol ifPresent: [ :realClass | + self recordMethodRemovalsOf: realClass. + self recordMethodRemovalsOf: realClass class ] ]. + + self recordRemovalOfGeneratedPackagesAndClasses. "Reject changes that would not change anything on the current system." - changesToApply := changesToApply select: [ :change | change isRequired ]. + changesToApply := changesToApply select: [ :change | change isRequired ] ] { #category : 'installing' } @@ -306,15 +315,7 @@ FmxMBRingEnvironment >> initialize [ ] { #category : 'installing' } -FmxMBRingEnvironment >> recordClassChangesFor: aRGClass [ - - self class environment at: aRGClass name asSymbol ifPresent: [ :realClass | - self recordMethodRemovalsOf: realClass to: aRGClass. - self recordMethodRemovalsOf: realClass class to: aRGClass classSide ] -] - -{ #category : 'installing' } -FmxMBRingEnvironment >> recordMethodRemovalsOf: realClass to: anRGClass [ +FmxMBRingEnvironment >> recordMethodRemovalsOf: realClass [ | generatedMethodsOfRealClass generatedMethodNamesOfRealClass selectorsToGenerate | generatedMethodsOfRealClass := (Pragma allNamed: #generated in: realClass) @@ -326,10 +327,8 @@ FmxMBRingEnvironment >> recordMethodRemovalsOf: realClass to: anRGClass [ selectorsToGenerate := ((self changesOfType: FmxMethodAddition) select: [ :change | change className = realClass instanceSide name and: [ change isClassSide = realClass isClassSide ] ]) collect: #selector. - "selectorsToGenerate size = anRGClass localSelectors size ifFalse: [ self halt ]." - "First we removed the generated methods should not be here anymore" - (generatedMethodNamesOfRealClass difference: anRGClass localSelectors) ifNotEmpty: [ :selectorsOfRemovedGeneratedMethod | + (generatedMethodNamesOfRealClass difference: selectorsToGenerate) ifNotEmpty: [ :selectorsOfRemovedGeneratedMethod | changesToApply add: (FmxMethodRemovals className: realClass name isClassSide: realClass isClassSide selectors: selectorsOfRemovedGeneratedMethod) ] ] @@ -349,6 +348,22 @@ FmxMBRingEnvironment >> recordRemovalOfGeneratedEntitiesNotPresentIn: resolvedCl ifNone: [ changesToApply add: (FmxClassRemoval class: class) ] ] ] ] ] +{ #category : 'accessing' } +FmxMBRingEnvironment >> recordRemovalOfGeneratedPackagesAndClasses [ + "Since the last generation it is possible some behaviorals were removed from the generator. In that case we should remove them. We will remove all classes and traits of Famix that are not part of the current generator." + + | classesToGenerate | + classesToGenerate := (self changesOfType: FmxBehavioralAddition) collectAsSet: #name. + + (self changesOfType: FmxPackageAddition) + collect: #systemPackage + thenDo: [ :package | + package ifNotNil: [ + package definedClasses + select: #isMetamodelEntity + thenDo: [ :class | (classesToGenerate includes: class name) ifFalse: [ changesToApply add: (FmxClassRemoval class: class) ] ] ] ] +] + { #category : 'public registration' } FmxMBRingEnvironment >> registerPackage: aPackageName [ diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index bdfb44743..38fd513bf 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -53,13 +53,13 @@ FmxMBVisitorTrait >> generate [ { #category : 'generating' } FmxMBVisitorTrait >> generateAcceptMethodIn: aFmxMBBehavior [ - self builder environment - compile: ('accept: aVisitor + self + addMethod: ('accept: aVisitor ^ aVisitor visit{1}: self' format: { aFmxMBBehavior fullName }) in: aFmxMBBehavior realClass - classified: self acceptMethodProtocol + protocol: self acceptMethodProtocol ] { #category : 'generation - common' } @@ -86,33 +86,31 @@ FmxMBVisitorTrait >> generateVisitAndAcceptMethods [ { #category : 'generation - common' } FmxMBVisitorTrait >> generateVisitCollectionMethod [ - self realClass - compile: 'visitCollection: aCollection + self + addMethod: 'visitCollection: aCollection ^ aCollection collect: [ :each | each accept: self ]' - classified: #visiting + in: self realClass + protocol: #visiting ] { #category : 'generation - common' } FmxMBVisitorTrait >> generateVisitEntityMethod [ - self realClass - compile: 'visitEntity: aFamixEntity + self + addMethod: 'visitEntity: aFamixEntity ^ aFamixEntity ifNotNil: [ aFamixEntity accept: self ]' - classified: #visiting + in: self realClass + protocol: #visiting ] { #category : 'generation - visit' } FmxMBVisitorTrait >> generateVisitMethodFor: aFmxMBBehavior [ - self builder environment - compile: (String streamContents: [ :s | - self writeVisitMethodFor: aFmxMBBehavior on: s ]) - in: self realClass - classified: #visiting + self addMethod: (String streamContents: [ :s | self writeVisitMethodFor: aFmxMBBehavior on: s ]) in: self realClass protocol: #visiting ] { #category : 'initialization' } From 3aa186e44d8cd324f6be5d29215564e898e62a7c Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 01:06:59 +0200 Subject: [PATCH 044/121] Remove useless parameter --- ...oteRelationSideGenerationStrategy.class.st | 4 +- ...xMBRelationSideGenerationStrategy.class.st | 123 +++++++++--------- ...ardRelationSideGenerationStrategy.class.st | 4 +- 3 files changed, 62 insertions(+), 69 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBNonRemoteRelationSideGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBNonRemoteRelationSideGenerationStrategy.class.st index 1812a01ce..1e5733ecc 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBNonRemoteRelationSideGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBNonRemoteRelationSideGenerationStrategy.class.st @@ -7,7 +7,7 @@ Class { } { #category : 'generation' } -FmxMBNonRemoteRelationSideGenerationStrategy >> generateGetterCoreIn: aClassOrTrait on: aStream for: aRelationSide [ +FmxMBNonRemoteRelationSideGenerationStrategy >> generateGetterCoreOn: aStream for: aRelationSide [ aStream tab; @@ -45,7 +45,7 @@ FmxMBNonRemoteRelationSideGenerationStrategy >> generateGetterCoreIn: aClassOrTr ] { #category : 'generation' } -FmxMBNonRemoteRelationSideGenerationStrategy >> generateSetterCoreIn: aClassOrTrait on: aStream for: aRelationSide [ +FmxMBNonRemoteRelationSideGenerationStrategy >> generateSetterCoreOn: aStream for: aRelationSide [ (aRelationSide isOne and: [ aRelationSide otherSide isOne ]) ifTrue: [ aStream diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st index fd415be2b..d4ed24356 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st @@ -36,7 +36,7 @@ FmxMBRelationSideGenerationStrategy >> compileMethod: methodSource for: aRelatio ] { #category : 'generation' } -FmxMBRelationSideGenerationStrategy >> generateGetterCoreIn: aClassOrTrait on: aStream for: aRelationSide [ +FmxMBRelationSideGenerationStrategy >> generateGetterCoreOn: aStream for: aRelationSide [ ^ self subclassResponsibility ] @@ -45,67 +45,61 @@ FmxMBRelationSideGenerationStrategy >> generateGetterCoreIn: aClassOrTrait on: a FmxMBRelationSideGenerationStrategy >> generateGetterIn: aClassOrTrait for: aRelationSide [ | methodSource commentDefinition | + commentDefinition := aRelationSide comment ifNotEmpty: [ :comment | '' format: { comment printString } ]. - commentDefinition := aRelationSide comment ifNotEmpty: [ :comment | - '' format: - { comment printString } ]. - - methodSource := String streamContents: [ :s | - s - nextPutAll: aRelationSide name; - cr. - aRelationSide hasRelation ifTrue: [ - s - tab; - nextPutAll: '"Relation named: #'; - nextPutAll: relationSide name; - nextPutAll: ' type: #'; - nextPutAll: relationSide oppositeType; - nextPutAll: ' opposite: #'; - nextPutAll: relationSide oppositeName; - nextPutAll: '"'; - cr; - cr ]. - s - tab; - nextPutAll: ''; - cr. - commentDefinition ifNotEmpty: [ - s - tab; - nextPutAll: commentDefinition; - cr ]. - aRelationSide isContainer ifTrue: [ - s - tab; - nextPutAll: ''; - cr ]. - aRelationSide isDerived ifTrue: [ + methodSource := String streamContents: [ :s | s - tab; - nextPutAll: ''; - cr ]. - aRelationSide isSource ifTrue: [ - s - tab; - nextPutAll: ''; - cr ]. - aRelationSide isTarget ifTrue: [ + nextPutAll: aRelationSide name; + cr. + aRelationSide hasRelation ifTrue: [ + s + tab; + nextPutAll: '"Relation named: #'; + nextPutAll: relationSide name; + nextPutAll: ' type: #'; + nextPutAll: relationSide oppositeType; + nextPutAll: ' opposite: #'; + nextPutAll: relationSide oppositeName; + nextPutAll: '"'; + cr; + cr ]. s tab; - nextPutAll: ''; - cr ]. - - self - generateGetterCoreIn: aClassOrTrait - on: s - for: aRelationSide ]. + nextPutAll: ''; + cr. + commentDefinition ifNotEmpty: [ + s + tab; + nextPutAll: commentDefinition; + cr ]. + aRelationSide isContainer ifTrue: [ + s + tab; + nextPutAll: ''; + cr ]. + aRelationSide isDerived ifTrue: [ + s + tab; + nextPutAll: ''; + cr ]. + aRelationSide isSource ifTrue: [ + s + tab; + nextPutAll: ''; + cr ]. + aRelationSide isTarget ifTrue: [ + s + tab; + nextPutAll: ''; + cr ]. + + self generateGetterCoreOn: s for: aRelationSide ]. self compileMethod: methodSource for: aRelationSide in: aClassOrTrait ] { #category : 'generation' } -FmxMBRelationSideGenerationStrategy >> generateSetterCoreIn: aClassOrTrait on: aStream for: aRelationSide [ +FmxMBRelationSideGenerationStrategy >> generateSetterCoreOn: aStream for: aRelationSide [ ^ self subclassResponsibility ] @@ -114,18 +108,17 @@ FmxMBRelationSideGenerationStrategy >> generateSetterCoreIn: aClassOrTrait on: a FmxMBRelationSideGenerationStrategy >> generateSetterIn: aClassOrTrait for: aRelationSide [ | methodSource | - methodSource := String - streamContents: [ :s | - s - nextPutAll: aRelationSide name; - nextPutAll: ': anObject'; - cr; - cr. - s - tab; - nextPutAll: ''; - cr. - self generateSetterCoreIn: aClassOrTrait on: s for: aRelationSide ]. + methodSource := String streamContents: [ :s | + s + nextPutAll: aRelationSide name; + nextPutAll: ': anObject'; + cr; + cr. + s + tab; + nextPutAll: ''; + cr. + self generateSetterCoreOn: s for: aRelationSide ]. self compileMethod: methodSource for: aRelationSide in: aClassOrTrait ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBStandardRelationSideGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBStandardRelationSideGenerationStrategy.class.st index 33467d8da..b30daa7e1 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBStandardRelationSideGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBStandardRelationSideGenerationStrategy.class.st @@ -7,7 +7,7 @@ Class { } { #category : 'generation' } -FmxMBStandardRelationSideGenerationStrategy >> generateGetterCoreIn: aClassOrTrait on: aStream for: aRelationSide [ +FmxMBStandardRelationSideGenerationStrategy >> generateGetterCoreOn: aStream for: aRelationSide [ aStream tab; @@ -16,7 +16,7 @@ FmxMBStandardRelationSideGenerationStrategy >> generateGetterCoreIn: aClassOrTra ] { #category : 'generation' } -FmxMBStandardRelationSideGenerationStrategy >> generateSetterCoreIn: aClassOrTrait on: aStream for: aRelationSide [ +FmxMBStandardRelationSideGenerationStrategy >> generateSetterCoreOn: aStream for: aRelationSide [ aStream tab; From 47496586c92f05ab763e88689cc8e48728955f97 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 01:34:53 +0200 Subject: [PATCH 045/121] Do not generate ring methods anymore Next step: - Remove more ring code - Simplify the methods creations to not pass a ring behavioral as parameter --- .../FmxMBBehavior.class.st | 16 ++++ .../FmxMBEntity.class.st | 7 +- .../FmxMBBuilderRelationTest.class.st | 87 ------------------- .../FmxMBClassGeneralizationsTest.class.st | 36 -------- .../FmxMBClassTest.class.st | 51 ----------- .../FmxMBImportingContextTest.class.st | 30 ------- .../FmxMBTestingMethodsTest.class.st | 28 ------ .../FmxMBTraitTest.class.st | 31 ------- .../FmxMBTypedPropertyTest.class.st | 21 ----- 9 files changed, 17 insertions(+), 290 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 158abbecf..c9380d8cd 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -43,6 +43,22 @@ FmxMBBehavior >> addAllTransitiveTraitsIn: aCollection [ ^ aCollection ] +{ #category : 'adding' } +FmxMBBehavior >> addMethod: code classSide: boolean protocol: protocol [ + + self + addMethod: code + in: self fullName + classSide: boolean + protocol: protocol +] + +{ #category : 'adding' } +FmxMBBehavior >> addMethod: code protocol: protocol [ + + ^ self addMethod: code in: self fullName protocol: protocol +] + { #category : 'accessing' } FmxMBBehavior >> addRelation: aRelation with: anotherClass [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st index 4ae55e396..a0fbfefcd 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st @@ -27,12 +27,7 @@ FmxMBEntity >> addMethod: code in: class classSide: boolean protocol: protocol [ addMethod: code in: class name classSide: boolean - protocol: protocol. - - self flag: #todo. "This code should never make it in the dev branch of Famix. Also we should provide the class name directly" - (boolean - ifTrue: [ class classSide ] - ifFalse: [ class ]) compile: code classified: protocol + protocol: protocol ] { #category : 'generating' } diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderRelationTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderRelationTest.class.st index 44dea4288..554da95be 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderRelationTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderRelationTest.class.st @@ -75,93 +75,6 @@ FmxMBBuilderRelationTest >> testClassRelations [ ] -{ #category : 'tests' } -FmxMBBuilderRelationTest >> testManyToManyTraitsRelation [ - - | tClass1 tClass2 generatedClass1 generatedClass2 | - - tClass1 := builder newTraitNamed: #TClass1. - tClass2 := builder newTraitNamed: #TClass2. - - (tClass1 property: #property1) *-* (tClass2 property: #property2). - - builder generate. - - generatedClass1 := builder testingEnvironment ask classNamed: 'TstTClass1'. - generatedClass2 := builder testingEnvironment ask classNamed: 'TstTClass2'. - - self assert: generatedClass1 slots size equals: 1. - self assert: generatedClass1 slots first name equals: #property1. - self assert: generatedClass1 slots first expression equals: 'FMMany type: #TstTClass2 opposite: #property2'. - - self assertCollection: generatedClass1 instanceSide selectors hasSameElements: #(property1 property1: addProperty1:). - - self assert: generatedClass2 slots size equals: 1. - self assert: generatedClass2 slots first name equals: #property2. - self assert: generatedClass2 slots first expression equals: 'FMMany type: #TstTClass1 opposite: #property1'. - - self assertCollection: generatedClass2 instanceSide selectors hasSameElements: #(property2 property2: addProperty2:). - -] - -{ #category : 'tests' } -FmxMBBuilderRelationTest >> testManyToOneTraitsRelation [ - - | tClass1 tClass2 generatedClass1 generatedClass2 | - - tClass1 := builder newTraitNamed: #TClass1. - tClass2 := builder newTraitNamed: #TClass2. - - (tClass1 property: #property1) *- (tClass2 property: #property2). - - builder generate. - - generatedClass1 := builder testingEnvironment ask classNamed: 'TstTClass1'. - generatedClass2 := builder testingEnvironment ask classNamed: 'TstTClass2'. - - self assert: generatedClass1 slots size equals: 1. - self assert: generatedClass1 slots first name equals: #property1. - self assert: generatedClass1 slots first expression equals: 'FMOne type: #TstTClass2 opposite: #property2'. - - self assertCollection: generatedClass1 instanceSide selectors hasSameElements: #(property1 property1:). - - self assert: generatedClass2 slots size equals: 1. - self assert: generatedClass2 slots first name equals: #property2. - self assert: generatedClass2 slots first expression equals: 'FMMany type: #TstTClass1 opposite: #property1'. - - self assertCollection: generatedClass2 instanceSide selectors hasSameElements: #(property2 property2: addProperty2:). - -] - -{ #category : 'tests' } -FmxMBBuilderRelationTest >> testOneToManyTraitsRelation [ - - | tClass1 tClass2 generatedClass1 generatedClass2 | - - tClass1 := builder newTraitNamed: #TClass1. - tClass2 := builder newTraitNamed: #TClass2. - - (tClass1 property: #property1) -* (tClass2 property: #property2). - - builder generate. - - generatedClass1 := builder testingEnvironment ask classNamed: 'TstTClass1'. - generatedClass2 := builder testingEnvironment ask classNamed: 'TstTClass2'. - - self assert: generatedClass1 slots size equals: 1. - self assert: generatedClass1 slots first name equals: #property1. - self assert: generatedClass1 slots first expression equals: 'FMMany type: #TstTClass2 opposite: #property2'. - - self assertCollection: generatedClass1 instanceSide selectors hasSameElements: #(property1 property1: addProperty1:). - - self assert: generatedClass2 slots size equals: 1. - self assert: generatedClass2 slots first name equals: #property2. - self assert: generatedClass2 slots first expression equals: 'FMOne type: #TstTClass1 opposite: #property1'. - - self assertCollection: generatedClass2 instanceSide selectors hasSameElements: #(property2 property2:). - -] - { #category : 'tests' } FmxMBBuilderRelationTest >> testOneToOneTraitsRelation [ diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBClassGeneralizationsTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBClassGeneralizationsTest.class.st index 1f16b9ef3..1d13ebe45 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBClassGeneralizationsTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBClassGeneralizationsTest.class.st @@ -11,26 +11,6 @@ Class { #tag : 'Tests' } -{ #category : 'running' } -FmxMBClassGeneralizationsTest >> checkGeneralizationWithAnnotations [ - - "check if TstClass is correctly created as a subclass of TstBehavior" - - | generatedBehavior generatedClass annotation | - - builder generate. - - generatedBehavior := builder testingEnvironment ask classNamed: 'TstBehavior'. - generatedClass := builder testingEnvironment ask classNamed: 'TstClass'. - - self assert: generatedClass superclass equals: generatedBehavior. - annotation := generatedClass classSide methodNamed: #annotation. - self assert: (annotation sourceCode includesSubstring: ''). - self assert: (annotation sourceCode includesSubstring: ''). - - -] - { #category : 'running' } FmxMBClassGeneralizationsTest >> checkHierarchy [ self assertEmpty: named allClassGeneralizations. @@ -74,22 +54,6 @@ FmxMBClassGeneralizationsTest >> testAllClassGeneralizationsInChainInverted [ self checkHierarchy. ] -{ #category : 'tests' } -FmxMBClassGeneralizationsTest >> testClassOppositeGeneralization [ - - behavior <|-- class. - - self checkGeneralizationWithAnnotations -] - -{ #category : 'tests' } -FmxMBClassGeneralizationsTest >> testGeneralization [ - - class --|> behavior. - - self checkGeneralizationWithAnnotations -] - { #category : 'tests' } FmxMBClassGeneralizationsTest >> testSubclassOf [ diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st index a3703f583..b4a9798d6 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st @@ -179,27 +179,6 @@ FmxMBClassTest >> testEmptyComment [ self assert: generated comment content isEmptyOrNil. ] -{ #category : 'tests' } -FmxMBClassTest >> testEntityClass [ - "check expected parameters of a newely generated entity class" - - | generated method | - builder newClassNamed: #Entity. - builder generate. - generated := builder testingEnvironment ask classNamed: 'TstEntity'. - self assert: generated isNotNil. - self assert: generated isClass. - self assert: generated superclass name equals: 'MooseEntity'. - self assertEmpty: generated slots. - self assertEmpty: generated instanceSide localSelectors. - self assertCollection: generated classSide localSelectors sorted equals: #(annotation metamodel). - - method := generated classSide methodNamed: #annotation. - self assert: (method sourceCode includesSubstring: ''). - self assert: (method sourceCode includesSubstring: ''). - self assert: (method sourceCode includesSubstring: '') -] - { #category : 'tests' } FmxMBClassTest >> testMultipleClasses [ @@ -216,36 +195,6 @@ FmxMBClassTest >> testMultipleClasses [ ] -{ #category : 'tests' } -FmxMBClassTest >> testSimpleClass [ - "check expected parameters of a newely generated class" - - | generated | - builder newClassNamed: #Comment. - builder generate. - generated := builder testingEnvironment ask classNamed: 'TstComment'. - self assert: generated isNotNil. - self assert: generated isClass. - self assert: generated superclass name equals: 'TstEntity'. - self assertEmpty: generated slots. - self assertEmpty: generated instanceSide localSelectors. - self assertCollection: generated classSide localSelectors sorted equals: #(annotation) -] - -{ #category : 'tests' } -FmxMBClassTest >> testSimpleClassAnnotation [ - "test correct generation of class annotations" - - | generated method | - builder newClassNamed: #Comment. - builder generate. - generated := builder testingEnvironment ask classNamed: 'TstComment'. - method := generated classSide methodNamed: #annotation. - self assert: (method sourceCode includesSubstring: ''). - self assert: (method sourceCode includesSubstring: ''). - self assert: (method sourceCode includesSubstring: '') -] - { #category : 'tests - names' } FmxMBClassTest >> testSingularPropertyName [ diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBImportingContextTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBImportingContextTest.class.st index 102e6b61a..3b97cbc82 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBImportingContextTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBImportingContextTest.class.st @@ -39,17 +39,6 @@ FmxMBImportingContextTest >> setUp [ #TstImportingContext ] -{ #category : 'tests' } -FmxMBImportingContextTest >> testDefineImport [ - - | localMethod | - localMethod := generatedContext methodNamed: #importMethod. - self assert: - (localMethod sourceCode includesSubstring: ''). - self assert: (localMethod sourceCode includesSubstring: - 'self importConcreteEntity: (self class fm3ClassNamed: #Method') -] - { #category : 'tests' } FmxMBImportingContextTest >> testGeneratedContextClass [ self assert: generatedContext isNotNil. @@ -84,22 +73,3 @@ FmxMBImportingContextTest >> testNotGeneratedForEmptyBuilder [ #TstImportingContext. self assert: generatedContext isNil ] - -{ #category : 'tests' } -FmxMBImportingContextTest >> testShouldImport [ - - | localMethod | - - localMethod := generatedContext methodNamed: #shouldImportMethod. - self assert: (localMethod sourceCode includesSubstring: ''). - self assert: (localMethod sourceCode includesSubstring: '^ self shouldImport: #Method'). - - localMethod := generatedContext methodNamed: #shouldImportAccess. - self assert: (localMethod sourceCode includesSubstring: ''). - self assert: (localMethod sourceCode includesSubstring: '^ self shouldImport: #Access'). - - localMethod := generatedContext methodNamed: #shouldImportVariable. - self assert: (localMethod sourceCode includesSubstring: ''). - self assert: (localMethod sourceCode includesSubstring: '^ self shouldImport: #Variable'). - -] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBTestingMethodsTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBTestingMethodsTest.class.st index c362596ae..6d0e76a0b 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBTestingMethodsTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBTestingMethodsTest.class.st @@ -48,34 +48,6 @@ FmxMBTestingMethodsTest >> setUp [ ] -{ #category : 'tests' } -FmxMBTestingMethodsTest >> testEntity [ - - (generatedEntity methodNamed: #isEntity) sourceCode includesSubstring: '^ true'. - self assert: (generatedEntity methodNamed: #isNamed) isNil. -] - -{ #category : 'tests' } -FmxMBTestingMethodsTest >> testRoots [ - - "all roots should have testing messages with negative answer" - - (generatedEntity methodNamed: #isEntity) sourceCode includesSubstring: '^ false'. - (generatedEntity methodNamed: #isNamedEntity) sourceCode includesSubstring: '^ false'. - - (generatedEntity methodNamed: #isEntity) sourceCode includesSubstring: '^ false'. - (generatedEntity methodNamed: #isNamedEntity) sourceCode includesSubstring: '^ false'. -] - -{ #category : 'tests' } -FmxMBTestingMethodsTest >> testTrait [ - - "all roots should have testing messages with negative answer" - - (generatedTNamed methodNamed: #isNamedEntity) sourceCode includesSubstring: '^ true'. - self assert: (generatedTNamed methodNamed: #isEntity) isNil. -] - { #category : 'tests' } FmxMBTestingMethodsTest >> testTraited [ diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st index a2d7baa58..4f972b352 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st @@ -279,37 +279,6 @@ FmxMBTraitTest >> testMultipleTraits [ ] -{ #category : 'tests' } -FmxMBTraitTest >> testSimpleClassAnnotation [ - - | generated method | - - builder newTraitNamed: #TComment. - builder generate. - - generated := builder testingEnvironment ask classNamed: 'TstTComment'. - - method := generated classSide methodNamed: #annotation. - self assert: (method sourceCode includesSubstring: ''). - self assert: (method sourceCode includesSubstring: ''). - - -] - -{ #category : 'tests' } -FmxMBTraitTest >> testSimpleTrait [ - | generated | - builder newTraitNamed: #TComment. - builder generate. - generated := builder testingEnvironment ask classNamed: 'TstTComment'. - self assert: generated isNotNil. - self assert: generated isClass. - self assert: generated superclass name equals: 'Trait'. - self assertEmpty: generated slots. - self assertEmpty: generated instanceSide localSelectors. - self assertCollection: generated classSide localSelectors sorted equals: #(annotation) -] - { #category : 'tests' } FmxMBTraitTest >> testTestingMethods [ diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBTypedPropertyTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBTypedPropertyTest.class.st index 937c6f196..4e2005b91 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBTypedPropertyTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBTypedPropertyTest.class.st @@ -6,27 +6,6 @@ Class { #tag : 'Tests' } -{ #category : 'tests' } -FmxMBTypedPropertyTest >> testDoubleQuotesInPropertyComment [ - - "test a case when the property comment contains doubled quotes" - - | simpleClass commentString generated | - - simpleClass := builder newClassNamed: #Comment. - commentString := 'operator''s symbol'. - - (simpleClass property: #operator type: #String) comment: commentString. - - simpleClass comment: commentString. - builder generate. - generated := builder testingEnvironment ask classNamed: 'TstComment'. - self assert: (generated selectors includesAll: #(operator operator:)) - - - -] - { #category : 'tests' } FmxMBTypedPropertyTest >> testMultivalued [ From 08ddc0d9b0810d3aef460e4f8e4290a1bb5cddc7 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 01:41:44 +0200 Subject: [PATCH 046/121] Make sure FmxMBModel does not have RGClass in its methods parameters --- .../FmxMBBehavior.class.st | 7 ++-- .../FmxMBClass.class.st | 39 +++++++++---------- .../FmxMBEntity.class.st | 7 +++- .../FmxMBModel.class.st | 27 ++++--------- .../FmxMBTrait.class.st | 4 +- 5 files changed, 38 insertions(+), 46 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index c9380d8cd..653c34e0e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -293,7 +293,7 @@ FmxMBBehavior >> generateAccessors [ ] { #category : 'generating' } -FmxMBBehavior >> generateAddToCollectionFor: aClass [ +FmxMBBehavior >> generateAddToCollection [ self relations collect: #side @@ -307,7 +307,6 @@ FmxMBBehavior >> generateAddToCollectionFor: aClass [ ^ self {2} add: anObject' format: { sideName capitalized asSingular. sideName }) - in: aClass protocol: #adding ] ] ] @@ -369,9 +368,9 @@ FmxMBBehavior >> generateRemoteAccessors [ ] { #category : 'generating' } -FmxMBBehavior >> generateTestingMethodsIn: aClass [ +FmxMBBehavior >> generateTestingMethods [ - self testingSelectors do: [ :aSelector | self addMethod: (aSelector , '\\ \ ^ true') withCRs in: aClass protocol: #testing ] + self testingSelectors do: [ :aSelector | self addMethod: (aSelector , '\\ \ ^ true') withCRs protocol: #testing ] ] { #category : 'generalization' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 71f510bef..c6010e499 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -83,13 +83,13 @@ FmxMBClass >> generate [ self generateAnnotationIn: aClass. self generateIsAbstractMethodIfNecessaryIn: aClass. - self generateTestingMethodsIn: aClass. - self generateRootMetamodelMethodIn: aClass. + self generateTestingMethods. + self generateMetamodelMethod. self generateMethodsToRemoveFromTraitCompositionFor: aClass. self generatePrecedenceInTraitComposition: aClass. - self generateAddToCollectionFor: aClass. + self generateAddToCollection. self generateEqualsMethodFor: aClass. self generateHashMethodFor: aClass @@ -168,20 +168,8 @@ FmxMBClass >> generateIsAbstractMethodIfNecessaryIn: aClass [ protocol: #testing ] ] -{ #category : 'generating' } -FmxMBClass >> generateRemotes [ - | aClass aClassName | - aClassName := self fullName. - - aClass := self class environment at: aClassName asSymbol ifAbsent: [ self builder environment classNamed: aClassName asSymbol ]. - - self realClass: aClass. - - self generateRemoteAccessors -] - { #category : 'generating-methods' } -FmxMBClass >> generateRootMetamodelMethodIn: aClass [ +FmxMBClass >> generateMetamodelMethod [ self isRoot ifFalse: [ ^ self ]. @@ -191,13 +179,24 @@ FmxMBClass >> generateRootMetamodelMethodIn: aClass [ ^ {1} metamodel' format: { model fullName }) - in: aClass classSide: true protocol: #meta ] ] +{ #category : 'generating' } +FmxMBClass >> generateRemotes [ + | aClass aClassName | + aClassName := self fullName. + + aClass := self class environment at: aClassName asSymbol ifAbsent: [ self builder environment classNamed: aClassName asSymbol ]. + + self realClass: aClass. + + self generateRemoteAccessors +] + { #category : 'generating-methods' } -FmxMBClass >> generateTestingMethodsIn: aClass [ +FmxMBClass >> generateTestingMethods [ self isRoot ifTrue: [ | selectorsToGenerate | @@ -206,9 +205,9 @@ FmxMBClass >> generateTestingMethodsIn: aClass [ (builder shouldGeneratorTestingMethodsOf: concernedClass in: self) ifTrue: [ selectorsToGenerate addAll: selectors ] ]. (selectorsToGenerate difference: (self traitGeneralizations flatCollect: #testingSelectors)) do: [ :sel | - self addMethod: (sel , '\\ \ ^ false') withCRs in: aClass protocol: #testing ] ]. + self addMethod: (sel , '\\ \ ^ false') withCRs protocol: #testing ] ]. - super generateTestingMethodsIn: aClass + super generateTestingMethods ] { #category : 'testing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st index a0fbfefcd..a65621393 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st @@ -22,10 +22,15 @@ FmxMBEntity >> acceptVisitor: aVisitor [ { #category : 'generating' } FmxMBEntity >> addMethod: code in: class classSide: boolean protocol: protocol [ + | className | + self flag: #todo. "We should only take a string as parameter." + className := class isString + ifTrue: [ class ] + ifFalse: [ class name ]. self flag: #todo. "Demeter" self builder environment addMethod: code - in: class name + in: className classSide: boolean protocol: protocol ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st index 186d08093..129aa0713 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st @@ -21,7 +21,9 @@ FmxMBModel >> defaultTag [ FmxMBModel >> generate [ super generate. - self generateModelMethods: self ensureRealClass + self + generateFileImportMethods; + generateSubmetamodelsMethod ] { #category : 'generating-methods' } @@ -40,7 +42,7 @@ FmxMBModel >> generateAnnotationIn: aModelClass [ ] { #category : 'generating-methods' } -FmxMBModel >> generateFileImportMethodsIn: aModelClass [ +FmxMBModel >> generateFileImportMethods [ self builder configuration shouldGenerateFileImportHelpers ifFalse: [ ^ self ]. @@ -48,7 +50,6 @@ FmxMBModel >> generateFileImportMethodsIn: aModelClass [ addMethod: 'canBeImportedFromFile ^true' - in: aModelClass classSide: true protocol: #testing. @@ -57,20 +58,12 @@ FmxMBModel >> generateFileImportMethodsIn: aModelClass [ ^ {1}' format: { self builder importingContextName }) - in: aModelClass classSide: true protocol: #accessing ] { #category : 'generating-methods' } -FmxMBModel >> generateModelMethods: aModelClass [ - - self generateFileImportMethodsIn: aModelClass. - self generateSubmetamodelsMethodIn: aModelClass -] - -{ #category : 'generating-methods' } -FmxMBModel >> generateRootMetamodelMethodIn: aClass [ +FmxMBModel >> generateMetamodelMethod [ "no need to define the method #metamodel in the #Model entity because it is already the #Model entity that hold the metamodel" @@ -79,7 +72,7 @@ FmxMBModel >> generateRootMetamodelMethodIn: aClass [ ] { #category : 'generating-methods' } -FmxMBModel >> generateSubmetamodelsMethodIn: aModelClass [ +FmxMBModel >> generateSubmetamodelsMethod [ self builder allSubBuilders ifNotEmpty: [ :subBuilders | | code | @@ -94,15 +87,11 @@ FmxMBModel >> generateSubmetamodelsMethodIn: aModelClass [ stream nextPut: $) ]. - self - addMethod: code - in: aModelClass - classSide: true - protocol: #accessing ] + self addMethod: code classSide: true protocol: #accessing ] ] { #category : 'generating-methods' } -FmxMBModel >> generateTestingMethodsIn: aClass [ +FmxMBModel >> generateTestingMethods [ "No need to define the testing methods in the #Model entity because we already have a test that check that the entity is a Model" diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index bb278420a..c3e221d61 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -73,11 +73,11 @@ FmxMBTrait >> generate [ self generateAccessors. self generateAnnotationIn: aTrait. - self generateTestingMethodsIn: aTrait. + self generateTestingMethods. self generateMethodsToRemoveFromTraitCompositionFor: aTrait. self generatePrecedenceInTraitComposition: aTrait. - self generateAddToCollectionFor: aTrait + self generateAddToCollection ] { #category : 'generating' } From 7247cff9e023c97c3dd35e405e6a9c9e8b351b22 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 01:47:59 +0200 Subject: [PATCH 047/121] Simplify some generations to not need a RGClass And remove an useless parameter --- src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st | 3 +-- src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st | 2 +- src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st | 8 ++++---- src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st | 3 +-- .../FmxMBRingEnvironment.class.st | 4 ---- src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st | 2 +- src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st | 2 +- 7 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 653c34e0e..4ef2452c2 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -311,7 +311,7 @@ FmxMBBehavior >> generateAddToCollection [ ] { #category : 'generating' } -FmxMBBehavior >> generateAnnotationIn: aRealClass [ +FmxMBBehavior >> generateAnnotation [ | aSuperclassName | self flag: #todo. "Simplify" @@ -333,7 +333,6 @@ FmxMBBehavior >> generateAnnotationIn: aRealClass [ aSuperclassName. self builder safeAnnotationPackageName. self optionalPragma }) - in: aRealClass classSide: true protocol: #meta ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index c6010e499..4218f5a25 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -80,7 +80,7 @@ FmxMBClass >> generate [ self realClass: aClass. self generateAccessors. - self generateAnnotationIn: aClass. + self generateAnnotation. self generateIsAbstractMethodIfNecessaryIn: aClass. self generateTestingMethods. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st index 4637844a7..e240797ff 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st @@ -22,19 +22,19 @@ FmxMBClassGroup >> defaultTag [ { #category : 'generating' } FmxMBClassGroup >> generate [ + super generate. - self generateMooseGroupAnnotationIn: innerClass ensureRealClass as: self fullName superclass: nil. + self generateMooseGroupAnnotationIn: innerClass as: self fullName ] { #category : 'generating-methods' } -FmxMBClassGroup >> generateMooseGroupAnnotationIn: aRealClass as: aName superclass: aSuperclass [ +FmxMBClassGroup >> generateMooseGroupAnnotationIn: aFmxBehavioral as: aName [ - self + aFmxBehavioral addMethod: ('annotation{1} ^ {1}' format: { aName }) - in: aRealClass classSide: true protocol: #groups ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st index 129aa0713..eb808d797 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st @@ -27,7 +27,7 @@ FmxMBModel >> generate [ ] { #category : 'generating-methods' } -FmxMBModel >> generateAnnotationIn: aModelClass [ +FmxMBModel >> generateAnnotation [ self addMethod: ('annotation @@ -36,7 +36,6 @@ FmxMBModel >> generateAnnotationIn: aModelClass [ ' format: { self fullName. self builder safeAnnotationPackageName }) - in: aModelClass classSide: true protocol: #meta ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index e7b253a0b..e74c14b9f 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -22,10 +22,6 @@ FmxMBRingEnvironment class >> for: aBuilder [ { #category : 'installing' } FmxMBRingEnvironment >> addMethod: sourceCode in: aClassName classSide: aBoolean protocol: protocol [ - self - assert: ((self changesOfType: FmxBehavioralAddition) anySatisfy: [ :change | change name = aClassName ]) - description: 'Method additions should be done on classes to generate.'. - changesToApply add: (FmxMethodAddition className: aClassName isClassSide: aBoolean diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index c3e221d61..54c597314 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -71,7 +71,7 @@ FmxMBTrait >> generate [ self realClass: aTrait. self generateAccessors. - self generateAnnotationIn: aTrait. + self generateAnnotation. self generateTestingMethods. self generateMethodsToRemoveFromTraitCompositionFor: aTrait. diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index 38fd513bf..ecc37dd6f 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -45,7 +45,7 @@ FmxMBVisitorTrait >> generate [ self realClass: aTrait. - self generateAnnotationIn: aTrait. + self generateAnnotation. self generateCommonMethodsIfNecessary. self generateVisitAndAcceptMethods ] From 05eff41a552f439851e26cc6908870b9f19a8c22 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 01:51:34 +0200 Subject: [PATCH 048/121] Remove dead code --- .../FmxMBBehavior.class.st | 24 ------------------- .../FmxMBClass.class.st | 10 +++----- .../FmxMBTrait.class.st | 2 -- 3 files changed, 3 insertions(+), 33 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 4ef2452c2..b7555aa95 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -337,30 +337,6 @@ FmxMBBehavior >> generateAnnotation [ protocol: #meta ] -{ #category : 'generating' } -FmxMBBehavior >> generateMethodsToRemoveFromTraitCompositionFor: aBehavioral [ - "In case of method conflict the user can select methods to remove from a trait. In that case we give the information to ring here." - - self additionalProperties - at: #methodsToRemoveFromTraitComposition - ifPresent: [ :methodsDictionary | - aBehavioral - propertyNamed: #methodsToRemoveFromTraitComposition - put: methodsDictionary ] -] - -{ #category : 'generating' } -FmxMBBehavior >> generatePrecedenceInTraitComposition: aBehavioral [ - "In case of method conflict the user can select methods to remove from a trait. In that case we give the information to ring here." - - self additionalProperties - at: #precedingTrait - ifPresent: [ :value | - aBehavioral - propertyNamed: #precedingTrait - put: value ] -] - { #category : 'generating' } FmxMBBehavior >> generateRemoteAccessors [ (self properties select: #isRemote) do: [ :each | each generateAccessorsIn: self realClass ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 4218f5a25..c54055f45 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -81,14 +81,11 @@ FmxMBClass >> generate [ self generateAccessors. self generateAnnotation. - self generateIsAbstractMethodIfNecessaryIn: aClass. + self generateIsAbstractMethodIfNecessary. self generateTestingMethods. self generateMetamodelMethod. - self generateMethodsToRemoveFromTraitCompositionFor: aClass. - self generatePrecedenceInTraitComposition: aClass. - self generateAddToCollection. self generateEqualsMethodFor: aClass. @@ -155,15 +152,14 @@ FmxMBClass >> generateHashMethodFor: aClass [ ] { #category : 'generating' } -FmxMBClass >> generateIsAbstractMethodIfNecessaryIn: aClass [ +FmxMBClass >> generateIsAbstractMethodIfNecessary [ self isAbstractClass ifTrue: [ self addMethod: ('isAbstract - ^ self == {1}' format: { aClass name asString }) - in: aClass + ^ self == {1}' format: { self fullName }) classSide: true protocol: #testing ] ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index 54c597314..d3b987bd8 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -74,8 +74,6 @@ FmxMBTrait >> generate [ self generateAnnotation. self generateTestingMethods. - self generateMethodsToRemoveFromTraitCompositionFor: aTrait. - self generatePrecedenceInTraitComposition: aTrait. self generateAddToCollection ] From 9123f2fb9ee77ce65e3d4c2863a4dd12f4453246 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 01:56:24 +0200 Subject: [PATCH 049/121] Reduce again the usage of the ring classes --- .../FmxMBEntityCreatorTrait.class.st | 5 +- .../FmxMBImportingContext.class.st | 53 +++++++------------ 2 files changed, 20 insertions(+), 38 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st index f76ee2847..455121084 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st @@ -12,7 +12,7 @@ Class { { #category : 'generating' } FmxMBEntityCreatorTrait >> generateEntityCreationMethodFor: aClass [ - self flag: #todo. "Do we need the real class? Isn't it the parameter?" + self addMethod: ('new{1} @@ -20,7 +20,6 @@ FmxMBEntityCreatorTrait >> generateEntityCreationMethodFor: aClass [ ^ self add: {2} new' format: { aClass name. aClass fullName }) - in: self realClass protocol: #'entity creation' ] @@ -36,7 +35,6 @@ FmxMBEntityCreatorTrait >> generateEntityCreationMethods [ { #category : 'generating' } FmxMBEntityCreatorTrait >> generateNamedEntityCreationMethodFor: aClass [ - self flag: #todo. "Do we need the real class? Isn't it the parameter?" self addMethod: ('new{1}Named: aName @@ -44,7 +42,6 @@ FmxMBEntityCreatorTrait >> generateNamedEntityCreationMethodFor: aClass [ ^ self add: ({2} named: aName)' format: { aClass name. aClass fullName }) - in: self realClass protocol: #'entity creation' ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index cfa3d7c1e..75bcb9241 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -68,81 +68,66 @@ FmxMBImportingContext >> generate [ self realClass: aClass. - self generateMethodsIn: aClass + self generateImportingContextMetamodel. + self generateShouldImport. + self generateImport ] { #category : 'generating-methods' } -FmxMBImportingContext >> generateImportAssociation: aFmxMBAssociationClass in: aClass [ +FmxMBImportingContext >> generateImport [ + + self builder classes do: [ :each | "No need to generate methods for model and groups." + (each isModelClass or: [ each isMetamodelClassGroup or: [ each isAbstractClass ] ]) ifFalse: [ "Associations and other entities are managed differently by the importing context" + each allTransitiveTraits + detect: [ :trait | trait name = #TAssociation ] + ifFound: [ self generateImportAssociation: each ] + ifNone: [ self generateImportConcreteEntity: each ] ] ] +] + +{ #category : 'generating-methods' } +FmxMBImportingContext >> generateImportAssociation: aFmxMBAssociationClass [ self addMethod: ('import{1} ^ self importAssociation: (self class fm3ClassNamed: #{1})' format: { aFmxMBAssociationClass name }) - in: aClass protocol: #importing ] { #category : 'generating-methods' } -FmxMBImportingContext >> generateImportConcreteEntity: aFmxMBClass in: aClass [ +FmxMBImportingContext >> generateImportConcreteEntity: aFmxMBClass [ self addMethod: ('import{1} ^ self importConcreteEntity: (self class fm3ClassNamed: #{1})' format: { aFmxMBClass name }) - in: aClass protocol: #importing ] { #category : 'generating-methods' } -FmxMBImportingContext >> generateImportIn: aClass [ - - self builder classes do: [ :each | - "No need to generate methods for model and groups." - (each isModelClass or: [ - each isMetamodelClassGroup or: [ each isAbstractClass ] ]) ifFalse: [ - - "Associations and other entities are managed differently by the importing context" - each allTransitiveTraits - detect: [ :trait | trait name = #TAssociation ] - ifFound: [ self generateImportAssociation: each in: aClass ] - ifNone: [ self generateImportConcreteEntity: each in: aClass ] ] ] -] - -{ #category : 'generating-methods' } -FmxMBImportingContext >> generateImportingContextMetamodelIn: aClass [ +FmxMBImportingContext >> generateImportingContextMetamodel [ self addMethod: ('importedMetamodel ^ {1}Model metamodel' format: { self prefix }) - in: aClass classSide: true protocol: #accessing ] -{ #category : 'generating' } -FmxMBImportingContext >> generateMethodsIn: aClass [ - - self generateImportingContextMetamodelIn: aClass. - self generateShouldImportIn: aClass. - self generateImportIn: aClass -] - { #category : 'generating-methods' } -FmxMBImportingContext >> generateShouldImportIn: aClass [ +FmxMBImportingContext >> generateShouldImport [ - self builder classes do: [ :each | - "No need to generate methods for model and groups." + self builder classes do: [ :each | "No need to generate methods for model and groups." (each isModelClass or: [ each isMetamodelClassGroup or: [ each isAbstractClass ] ]) ifFalse: [ self addMethod: ('shouldImport{1} ^ self shouldImport: #{1}' format: { each name }) - in: aClass protocol: #testing ] ] ] From 1fcd74bb38eb7f3fe634f9f8755d82c5a454619b Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 02:01:25 +0200 Subject: [PATCH 050/121] Remove dead code --- .../FmxMBBehavior.class.st | 8 ---- .../FmxMBClass.class.st | 1 - .../FmxMBEntity.class.st | 12 ------ .../FmxMBImportingContext.class.st | 1 - .../FmxMBPlantTextVisitor.class.st | 42 ++++++++----------- .../FmxMBTrait.class.st | 2 - 6 files changed, 17 insertions(+), 49 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index b7555aa95..ce058db8b 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -257,14 +257,6 @@ FmxMBBehavior >> defaultTag [ ^ #Entities ] -{ #category : 'generating' } -FmxMBBehavior >> ensureRealClass [ - ^ realClass - ifNil: [ self generate. - self willGenerate: false. - self realClass ] -] - { #category : 'accessing' } FmxMBBehavior >> fullName [ ^ (self prefix , self name) asSymbol diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index c54055f45..828f4dc21 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -60,7 +60,6 @@ FmxMBClass >> classGeneralization: anObject [ FmxMBClass >> generate [ | aClass superclassName | - self willGenerate ifFalse: [ ^ self ]. superclassName := self classGeneralization ifNil: [ self defaultSuperclassName ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st index a65621393..58304f8f2 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st @@ -5,7 +5,6 @@ Class { 'name', 'comment', 'builder', - 'willGenerate', 'additionalProperties', 'isRemote' ], @@ -73,7 +72,6 @@ FmxMBEntity >> initialize [ super initialize. comment := String new. - willGenerate := true. additionalProperties := Dictionary new. isRemote := false. ] @@ -111,13 +109,3 @@ FmxMBEntity >> remoteBuilder: aRemoteBuilder [ self additionalProperties at: #remoteBuilder put: aRemoteBuilder ] - -{ #category : 'accessing' } -FmxMBEntity >> willGenerate [ - ^ willGenerate -] - -{ #category : 'accessing' } -FmxMBEntity >> willGenerate: anObject [ - willGenerate := anObject -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index 75bcb9241..dd98168ec 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -49,7 +49,6 @@ FmxMBImportingContext >> defaultSuperclass [ FmxMBImportingContext >> generate [ | aClass superclass | - self willGenerate ifFalse: [ ^ self ]. superclass := self classGeneralization ifNil: [ self defaultSuperclassName ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st index a917f24a4..e64a3242e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st @@ -43,10 +43,7 @@ FmxMBPlantTextVisitor >> behaviors [ { #category : 'checking' } FmxMBPlantTextVisitor >> checkTrait: aTrait [ - ^ aTrait willGenerate and: [ - (traitsWithUsers includes: aTrait) and: [ - (aTrait builder classes flatCollect: [ :each | - each traitGeneralizations ]) includes: aTrait ] ] + ^ (traitsWithUsers includes: aTrait) and: [ (aTrait builder classes flatCollect: [ :each | each traitGeneralizations ]) includes: aTrait ] ] { #category : 'accessing' } @@ -108,11 +105,11 @@ FmxMBPlantTextVisitor >> mergeTraits: anObject [ { #category : 'private' } FmxMBPlantTextVisitor >> onlySingleUserOf: aTrait [ - ^ ((aTrait builder classes select: #willGenerate) - count: [ :aClass | - | traits | - traits := aClass traitGeneralizations. - traits size = 1 and: [ traits anyOne = aTrait ] ]) = 1 + + ^ (aTrait builder classes count: [ :aClass | + | traits | + traits := aClass traitGeneralizations. + traits size = 1 and: [ traits anyOne = aTrait ] ]) = 1 ] { #category : 'private' } @@ -163,17 +160,16 @@ FmxMBPlantTextVisitor >> visitBuilder: aBuilder [ nextPutAll: 'hide empty members'; cr; cr. - self gatherTraits ifTrue: [ - stream - nextPutAll: 'together {'; - cr ]. + self gatherTraits ifTrue: [ + stream + nextPutAll: 'together {'; + cr ]. self selectTraitsWithUsersFrom: aBuilder. - (aBuilder traits select: #willGenerate) do: [ :each | - each acceptVisitor: self ]. - self gatherTraits ifTrue: [ - stream - nextPutAll: '}'; - cr ]. + aBuilder traits do: [ :each | each acceptVisitor: self ]. + self gatherTraits ifTrue: [ + stream + nextPutAll: '}'; + cr ]. aBuilder sortedClasses do: [ :each | each acceptVisitor: self ]. self writeGeneralizations. self writeRelations. @@ -187,9 +183,6 @@ FmxMBPlantTextVisitor >> visitBuilder: aBuilder [ FmxMBPlantTextVisitor >> visitClass: aClass [ | mergesTrait | - - aClass willGenerate ifFalse: [ ^ self ]. - mergesTrait := self mergeTraits and: [ aClass traitGeneralizations size = 1 and: [ self onlySingleUserOf: aClass traitGeneralizations first ]]. @@ -289,13 +282,12 @@ FmxMBPlantTextVisitor >> writeClass: aClass mergingTraits: mergesTraits [ { #category : 'relations' } FmxMBPlantTextVisitor >> writeGeneralizations [ - generalizationDefinitions do: [ :each | - (each key willGenerate and: [ each value willGenerate ]) ifTrue: [ + generalizationDefinitions do: [ :each | stream nextPutAll: (self ensureBehaviorNameFor: each key); nextPutAll: ' <|-- '; nextPutAll: (self ensureBehaviorNameFor: each value); - cr ] ]. + cr ]. stream cr ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index d3b987bd8..117542b39 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -54,8 +54,6 @@ FmxMBTrait >> defaultTag [ FmxMBTrait >> generate [ | aTrait traitName | - self willGenerate ifFalse: [ ^ self ]. - traitName := self fullName. aTrait := self builder environment From ade82ac31560374fd706b7ccb6ecf9c4c12175d3 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 02:05:20 +0200 Subject: [PATCH 051/121] Fix bug introduced in previous commit --- .../FmxMBClass.class.st | 14 +++++++------- .../FmxMBRelationSideTest.class.st | 1 - .../FmxMBVisitorTrait.class.st | 1 - 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 828f4dc21..2c6aec5a9 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -87,18 +87,18 @@ FmxMBClass >> generate [ self generateAddToCollection. - self generateEqualsMethodFor: aClass. - self generateHashMethodFor: aClass + self generateEqualsMethod. + self generateHashMethod ] { #category : 'generating-methods' } -FmxMBClass >> generateEqualsMethodFor: aClass [ +FmxMBClass >> generateEqualsMethod [ propertiesForEqualityCheck ifNotNil: [ | code | code := String streamContents: [ :stream | | variableName | - variableName := 'a' , aClass name. + variableName := 'a' , self fullName. stream << '= '. stream << variableName. stream << ' @@ -122,11 +122,11 @@ FmxMBClass >> generateEqualsMethodFor: aClass [ << (propertiesForEqualityCheck at: idx) ]. 2 to: propertiesForEqualityCheck size do: [ :idx | stream << '] ' ] ] ]. - self addMethod: code in: aClass protocol: #comparing ] + self addMethod: code protocol: #comparing ] ] { #category : 'generating-methods' } -FmxMBClass >> generateHashMethodFor: aClass [ +FmxMBClass >> generateHashMethod [ propertiesForEqualityCheck ifNotNil: [ | code | @@ -147,7 +147,7 @@ FmxMBClass >> generateHashMethodFor: aClass [ << (propertiesForEqualityCheck at: idx); << ' hash ' ] ] ]. - self addMethod: code in: aClass protocol: #comparing ] + self addMethod: code protocol: #comparing ] ] { #category : 'generating' } diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st index e0e43e05f..6a61251c3 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st @@ -18,7 +18,6 @@ FmxMBRelationSideTest >> testBasics [ self deny: side isDerived. self deny: side isTarget. self deny: side isSource. - self assert: side willGenerate. self assertEmpty: side comment ] diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index ecc37dd6f..d19e3a519 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -29,7 +29,6 @@ I am generated with the metamodel.' format: { self prefix } FmxMBVisitorTrait >> generate [ | aTrait | - self willGenerate ifFalse: [ ^ self ]. self builder environment registerPackage: self packageName. From b8ca8d592b0483391c9af9c970b6e400b2d36c31 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 02:14:43 +0200 Subject: [PATCH 052/121] Make generation of extension methods go through the standard generation process --- .../FamixMetamodelBuilder.class.st | 30 ++--- ...oteRelationSideGenerationStrategy.class.st | 6 +- .../FmxMBRingEnvironment.class.st | 15 --- .../FmxMBTypedProperty.class.st | 16 +-- .../FmxMBStubEnvironment.class.st | 9 -- ...mixTestComposed1CustomEntity1.extension.st | 8 +- ...mixTestComposed1CustomEntity2.extension.st | 8 +- ...mixTestComposed1CustomEntity3.extension.st | 8 +- ...mixTestComposed1CustomEntity4.extension.st | 8 +- ...mixTestComposed1CustomEntity5.extension.st | 4 +- .../FamixTestComposed1Method.extension.st | 4 +- ...mixTestComposed2CustomEntity1.extension.st | 8 +- ...mixTestComposed2CustomEntity2.extension.st | 8 +- ...mixTestComposed2CustomEntity3.extension.st | 8 +- ...mixTestComposed2CustomEntity4.extension.st | 8 +- ...mixTestComposed2CustomEntity5.extension.st | 4 +- ...mixTestComposedMetamodelsBuilding.class.st | 105 ------------------ 17 files changed, 49 insertions(+), 208 deletions(-) delete mode 100644 src/Famix-TestComposedMetamodel/FamixTestComposedMetamodelsBuilding.class.st diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index 67ed979c7..0f06452cd 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -271,33 +271,19 @@ FamixMetamodelBuilder >> generateRemotes [ FamixMetamodelBuilder >> generateTestingMethodsOfRemoteEntities [ | entitiesWithRemoteSuperclasses | - entitiesWithRemoteSuperclasses := self classes groupedBy: [ :class | - class remoteClassGeneratization ]. + entitiesWithRemoteSuperclasses := self classes groupedBy: [ :class | class remoteClassGeneratization ]. - entitiesWithRemoteSuperclasses keysAndValuesDo: [ - :remoteClass - :subclasses | + entitiesWithRemoteSuperclasses keysAndValuesDo: [ :remoteClass :subclasses | remoteClass ifNotNil: [ | subclassesAndTraits | - subclassesAndTraits := subclasses flatCollectAsSet: [ :subclass | - subclass allTransitiveTraits - , { subclass } ]. - - self testingSelectorsMapping keysAndValuesDo: [ - :behavior - :selectors | - ((self shouldGeneratorTestingMethodsOf: behavior in: remoteClass) and: [ - subclassesAndTraits includes: behavior ]) ifTrue: [ + subclassesAndTraits := subclasses flatCollectAsSet: [ :subclass | subclass allTransitiveTraits , { subclass } ]. + + self testingSelectorsMapping keysAndValuesDo: [ :behavior :selectors | + ((self shouldGeneratorTestingMethodsOf: behavior in: remoteClass) and: [ subclassesAndTraits includes: behavior ]) ifTrue: [ selectors do: [ :selector | - (remoteClass realClass includesSelector: selector) - ifFalse: [ - self environment - compile: - ('{1}\\ \ ^ false' withCRs format: - { selector }) - in: remoteClass realClass - classified: '*' , self configuration packageName ] ] ] ] ] ] + (remoteClass realClass includesSelector: selector) ifFalse: [ + remoteClass addMethod: ('{1}\\ \ ^ false' withCRs format: { selector }) protocol: '*' , self configuration packageName ] ] ] ] ] ] ] { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRemoteRelationSideGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRemoteRelationSideGenerationStrategy.class.st index ca56e9ab9..79aecea5f 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRemoteRelationSideGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRemoteRelationSideGenerationStrategy.class.st @@ -9,9 +9,5 @@ Class { { #category : 'generation' } FmxMBRemoteRelationSideGenerationStrategy >> compileMethod: methodSource for: aRelationSide in: aClassOrTrait [ - aRelationSide builder environment - compile: methodSource - in: aClassOrTrait - classified: self category - package: self relationSide builder parentBuilderPackageName + aRelationSide addMethod: methodSource in: aClassOrTrait name protocol: '*' , self relationSide builder parentBuilderPackageName ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index e74c14b9f..8231b894e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -143,21 +143,6 @@ FmxMBRingEnvironment >> collectChangesToApply [ changesToApply := changesToApply select: [ :change | change isRequired ] ] -{ #category : 'installing' } -FmxMBRingEnvironment >> compile: aSource in: aClass classified: aProtocol [ - - aClass compile: aSource classified: aProtocol -] - -{ #category : 'installing' } -FmxMBRingEnvironment >> compile: aSource in: aClass classified: aProtocol package: aPackageName [ - - | category | - category := '*' , aPackageName. - aProtocol ifNotEmpty: [ category := category , '-' , aProtocol ]. - aClass compile: aSource classified: category -] - { #category : 'installing' } FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitDefinitions: traitDefinitions traitNames: traitNames precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st index 3edb04219..fc2ee2794 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st @@ -95,13 +95,7 @@ FmxMBTypedProperty >> generateGetterIn: aClassOrTrait [ "cannot merge both builder of the accessing disapear for non remote entity" self isRemote - ifTrue: [ - self flag: #todo. "This breaks generation layers and should be kill" - self builder environment - compile: methodSource - in: aClassOrTrait - classified: 'accessing' - package: self builder parentBuilderPackageName ] + ifTrue: [ self addMethod: methodSource in: aClassOrTrait protocol: '*' , self builder parentBuilderPackageName ] ifFalse: [ self addMethod: methodSource in: aClassOrTrait protocol: #accessing ] ] @@ -119,13 +113,7 @@ FmxMBTypedProperty >> generateSetterIn: aClassOrTrait [ "cannot merge both builder of the accessing disapear for non remote entity" self isRemote - ifTrue: [ - self flag: #todo. "This breaks generation layers and should be kill" - self builder environment - compile: (methodToFormat format: { self name }) - in: aClassOrTrait - classified: 'accessing' - package: self builder parentBuilderPackageName ] + ifTrue: [ self addMethod: (methodToFormat format: { self name }) in: aClassOrTrait protocol: '*' , self builder parentBuilderPackageName ] ifFalse: [ self addMethod: (methodToFormat format: { self name }) in: aClassOrTrait protocol: 'accessing' ] ] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBStubEnvironment.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBStubEnvironment.class.st index a40704d0f..c00841d02 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBStubEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBStubEnvironment.class.st @@ -11,12 +11,3 @@ FmxMBStubEnvironment >> apply [ "do nothing" ] - -{ #category : 'accessing' } -FmxMBStubEnvironment >> compile: aSource in: aClass classified: aProtocol package: aPackageName [ - - | selector | - - selector := aClass compile: aSource classified: aProtocol. - (aClass methodNamed: selector) package: (aClass environment ensurePackageNamed: aPackageName). -] diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity1.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity1.extension.st index bd8004f50..281e55087 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity1.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity1.extension.st @@ -1,6 +1,6 @@ Extension { #name : 'FamixTestComposed1CustomEntity1' } -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity1 >> c21 [ "Relation named: #c21 type: #FamixTestComposed2CustomEntity1 opposite: #c11" @@ -10,7 +10,7 @@ FamixTestComposed1CustomEntity1 >> c21 [ ^ self attributeAt: #c21 ifAbsent: [ nil ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity1 >> c21: anObject [ @@ -24,7 +24,7 @@ FamixTestComposed1CustomEntity1 >> c21: anObject [ anObject c11: self ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity1 >> customEntity1 [ "Relation named: #customEntity1 type: #FamixTestComposedCustomEntity1 opposite: #customEntity1" @@ -36,7 +36,7 @@ FamixTestComposed1CustomEntity1 >> customEntity1 [ ^ self attributeAt: #customEntity1 ifAbsent: [ nil ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity1 >> customEntity1: anObject [ diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity2.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity2.extension.st index 7c3c94590..cc577f747 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity2.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity2.extension.st @@ -1,6 +1,6 @@ Extension { #name : 'FamixTestComposed1CustomEntity2' } -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity2 >> c22s [ "Relation named: #c22s type: #FamixTestComposed2CustomEntity2 opposite: #c12" @@ -12,14 +12,14 @@ FamixTestComposed1CustomEntity2 >> c22s [ ^ self attributeAt: #c22s ifAbsentPut: [ FMMultivalueLink on: self opposite: #c12: ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity2 >> c22s: anObject [ self c22s value: anObject ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity2 >> customEntity2 [ "Relation named: #customEntity2 type: #FamixTestComposedCustomEntity2 opposite: #customEntities2" @@ -29,7 +29,7 @@ FamixTestComposed1CustomEntity2 >> customEntity2 [ ^ self attributeAt: #customEntity2 ifAbsent: [ nil ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity2 >> customEntity2: anObject [ diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity3.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity3.extension.st index 17fbfa58b..9e5a62c29 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity3.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity3.extension.st @@ -1,6 +1,6 @@ Extension { #name : 'FamixTestComposed1CustomEntity3' } -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity3 >> c23 [ "Relation named: #c23 type: #FamixTestComposed2CustomEntity3 opposite: #c13s" @@ -10,14 +10,14 @@ FamixTestComposed1CustomEntity3 >> c23 [ ^ self attributeAt: #c23 ifAbsent: [ nil ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity3 >> c23: anObject [ self attributeAt: #c23 put: (FMMultivalueLink on: self update: #c13s from: self c23 to: anObject). ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity3 >> customEntities3 [ "Relation named: #customEntities3 type: #FamixTestComposedCustomEntity3 opposite: #customEntity3" @@ -29,7 +29,7 @@ FamixTestComposed1CustomEntity3 >> customEntities3 [ ^ self attributeAt: #customEntities3 ifAbsentPut: [ FMMultivalueLink on: self opposite: #customEntity3: ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity3 >> customEntities3: anObject [ diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity4.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity4.extension.st index 462af5540..02421ade2 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity4.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity4.extension.st @@ -1,6 +1,6 @@ Extension { #name : 'FamixTestComposed1CustomEntity4' } -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity4 >> c24s [ "Relation named: #c24s type: #FamixTestComposed2CustomEntity4 opposite: #c14s" @@ -12,14 +12,14 @@ FamixTestComposed1CustomEntity4 >> c24s [ ^ self attributeAt: #c24s ifAbsentPut: [ FMMultiMultivalueLink on: self opposite: #c14s ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity4 >> c24s: anObject [ self c24s value: anObject ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity4 >> customEntities4 [ "Relation named: #customEntities4 type: #FamixTestComposedCustomEntity4 opposite: #customEntities4" @@ -30,7 +30,7 @@ FamixTestComposed1CustomEntity4 >> customEntities4 [ ^ self attributeAt: #customEntities4 ifAbsentPut: [ FMMultiMultivalueLink on: self opposite: #customEntities4 ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity4 >> customEntities4: anObject [ diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity5.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity5.extension.st index eb14b2301..eb73c7df4 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity5.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity5.extension.st @@ -1,6 +1,6 @@ Extension { #name : 'FamixTestComposed1CustomEntity5' } -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity5 >> associations [ "Relation named: #associations type: #FamixTestComposedAssociation opposite: #c15" @@ -12,7 +12,7 @@ FamixTestComposed1CustomEntity5 >> associations [ ^ self attributeAt: #associations ifAbsentPut: [ FMMultivalueLink on: self opposite: #c15: ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1CustomEntity5 >> associations: anObject [ diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1Method.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1Method.extension.st index f8c4de63c..6829473a9 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1Method.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1Method.extension.st @@ -1,6 +1,6 @@ Extension { #name : 'FamixTestComposed1Method' } -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1Method >> standardEntity [ "Relation named: #standardEntity type: #FamixTestComposedStandardEntity opposite: #method" @@ -11,7 +11,7 @@ FamixTestComposed1Method >> standardEntity [ ^ self attributeAt: #standardEntity ifAbsent: [ nil ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed1Method >> standardEntity: anObject [ diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity1.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity1.extension.st index 0e2362e6b..949aaffe8 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity1.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity1.extension.st @@ -1,6 +1,6 @@ Extension { #name : 'FamixTestComposed2CustomEntity1' } -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity1 >> c1 [ "Relation named: #c1 type: #FamixTestComposedCustomEntity1 opposite: #c21" @@ -11,7 +11,7 @@ FamixTestComposed2CustomEntity1 >> c1 [ ^ self attributeAt: #c1 ifAbsent: [ nil ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity1 >> c11 [ "Relation named: #c11 type: #FamixTestComposed1CustomEntity1 opposite: #c21" @@ -22,7 +22,7 @@ FamixTestComposed2CustomEntity1 >> c11 [ ^ self attributeAt: #c11 ifAbsent: [ nil ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity1 >> c11: anObject [ @@ -36,7 +36,7 @@ FamixTestComposed2CustomEntity1 >> c11: anObject [ anObject c21: self ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity1 >> c1: anObject [ diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity2.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity2.extension.st index 7f18156e7..90f37dac4 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity2.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity2.extension.st @@ -1,6 +1,6 @@ Extension { #name : 'FamixTestComposed2CustomEntity2' } -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity2 >> c12 [ "Relation named: #c12 type: #FamixTestComposed1CustomEntity2 opposite: #c22s" @@ -10,14 +10,14 @@ FamixTestComposed2CustomEntity2 >> c12 [ ^ self attributeAt: #c12 ifAbsent: [ nil ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity2 >> c12: anObject [ self attributeAt: #c12 put: (FMMultivalueLink on: self update: #c22s from: self c12 to: anObject). ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity2 >> c2 [ "Relation named: #c2 type: #FamixTestComposedCustomEntity2 opposite: #c22s" @@ -27,7 +27,7 @@ FamixTestComposed2CustomEntity2 >> c2 [ ^ self attributeAt: #c2 ifAbsent: [ nil ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity2 >> c2: anObject [ diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity3.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity3.extension.st index 9bd9b02ba..3ea05259d 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity3.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity3.extension.st @@ -1,6 +1,6 @@ Extension { #name : 'FamixTestComposed2CustomEntity3' } -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity3 >> c13s [ "Relation named: #c13s type: #FamixTestComposed1CustomEntity3 opposite: #c23" @@ -12,14 +12,14 @@ FamixTestComposed2CustomEntity3 >> c13s [ ^ self attributeAt: #c13s ifAbsentPut: [ FMMultivalueLink on: self opposite: #c23: ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity3 >> c13s: anObject [ self c13s value: anObject ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity3 >> c3s [ "Relation named: #c3s type: #FamixTestComposedCustomEntity3 opposite: #c23" @@ -31,7 +31,7 @@ FamixTestComposed2CustomEntity3 >> c3s [ ^ self attributeAt: #c3s ifAbsentPut: [ FMMultivalueLink on: self opposite: #c23: ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity3 >> c3s: anObject [ diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity4.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity4.extension.st index 413a97580..23b96bc35 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity4.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity4.extension.st @@ -1,6 +1,6 @@ Extension { #name : 'FamixTestComposed2CustomEntity4' } -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity4 >> c14s [ "Relation named: #c14s type: #FamixTestComposed1CustomEntity4 opposite: #c24s" @@ -11,14 +11,14 @@ FamixTestComposed2CustomEntity4 >> c14s [ ^ self attributeAt: #c14s ifAbsentPut: [ FMMultiMultivalueLink on: self opposite: #c24s ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity4 >> c14s: anObject [ self c14s value: anObject ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity4 >> c4s [ "Relation named: #c4s type: #FamixTestComposedCustomEntity4 opposite: #c24s" @@ -29,7 +29,7 @@ FamixTestComposed2CustomEntity4 >> c4s [ ^ self attributeAt: #c4s ifAbsentPut: [ FMMultiMultivalueLink on: self opposite: #c24s ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity4 >> c4s: anObject [ diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity5.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity5.extension.st index 64ec798b1..e2685faa0 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity5.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity5.extension.st @@ -1,6 +1,6 @@ Extension { #name : 'FamixTestComposed2CustomEntity5' } -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity5 >> associations [ "Relation named: #associations type: #FamixTestComposedAssociation opposite: #c25" @@ -12,7 +12,7 @@ FamixTestComposed2CustomEntity5 >> associations [ ^ self attributeAt: #associations ifAbsentPut: [ FMMultivalueLink on: self opposite: #c25: ] ] -{ #category : '*Famix-TestComposedMetamodel-Entities-accessing' } +{ #category : '*Famix-TestComposedMetamodel-Entities' } FamixTestComposed2CustomEntity5 >> associations: anObject [ diff --git a/src/Famix-TestComposedMetamodel/FamixTestComposedMetamodelsBuilding.class.st b/src/Famix-TestComposedMetamodel/FamixTestComposedMetamodelsBuilding.class.st deleted file mode 100644 index 58042ea68..000000000 --- a/src/Famix-TestComposedMetamodel/FamixTestComposedMetamodelsBuilding.class.st +++ /dev/null @@ -1,105 +0,0 @@ -Class { - #name : 'FamixTestComposedMetamodelsBuilding', - #superclass : 'TestCase', - #instVars : [ - 'builder1', - 'builder2', - 'composedBuilder', - 'method', - 'methodNode', - 'binding', - 'env' - ], - #category : 'Famix-TestComposedMetamodel', - #package : 'Famix-TestComposedMetamodel' -} - -{ #category : 'running' } -FamixTestComposedMetamodelsBuilding >> setUp [ - super setUp. - - composedBuilder := FamixMetamodelBuilder new. - env := FmxMBStubEnvironment for: composedBuilder. - composedBuilder environment: env. - composedBuilder configuration - prefix: 'TstComposed'; - packageName: 'TstComposed'. - - builder1 := FamixMetamodelBuilder forTesting. - builder1 environment: env. - builder1 configuration - prefix: 'Tst1'; - packageName: 'Tst1'. - - builder2 := FamixMetamodelBuilder forTesting. - builder2 environment: env. - builder2 configuration - prefix: 'Tst2'; - packageName: 'Tst2'. - - method := builder1 newClassNamed: #Method. - methodNode := builder2 newClassNamed: #MethodNode. - binding := composedBuilder newClassNamed: #Binding. - - builder1 generate. - builder2 generate. - - "reuse the builders for keeping of remote elements" - builder1 parentBuilder: composedBuilder. - builder2 parentBuilder: composedBuilder. - method isRemote: true. - methodNode isRemote: true -] - -{ #category : 'tests' } -FamixTestComposedMetamodelsBuilding >> testOneRemoteToOneNonRemote [ - - | source generatedMethod | - - method - binding. - - composedBuilder generate. - builder1 generateRemotes. - builder2 generateRemotes. - - generatedMethod := ((env ringEnvironment ask classNamed: #Tst1Method) methodNamed: #binding). - - self assert: (generatedMethod sourceCode includesSubstring: ''). - self assert: (generatedMethod sourceCode includesSubstring: ''). - self assert: (generatedMethod sourceCode includesSubstring: 'attributeAt: #binding'). - self assert: generatedMethod package name equals: #TstComposed. - - source := ((env ringEnvironment ask classNamed: #TstComposedBinding) methodNamed: #method) sourceCode. - - self assert: (source includesSubstring: ''). - self assert: (source includesSubstring: ''). - self assert: (source includesSubstring: 'attributeAt: #method'). - self assert: generatedMethod package name equals: #TstComposed. -] - -{ #category : 'tests' } -FamixTestComposedMetamodelsBuilding >> testOneRemoteToOneRemote [ - - | source generatedMethod | - - method - methodNode. - - composedBuilder generate. - builder1 generateRemotes. - builder2 generateRemotes. - - generatedMethod := ((env ringEnvironment ask classNamed: #Tst1Method) methodNamed: #methodNode). - - self assert: (generatedMethod sourceCode includesSubstring: ''). - self assert: (generatedMethod sourceCode includesSubstring: ''). - self assert: (generatedMethod sourceCode includesSubstring: 'attributeAt: #methodNode'). - self assert: generatedMethod package name equals: #TstComposed. - - source := ((env ringEnvironment ask classNamed: #Tst2MethodNode) methodNamed: #method) sourceCode. - - self assert: (source includesSubstring: ''). - self assert: (source includesSubstring: ''). - self assert: (source includesSubstring: 'attributeAt: #method'). - self assert: generatedMethod package name equals: #TstComposed. - -] From 1f333a03843dc2b89efe44288612ce7512155881 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 02:19:41 +0200 Subject: [PATCH 053/121] Small factorization --- .../FmxMBTypedProperty.class.st | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st index fc2ee2794..4e2625d2e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st @@ -93,10 +93,9 @@ FmxMBTypedProperty >> generateGetterIn: aClassOrTrait [ self name. self defaultValue printString }) ] ]. - "cannot merge both builder of the accessing disapear for non remote entity" - self isRemote - ifTrue: [ self addMethod: methodSource in: aClassOrTrait protocol: '*' , self builder parentBuilderPackageName ] - ifFalse: [ self addMethod: methodSource in: aClassOrTrait protocol: #accessing ] + self addMethod: methodSource in: aClassOrTrait protocol: (self isRemote + ifTrue: [ '*' , self builder parentBuilderPackageName ] + ifFalse: [ #accessing ]) ] { #category : 'generating' } @@ -111,10 +110,9 @@ FmxMBTypedProperty >> generateSetterIn: aClassOrTrait [ ifTrue: [ stream nextPutAll: 'self attributeAt: #{1} put: anObject' ] ifFalse: [ stream nextPutAll: '{1} := anObject' ] ]. - "cannot merge both builder of the accessing disapear for non remote entity" - self isRemote - ifTrue: [ self addMethod: (methodToFormat format: { self name }) in: aClassOrTrait protocol: '*' , self builder parentBuilderPackageName ] - ifFalse: [ self addMethod: (methodToFormat format: { self name }) in: aClassOrTrait protocol: 'accessing' ] + self addMethod: (methodToFormat format: { self name }) in: aClassOrTrait protocol: (self isRemote + ifTrue: [ '*' , self builder parentBuilderPackageName ] + ifFalse: [ 'accessing' ]) ] { #category : 'generating' } From 73fa73368f54d41f5fdbfb93d1f0d59e07d47729 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 02:21:31 +0200 Subject: [PATCH 054/121] Do not generate ring methods in relation side generation strategy --- ...xMBRelationSideGenerationStrategy.class.st | 5 +- .../FmxMBBuilderRelationTest.class.st | 128 ----------- .../FmxMBRelationsGenerationTest.class.st | 208 ------------------ .../FmxMBTraitTest.class.st | 188 ---------------- .../FamixTestComposedMetamodels.class.st | 12 - 5 files changed, 1 insertion(+), 540 deletions(-) delete mode 100644 src/Famix-MetamodelBuilder-Tests/FmxMBBuilderRelationTest.class.st delete mode 100644 src/Famix-MetamodelBuilder-Tests/FmxMBRelationsGenerationTest.class.st diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st index d4ed24356..154b20244 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st @@ -29,10 +29,7 @@ FmxMBRelationSideGenerationStrategy >> compileMethod: methodSource for: aRelatio addMethod: methodSource in: aClassOrTrait name classSide: false - protocol: self category. - - self flag: #todo. "This code should never make it in the dev branch of Famix. Also we should provide the class name directly" - aClassOrTrait compile: methodSource classified: self category + protocol: self category ] { #category : 'generation' } diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderRelationTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderRelationTest.class.st deleted file mode 100644 index 554da95be..000000000 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderRelationTest.class.st +++ /dev/null @@ -1,128 +0,0 @@ -Class { - #name : 'FmxMBBuilderRelationTest', - #superclass : 'FmxMBTestCase', - #category : 'Famix-MetamodelBuilder-Tests-Tests', - #package : 'Famix-MetamodelBuilder-Tests', - #tag : 'Tests' -} - -{ #category : 'initialization' } -FmxMBBuilderRelationTest >> checkArrow: aBinarySelector from: cardinality1 to: cardinality2 containerFrom: containerFrom containerTo: containerTo forTraits: aBoolean [ - | tClass tComment generatedTClass generatedTComment hasContainer | - tComment := aBoolean - ifTrue: [ tClass := builder newTraitNamed: #TClass. - builder newTraitNamed: #TComment ] - ifFalse: [ tClass := builder newClassNamed: #TClass. - builder newClassNamed: #TComment ]. - - (tClass property: #property1) perform: aBinarySelector with: (tComment property: #property2). - - builder generate. - - generatedTClass := builder testingEnvironment ask classNamed: 'TstTClass'. - generatedTComment := builder testingEnvironment ask classNamed: 'TstTComment'. - - self assert: generatedTClass slots size equals: 1. - self assert: generatedTClass slots first name equals: #property1. - self assert: generatedTClass slots first expression equals: cardinality1 , ' type: #TstTComment opposite: #property2'. - self - assertCollection: (generatedTClass instanceSide selectors copyWithoutAll: {#addProperty1: . #property1Group . #property2Group}) - hasSameElements: #(property1 property1:). - hasContainer := (generatedTClass methodNamed: #property1) sourceCode includesSubstring: ''. - containerFrom - ifTrue: [ self assert: hasContainer ] - ifFalse: [ self deny: hasContainer ]. - - self assert: generatedTComment slots size equals: 1. - self assert: generatedTComment slots first name equals: #property2. - self assert: generatedTComment slots first expression equals: cardinality2 , ' type: #TstTClass opposite: #property1'. - self - assertCollection: (generatedTComment instanceSide selectors copyWithoutAll: {#addProperty2: . #property1Group . #property2Group}) - hasSameElements: #(property2 property2:). - hasContainer := (generatedTComment methodNamed: #property2) sourceCode includesSubstring: ''. - containerTo - ifTrue: [ self assert: hasContainer ] - ifFalse: [ self deny: hasContainer ] -] - -{ #category : 'initialization' } -FmxMBBuilderRelationTest >> resetBuilder [ - - builder := FamixMetamodelBuilder forTesting. - -] - -{ #category : 'tests' } -FmxMBBuilderRelationTest >> testClassRelations [ - - self checkArrow: #- from: 'FMOne' to: 'FMOne' containerFrom: false containerTo: false forTraits: false. - self resetBuilder. - self checkArrow: #*- from: 'FMOne' to: 'FMMany' containerFrom: false containerTo: false forTraits: false. - self resetBuilder. - self checkArrow: #-* from: 'FMMany' to: 'FMOne' containerFrom: false containerTo: false forTraits: false. - self resetBuilder. - self checkArrow: #*-* from: 'FMMany' to: 'FMMany' containerFrom: false containerTo: false forTraits: false. - - self resetBuilder. - self checkArrow: #-<> from: 'FMOne' to: 'FMOne' containerFrom: true containerTo: false forTraits: false. - self resetBuilder. - self checkArrow: #<>- from: 'FMOne' to: 'FMOne' containerFrom: false containerTo: true forTraits: false. - - self resetBuilder. - self checkArrow: #*-<> from: 'FMOne' to: 'FMMany' containerFrom: true containerTo: false forTraits: false. - self resetBuilder. - self checkArrow: #<>-* from: 'FMMany' to: 'FMOne' containerFrom: false containerTo: true forTraits: false. - -] - -{ #category : 'tests' } -FmxMBBuilderRelationTest >> testOneToOneTraitsRelation [ - - | tClass tComment generatedTClass generatedTComment | - - tClass := builder newTraitNamed: #TClass. - tComment := builder newTraitNamed: #TComment. - - (tClass property: #property1) - (tComment property: #property2). - - builder generate. - - generatedTClass := builder testingEnvironment ask classNamed: 'TstTClass'. - generatedTComment := builder testingEnvironment ask classNamed: 'TstTComment'. - - self assert: generatedTClass slots size equals: 1. - self assert: generatedTClass slots first name equals: #property1. - self assert: generatedTClass slots first expression equals: 'FMOne type: #TstTComment opposite: #property2'. - - self assertCollection: generatedTClass instanceSide selectors hasSameElements: #(property1 property1:). - - self assert: generatedTComment slots size equals: 1. - self assert: generatedTComment slots first name equals: #property2. - self assert: generatedTComment slots first expression equals: 'FMOne type: #TstTClass opposite: #property1'. - - self assertCollection: generatedTComment instanceSide selectors hasSameElements: #(property2 property2:). - -] - -{ #category : 'tests' } -FmxMBBuilderRelationTest >> testTraitRelations [ - - self checkArrow: #- from: 'FMOne' to: 'FMOne' containerFrom: false containerTo: false forTraits: true. - self resetBuilder. - self checkArrow: #*- from: 'FMOne' to: 'FMMany' containerFrom: false containerTo: false forTraits: true. - self resetBuilder. - self checkArrow: #-* from: 'FMMany' to: 'FMOne' containerFrom: false containerTo: false forTraits: true. - self resetBuilder. - self checkArrow: #*-* from: 'FMMany' to: 'FMMany' containerFrom: false containerTo: false forTraits: true. - - self resetBuilder. - self checkArrow: #-<> from: 'FMOne' to: 'FMOne' containerFrom: true containerTo: false forTraits: true. - self resetBuilder. - self checkArrow: #<>- from: 'FMOne' to: 'FMOne' containerFrom: false containerTo: true forTraits: true. - - self resetBuilder. - self checkArrow: #*-<> from: 'FMOne' to: 'FMMany' containerFrom: true containerTo: false forTraits: true. - self resetBuilder. - self checkArrow: #<>-* from: 'FMMany' to: 'FMOne' containerFrom: false containerTo: true forTraits: true. - -] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationsGenerationTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBRelationsGenerationTest.class.st deleted file mode 100644 index 632e7d0fc..000000000 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationsGenerationTest.class.st +++ /dev/null @@ -1,208 +0,0 @@ -Class { - #name : 'FmxMBRelationsGenerationTest', - #superclass : 'FmxMBTestCase', - #instVars : [ - 'access', - 'variable', - 'generatedAccess', - 'generatedVariable' - ], - #category : 'Famix-MetamodelBuilder-Tests-Tests', - #package : 'Famix-MetamodelBuilder-Tests', - #tag : 'Tests' -} - -{ #category : 'utilities' } -FmxMBRelationsGenerationTest >> assertContainerInAccessMethod: selector [ - - self assert: ((generatedAccess methodNamed: selector) sourceCode includesSubstring: ''). - self assert: ((generatedAccess methodNamed: selector) sourceCode includesSubstring: ''). - - -] - -{ #category : 'utilities' } -FmxMBRelationsGenerationTest >> assertContainerInVariableMethod: selector [ - - self assert: ((generatedVariable methodNamed: selector) sourceCode includesSubstring: ''). - self assert: ((generatedVariable methodNamed: selector) sourceCode includesSubstring: ''). - - -] - -{ #category : 'utilities' } -FmxMBRelationsGenerationTest >> cardinalityInAccess: selector1 inVariable: selector2 [ - - self assert: generatedAccess slots first name equals: selector1. - self assert: generatedVariable slots first name equals: selector2. - -] - -{ #category : 'utilities' } -FmxMBRelationsGenerationTest >> checkSlotsCount [ - - self assert: generatedAccess slots size equals: 1. - self assert: generatedVariable slots size equals: 1. - -] - -{ #category : 'utilities' } -FmxMBRelationsGenerationTest >> denyContainerInAccessMethod: selector [ - - self deny: ((generatedAccess methodNamed: selector) sourceCode includesSubstring: ''). - self assert: ((generatedAccess methodNamed: selector) sourceCode includesSubstring: ''). - - -] - -{ #category : 'utilities' } -FmxMBRelationsGenerationTest >> denyContainerInVarialbeMethod: selector [ - - self deny: ((generatedVariable methodNamed: selector) sourceCode includesSubstring: ''). - self assert: ((generatedVariable methodNamed: selector) sourceCode includesSubstring: ''). - - -] - -{ #category : 'utilities' } -FmxMBRelationsGenerationTest >> generate [ - - builder generate. - - generatedAccess := builder testingEnvironment ask classNamed: 'TstAccess'. - generatedVariable := builder testingEnvironment ask classNamed: 'TstVariable'. - - self checkSlotsCount. - -] - -{ #category : 'running' } -FmxMBRelationsGenerationTest >> setUp [ - - super setUp. - - access := builder newClassNamed: #Access. - variable := builder newClassNamed: #Variable. - -] - -{ #category : 'utilities' } -FmxMBRelationsGenerationTest >> slotCardinalityinAccess: accessCardinality inVariable: variableCardinality [ - - "slot expression example: FMMany type: #TstAccess opposite: #accessOwner" - self assert: (generatedAccess slots first expression beginsWith: ('FM', accessCardinality capitalized)). - self assert: (generatedVariable slots first expression beginsWith: ('FM', variableCardinality capitalized)). - -] - -{ #category : 'utilities' } -FmxMBRelationsGenerationTest >> slotNameinAccess: selector1 inVariable: selector2 [ - - self assert: generatedAccess slots first name equals: selector1. - self assert: generatedVariable slots first name equals: selector2. - -] - -{ #category : 'tests' } -FmxMBRelationsGenerationTest >> testContainsMany [ - - variable <>-* access. - - self - variable: #accesses cardinality: #many container: false - access: #variable cardinality: #one container: true - -] - -{ #category : 'tests' } -FmxMBRelationsGenerationTest >> testContainsOne [ - - variable <>- access. - - self - variable: #access cardinality: #one container: false - access: #variable cardinality: #one container: true - -] - -{ #category : 'tests' } -FmxMBRelationsGenerationTest >> testManyBelongTo [ - - variable *-<> access. - - self - variable: #access cardinality: #one container: true - access: #variables cardinality: #many container: false - -] - -{ #category : 'tests' } -FmxMBRelationsGenerationTest >> testManyToMany [ - - variable *-* access. - - self - variable: #accesses cardinality: #many container: false - access: #variables cardinality: #many container: false - -] - -{ #category : 'tests' } -FmxMBRelationsGenerationTest >> testManyToOne [ - - variable *- access. - - self - variable: #access cardinality: #one container: false - access: #variables cardinality: #many container: false - -] - -{ #category : 'tests' } -FmxMBRelationsGenerationTest >> testOneBelongsTo [ - - variable -<> access. - - self - variable: #access cardinality: #one container: true - access: #variable cardinality: #one container: false - -] - -{ #category : 'tests' } -FmxMBRelationsGenerationTest >> testOneToMany [ - - variable -* access. - - self - variable: #accesses cardinality: #many container: false - access: #variable cardinality: #one container: false - -] - -{ #category : 'tests' } -FmxMBRelationsGenerationTest >> testOneToOne [ - - variable - access. - - self - variable: #access cardinality: #one container: false - access: #variable cardinality: #one container: false - -] - -{ #category : 'tests' } -FmxMBRelationsGenerationTest >> variable: selector2 cardinality: cardinality2 container: container2 access: selector1 cardinality: cardinality1 container: container1 [ - - self generate. - - self slotNameinAccess: selector1 inVariable: selector2. - self slotCardinalityinAccess: cardinality1 inVariable: cardinality2. - container1 - ifTrue: [ self assertContainerInAccessMethod: selector1 ] - ifFalse: [ self denyContainerInAccessMethod: selector1 ]. - container2 - ifTrue: [ self assertContainerInVariableMethod: selector2 ] - ifFalse: [ self denyContainerInVarialbeMethod: selector2 ]. - -] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st index 4f972b352..34fbab6a5 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st @@ -18,194 +18,6 @@ FmxMBTraitTest >> newEntityNamed: aString [ ^ builder newTraitNamed: aString ] -{ #category : 'tests' } -FmxMBTraitTest >> testAutogereatedContainsMany [ - - | access variable generatedTAccess generatedTVariable | - - access := builder newTraitNamed: #TAccess. - variable := builder newTraitNamed: #TVariable. - - (variable <>-* access). - - builder generate. - - generatedTAccess := builder testingEnvironment ask classNamed: 'TstTAccess'. - generatedTVariable := builder testingEnvironment ask classNamed: 'TstTVariable'. - - self assert: generatedTAccess slots first name equals: #variable. - self assert: generatedTAccess slots first expression equals: 'FMOne type: #TstTVariable opposite: #accesses'. - self assert: generatedTVariable slots first name equals: #accesses. - self assert: generatedTVariable slots first expression equals: 'FMMany type: #TstTAccess opposite: #variable'. - - self assert: ((generatedTAccess methodNamed: #variable) sourceCode includesSubstring: ''). -] - -{ #category : 'tests' } -FmxMBTraitTest >> testAutogereatedContainsOne [ - - | access variable generatedTAccess generatedTVariable | - - access := builder newTraitNamed: #TAccess. - variable := builder newTraitNamed: #TVariable. - - (variable <>- access). - - builder generate. - - generatedTAccess := builder testingEnvironment ask classNamed: 'TstTAccess'. - generatedTVariable := builder testingEnvironment ask classNamed: 'TstTVariable'. - - self assert: generatedTAccess slots first name equals: #variable. - self assert: generatedTAccess slots first expression equals: 'FMOne type: #TstTVariable opposite: #access'. - self assert: generatedTVariable slots first name equals: #access. - self assert: generatedTVariable slots first expression equals: 'FMOne type: #TstTAccess opposite: #variable'. - - self assert: ((generatedTAccess methodNamed: #variable) sourceCode includesSubstring: ''). - self deny: ((generatedTVariable methodNamed: #access) sourceCode includesSubstring: ''). -] - -{ #category : 'tests' } -FmxMBTraitTest >> testAutogereatedManyBelongTo [ - - | access variable generatedTAccess generatedTVariable | - - access := builder newTraitNamed: #TAccess. - variable := builder newTraitNamed: #TVariable. - - (access *-<> variable). - - builder generate. - - generatedTAccess := builder testingEnvironment ask classNamed: 'TstTAccess'. - generatedTVariable := builder testingEnvironment ask classNamed: 'TstTVariable'. - - self assert: generatedTAccess slots first name equals: #variable. - self assert: generatedTAccess slots first expression equals: 'FMOne type: #TstTVariable opposite: #accesses'. - self assert: generatedTVariable slots first name equals: #accesses. - self assert: generatedTVariable slots first expression equals: 'FMMany type: #TstTAccess opposite: #variable'. - - self assert: ((generatedTAccess methodNamed: #variable) sourceCode includesSubstring: ''). -] - -{ #category : 'tests' } -FmxMBTraitTest >> testAutogereatedManyToMany [ - - | access variable generatedTAccess generatedTVariable | - - access := builder newTraitNamed: #TAccess. - variable := builder newTraitNamed: #TVariable. - - (variable *-* access). - - builder generate. - - generatedTAccess := builder testingEnvironment ask classNamed: 'TstTAccess'. - generatedTVariable := builder testingEnvironment ask classNamed: 'TstTVariable'. - - self assert: generatedTAccess slots first name equals: #variables. - self assert: generatedTAccess slots first expression equals: 'FMMany type: #TstTVariable opposite: #accesses'. - self assert: generatedTVariable slots first name equals: #accesses. - self assert: generatedTVariable slots first expression equals: 'FMMany type: #TstTAccess opposite: #variables'. - - self deny: ((generatedTAccess methodNamed: #variables) sourceCode includesSubstring: ''). - self deny: ((generatedTVariable methodNamed: #accesses) sourceCode includesSubstring: ''). -] - -{ #category : 'tests' } -FmxMBTraitTest >> testAutogereatedManyToOne [ - - | access variable generatedTAccess generatedTVariable | - - access := builder newTraitNamed: #TAccess. - variable := builder newTraitNamed: #TVariable. - - (access *- variable). - - builder generate. - - generatedTAccess := builder testingEnvironment ask classNamed: 'TstTAccess'. - generatedTVariable := builder testingEnvironment ask classNamed: 'TstTVariable'. - - self assert: generatedTAccess slots first name equals: #variable. - self assert: generatedTAccess slots first expression equals: 'FMOne type: #TstTVariable opposite: #accesses'. - self assert: generatedTVariable slots first name equals: #accesses. - self assert: generatedTVariable slots first expression equals: 'FMMany type: #TstTAccess opposite: #variable'. - - self deny: ((generatedTAccess methodNamed: #variable) sourceCode includesSubstring: ''). -] - -{ #category : 'tests' } -FmxMBTraitTest >> testAutogereatedOneBelongsTo [ - - | access variable generatedTAccess generatedTVariable | - - access := builder newTraitNamed: #TAccess. - variable := builder newTraitNamed: #TVariable. - - (variable -<> access). - - builder generate. - - generatedTAccess := builder testingEnvironment ask classNamed: 'TstTAccess'. - generatedTVariable := builder testingEnvironment ask classNamed: 'TstTVariable'. - - self assert: generatedTAccess slots first name equals: #variable. - self assert: generatedTAccess slots first expression equals: 'FMOne type: #TstTVariable opposite: #access'. - self assert: generatedTVariable slots first name equals: #access. - self assert: generatedTVariable slots first expression equals: 'FMOne type: #TstTAccess opposite: #variable'. - - self deny: ((generatedTAccess methodNamed: #variable) sourceCode includesSubstring: ''). - self assert: ((generatedTVariable methodNamed: #access) sourceCode includesSubstring: ''). -] - -{ #category : 'tests' } -FmxMBTraitTest >> testAutogereatedOneToMany [ - - | access variable generatedTAccess generatedTVariable | - - access := builder newTraitNamed: #TAccess. - variable := builder newTraitNamed: #TVariable. - - (variable -* access). - - builder generate. - - generatedTAccess := builder testingEnvironment ask classNamed: 'TstTAccess'. - generatedTVariable := builder testingEnvironment ask classNamed: 'TstTVariable'. - - self assert: generatedTAccess slots first name equals: #variable. - self assert: generatedTAccess slots first expression equals: 'FMOne type: #TstTVariable opposite: #accesses'. - self assert: generatedTVariable slots first name equals: #accesses. - self assert: generatedTVariable slots first expression equals: 'FMMany type: #TstTAccess opposite: #variable'. - - self deny: ((generatedTAccess methodNamed: #variable) sourceCode includesSubstring: ''). -] - -{ #category : 'tests' } -FmxMBTraitTest >> testAutogereatedOneToOne [ - - | access variable generatedTAccess generatedTVariable | - - access := builder newTraitNamed: #TAccess. - variable := builder newTraitNamed: #TVariable. - - (variable - access). - - builder generate. - - generatedTAccess := builder testingEnvironment ask classNamed: 'TstTAccess'. - generatedTVariable := builder testingEnvironment ask classNamed: 'TstTVariable'. - - self assert: generatedTAccess slots first name equals: #variable. - self assert: generatedTAccess slots first expression equals: 'FMOne type: #TstTVariable opposite: #access'. - self assert: generatedTVariable slots first name equals: #access. - self assert: generatedTVariable slots first expression equals: 'FMOne type: #TstTAccess opposite: #variable'. - - self deny: ((generatedTAccess methodNamed: #variable) sourceCode includesSubstring: ''). - self deny: ((generatedTVariable methodNamed: #access) sourceCode includesSubstring: ''). -] - { #category : 'tests' } FmxMBTraitTest >> testCustomPackageForUserClasses [ | generated | diff --git a/src/Famix-TestComposedMetamodel/FamixTestComposedMetamodels.class.st b/src/Famix-TestComposedMetamodel/FamixTestComposedMetamodels.class.st index f328b4ee5..2b3f2e820 100644 --- a/src/Famix-TestComposedMetamodel/FamixTestComposedMetamodels.class.st +++ b/src/Famix-TestComposedMetamodel/FamixTestComposedMetamodels.class.st @@ -56,18 +56,6 @@ FamixTestComposedMetamodels >> setUp [ ] -{ #category : 'tests' } -FamixTestComposedMetamodels >> testGenerationOfComposedMetamodel [ - | aGenerator env | - aGenerator := FamixTestComposedGenerator new beForTesting generate. - env := aGenerator builder environment ringEnvironment. - - self - assert: - (((env ask behaviorNamed: #FamixTestComposedCustomEntity1) methodNamed: #customEntity1) sourceCode - includesSubstring: '') -] - { #category : 'tests' } FamixTestComposedMetamodels >> testImplicitManyToManyRemote [ From e1bdc913eec97da7674bbbfcb4bd23f8f225f0e7 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 02:28:15 +0200 Subject: [PATCH 055/121] Do not use ring classes to generation relation accessors --- .../FmxMBBehavior.class.st | 27 ++++++++++++++-- .../FmxMBEntity.class.st | 22 ------------- .../FmxMBProperty.class.st | 10 +++--- .../FmxMBRelationSide.class.st | 8 ++--- ...xMBRelationSideGenerationStrategy.class.st | 31 ++++++------------- ...oteRelationSideGenerationStrategy.class.st | 6 ++-- .../FmxMBTrait.class.st | 2 +- .../FmxMBTypedProperty.class.st | 8 ++--- 8 files changed, 52 insertions(+), 62 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index ce058db8b..ef52a2224 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -53,6 +53,28 @@ FmxMBBehavior >> addMethod: code classSide: boolean protocol: protocol [ protocol: protocol ] +{ #category : 'generating' } +FmxMBBehavior >> addMethod: code in: class classSide: boolean protocol: protocol [ + + | className | + self flag: #todo. "We should only take a string as parameter." + className := class isString + ifTrue: [ class ] + ifFalse: [ class name ]. + self flag: #todo. "Demeter" + self builder environment + addMethod: code + in: className + classSide: boolean + protocol: protocol +] + +{ #category : 'generating' } +FmxMBBehavior >> addMethod: code in: class protocol: protocol [ + + ^ self addMethod: code in: class classSide: false protocol: protocol +] + { #category : 'adding' } FmxMBBehavior >> addMethod: code protocol: protocol [ @@ -281,7 +303,7 @@ FmxMBBehavior >> generate [ { #category : 'generating' } FmxMBBehavior >> generateAccessors [ - self properties do: [ :each | each generateAccessorsIn: self realClass ] + self properties do: [ :each | each generateAccessorsIn: self ] ] { #category : 'generating' } @@ -331,7 +353,8 @@ FmxMBBehavior >> generateAnnotation [ { #category : 'generating' } FmxMBBehavior >> generateRemoteAccessors [ - (self properties select: #isRemote) do: [ :each | each generateAccessorsIn: self realClass ] + + (self properties select: #isRemote) do: [ :each | each generateAccessorsIn: self ] ] { #category : 'generating' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st index 58304f8f2..8805fa463 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st @@ -18,28 +18,6 @@ FmxMBEntity >> acceptVisitor: aVisitor [ ^ self subclassResponsibility ] -{ #category : 'generating' } -FmxMBEntity >> addMethod: code in: class classSide: boolean protocol: protocol [ - - | className | - self flag: #todo. "We should only take a string as parameter." - className := class isString - ifTrue: [ class ] - ifFalse: [ class name ]. - self flag: #todo. "Demeter" - self builder environment - addMethod: code - in: className - classSide: boolean - protocol: protocol -] - -{ #category : 'generating' } -FmxMBEntity >> addMethod: code in: class protocol: protocol [ - - ^ self addMethod: code in: class classSide: false protocol: protocol -] - { #category : 'accessing' } FmxMBEntity >> additionalProperties [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st index df0ad53d0..546bdb86e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st @@ -19,19 +19,19 @@ FmxMBProperty >> asRGSlot [ ] { #category : 'generating' } -FmxMBProperty >> generateAccessorsIn: aClassOrTrait [ - self generateGetterIn: aClassOrTrait. - self generateSetterIn: aClassOrTrait +FmxMBProperty >> generateAccessorsIn: aFmxBehavioral [ + self generateGetterIn: aFmxBehavioral. + self generateSetterIn: aFmxBehavioral ] { #category : 'generating' } -FmxMBProperty >> generateGetterIn: aClassOrTrait [ +FmxMBProperty >> generateGetterIn: aFmxBehavioral [ self subclassResponsibility ] { #category : 'generating' } -FmxMBProperty >> generateSetterIn: aClassOrTrait [ +FmxMBProperty >> generateSetterIn: aFmxBehavioral [ self subclassResponsibility ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st index bcb7adac7..e81d553de 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st @@ -88,15 +88,15 @@ FmxMBRelationSide >> from [ ] { #category : 'generating' } -FmxMBRelationSide >> generateGetterIn: aClassOrTrait [ +FmxMBRelationSide >> generateGetterIn: aFmxBehavioral [ - ^ generationStrategy generateGetterIn: aClassOrTrait for: self + ^ generationStrategy generateGetterIn: aFmxBehavioral for: self ] { #category : 'generating' } -FmxMBRelationSide >> generateSetterIn: aClassOrTrait [ +FmxMBRelationSide >> generateSetterIn: aFmxBehavioral [ - self generationStrategy generateSetterIn: aClassOrTrait for: self + self generationStrategy generateSetterIn: aFmxBehavioral for: self ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st index 154b20244..3a140cfb6 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st @@ -15,23 +15,6 @@ FmxMBRelationSideGenerationStrategy class >> for: aRelationSide [ ^ self new relationSide: aRelationSide ] -{ #category : 'accessing' } -FmxMBRelationSideGenerationStrategy >> category [ - - ^ 'accessing' -] - -{ #category : 'generation' } -FmxMBRelationSideGenerationStrategy >> compileMethod: methodSource for: aRelationSide in: aClassOrTrait [ - - self flag: #todo. "Should be linked to the FmxMBBehavior and not duplicate the code" - aRelationSide builder environment - addMethod: methodSource - in: aClassOrTrait name - classSide: false - protocol: self category -] - { #category : 'generation' } FmxMBRelationSideGenerationStrategy >> generateGetterCoreOn: aStream for: aRelationSide [ @@ -39,7 +22,7 @@ FmxMBRelationSideGenerationStrategy >> generateGetterCoreOn: aStream for: aRelat ] { #category : 'generation' } -FmxMBRelationSideGenerationStrategy >> generateGetterIn: aClassOrTrait for: aRelationSide [ +FmxMBRelationSideGenerationStrategy >> generateGetterIn: aFmxBehavioral for: aRelationSide [ | methodSource commentDefinition | commentDefinition := aRelationSide comment ifNotEmpty: [ :comment | '' format: { comment printString } ]. @@ -92,7 +75,7 @@ FmxMBRelationSideGenerationStrategy >> generateGetterIn: aClassOrTrait for: aRel self generateGetterCoreOn: s for: aRelationSide ]. - self compileMethod: methodSource for: aRelationSide in: aClassOrTrait + aFmxBehavioral addMethod: methodSource protocol: self protocol ] { #category : 'generation' } @@ -102,7 +85,7 @@ FmxMBRelationSideGenerationStrategy >> generateSetterCoreOn: aStream for: aRelat ] { #category : 'generation' } -FmxMBRelationSideGenerationStrategy >> generateSetterIn: aClassOrTrait for: aRelationSide [ +FmxMBRelationSideGenerationStrategy >> generateSetterIn: aFmxBehavioral for: aRelationSide [ | methodSource | methodSource := String streamContents: [ :s | @@ -117,7 +100,13 @@ FmxMBRelationSideGenerationStrategy >> generateSetterIn: aClassOrTrait for: aRel cr. self generateSetterCoreOn: s for: aRelationSide ]. - self compileMethod: methodSource for: aRelationSide in: aClassOrTrait + aFmxBehavioral addMethod: methodSource protocol: self protocol +] + +{ #category : 'accessing' } +FmxMBRelationSideGenerationStrategy >> protocol [ + + ^ #accessing ] { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRemoteRelationSideGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRemoteRelationSideGenerationStrategy.class.st index 79aecea5f..0e8e48c87 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRemoteRelationSideGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRemoteRelationSideGenerationStrategy.class.st @@ -6,8 +6,8 @@ Class { #tag : 'Implementation' } -{ #category : 'generation' } -FmxMBRemoteRelationSideGenerationStrategy >> compileMethod: methodSource for: aRelationSide in: aClassOrTrait [ +{ #category : 'accessing' } +FmxMBRemoteRelationSideGenerationStrategy >> protocol [ - aRelationSide addMethod: methodSource in: aClassOrTrait name protocol: '*' , self relationSide builder parentBuilderPackageName + ^ '*' , self relationSide builder parentBuilderPackageName ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index 117542b39..6d60660ab 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -80,7 +80,7 @@ FmxMBTrait >> generate [ FmxMBTrait >> generateRemoteAccessors [ (self properties select: [ :prop | prop isRemote and: [ (self realClass localSelectors includes: prop name) not ] ]) do: [ :each | - each generateAccessorsIn: self realClass ] + each generateAccessorsIn: self ] ] { #category : 'generating' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st index 4e2625d2e..1b79af87e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st @@ -39,7 +39,7 @@ FmxMBTypedProperty >> defaultValue: aValue [ ] { #category : 'generating' } -FmxMBTypedProperty >> generateGetterIn: aClassOrTrait [ +FmxMBTypedProperty >> generateGetterIn: aFmxBehavioral [ | methodSource propertyDefinition commentDefinition pragmaFormat | pragmaFormat := self defaultValue @@ -93,13 +93,13 @@ FmxMBTypedProperty >> generateGetterIn: aClassOrTrait [ self name. self defaultValue printString }) ] ]. - self addMethod: methodSource in: aClassOrTrait protocol: (self isRemote + aFmxBehavioral addMethod: methodSource protocol: (self isRemote ifTrue: [ '*' , self builder parentBuilderPackageName ] ifFalse: [ #accessing ]) ] { #category : 'generating' } -FmxMBTypedProperty >> generateSetterIn: aClassOrTrait [ +FmxMBTypedProperty >> generateSetterIn: aFmxBehavioral [ | methodToFormat | methodToFormat := String streamContents: [ :stream | @@ -110,7 +110,7 @@ FmxMBTypedProperty >> generateSetterIn: aClassOrTrait [ ifTrue: [ stream nextPutAll: 'self attributeAt: #{1} put: anObject' ] ifFalse: [ stream nextPutAll: '{1} := anObject' ] ]. - self addMethod: (methodToFormat format: { self name }) in: aClassOrTrait protocol: (self isRemote + aFmxBehavioral addMethod: (methodToFormat format: { self name }) protocol: (self isRemote ifTrue: [ '*' , self builder parentBuilderPackageName ] ifFalse: [ 'accessing' ]) ] From 1767151c9ed37e9764eb6ab9911819dd9cf53e36 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 02:33:08 +0200 Subject: [PATCH 056/121] Remove more usage the ring class --- src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st | 10 ++-------- .../FmxMBVisitorTrait.class.st | 7 ++----- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index ef52a2224..f3e82f61c 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -60,7 +60,7 @@ FmxMBBehavior >> addMethod: code in: class classSide: boolean protocol: protocol self flag: #todo. "We should only take a string as parameter." className := class isString ifTrue: [ class ] - ifFalse: [ class name ]. + ifFalse: [1halt. class name ]. self flag: #todo. "Demeter" self builder environment addMethod: code @@ -69,16 +69,10 @@ FmxMBBehavior >> addMethod: code in: class classSide: boolean protocol: protocol protocol: protocol ] -{ #category : 'generating' } -FmxMBBehavior >> addMethod: code in: class protocol: protocol [ - - ^ self addMethod: code in: class classSide: false protocol: protocol -] - { #category : 'adding' } FmxMBBehavior >> addMethod: code protocol: protocol [ - ^ self addMethod: code in: self fullName protocol: protocol + ^ self addMethod: code classSide: false protocol: protocol ] { #category : 'accessing' } diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index d19e3a519..7c82764c0 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -52,12 +52,11 @@ FmxMBVisitorTrait >> generate [ { #category : 'generating' } FmxMBVisitorTrait >> generateAcceptMethodIn: aFmxMBBehavior [ - self + aFmxMBBehavior addMethod: ('accept: aVisitor ^ aVisitor visit{1}: self' format: { aFmxMBBehavior fullName }) - in: aFmxMBBehavior realClass protocol: self acceptMethodProtocol ] @@ -90,7 +89,6 @@ FmxMBVisitorTrait >> generateVisitCollectionMethod [ ^ aCollection collect: [ :each | each accept: self ]' - in: self realClass protocol: #visiting ] @@ -102,14 +100,13 @@ FmxMBVisitorTrait >> generateVisitEntityMethod [ ^ aFamixEntity ifNotNil: [ aFamixEntity accept: self ]' - in: self realClass protocol: #visiting ] { #category : 'generation - visit' } FmxMBVisitorTrait >> generateVisitMethodFor: aFmxMBBehavior [ - self addMethod: (String streamContents: [ :s | self writeVisitMethodFor: aFmxMBBehavior on: s ]) in: self realClass protocol: #visiting + self addMethod: (String streamContents: [ :s | self writeVisitMethodFor: aFmxMBBehavior on: s ]) protocol: #visiting ] { #category : 'initialization' } From 4d6bc9bd8fd0c20b0f2068ced3425244cc63876a Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 02:44:37 +0200 Subject: [PATCH 057/121] Remove more usages of #realClass (returning a RGClass) --- .../FmxMBBehavior.class.st | 23 +------------------ .../FmxMBClass.class.st | 3 ++- .../FmxMBTrait.class.st | 15 ++++-------- 3 files changed, 7 insertions(+), 34 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index f3e82f61c..cadcc4a4f 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -46,25 +46,10 @@ FmxMBBehavior >> addAllTransitiveTraitsIn: aCollection [ { #category : 'adding' } FmxMBBehavior >> addMethod: code classSide: boolean protocol: protocol [ - self - addMethod: code - in: self fullName - classSide: boolean - protocol: protocol -] - -{ #category : 'generating' } -FmxMBBehavior >> addMethod: code in: class classSide: boolean protocol: protocol [ - - | className | - self flag: #todo. "We should only take a string as parameter." - className := class isString - ifTrue: [ class ] - ifFalse: [1halt. class name ]. self flag: #todo. "Demeter" self builder environment addMethod: code - in: className + in: self fullName classSide: boolean protocol: protocol ] @@ -345,12 +330,6 @@ FmxMBBehavior >> generateAnnotation [ protocol: #meta ] -{ #category : 'generating' } -FmxMBBehavior >> generateRemoteAccessors [ - - (self properties select: #isRemote) do: [ :each | each generateAccessorsIn: self ] -] - { #category : 'generating' } FmxMBBehavior >> generateTestingMethods [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 2c6aec5a9..816fc53b3 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -180,6 +180,7 @@ FmxMBClass >> generateMetamodelMethod [ { #category : 'generating' } FmxMBClass >> generateRemotes [ + | aClass aClassName | aClassName := self fullName. @@ -187,7 +188,7 @@ FmxMBClass >> generateRemotes [ self realClass: aClass. - self generateRemoteAccessors + (self properties select: #isRemote) do: [ :each | each generateAccessorsIn: self ] ] { #category : 'generating-methods' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index 6d60660ab..81391a564 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -76,24 +76,17 @@ FmxMBTrait >> generate [ self generateAddToCollection ] -{ #category : 'generating' } -FmxMBTrait >> generateRemoteAccessors [ - - (self properties select: [ :prop | prop isRemote and: [ (self realClass localSelectors includes: prop name) not ] ]) do: [ :each | - each generateAccessorsIn: self ] -] - { #category : 'generating' } FmxMBTrait >> generateRemotes [ + | aTrait traitName | - traitName := self fullName. - aTrait := self class environment at: traitName asSymbol ifAbsent: [ builder environment classNamed: traitName asSymbol ]. + aTrait := self class environment at: traitName asSymbol ifAbsent: [ ^ self ]. self realClass: aTrait. - - self generateRemoteAccessors + + (self properties select: [ :prop | prop isRemote and: [ (aTrait localSelectors includes: prop name) not ] ]) do: [ :each | each generateAccessorsIn: self ] ] { #category : 'testing' } From 07b98bd8dd0d54069b6b6f3380cf4d688ca050e0 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 03:01:57 +0200 Subject: [PATCH 058/121] Remove usage of #realClass returning a ring class --- .../FamixMetamodelBuilder.class.st | 23 ++++++------ .../FmxMBBehavior.class.st | 20 ++--------- .../FmxMBClass.class.st | 36 ++++++++----------- .../FmxMBImportingContext.class.st | 25 ++++++------- .../FmxMBTrait.class.st | 31 ++++++---------- .../Object.extension.st | 7 ++++ .../FmxMBVisitorTrait.class.st | 22 +++++------- 7 files changed, 65 insertions(+), 99 deletions(-) create mode 100644 src/Famix-MetamodelBuilder-Core/Object.extension.st diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index 0f06452cd..b78e544e2 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -95,11 +95,7 @@ FamixMetamodelBuilder >> allSubBuilders [ { #category : 'accessing' } FamixMetamodelBuilder >> apply [ - self environment apply. - - "This next line should not be here... - This feature should fill a ring model that should be manipulate by the apply above to check if we need the code, to be able to clean it and other mechanisms. But we do not yet support to create extension methods like this and I don't have the time to implement it for now. So, breaking layers we generate the extensions after we generated everything else in the 'right' way." - self generateTestingMethodsOfRemoteEntities + self environment apply ] { #category : 'accessing' } @@ -282,8 +278,12 @@ FamixMetamodelBuilder >> generateTestingMethodsOfRemoteEntities [ self testingSelectorsMapping keysAndValuesDo: [ :behavior :selectors | ((self shouldGeneratorTestingMethodsOf: behavior in: remoteClass) and: [ subclassesAndTraits includes: behavior ]) ifTrue: [ selectors do: [ :selector | - (remoteClass realClass includesSelector: selector) ifFalse: [ - remoteClass addMethod: ('{1}\\ \ ^ false' withCRs format: { selector }) protocol: '*' , self configuration packageName ] ] ] ] ] ] + self class environment + at: remoteClass fullName + ifPresent: [ :class | + (class includesSelector: selector) ifFalse: [ + remoteClass addMethod: ('{1}\\ \ ^ false' withCRs format: { selector }) protocol: '*' , self configuration packageName ] ] + ifAbsent: [ self error: 'The class ' , remoteClass fullName , ' was not found in the system to generate a remote testing method.' ] ] ] ] ] ] ] { #category : 'accessing' } @@ -500,13 +500,12 @@ FamixMetamodelBuilder >> parentBuilderPackageName [ { #category : 'generating' } FamixMetamodelBuilder >> prepareBehaviorsGeneration [ - self traitsWithSubBuildersTraits do: [ :each | - self testingSelectorsMapping at: each put: each testingSelectors ]. - self classes do: [ :each | - self testingSelectorsMapping at: each put: each testingSelectors ]. + self traitsWithSubBuildersTraits do: [ :each | self testingSelectorsMapping at: each put: each testingSelectors ]. + self classes do: [ :each | self testingSelectorsMapping at: each put: each testingSelectors ]. self traits do: [ :each | each generate ]. self sortedClasses do: [ :each | each generate ]. - self extensionBehaviors do: [ :each | each generate ] + self extensionBehaviors do: [ :each | each generate ]. + self generateTestingMethodsOfRemoteEntities ] { #category : 'generating' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index cadcc4a4f..8559f9669 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -5,7 +5,6 @@ Class { #classTraits : 'FmxMBRelationSideTrait classTrait', #instVars : [ 'relations', - 'realClass', 'properties', 'tag', 'prefix', @@ -307,13 +306,9 @@ FmxMBBehavior >> generateAddToCollection [ FmxMBBehavior >> generateAnnotation [ | aSuperclassName | - self flag: #todo. "Simplify" - aSuperclassName := self classGeneralization = self defaultSuperclass + aSuperclassName := (self classGeneralization = self defaultSuperclass or: [ self classGeneralization isNil ]) ifTrue: [ self defaultSuperclassName ] - ifFalse: [ - self classGeneralization - ifNil: [ self defaultSuperclassName ] - ifNotNil: [ :cg | cg realClass name ] ]. + ifFalse: [ self classGeneralization fullName ]. self addMethod: ('annotation @@ -508,17 +503,6 @@ FmxMBBehavior >> propertyName [ ^ self name uncapitalized ] -{ #category : 'accessing' } -FmxMBBehavior >> realClass [ - - ^ realClass ifNil: [ self class environment at: self fullName ] -] - -{ #category : 'accessing' } -FmxMBBehavior >> realClass: anObject [ - realClass := anObject -] - { #category : 'accessing' } FmxMBBehavior >> relatedEntityName [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 816fc53b3..911bc3a6c 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -59,24 +59,21 @@ FmxMBClass >> classGeneralization: anObject [ { #category : 'generating' } FmxMBClass >> generate [ - | aClass superclassName | - + | superclassName | superclassName := self classGeneralization ifNil: [ self defaultSuperclassName ] - ifNotNil: [ :class | class realClass name ]. - - aClass := self builder environment - createClassNamed: self fullName asSymbol - superclass: superclassName - traitDefinitions: self allTraitDefinitions - traitNames: self allTraitNames - precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) - properties: (self properties select: #producesSlot) - in: self packageName - tag: self tag - comment: self commentWithRelations. - - self realClass: aClass. + ifNotNil: #fullName. + + self builder environment + createClassNamed: self fullName asSymbol + superclass: superclassName + traitDefinitions: self allTraitDefinitions + traitNames: self allTraitNames + precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) + properties: (self properties select: #producesSlot) + in: self packageName + tag: self tag + comment: self commentWithRelations. self generateAccessors. self generateAnnotation. @@ -181,12 +178,7 @@ FmxMBClass >> generateMetamodelMethod [ { #category : 'generating' } FmxMBClass >> generateRemotes [ - | aClass aClassName | - aClassName := self fullName. - - aClass := self class environment at: aClassName asSymbol ifAbsent: [ self builder environment classNamed: aClassName asSymbol ]. - - self realClass: aClass. + self class environment at: self fullName ifAbsent: [ ^ self ]. (self properties select: #isRemote) do: [ :each | each generateAccessorsIn: self ] ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index dd98168ec..c98370444 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -48,24 +48,21 @@ FmxMBImportingContext >> defaultSuperclass [ { #category : 'generating' } FmxMBImportingContext >> generate [ - | aClass superclass | - + | superclass | superclass := self classGeneralization ifNil: [ self defaultSuperclassName ] ifNotNil: #name. - aClass := self builder environment - createClassNamed: self fullName asSymbol - superclass: superclass - traitDefinitions: self allTraitDefinitions - traitNames: self allTraitNames - precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) - properties: (self properties select: #producesSlot) - in: self packageName - tag: self tag - comment: self comment. - - self realClass: aClass. + self builder environment + createClassNamed: self fullName asSymbol + superclass: superclass + traitDefinitions: self allTraitDefinitions + traitNames: self allTraitNames + precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) + properties: (self properties select: #producesSlot) + in: self packageName + tag: self tag + comment: self comment. self generateImportingContextMetamodel. self generateShouldImport. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index 81391a564..70e8c6f32 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -53,20 +53,15 @@ FmxMBTrait >> defaultTag [ { #category : 'generating' } FmxMBTrait >> generate [ - | aTrait traitName | - traitName := self fullName. - - aTrait := self builder environment - createTraitNamed: traitName asSymbol - traitDefinitions: self allTraitDefinitions - uses: self allTraitNames - precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) - properties: (self properties select: #producesSlot) - in: self packageName - tag: self tag - comment: self commentWithRelations. - - self realClass: aTrait. + self builder environment + createTraitNamed: self fullName + traitDefinitions: self allTraitDefinitions + uses: self allTraitNames + precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) + properties: (self properties select: #producesSlot) + in: self packageName + tag: self tag + comment: self commentWithRelations. self generateAccessors. self generateAnnotation. @@ -79,12 +74,8 @@ FmxMBTrait >> generate [ { #category : 'generating' } FmxMBTrait >> generateRemotes [ - | aTrait traitName | - traitName := self fullName. - - aTrait := self class environment at: traitName asSymbol ifAbsent: [ ^ self ]. - - self realClass: aTrait. + | aTrait | + aTrait := self class environment at: self fullName ifAbsent: [ ^ self ]. (self properties select: [ :prop | prop isRemote and: [ (aTrait localSelectors includes: prop name) not ] ]) do: [ :each | each generateAccessorsIn: self ] ] diff --git a/src/Famix-MetamodelBuilder-Core/Object.extension.st b/src/Famix-MetamodelBuilder-Core/Object.extension.st new file mode 100644 index 000000000..69cd95d6e --- /dev/null +++ b/src/Famix-MetamodelBuilder-Core/Object.extension.st @@ -0,0 +1,7 @@ +Extension { #name : 'Object' } + +{ #category : '*Famix-MetamodelBuilder-Core' } +Object >> fullName [ + + ^ self name +] diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index 7c82764c0..74017b0dc 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -28,21 +28,17 @@ I am generated with the metamodel.' format: { self prefix } { #category : 'generating' } FmxMBVisitorTrait >> generate [ - | aTrait | - self builder environment registerPackage: self packageName. - aTrait := self builder environment - createTraitNamed: self fullName asSymbol - traitDefinitions: self allTraitDefinitions - uses: self allTraitNames - precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) - properties: (self properties select: #producesSlot) - in: self packageName - tag: self tag - comment: self comment. - - self realClass: aTrait. + self builder environment + createTraitNamed: self fullName asSymbol + traitDefinitions: self allTraitDefinitions + uses: self allTraitNames + precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) + properties: (self properties select: #producesSlot) + in: self packageName + tag: self tag + comment: self comment. self generateAnnotation. self generateCommonMethodsIfNecessary. From 34621c395d7e35e34f5715cdc5ac8a626981a14a Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 03:17:43 +0200 Subject: [PATCH 059/121] Simplify generator once more --- .../FamixMetamodelBuilder.class.st | 8 +- .../FmxMBBehavior.class.st | 5 -- .../FmxMBClass.class.st | 1 - .../FmxMBImportingContext.class.st | 1 - .../FmxMBRingEnvironment.class.st | 83 +++---------------- .../FmxMBTrait.class.st | 1 - .../FmxMBClassTest.class.st | 53 ------------ ...mxMBRelationSidesCombinationsTest.class.st | 72 ---------------- .../FmxMBTestingMethodsTest.class.st | 7 -- .../FmxMBTraitTest.class.st | 38 --------- .../FmxMBVisitorTrait.class.st | 3 - 11 files changed, 11 insertions(+), 261 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index b78e544e2..bddfc284a 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -511,7 +511,7 @@ FamixMetamodelBuilder >> prepareBehaviorsGeneration [ { #category : 'generating' } FamixMetamodelBuilder >> prepareGeneration [ - self registerPackages. + self environment ensurePackageNamed: self configuration packageName. self ensureEntityClassIsTheCommonSuperclass. self shouldGenerateModel ifTrue: [ @@ -536,12 +536,6 @@ FamixMetamodelBuilder >> printOn: aStream [ nextPut: $) ] ] -{ #category : 'generating' } -FamixMetamodelBuilder >> registerPackages [ - - self environment registerPackage: self configuration packageName -] - { #category : 'accessing' } FamixMetamodelBuilder >> relations [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 8559f9669..2f520ee4e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -120,11 +120,6 @@ FmxMBBehavior >> allTraitDefinitions [ ifAbsent: [ trait fullName ] ]) sorted ] ] -{ #category : 'accessing' } -FmxMBBehavior >> allTraitNames [ - ^ (self allLocalTraits collect: #fullName) sorted -] - { #category : 'accessing' } FmxMBBehavior >> allTransitiveTraits [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 911bc3a6c..a597aeb9e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -68,7 +68,6 @@ FmxMBClass >> generate [ createClassNamed: self fullName asSymbol superclass: superclassName traitDefinitions: self allTraitDefinitions - traitNames: self allTraitNames precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) properties: (self properties select: #producesSlot) in: self packageName diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index c98370444..8437c4af3 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -57,7 +57,6 @@ FmxMBImportingContext >> generate [ createClassNamed: self fullName asSymbol superclass: superclass traitDefinitions: self allTraitDefinitions - traitNames: self allTraitNames precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) properties: (self properties select: #producesSlot) in: self packageName diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 8231b894e..6a259658d 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -144,9 +144,9 @@ FmxMBRingEnvironment >> collectChangesToApply [ ] { #category : 'installing' } -FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitDefinitions: traitDefinitions traitNames: traitNames precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ +FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitDefinitions: traitDefinitions precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ - | slots aClass existingClass composition realClass packageName tag change | + | slots existingClass realClass packageName tag change | existingClass := self ringEnvironment ask behaviorNamed: className. realClass := self class environment at: className ifAbsent: [ nil ]. @@ -161,8 +161,6 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t self validateProperties: properties. slots := properties collect: [ :property | property asRGSlot ]. - - "===========================" change := FmxClassAddition new. change name: className; @@ -174,44 +172,16 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t change slots: (self buildSlotsDefinitionsFor: properties existingClass: realClass). changesToApply add: change. - "===========================" - - aClass := self ringEnvironment ensureClassNamed: className. - aClass superclass: (self ringEnvironment ensureClassNamed: superclassName). - - composition := RGTraitComposition parent: aClass. - aClass traitComposition: composition. - - traitNames do: [ :each | composition addTransformation: (self ringEnvironment ensureTraitNamed: each) ]. - self flag: #todo. "Should not make it in dev branch of Moose. The ring package creation should be removed." self ensurePackageNamed: packageName. - aClass package: (self ringEnvironment ensurePackageNamed: packageName). - aClass layout makeResolved. - - slots do: [ :slotInBadEnvironment | - | slot | - slot := slotInBadEnvironment needsFullDefinition - ifTrue: [ - (RGUnknownSlot named: slotInBadEnvironment name parent: aClass layout) - expression: slotInBadEnvironment expression; - yourself ] - ifFalse: [ RGInstanceVariableSlot named: slotInBadEnvironment name parent: aClass layout ]. - aClass layout addSlot: slot. - slot propertyNamed: #isGenerated put: true ]. - - aClass tagWith: tag. - comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: className comment: comment) ]. - - ^ aClass + + comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: className comment: comment) ] ] { #category : 'initialization' } -FmxMBRingEnvironment >> createTraitNamed: traitName traitDefinitions: traitDefinitions uses: traitNames precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ - - | aTrait existingRGClass composition packageName tag realClass slots change | - existingRGClass := self ringEnvironment ask behaviorNamed: traitName asSymbol. +FmxMBRingEnvironment >> createTraitNamed: traitName traitDefinitions: traitDefinitions precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ + | packageName tag realClass slots change | realClass := self class environment at: traitName ifAbsent: [ nil ]. packageName := realClass @@ -224,7 +194,6 @@ FmxMBRingEnvironment >> createTraitNamed: traitName traitDefinitions: traitDefi self validateProperties: properties. slots := properties collect: [ :property | property asRGSlot ]. - "===========================" change := FmxTraitAddition new. change name: traitName; @@ -232,39 +201,13 @@ FmxMBRingEnvironment >> createTraitNamed: traitName traitDefinitions: traitDefi tag: tag. traitDefinitions ifNotEmpty: [ change traits: (self traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass) ]. - + properties ifNotEmpty: [ change slots: (self buildSlotsDefinitionsFor: properties existingClass: realClass) ]. changesToApply add: change. - "===========================" - - aTrait := self ringEnvironment ensureTraitNamed: traitName. - aTrait superclass: self basicTrait. - composition := RGTraitComposition parent: aTrait. - aTrait traitComposition: composition. - - traitNames do: [ :each | composition addTransformation: (self ringEnvironment ensureTraitNamed: each) ]. - - self flag: #todo. "Should not make it in dev branch of Moose. The ring package creation should be removed." self ensurePackageNamed: packageName. - aTrait package: (self ringEnvironment ensurePackageNamed: packageName). - aTrait layout makeResolved. - - slots do: [ :slotInBadEnvironment | - | slot | - slot := slotInBadEnvironment needsFullDefinition - ifTrue: [ - (RGUnknownSlot named: slotInBadEnvironment name parent: aTrait layout) - expression: slotInBadEnvironment expression; - yourself ] - ifFalse: [ RGInstanceVariableSlot named: slotInBadEnvironment name parent: aTrait layout ]. - aTrait layout addSlot: slot. - slot propertyNamed: #isGenerated put: true ]. - - aTrait tagWith: tag. - comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: traitName comment: comment) ]. - - ^ aTrait + + comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: traitName comment: comment) ] ] { #category : 'private' } @@ -345,15 +288,9 @@ FmxMBRingEnvironment >> recordRemovalOfGeneratedPackagesAndClasses [ thenDo: [ :class | (classesToGenerate includes: class name) ifFalse: [ changesToApply add: (FmxClassRemoval class: class) ] ] ] ] ] -{ #category : 'public registration' } -FmxMBRingEnvironment >> registerPackage: aPackageName [ - - ^ self ringEnvironment ensurePackageNamed: aPackageName. - -] - { #category : 'accessing' } FmxMBRingEnvironment >> ringEnvironment [ + ^ ringEnvironment ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index 70e8c6f32..962e92abe 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -56,7 +56,6 @@ FmxMBTrait >> generate [ self builder environment createTraitNamed: self fullName traitDefinitions: self allTraitDefinitions - uses: self allTraitNames precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) properties: (self properties select: #producesSlot) in: self packageName diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st index b4a9798d6..7627070c6 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st @@ -49,17 +49,6 @@ FmxMBClassTest >> testBasicSuperclass [ self assert: generated superclass name equals: #MooseEntity ] -{ #category : 'tests - settings' } -FmxMBClassTest >> testBasicTrait [ - "test if the trits have correct supperclass" - - | generated | - builder newTraitNamed: #TComment. - builder generate. - generated := builder testingEnvironment ask classNamed: 'TstTComment'. - self assert: generated superclass name equals: #Trait -] - { #category : 'tests' } FmxMBClassTest >> testBuilderPackageChange [ "if we set for a builder a packag name, all newely defined entities should use be assigned to this package. If no explicit package name is set, the default one is used." @@ -154,18 +143,6 @@ FmxMBClassTest >> testDefaultPackageForUserClasses [ ] -{ #category : 'tests - tags' } -FmxMBClassTest >> testDefaultTagForClass [ - "test if correct default tag name is assigned to classes" - - | generatedTAccess | - builder newTraitNamed: #TAccess. - builder generate. - - generatedTAccess := builder testingEnvironment ask classNamed: #TstTAccess. - self assertCollection: generatedTAccess tags hasSameElements: { #Traits } -] - { #category : 'tests' } FmxMBClassTest >> testEmptyComment [ @@ -242,36 +219,6 @@ FmxMBClassTest >> testTagForClassFromBuilder [ self assertCollection: generatedComment tags hasSameElements: {#support} ] -{ #category : 'tests - tags' } -FmxMBClassTest >> testTagForTraitFromBuilder [ - - | generatedTAccess tComment generatedTComment | - builder newTraitNamed: #TAccess. - tComment := builder newTraitNamed: #TComment. - tComment tag: #support. - - builder generate. - - generatedTAccess := builder testingEnvironment ask classNamed: #TstTAccess. - generatedTComment := builder testingEnvironment ask classNamed: #TstTComment. - self assertCollection: generatedTAccess tags hasSameElements: { #Traits }. - self assertCollection: generatedTComment tags hasSameElements: { #support } -] - -{ #category : 'tests - tags' } -FmxMBClassTest >> testTagForTraits [ - - | tAccess generatedTAccess | - - tAccess := builder newTraitNamed: #TAccess. - tAccess tag: #support. - - builder generate. - - generatedTAccess := builder testingEnvironment ask classNamed: #TstTAccess. - self assertCollection: generatedTAccess tags hasSameElements: { #support } -] - { #category : 'tests - tags' } FmxMBClassTest >> testTestingMethods [ diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSidesCombinationsTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSidesCombinationsTest.class.st index d95c4f379..719461883 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSidesCombinationsTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSidesCombinationsTest.class.st @@ -32,75 +32,3 @@ FmxMBRelationSidesCombinationsTest >> testClassToClass [ ] - -{ #category : 'tests' } -FmxMBRelationSidesCombinationsTest >> testClassToTrait [ - - "test simple relation between class and trait" - - | entity1 entity2 env | - - entity1 := builder newClassNamed: #Named. - entity2 := builder newTraitNamed: #TAccess. - - (entity1 property: #access) - (entity2 property: #named). - - builder generate. - - env := builder environment ringEnvironment. - - self - assert: ((env ask behaviorNamed: #TstNamed) slots first) expression - equals: 'FMOne type: #TstTAccess opposite: #named'. - self - assert: ((env ask behaviorNamed: #TstTAccess) slots first) expression - equals: 'FMOne type: #TstNamed opposite: #access'. -] - -{ #category : 'tests' } -FmxMBRelationSidesCombinationsTest >> testTraitToClass [ - - "test simple relation between class and trait" - - | entity1 entity2 env | - - entity1 := builder newTraitNamed: #TNamedEntity. - entity2 := builder newClassNamed: #Access. - - (entity1 property: #access) - (entity2 property: #named). - - builder generate. - - env := builder environment ringEnvironment. - - self - assert: ((env ask behaviorNamed: #TstTNamedEntity) slots first) expression - equals: 'FMOne type: #TstAccess opposite: #named'. - self - assert: ((env ask behaviorNamed: #TstAccess) slots first) expression - equals: 'FMOne type: #TstTNamedEntity opposite: #access'. -] - -{ #category : 'tests' } -FmxMBRelationSidesCombinationsTest >> testTraitToTrait [ - - "test simple relation between trait and trait" - - | entity1 entity2 env | - - entity1 := builder newTraitNamed: #TNamedEntity. - entity2 := builder newTraitNamed: #TAccess. - - (entity1 property: #access) - (entity2 property: #named). - - builder generate. - - env := builder environment ringEnvironment. - - self - assert: ((env ask behaviorNamed: #TstTNamedEntity) slots first) expression - equals: 'FMOne type: #TstTAccess opposite: #named'. - self - assert: ((env ask behaviorNamed: #TstTAccess) slots first) expression - equals: 'FMOne type: #TstTNamedEntity opposite: #access'. -] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBTestingMethodsTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBTestingMethodsTest.class.st index 6d0e76a0b..6134753fd 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBTestingMethodsTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBTestingMethodsTest.class.st @@ -54,10 +54,3 @@ FmxMBTestingMethodsTest >> testTraited [ self assert: (generatedNamed localMethodNamed: #isNamed ifAbsent: []) isNil. self assert: (generatedNamed localMethodNamed: #isEntity ifAbsent: []) isNil. ] - -{ #category : 'tests' } -FmxMBTestingMethodsTest >> testTraitedRoot [ - "a testing method should not be generated if it is provided by a trait" - - self assert: (generatedTraitedRoot localMethodNamed: #isNamed ifAbsent: [ nil ]) isNil -] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st index 34fbab6a5..dd6d6ffe0 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st @@ -18,44 +18,6 @@ FmxMBTraitTest >> newEntityNamed: aString [ ^ builder newTraitNamed: aString ] -{ #category : 'tests' } -FmxMBTraitTest >> testCustomPackageForUserClasses [ - | generated | - builder configuration packageName: 'Custom'. - builder newTraitNamed: #TComment. - builder generate. - generated := builder testingEnvironment ask classNamed: 'TstTComment'. - - self assert: generated package name equals: #Custom -] - -{ #category : 'tests' } -FmxMBTraitTest >> testCustomPackageForUserClassesChanged [ - | generated generatedAccess | - builder configuration packageName: 'Custom'. - builder newTraitNamed: #TComment. - - builder configuration packageName: 'Custom2'. - builder newTraitNamed: #TAccess. - - builder generate. - generated := builder testingEnvironment ask classNamed: 'TstTComment'. - generatedAccess := builder testingEnvironment ask classNamed: 'TstTAccess'. - - self assert: generated package name equals: #Custom. - self assert: generatedAccess package name equals: #Custom2 -] - -{ #category : 'tests' } -FmxMBTraitTest >> testDefaultPackageForUserClasses [ - | userClass | - builder newTraitNamed: #TComment. - builder generate. - userClass := builder testingEnvironment ask classNamed: 'TstTComment'. - - self assert: userClass package name equals: #Tst -] - { #category : 'tests' } FmxMBTraitTest >> testGenerateRemotesGeneratesRelations [ | traitA traitB classA classB instanceOfA instanceOfB | diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index 74017b0dc..4f56cacf3 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -28,12 +28,9 @@ I am generated with the metamodel.' format: { self prefix } { #category : 'generating' } FmxMBVisitorTrait >> generate [ - self builder environment registerPackage: self packageName. - self builder environment createTraitNamed: self fullName asSymbol traitDefinitions: self allTraitDefinitions - uses: self allTraitNames precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) properties: (self properties select: #producesSlot) in: self packageName From 1e6ed556db730ad93bbb7b6399a468c2bf9e0050 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 03:23:00 +0200 Subject: [PATCH 060/121] Remove tests of ring --- .../FmxMBBuilderTest.class.st | 22 -- .../FmxMBClassTest.class.st | 193 +----------------- .../FmxMBImportingContextTest.class.st | 6 - ...mxMBRelationSidesCombinationsTest.class.st | 34 --- .../FmxMBTestingMethodsTest.class.st | 56 ----- .../FmxMBTraitTest.class.st | 17 -- 6 files changed, 3 insertions(+), 325 deletions(-) delete mode 100644 src/Famix-MetamodelBuilder-Tests/FmxMBRelationSidesCombinationsTest.class.st delete mode 100644 src/Famix-MetamodelBuilder-Tests/FmxMBTestingMethodsTest.class.st diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st index 5402dd823..b34c5745a 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st @@ -17,28 +17,6 @@ Class { #tag : 'Tests' } -{ #category : 'tests' } -FmxMBBuilderTest >> testChildBuildersGeneration [ - | parentBuilder childBuilder environment | - parentBuilder := FamixMetamodelBuilder forTesting. - parentBuilder configuration packageName: 'ParentBuilderPackage'. - parentBuilder ensureClassNamed: 'ParentEntity'. - - childBuilder := FamixMetamodelBuilder new. - childBuilder parentBuilder: parentBuilder. - childBuilder configuration packageName: 'ChildBuilderPackage'. - childBuilder ensureClassNamed: 'ChildEntity'. - - parentBuilder generate. - parentBuilder generateRemotes. - - environment := parentBuilder environment ringEnvironment. - - self assert: (environment ask behaviorNamed: #TstParentEntity) isNotNil. - self assert: (environment ask behaviorNamed: #TstParentEntity) package name equals: 'ParentBuilderPackage'. - self assert: (environment ask behaviorNamed: #TstChildEntity) isNil -] - { #category : 'tests' } FmxMBBuilderTest >> testChildBuildersShareTheSameEnvironment [ diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st index 7627070c6..146472b03 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st @@ -12,166 +12,12 @@ FmxMBClassTest >> behaviorClass [ ^ FmxMBClass ] -{ #category : 'utilities' } -FmxMBClassTest >> checkGeneralizationWithAnnotations [ - - "check if TstClass is correctly created as a subclass of TstBehavior" - - | generatedBehavior generatedClass annotation | - generatedBehavior := builder testingEnvironment ask classNamed: 'TstBehavior'. - generatedClass := builder testingEnvironment ask classNamed: 'TstClass'. - - self assert: generatedClass superclass equals: generatedBehavior. - annotation := generatedClass classSide methodNamed: #annotation. - self assert: (annotation sourceCode includesSubstring: ''). - self assert: (annotation sourceCode includesSubstring: ''). - - -] - { #category : 'accessing' } FmxMBClassTest >> newEntityNamed: aString [ ^ builder newClassNamed: aString ] -{ #category : 'tests - settings' } -FmxMBClassTest >> testBasicSuperclass [ - "check if a new class has correct superclass (Entity for most of them. The default one for Entity.)" - - | generated | - builder newClassNamed: #Comment. - builder generate. - generated := builder testingEnvironment ask classNamed: 'TstComment'. - self assert: generated superclass name equals: #TstEntity. - - generated := builder testingEnvironment ask classNamed: 'TstEntity'. - self assert: generated superclass name equals: #MooseEntity -] - -{ #category : 'tests' } -FmxMBClassTest >> testBuilderPackageChange [ - "if we set for a builder a packag name, all newely defined entities should use be assigned to this package. If no explicit package name is set, the default one is used." - - | generated | - builder newClassNamed: #Comment. - builder configuration packageName: 'Another'. - builder newClassNamed: #Method. - builder generate. - generated := builder testingEnvironment ask classNamed: 'TstComment'. - self assert: generated isNotNil. - self assert: generated isClass. - self assert: generated package name equals: #Tst. - generated := builder testingEnvironment ask classNamed: 'TstMethod'. - self assert: generated isNotNil. - self assert: generated isClass. - self assert: generated package name equals: #Another -] - -{ #category : 'tests' } -FmxMBClassTest >> testBuilderPrefixChange [ - "if we set for a builder a prefix, all newely defined entities should use it. If no explicit prefix is set, the default one is used." - - | generated | - builder newClassNamed: #Comment. - builder configuration prefix: 'Another'. - builder newClassNamed: #Method. - builder generate. - generated := builder testingEnvironment ask classNamed: 'TstComment'. - self assert: generated isNotNil. - self assert: generated isClass. - self assert: generated package name equals: #Tst. - generated := builder testingEnvironment ask classNamed: 'AnotherMethod'. - self assert: generated isNotNil. - self assert: generated isClass. - self assert: generated package name equals: #Tst -] - -{ #category : 'tests' } -FmxMBClassTest >> testCustomPackageForUserClasses [ - - "check if package name can by correctly set to a class" - - | generated | - - builder configuration packageName: 'Custom'. - - builder newClassNamed: #Comment. - builder generate. - generated := builder testingEnvironment ask classNamed: 'TstComment'. - - self assert: generated package name equals: #Custom. - -] - -{ #category : 'tests' } -FmxMBClassTest >> testCustomPackageForUserClassesChanged [ - - "test correct package assignments to classes" - - | generated generatedAccess | - - builder configuration packageName: 'Custom'. - builder newClassNamed: #Comment. - - builder configuration packageName: 'Custom2'. - builder newClassNamed: #Access. - - builder generate. - generated := builder testingEnvironment ask classNamed: 'TstComment'. - generatedAccess := builder testingEnvironment ask classNamed: 'TstAccess'. - - self assert: generated package name equals: #Custom. - self assert: generatedAccess package name equals: #Custom2. - - - -] - -{ #category : 'tests' } -FmxMBClassTest >> testDefaultPackageForUserClasses [ - - "test if the default package name is correctly set to classes" - - | generated | - - builder newClassNamed: #Comment. - builder generate. - generated := builder testingEnvironment ask classNamed: 'TstComment'. - - self assert: generated package name equals: #Tst. - -] - -{ #category : 'tests' } -FmxMBClassTest >> testEmptyComment [ - - "check that by default classes do not have any class comment" - - | generated | - - builder newClassNamed: #Comment. - builder generate. - generated := builder testingEnvironment ask classNamed: 'TstComment'. - self assert: generated comment content isEmptyOrNil. -] - -{ #category : 'tests' } -FmxMBClassTest >> testMultipleClasses [ - - "trivial test if we can generate several different classes" - - builder newClassNamed: #Comment. - builder newClassNamed: #Method. - builder newClassNamed: #Package. - - builder generate. - builder testingEnvironment ask classNamed: 'TstComment'. - builder testingEnvironment ask classNamed: 'TstMethod'. - builder testingEnvironment ask classNamed: 'TstPackage'. - -] - { #category : 'tests - names' } FmxMBClassTest >> testSingularPropertyName [ @@ -190,46 +36,13 @@ FmxMBClassTest >> testSingularPropertyName [ ] -{ #category : 'tests - tags' } -FmxMBClassTest >> testTagForClass [ - - | access generatedAccess | - - access := builder newClassNamed: #Access. - access tag: #classes. - - builder generate. - - generatedAccess := builder testingEnvironment ask classNamed: #TstAccess. - self assertCollection: generatedAccess tags hasSameElements: { #classes } -] - -{ #category : 'tests - tags' } -FmxMBClassTest >> testTagForClassFromBuilder [ - | generatedAccess comment generatedComment | - builder newClassNamed: #Access. - comment := builder newClassNamed: #Comment. - comment tag: #support. - - builder generate. - - generatedAccess := builder testingEnvironment ask classNamed: #TstAccess. - generatedComment := builder testingEnvironment ask classNamed: #TstComment. - self assertCollection: generatedAccess tags hasSameElements: {#Entities}. - self assertCollection: generatedComment tags hasSameElements: {#support} -] - { #category : 'tests - tags' } FmxMBClassTest >> testTestingMethods [ - "test messages isMetamodelClass and isMetamodelTrait" - - | named | - named := builder newClassNamed: #Named. + | named | + named := builder newClassNamed: #Named. self assert: named isMetamodelClass. - self deny: named isMetamodelTrait. - - + self deny: named isMetamodelTrait ] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBImportingContextTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBImportingContextTest.class.st index 3b97cbc82..b41b8d8a5 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBImportingContextTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBImportingContextTest.class.st @@ -39,12 +39,6 @@ FmxMBImportingContextTest >> setUp [ #TstImportingContext ] -{ #category : 'tests' } -FmxMBImportingContextTest >> testGeneratedContextClass [ - self assert: generatedContext isNotNil. - self assert: generatedContext superclass name equals: #FamixImportingContext -] - { #category : 'tests' } FmxMBImportingContextTest >> testNotGenerated [ diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSidesCombinationsTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSidesCombinationsTest.class.st deleted file mode 100644 index 719461883..000000000 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSidesCombinationsTest.class.st +++ /dev/null @@ -1,34 +0,0 @@ -Class { - #name : 'FmxMBRelationSidesCombinationsTest', - #superclass : 'FmxMBTestCase', - #category : 'Famix-MetamodelBuilder-Tests-Tests', - #package : 'Famix-MetamodelBuilder-Tests', - #tag : 'Tests' -} - -{ #category : 'tests' } -FmxMBRelationSidesCombinationsTest >> testClassToClass [ - - "test simple relation between class and class" - - | entity1 entity2 env | - - entity1 := builder newClassNamed: #Named. - entity2 := builder newClassNamed: #Access. - - (entity1 property: #access) - (entity2 property: #named). - - builder generate. - - env := builder environment ringEnvironment. - - self - assert: ((env ask behaviorNamed: #TstNamed) slots first) expression - equals: 'FMOne type: #TstAccess opposite: #named'. - self - assert: ((env ask behaviorNamed: #TstAccess) slots first) expression - equals: 'FMOne type: #TstNamed opposite: #access'. - - - -] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBTestingMethodsTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBTestingMethodsTest.class.st deleted file mode 100644 index 6134753fd..000000000 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBTestingMethodsTest.class.st +++ /dev/null @@ -1,56 +0,0 @@ -Class { - #name : 'FmxMBTestingMethodsTest', - #superclass : 'FmxMBTestCase', - #instVars : [ - 'root1', - 'root2', - 'entity', - 'trait', - 'traited', - 'generatedEntity', - 'generatedTNamed', - 'generatedNamed', - 'traitedRoot', - 'generatedTraitedRoot' - ], - #category : 'Famix-MetamodelBuilder-Tests-Tests', - #package : 'Famix-MetamodelBuilder-Tests', - #tag : 'Tests' -} - -{ #category : 'running' } -FmxMBTestingMethodsTest >> setUp [ - - super setUp. - - root1 := builder newClassNamed: #Root1. - root2 := builder newClassNamed: #Root2. - entity := builder ensureClassNamed: #Entity. - trait := builder newTraitNamed: #TNamedEntity. - traited := builder newClassNamed: #Named. - traitedRoot := builder newTraitNamed: #TraitedRoot. - - root1 <|-- traited. - trait <|-- traited. - trait <|-- traitedRoot. - - entity withTesting. - trait withTesting. - - builder generate. - - generatedEntity := builder testingEnvironment ask classNamed: 'TstEntity'. - generatedTNamed := builder testingEnvironment ask classNamed: 'TstTNamedEntity'. - generatedNamed := builder testingEnvironment ask classNamed: 'TstNamed'. - generatedTraitedRoot := builder testingEnvironment ask classNamed: 'TstTraitedRoot'. - - - -] - -{ #category : 'tests' } -FmxMBTestingMethodsTest >> testTraited [ - - self assert: (generatedNamed localMethodNamed: #isNamed ifAbsent: []) isNil. - self assert: (generatedNamed localMethodNamed: #isEntity ifAbsent: []) isNil. -] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st index dd6d6ffe0..e1db31506 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st @@ -89,20 +89,3 @@ FmxMBTraitTest >> testTraitTestingSelectors [ simpleClass withTesting. self assertCollection: simpleClass testingSelectors hasSameElements: #(isComment) ] - -{ #category : 'tests' } -FmxMBTraitTest >> testUses [ - | behavior tBehavior generatedBehavior generatedTBehavior | - behavior := builder newClassNamed: #Behavior. - tBehavior := builder newTraitNamed: #TBehavior. - - behavior uses: tBehavior. - - builder generate. - - generatedBehavior := builder testingEnvironment ask classNamed: 'TstBehavior'. - generatedTBehavior := builder testingEnvironment ask classNamed: 'TstTBehavior'. - - self deny: generatedBehavior superclass equals: generatedTBehavior. - self assertCollection: generatedBehavior traits asArray equals: {generatedTBehavior} -] From cd9781486232d5279f7fd3920711e2c82a1f4f58 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 04:01:04 +0200 Subject: [PATCH 061/121] Remove dead code and some Ring dependencies --- .../ClassDescription.extension.st | 12 ------------ .../FmxMBBehavior.class.st | 5 +++-- .../FmxMBImportingContext.class.st | 4 ++-- .../FmxMBModel.class.st | 2 +- .../FmxMBRingEnvironment.class.st | 18 ------------------ .../Trait.extension.st | 7 ------- 6 files changed, 6 insertions(+), 42 deletions(-) delete mode 100644 src/Famix-MetamodelBuilder-Core/ClassDescription.extension.st delete mode 100644 src/Famix-MetamodelBuilder-Core/Trait.extension.st diff --git a/src/Famix-MetamodelBuilder-Core/ClassDescription.extension.st b/src/Famix-MetamodelBuilder-Core/ClassDescription.extension.st deleted file mode 100644 index 19a28eedb..000000000 --- a/src/Famix-MetamodelBuilder-Core/ClassDescription.extension.st +++ /dev/null @@ -1,12 +0,0 @@ -Extension { #name : 'ClassDescription' } - -{ #category : '*Famix-MetamodelBuilder-Core' } -ClassDescription >> needToAdaptToMethod: aRGMethod [ - - ^ self - compiledMethodAt: aRGMethod selector - ifPresent: [ :realMethod | - (aRGMethod sourceCode = realMethod sourceCode and: [ - aRGMethod protocol = realMethod protocolName ]) not ] - ifAbsent: [ true ] -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 2f520ee4e..0967f98f5 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -238,7 +238,8 @@ FmxMBBehavior >> commentWithRelations [ { #category : 'settings - default' } FmxMBBehavior >> defaultSuperclass [ - ^ self builder environment basicSuperclass + + ^ MooseEntity ] { #category : 'generating' } @@ -301,7 +302,7 @@ FmxMBBehavior >> generateAddToCollection [ FmxMBBehavior >> generateAnnotation [ | aSuperclassName | - aSuperclassName := (self classGeneralization = self defaultSuperclass or: [ self classGeneralization isNil ]) + aSuperclassName := (self classGeneralization isNil or: [ self classGeneralization = self defaultSuperclass ]) ifTrue: [ self defaultSuperclassName ] ifFalse: [ self classGeneralization fullName ]. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index 8437c4af3..c876ac733 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -28,7 +28,7 @@ FmxMBImportingContext >> acceptVisitor: aVisitor [ { #category : 'accessing' } FmxMBImportingContext >> classGeneralization [ - ^ self builder environment basicImportingContextSuperclass + ^ FamixImportingContext ] { #category : 'accessing' } @@ -42,7 +42,7 @@ It is used by `MiImportingContextPresenter` in a `MiImportModelFromFileDialog` t { #category : 'settings - default' } FmxMBImportingContext >> defaultSuperclass [ - ^ self builder environment basicImportingContextSuperclass + ^ self classGeneralization ] { #category : 'generating' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st index eb808d797..17ab0bcc2 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st @@ -8,7 +8,7 @@ Class { { #category : 'settings - default' } FmxMBModel >> defaultSuperclass [ - ^ self builder environment basicModelSuperclass + ^ MooseModel ] { #category : 'settings - default' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 6a259658d..d83ae8249 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -49,24 +49,6 @@ FmxMBRingEnvironment >> basicGroupSuperclass [ ^ self ringEnvironment ensureClassNamed: #MooseSpecializedGroup ] -{ #category : 'accessing' } -FmxMBRingEnvironment >> basicImportingContextSuperclass [ - - ^ self ringEnvironment ensureClassNamed: #FamixImportingContext -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> basicModelSuperclass [ - - ^ self ringEnvironment ensureClassNamed: #MooseModel -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> basicSuperclass [ - - ^ self ringEnvironment ensureClassNamed: #MooseEntity -] - { #category : 'accessing' } FmxMBRingEnvironment >> basicTrait [ diff --git a/src/Famix-MetamodelBuilder-Core/Trait.extension.st b/src/Famix-MetamodelBuilder-Core/Trait.extension.st deleted file mode 100644 index 5f88493c1..000000000 --- a/src/Famix-MetamodelBuilder-Core/Trait.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : 'Trait' } - -{ #category : '*Famix-MetamodelBuilder-Core' } -Trait class >> named: aName uses: aTraitCompositionOrCollection slots: someSlots package: aCategory [ - - ^ self named: aName uses: aTraitCompositionOrCollection slots: someSlots category: aCategory -] From 0e762d84bdcd87a2560435476a486d04afb4d3c5 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 04:09:36 +0200 Subject: [PATCH 062/121] Finish to remove ring from the metamodel builder \0/ --- .../FamixMetamodelBuilder.class.st | 6 -- .../FmxMBClassGroup.class.st | 3 +- .../FmxMBProperty.class.st | 7 -- .../FmxMBRelationSide.class.st | 14 ---- .../FmxMBRingEnvironment.class.st | 57 ++------------- .../FmxMBTrait.class.st | 6 +- .../FmxMBTypedProperty.class.st | 8 --- .../FmxMBImportingContextTest.class.st | 69 ------------------- .../FmxMBTraitTest.class.st | 14 ---- 9 files changed, 12 insertions(+), 172 deletions(-) delete mode 100644 src/Famix-MetamodelBuilder-Tests/FmxMBImportingContextTest.class.st diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index bddfc284a..aee6446bb 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -611,12 +611,6 @@ FamixMetamodelBuilder >> subBuilders [ ^ self generator ifNil: [ #( ) ] ifNotNil: #subBuilders ] -{ #category : 'tests support' } -FamixMetamodelBuilder >> testingEnvironment [ - - ^ self environment ringEnvironment -] - { #category : 'accessing' } FamixMetamodelBuilder >> testingSelectorsMapping [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st index e240797ff..d8b07d56b 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st @@ -11,7 +11,8 @@ Class { { #category : 'settings - default' } FmxMBClassGroup >> defaultSuperclass [ - ^ self builder environment basicGroupSuperclass + + ^ MooseSpecializedGroup ] { #category : 'settings - default' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st index 546bdb86e..a18798309 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st @@ -11,13 +11,6 @@ FmxMBProperty class >> isAbstract [ ^ self = FmxMBProperty ] -{ #category : 'accessing' } -FmxMBProperty >> asRGSlot [ - - - self subclassResponsibility -] - { #category : 'generating' } FmxMBProperty >> generateAccessorsIn: aFmxBehavioral [ self generateGetterIn: aFmxBehavioral. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st index e81d553de..34aacfd84 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st @@ -29,20 +29,6 @@ FmxMBRelationSide >> acceptVisitor: aVisitor [ ^ aVisitor visitRelationSide: self. ] -{ #category : 'generating' } -FmxMBRelationSide >> asRGSlot [ - - | cardinalityClassName | - cardinalityClassName := cardinality = #one - ifTrue: [ #FMOne ] - ifFalse: [ #FMMany ]. - - ^ (RGUnknownSlot named: self name asSymbol) expression: ('{1} type: #{2} opposite: #{3}' format: { - cardinalityClassName. - self oppositeType. - self oppositeName }) -] - { #category : 'converting' } FmxMBRelationSide >> asRelationSideNamed: aPropertyName [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index d83ae8249..21df45ae6 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -3,7 +3,6 @@ Class { #superclass : 'Object', #instVars : [ 'changesToApply', - 'ringEnvironment', 'builder' ], #category : 'Famix-MetamodelBuilder-Core-Implementation', @@ -43,18 +42,6 @@ FmxMBRingEnvironment >> apply [ changesToApply := OrderedCollection new ] -{ #category : 'accessing' } -FmxMBRingEnvironment >> basicGroupSuperclass [ - - ^ self ringEnvironment ensureClassNamed: #MooseSpecializedGroup -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> basicTrait [ - - ^ self ringEnvironment ensureClassNamed: #Trait -] - { #category : 'initialization' } FmxMBRingEnvironment >> buildSlotsDefinitionsFor: properties existingClass: currentClass [ @@ -102,12 +89,6 @@ FmxMBRingEnvironment >> changesToApply [ ^ changesToApply ] -{ #category : 'accessing' } -FmxMBRingEnvironment >> classNamed: aClassName [ - - ^ self ringEnvironment ask behaviorNamed: aClassName -] - { #category : 'installing' } FmxMBRingEnvironment >> collectChangesToApply [ @@ -128,9 +109,7 @@ FmxMBRingEnvironment >> collectChangesToApply [ { #category : 'installing' } FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitDefinitions: traitDefinitions precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ - | slots existingClass realClass packageName tag change | - existingClass := self ringEnvironment ask behaviorNamed: className. - + | realClass packageName tag change | realClass := self class environment at: className ifAbsent: [ nil ]. packageName := realClass @@ -140,9 +119,6 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t ifNil: [ defaultTag ] ifNotNil: [ realClass packageTag name ]. - self validateProperties: properties. - slots := properties collect: [ :property | property asRGSlot ]. - change := FmxClassAddition new. change name: className; @@ -152,6 +128,7 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t traitDefinitions ifNotEmpty: [ change traits: (self traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass) ]. + self validateProperties: properties. change slots: (self buildSlotsDefinitionsFor: properties existingClass: realClass). changesToApply add: change. @@ -163,7 +140,7 @@ FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName t { #category : 'initialization' } FmxMBRingEnvironment >> createTraitNamed: traitName traitDefinitions: traitDefinitions precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ - | packageName tag realClass slots change | + | packageName tag realClass change | realClass := self class environment at: traitName ifAbsent: [ nil ]. packageName := realClass @@ -173,9 +150,6 @@ FmxMBRingEnvironment >> createTraitNamed: traitName traitDefinitions: traitDefin ifNil: [ defaultTag ] ifNotNil: [ realClass packageTag name ]. - self validateProperties: properties. - slots := properties collect: [ :property | property asRGSlot ]. - change := FmxTraitAddition new. change name: traitName; @@ -184,7 +158,9 @@ FmxMBRingEnvironment >> createTraitNamed: traitName traitDefinitions: traitDefin traitDefinitions ifNotEmpty: [ change traits: (self traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass) ]. - properties ifNotEmpty: [ change slots: (self buildSlotsDefinitionsFor: properties existingClass: realClass) ]. + properties ifNotEmpty: [ + self validateProperties: properties. + change slots: (self buildSlotsDefinitionsFor: properties existingClass: realClass) ]. changesToApply add: change. self ensurePackageNamed: packageName. @@ -200,24 +176,11 @@ FmxMBRingEnvironment >> ensurePackageNamed: packageName [ changesToApply add: (FmxPackageAddition named: packageName) ] -{ #category : 'testing' } -FmxMBRingEnvironment >> hasBehaviorNamed: aClassName [ - - ^ self ringEnvironment ask includesClassNamed: aClassName -] - { #category : 'initialization' } FmxMBRingEnvironment >> initialize [ super initialize. - changesToApply := OrderedCollection new. - ringEnvironment := RGEnvironment new. - ringEnvironment version: 7. - ringEnvironment ensureClassNamed: #FMOne. - ringEnvironment ensureClassNamed: #FMMany. - ringEnvironment ensureClassNamed: #FMMultivalueLink. - ringEnvironment ensureClassNamed: #FMMultiMultivalueLink. - ringEnvironment ensureClassNamed: #MooseSpecializedGroup. + changesToApply := OrderedCollection new ] { #category : 'installing' } @@ -270,12 +233,6 @@ FmxMBRingEnvironment >> recordRemovalOfGeneratedPackagesAndClasses [ thenDo: [ :class | (classesToGenerate includes: class name) ifFalse: [ changesToApply add: (FmxClassRemoval class: class) ] ] ] ] ] -{ #category : 'accessing' } -FmxMBRingEnvironment >> ringEnvironment [ - - ^ ringEnvironment -] - { #category : 'installing' } FmxMBRingEnvironment >> traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass [ "We need to collect the generated traits + the custom traits added by the user." diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index 962e92abe..0b8da0e9e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -23,7 +23,7 @@ FmxMBTrait >> allTraitGeneralizations [ { #category : 'accessing' } FmxMBTrait >> classGeneralization [ - ^ self builder environment basicTrait + ^ Trait ] { #category : 'accessing' } @@ -33,8 +33,8 @@ FmxMBTrait >> classGeneralization: anObject [ { #category : 'accessing' } FmxMBTrait >> defaultSuperclass [ - - ^ self builder environment basicTrait + + ^ self classGeneralization ] { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st index 1b79af87e..5a14aa5ab 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st @@ -20,14 +20,6 @@ FmxMBTypedProperty >> acceptVisitor: aVisitor [ ^ aVisitor visitTypedProperty: self. ] -{ #category : 'generating' } -FmxMBTypedProperty >> asRGSlot [ - - ^ (RGUnknownSlot named: self name asSymbol) expression: (self defaultValue - ifNil: [ #FMProperty ] - ifNotNil: [ :value | 'FMProperty defaultValue: ' , value printString ]) -] - { #category : 'accessing' } FmxMBTypedProperty >> defaultValue [ ^ defaultValue diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBImportingContextTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBImportingContextTest.class.st deleted file mode 100644 index b41b8d8a5..000000000 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBImportingContextTest.class.st +++ /dev/null @@ -1,69 +0,0 @@ -Class { - #name : 'FmxMBImportingContextTest', - #superclass : 'FmxMBTestCase', - #instVars : [ - 'access', - 'variable', - 'generatedAccess', - 'generatedVariable', - 'generatedMethod', - 'method', - 'generatedContext' - ], - #category : 'Famix-MetamodelBuilder-Tests-Tests', - #package : 'Famix-MetamodelBuilder-Tests', - #tag : 'Tests' -} - -{ #category : 'running' } -FmxMBImportingContextTest >> setUp [ - - super setUp. - - builder withFileImport. - - access := builder newClassNamed: #Access. - variable := builder newClassNamed: #Variable. - method := builder newClassNamed: #Method. - - builder generate. - - generatedAccess := builder testingEnvironment ask classNamed: - #TstAccess. - generatedVariable := builder testingEnvironment ask classNamed: - #TstVariable. - generatedMethod := builder testingEnvironment ask classNamed: - #TstMethod. - - generatedContext := builder testingEnvironment ask classNamed: - #TstImportingContext -] - -{ #category : 'tests' } -FmxMBImportingContextTest >> testNotGenerated [ - - builder := FamixMetamodelBuilder forTesting. - - access := builder newClassNamed: #Access. - variable := builder newClassNamed: #Variable. - method := builder newClassNamed: #Method. - - builder generate. - - generatedContext := builder testingEnvironment ask classNamed: #TstImportingContext. - self assert: generatedContext isNil. - -] - -{ #category : 'tests' } -FmxMBImportingContextTest >> testNotGeneratedForEmptyBuilder [ - - builder := FamixMetamodelBuilder forTesting. - builder withFileImport. - - builder generate. - - generatedContext := builder testingEnvironment ask classNamed: - #TstImportingContext. - self assert: generatedContext isNil -] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st index e1db31506..ca382db96 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st @@ -39,20 +39,6 @@ FmxMBTraitTest >> testGenerateRemotesGeneratesRelations [ self assert: instanceOfB relationToA equals: instanceOfA. ] -{ #category : 'tests' } -FmxMBTraitTest >> testMultipleTraits [ - - builder newTraitNamed: #TComment. - builder newTraitNamed: #TMethod. - builder newTraitNamed: #TPackage. - - builder generate. - builder testingEnvironment ask classNamed: 'TstTComment'. - builder testingEnvironment ask classNamed: 'TstTMethod'. - builder testingEnvironment ask classNamed: 'TstTPackage'. - -] - { #category : 'tests' } FmxMBTraitTest >> testTestingMethods [ From dd9149124af4120c994d4ed0d84b8efbc96e834e Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 28 Apr 2026 17:54:20 +0200 Subject: [PATCH 063/121] Fix last generation bug + remove dead code --- ...otUseSymbolsToAccessLocalEntities.class.st | 53 ------------------- .../FmxMBBehavior.class.st | 10 ++-- 2 files changed, 5 insertions(+), 58 deletions(-) delete mode 100644 src/Famix-MetamodelBuilder-Core/FamixShouldNotUseSymbolsToAccessLocalEntities.class.st diff --git a/src/Famix-MetamodelBuilder-Core/FamixShouldNotUseSymbolsToAccessLocalEntities.class.st b/src/Famix-MetamodelBuilder-Core/FamixShouldNotUseSymbolsToAccessLocalEntities.class.st deleted file mode 100644 index 91fef3f64..000000000 --- a/src/Famix-MetamodelBuilder-Core/FamixShouldNotUseSymbolsToAccessLocalEntities.class.st +++ /dev/null @@ -1,53 +0,0 @@ -Class { - #name : 'FamixShouldNotUseSymbolsToAccessLocalEntities', - #superclass : 'Warning', - #instVars : [ - 'symbol', - 'generator' - ], - #category : 'Famix-MetamodelBuilder-Core-Exception', - #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Exception' -} - -{ #category : 'signalling' } -FamixShouldNotUseSymbolsToAccessLocalEntities class >> signalFor: aSymbol [ - self new - symbol: aSymbol; - signal -] - -{ #category : 'signalling' } -FamixShouldNotUseSymbolsToAccessLocalEntities class >> signalFor: aSymbol from: aGenerator [ - self new - symbol: aSymbol; - generator: aGenerator; - signal -] - -{ #category : 'accessing' } -FamixShouldNotUseSymbolsToAccessLocalEntities >> generator [ - ^ generator -] - -{ #category : 'accessing' } -FamixShouldNotUseSymbolsToAccessLocalEntities >> generator: anObject [ - generator := anObject -] - -{ #category : 'accessing' } -FamixShouldNotUseSymbolsToAccessLocalEntities >> messageText [ - ^ 'Should not use a symbol to access to local entity named: ' , symbol , ' in: ' , generator class name - , - '. In a Famix generator, local entities should be accessed via a direct reference and remote entity should be accessed via symbol, or via a direct reference in case of conflict in multiple sub metamodels.' -] - -{ #category : 'accessing' } -FamixShouldNotUseSymbolsToAccessLocalEntities >> symbol [ - ^ symbol -] - -{ #category : 'accessing' } -FamixShouldNotUseSymbolsToAccessLocalEntities >> symbol: anObject [ - symbol := anObject -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 0967f98f5..96550dfa3 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -113,11 +113,11 @@ FmxMBBehavior >> allTraitDefinitions [ | methodsToRemove | methodsToRemove := self additionalProperties at: #methodsToRemoveFromTraitComposition ifAbsent: [ Dictionary new ]. - (traits collect: [ :trait | - methodsToRemove - at: trait fullName - ifPresent: [ :methods | trait fullName , ' - {' , ('. ' join: (methods collect: #printString)) , '}' ] - ifAbsent: [ trait fullName ] ]) sorted ] + (traits sorted: #fullName ascending) collect: [ :trait | + methodsToRemove + at: trait fullName + ifPresent: [ :methods | '(' , trait fullName , ' - {' , ('. ' join: (methods collect: #printString)) , '})' ] + ifAbsent: [ trait fullName ] ] ] ] { #category : 'accessing' } From 52b470e1b1dbda0f660ab1d74249033fa2382782 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Wed, 29 Apr 2026 01:19:43 +0200 Subject: [PATCH 064/121] Add more printing methods to help debug --- .../FmxBehavioralAddition.class.st | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st index 275e8c4c7..8578bf42e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st @@ -90,8 +90,21 @@ FmxBehavioralAddition >> printOn: aStream [ super printOn: aStream. aStream - nextPutAll: '['; - nextPutAll: (name ifNil: [ 'unnumed' ]); + nextPutAll: '[ name: '; + nextPutAll: (name ifNil: [ 'unnumed' ]). + slots ifNotNil: [ + aStream + nextPutAll: ' slots: '; + print: slots ]. + traits ifNotNil: [ + aStream + nextPutAll: ' uses:  '; + print: traits ]. + aStream + nextPutAll: ' package: '; + nextPutAll: package; + nextPutAll: ' tag: '; + nextPutAll: tag; nextPutAll: ']' ] From 688df105e63427f755eae7da6a2be000884252fd Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Wed, 29 Apr 2026 02:53:55 +0200 Subject: [PATCH 065/121] Remove a cyclic dependency --- .../TMooseGroupDependencyQueries.trait.st | 5 +-- src/Moose-Core/MooseAbstractGroup.class.st | 38 ++++++++++++++++++- 2 files changed, 38 insertions(+), 5 deletions(-) rename src/{Moose-Query => Famix-Deprecated}/TMooseGroupDependencyQueries.trait.st (95%) diff --git a/src/Moose-Query/TMooseGroupDependencyQueries.trait.st b/src/Famix-Deprecated/TMooseGroupDependencyQueries.trait.st similarity index 95% rename from src/Moose-Query/TMooseGroupDependencyQueries.trait.st rename to src/Famix-Deprecated/TMooseGroupDependencyQueries.trait.st index 9eafa1689..db7f59725 100644 --- a/src/Moose-Query/TMooseGroupDependencyQueries.trait.st +++ b/src/Famix-Deprecated/TMooseGroupDependencyQueries.trait.st @@ -5,9 +5,8 @@ For more informations: https://moosequery.ferlicot.fr/ " Trait { #name : 'TMooseGroupDependencyQueries', - #category : 'Moose-Query-Traits', - #package : 'Moose-Query', - #tag : 'Traits' + #category : 'Famix-Deprecated', + #package : 'Famix-Deprecated' } { #category : 'querying' } diff --git a/src/Moose-Core/MooseAbstractGroup.class.st b/src/Moose-Core/MooseAbstractGroup.class.st index 342fef91d..5c05ba895 100644 --- a/src/Moose-Core/MooseAbstractGroup.class.st +++ b/src/Moose-Core/MooseAbstractGroup.class.st @@ -8,8 +8,6 @@ It stores the contained entities in a storage variable that points to a MooseGro Class { #name : 'MooseAbstractGroup', #superclass : 'MooseObject', - #traits : 'TMooseGroupDependencyQueries', - #classTraits : 'TMooseGroupDependencyQueries classTrait', #instVars : [ 'storage' ], @@ -684,6 +682,42 @@ MooseAbstractGroup >> printOn: aStream [ aStream nextPut: $) ] +{ #category : 'querying' } +MooseAbstractGroup >> queryAllIncoming [ + + ^ MooseIncomingQueryResult on: self withAll: (self entities flatCollect: [ :m | m queryAllIncoming ]) +] + +{ #category : 'querying' } +MooseAbstractGroup >> queryAllOutgoing [ + + ^ MooseOutgoingQueryResult on: self withAll: (self entities flatCollect: [ :m | m queryAllOutgoing ]) +] + +{ #category : 'querying' } +MooseAbstractGroup >> queryIncoming: aFAMIXClassAssociation [ + + ^ MooseIncomingQueryResult on: self withAll: (self entities flatCollect: [ :m | m queryIncoming: aFAMIXClassAssociation ]) +] + +{ #category : 'querying' } +MooseAbstractGroup >> queryLocalIncoming: aFAMIXClassAssociation [ + + ^ MooseIncomingQueryResult on: self withAll: (self entities flatCollect: [ :m | m queryLocalIncoming: aFAMIXClassAssociation ]) +] + +{ #category : 'querying' } +MooseAbstractGroup >> queryLocalOutgoing: aFAMIXClassAssociation [ + + ^ MooseOutgoingQueryResult on: self withAll: (self entities flatCollect: [ :m | m queryLocalOutgoing: aFAMIXClassAssociation ]) +] + +{ #category : 'querying' } +MooseAbstractGroup >> queryOutgoing: aFAMIXClassAssociation [ + + ^ MooseOutgoingQueryResult on: self withAll: (self entities flatCollect: [ :m | m queryOutgoing: aFAMIXClassAssociation ]) +] + { #category : 'groups' } MooseAbstractGroup >> rawAllUsing: aTrait [ "This is an optimization of #allUsing: when we do not need to manipulate a MooseGroup as result." From 34cf4a59c6cbba9aa2ff67fd3fc8170c8d485dfc Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Thu, 30 Apr 2026 19:19:17 +0200 Subject: [PATCH 066/121] Remove dead code FamixMetamodelBuilder is saving relations but do not use them fhor anything. Removing this dead code --- .../FamixMetamodelBuilder.class.st | 16 ---------------- .../FmxMBRelation.class.st | 9 --------- .../FmxMBRelationSideTrait.trait.st | 4 ---- .../FmxMBRelationTest.class.st | 15 --------------- 4 files changed, 44 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index aee6446bb..27dca7216 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -51,7 +51,6 @@ Class { 'environment', 'classes', 'traits', - 'relations', 'generator', 'testingSelectorsMapping', 'configuration', @@ -353,7 +352,6 @@ FamixMetamodelBuilder >> initialize [ classes := OrderedCollection new. traits := OrderedCollection new. extensionBehaviors := OrderedCollection new. - relations := OrderedCollection new. testingSelectorsMapping := Dictionary new. withoutBuilder := false ] @@ -441,7 +439,6 @@ FamixMetamodelBuilder >> newRelation [ | aRelation | aRelation := FmxMBRelation new. aRelation builder: self. - self relations add: aRelation. ^ aRelation ] @@ -536,19 +533,6 @@ FamixMetamodelBuilder >> printOn: aStream [ nextPut: $) ] ] -{ #category : 'accessing' } -FamixMetamodelBuilder >> relations [ - - ^ relations -] - -{ #category : 'accessing' } -FamixMetamodelBuilder >> relations: anObject [ - - - relations := anObject -] - { #category : 'accessing' } FamixMetamodelBuilder >> reservedKeywords [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st index d34837794..5111df5f0 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st @@ -24,15 +24,6 @@ FmxMBRelation >> builder: anObject [ builder := anObject ] -{ #category : 'accessing' } -FmxMBRelation >> cardinalityString [ - ^ String - streamContents: [ :s | - self to isMany ifTrue: [ s nextPutAll: '*' ] ifFalse: [ s nextPutAll: '1' ]. - s nextPutAll: '..'. - self from isMany ifTrue: [ s nextPutAll: '*' ] ifFalse: [ s nextPutAll: '1' ] ] -] - { #category : 'accessing' } FmxMBRelation >> from [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st index 3ba216c71..bdea88d4e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st @@ -209,10 +209,6 @@ FmxMBRelationSideTrait >> relationFrom: ownSide to: oppositeSide [ oppositeSide: oppositeSide; builder: self builder; yourself. - - ownSide remoteBuilderDo: [ :aRemoteBuilder | - aRemoteBuilder = self builder - ifFalse: [ aRemoteBuilder relations add: aRelation ] ]. ownSide relation: aRelation. oppositeSide relation: aRelation. diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBRelationTest.class.st index b62e12157..d17115ea7 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBRelationTest.class.st @@ -6,21 +6,6 @@ Class { #tag : 'Tests' } -{ #category : 'tests' } -FmxMBRelationTest >> testCardinalityString [ - - | tClass tMethod relation | - tClass := builder newTraitNamed: #TClass. - tMethod := builder newTraitNamed: #TMethod. - - relation := (tClass <>-* (tMethod property: #methodClass)). - self assert: relation cardinalityString equals: '1..*'. - relation := (tClass - (tMethod property: #methodClass)). - self assert: relation cardinalityString equals: '1..1'. - relation := (tClass *-* tMethod). - self assert: relation cardinalityString equals: '*..*'. -] - { #category : 'tests' } FmxMBRelationTest >> testShortCardinalityString [ From b035f897221fac1b62eb1f354bde80d160e2b033 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Fri, 1 May 2026 00:53:14 +0200 Subject: [PATCH 067/121] Simplify FmxMBRelation by removing dead code --- .../FamixMetamodelBuilder.class.st | 9 ----- .../FmxMBRelation.class.st | 33 +------------------ .../FmxMBRelationSideTrait.trait.st | 20 +++++------ 3 files changed, 9 insertions(+), 53 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index 27dca7216..a7a1493aa 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -433,15 +433,6 @@ FamixMetamodelBuilder >> newClassNamed: aClassName comment: aString [ yourself ] -{ #category : 'initialization' } -FamixMetamodelBuilder >> newRelation [ - - | aRelation | - aRelation := FmxMBRelation new. - aRelation builder: self. - ^ aRelation -] - { #category : 'initialization' } FamixMetamodelBuilder >> newTrait [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st index 5111df5f0..d814b41eb 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st @@ -6,40 +6,19 @@ Class { #superclass : 'Object', #instVars : [ 'side', - 'oppositeSide', - 'builder' + 'oppositeSide' ], #category : 'Famix-MetamodelBuilder-Core-Implementation', #package : 'Famix-MetamodelBuilder-Core', #tag : 'Implementation' } -{ #category : 'accessing' } -FmxMBRelation >> builder [ - ^ builder -] - -{ #category : 'accessing' } -FmxMBRelation >> builder: anObject [ - builder := anObject -] - { #category : 'accessing' } FmxMBRelation >> from [ ^ side ] -{ #category : 'accessing' } -FmxMBRelation >> from: aBlock [ - - side := (FmxMBRelationSide new - relation: self; - builder: self builder; - yourself). - aBlock cull: side. -] - { #category : 'accessing' } FmxMBRelation >> left [ @@ -104,13 +83,3 @@ FmxMBRelation >> to [ ^ oppositeSide ] - -{ #category : 'accessing' } -FmxMBRelation >> to: aBlock [ - - oppositeSide := (FmxMBRelationSide new - relation: self; - builder: self builder; - yourself). - aBlock cull: oppositeSide. -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st index bdea88d4e..b7624b32b 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st @@ -203,19 +203,15 @@ FmxMBRelationSideTrait >> propertyName [ FmxMBRelationSideTrait >> relationFrom: ownSide to: oppositeSide [ | aRelation | - - aRelation := self builder newRelation - side: ownSide; - oppositeSide: oppositeSide; - builder: self builder; - yourself. - - ownSide relation: aRelation. + aRelation := FmxMBRelation new + side: ownSide; + oppositeSide: oppositeSide; + yourself. + + ownSide relation: aRelation. oppositeSide relation: aRelation. - ownSide relatedClass ifNotNil: [ - ownSide relatedClass addRelation: aRelation with: oppositeSide relatedEntity ]. - - ^ aRelation + ownSide relatedClass ifNotNil: [ ownSide relatedClass addRelation: aRelation with: oppositeSide relatedEntity ]. + ^ aRelation ] From 3074f83cc66d9dc01884d446dca271fc48fb5bce Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Fri, 1 May 2026 02:44:58 +0200 Subject: [PATCH 068/121] Clean properties and relations management of FmxMBBehavioral FmxMBBehavioral has a variable #properties but it hold properties and relations. I updated the API to let the user know if he manipulate properties, relations or both --- .../FamixMetamodelGenerator.class.st | 4 +- .../FmxMBBehavior.class.st | 190 ++++++++++-------- .../FmxMBClass.class.st | 4 +- .../FmxMBImportingContext.class.st | 2 +- .../FmxMBPlantTextVisitor.class.st | 67 +++--- .../FmxMBPrintVisitor.class.st | 3 +- .../FmxMBRelationSide.class.st | 6 + .../FmxMBTrait.class.st | 7 +- .../FmxMBWalkerVisitor.class.st | 8 +- .../FmxMBVisitorTrait.class.st | 2 +- 10 files changed, 155 insertions(+), 138 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st index 26f5d59ef..59727e45b 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st @@ -215,9 +215,9 @@ FamixMetamodelGenerator >> apply: aTrait on: aGeneratedClass oppositeOn: another Only works if aTrait has excatly 1 opposite (slot)" | oppositeTrait | - ((builder getTraitNamed: aTrait) properties size = 1) ifFalse: [ self error: '#apply:on:oppositeOn: only accept traits with a unique opposite' ]. + ((builder getTraitNamed: aTrait) propertiesAndRelations size = 1) ifFalse: [ self error: '#apply:on:oppositeOn: only accept traits with a unique opposite' ]. - oppositeTrait := (builder getTraitNamed: aTrait) properties anyOne relation side relatedClass name. + oppositeTrait := (builder getTraitNamed: aTrait) propertiesAndRelations anyOne relation side relatedClass name. self apply: aTrait on: aGeneratedClass oppositeTrait: oppositeTrait on: anotherGeneratedClass ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 96550dfa3..27ad77421 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -5,12 +5,12 @@ Class { #classTraits : 'FmxMBRelationSideTrait classTrait', #instVars : [ 'relations', - 'properties', 'tag', 'prefix', 'packageName', 'testingSelectors', - 'traitGeneralizations' + 'traitGeneralizations', + 'propertiesAndRelations' ], #category : 'Famix-MetamodelBuilder-Core-Implementation', #package : 'Famix-MetamodelBuilder-Core', @@ -96,14 +96,21 @@ FmxMBBehavior >> allLocalTraits [ FmxMBBehavior >> allProperties [ "Return my properties and the properties from my traits." - ^ (self allTransitiveTraits flatCollect: [ :trait | trait properties ]) , self properties + ^ self allPropertiesAndRelations reject: #isRelation +] + +{ #category : 'accessing' } +FmxMBBehavior >> allPropertiesAndRelations [ + "Return my properties and the properties from my traits." + + ^ (self allTransitiveTraits flatCollect: [ :trait | trait propertiesAndRelations ]) , self propertiesAndRelations ] { #category : 'accessing' } FmxMBBehavior >> allRelations [ "Return my relations and the relations from my traits." - ^ (self allTransitiveTraits flatCollect: [ :trait | trait relations ]) , self relations + ^ self allPropertiesAndRelations select: #isRelation ] { #category : 'accessing' } @@ -153,87 +160,83 @@ FmxMBBehavior >> commentWithRelations [ "It is sometimes hard to find our way through all the methods and relations of a moose entity. To help, I add information in the class comments about the different kind of relations in the model." ^ String streamContents: [ :aStream | - aStream nextPutAll: self comment. - self comment ifNotEmpty: [ - aStream - cr; - cr ]. - self allRelations ifNotEmpty: [ :rels | - aStream - nextPutAll: '## Relations + aStream nextPutAll: self comment. + self comment ifNotEmpty: [ + aStream + cr; + cr ]. + self allRelations ifNotEmpty: [ :rels | + aStream + nextPutAll: '## Relations ======================'; - cr; - cr. - OrderedDictionary new - at: 'Parents' put: [ :relation | relation side isContainer ]; - at: 'Children' put: [ :relation | relation oppositeSide isContainer ]; - at: 'Outgoing dependencies' put: [ :relation | relation oppositeSide isSource ]; - at: 'Incoming dependencies' put: [ :relation | relation oppositeSide isTarget ]; - at: 'Association source' put: [ :relation | relation side isSource ]; - at: 'Association target' put: [ :relation | relation side isTarget ]; - at: 'Other' put: [ :relation | - relation side isTarget not and: [ - relation side isSource not and: [ - relation side isContainer not and: [ - relation oppositeSide isTarget not and: [ relation oppositeSide isSource not and: [ relation oppositeSide isContainer not ] ] ] ] ] ]; - keysAndValuesDo: [ :relationKind :selectionBlock | - (rels select: selectionBlock) ifNotEmpty: [ :parents | - aStream - nextPutAll: '### '; - nextPutAll: relationKind; - cr; - nextPutAll: '| Relation | Origin | Opposite | Type | Comment |'; - cr; - nextPutAll: '|---|'; - cr. - (parents sorted: [ :parent | parent side generationStrategy relationSide name ] ascending) do: [ :parent | - | strategy | - strategy := parent side generationStrategy. - - aStream - nextPutAll: '| `'; - nextPutAll: strategy relationSide name; - nextPutAll: '` | `'; - nextPutAll: strategy relationSide type; - nextPutAll: '` | `'; - nextPutAll: strategy relationSide oppositeName; - nextPutAll: '` | `'; - nextPutAll: strategy relationSide oppositeType; - nextPutAll: '` | '; - nextPutAll: (strategy relationSide comment - copyWithRegex: (String with: Character cr with: $+) - matchesReplacedWith: ' '); - nextPut: $|; - cr ]. - - aStream cr ] ]. - aStream cr ]. - - (self allProperties reject: [ :p | p isRelation ]) ifNotEmpty: [ :props | - aStream - nextPutAll: '## Properties + cr; + cr. + OrderedDictionary new + at: 'Parents' put: [ :relation | relation isContainer ]; + at: 'Children' put: [ :relation | relation oppositeSide isContainer ]; + at: 'Outgoing dependencies' put: [ :relation | relation oppositeSide isSource ]; + at: 'Incoming dependencies' put: [ :relation | relation oppositeSide isTarget ]; + at: 'Association source' put: [ :relation | relation isSource ]; + at: 'Association target' put: [ :relation | relation isTarget ]; + at: 'Other' put: [ :relation | + relation isTarget not and: [ + relation isSource not and: [ + relation isContainer not and: [ + relation oppositeSide isTarget not and: [ relation oppositeSide isSource not and: [ relation oppositeSide isContainer not ] ] ] ] ] ]; + keysAndValuesDo: [ :relationKind :selectionBlock | + (rels select: selectionBlock) ifNotEmpty: [ :parents | + aStream + nextPutAll: '### '; + nextPutAll: relationKind; + cr; + nextPutAll: '| Relation | Origin | Opposite | Type | Comment |'; + cr; + nextPutAll: '|---|'; + cr. + (parents sorted: [ :parent | parent generationStrategy relationSide name ] ascending) do: [ :parent | + | strategy | + strategy := parent generationStrategy. + + aStream + nextPutAll: '| `'; + nextPutAll: strategy relationSide name; + nextPutAll: '` | `'; + nextPutAll: strategy relationSide type; + nextPutAll: '` | `'; + nextPutAll: strategy relationSide oppositeName; + nextPutAll: '` | `'; + nextPutAll: strategy relationSide oppositeType; + nextPutAll: '` | '; + nextPutAll: (strategy relationSide comment copyWithRegex: (String with: Character cr with: $+) matchesReplacedWith: ' '); + nextPut: $|; + cr ]. + + aStream cr ] ]. + aStream cr ]. + + self allProperties ifNotEmpty: [ :props | + aStream + nextPutAll: '## Properties ======================'; - cr; - cr; - nextPutAll: '| Name | Type | Default value | Comment |'; - cr; - nextPutAll: '|---|'; - cr. - - (props sorted: #name ascending) do: [ :property | - aStream - nextPutAll: '| `'; - nextPutAll: property name; - nextPutAll: '` | `'; - nextPutAll: property propertyType; - nextPutAll: '` | '; - print: property defaultValue; - nextPutAll: ' | '; - nextPutAll: (property comment - copyWithRegex: (String with: Character cr with: $+) - matchesReplacedWith: ' '); - nextPut: $|; - cr ] ] ] + cr; + cr; + nextPutAll: '| Name | Type | Default value | Comment |'; + cr; + nextPutAll: '|---|'; + cr. + + (props sorted: #name ascending) do: [ :property | + aStream + nextPutAll: '| `'; + nextPutAll: property name; + nextPutAll: '` | `'; + nextPutAll: property propertyType; + nextPutAll: '` | '; + print: property defaultValue; + nextPutAll: ' | '; + nextPutAll: (property comment copyWithRegex: (String with: Character cr with: $+) matchesReplacedWith: ' '); + nextPut: $|; + cr ] ] ] ] { #category : 'settings - default' } @@ -277,7 +280,8 @@ FmxMBBehavior >> generate [ { #category : 'generating' } FmxMBBehavior >> generateAccessors [ - self properties do: [ :each | each generateAccessorsIn: self ] + + self propertiesAndRelations do: [ :each | each generateAccessorsIn: self ] ] { #category : 'generating' } @@ -342,7 +346,7 @@ FmxMBBehavior >> inheritsFromTrait: aTrait without: aCollection [ FmxMBBehavior >> initialize [ super initialize. relations := OrderedCollection new. - properties := OrderedCollection new. + propertiesAndRelations := OrderedCollection new. prefix := ''. packageName := ''. testingSelectors := Set new @@ -441,7 +445,14 @@ FmxMBBehavior >> printOn: aStream [ { #category : 'accessing' } FmxMBBehavior >> properties [ - ^ properties + + ^ propertiesAndRelations reject: #isRelation +] + +{ #category : 'accessing' } +FmxMBBehavior >> propertiesAndRelations [ + + ^ propertiesAndRelations ] { #category : 'generating' } @@ -472,7 +483,7 @@ FmxMBBehavior >> property: propertyName type: aTypeName [ propertyType: aTypeName asSymbol; yourself. - self properties add: aSide. + self propertiesAndRelations add: aSide. ^ aSide ] @@ -489,7 +500,7 @@ FmxMBBehavior >> property: propertyName type: aTypeName defaultValue: aValue [ defaultValue: aValue; yourself. - self properties add: aSide. + self propertiesAndRelations add: aSide. ^ aSide ] @@ -512,7 +523,8 @@ FmxMBBehavior >> relations [ { #category : 'accessing' } FmxMBBehavior >> sides [ - ^ self properties + + ^ self propertiesAndRelations ] { #category : 'name conversion' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index a597aeb9e..ea2c4d5ab 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -69,7 +69,7 @@ FmxMBClass >> generate [ superclass: superclassName traitDefinitions: self allTraitDefinitions precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) - properties: (self properties select: #producesSlot) + properties: (self propertiesAndRelations select: #producesSlot) in: self packageName tag: self tag comment: self commentWithRelations. @@ -179,7 +179,7 @@ FmxMBClass >> generateRemotes [ self class environment at: self fullName ifAbsent: [ ^ self ]. - (self properties select: #isRemote) do: [ :each | each generateAccessorsIn: self ] + (self propertiesAndRelations select: #isRemote) do: [ :each | each generateAccessorsIn: self ] ] { #category : 'generating-methods' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index c876ac733..581e13700 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -58,7 +58,7 @@ FmxMBImportingContext >> generate [ superclass: superclass traitDefinitions: self allTraitDefinitions precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) - properties: (self properties select: #producesSlot) + properties: (self propertiesAndRelations select: #producesSlot) in: self packageName tag: self tag comment: self comment. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st index e64a3242e..eecbe1ae4 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st @@ -205,18 +205,18 @@ FmxMBPlantTextVisitor >> visitTrait: aTrait [ | behaviorKey | withAllTraits - ifFalse: [ (self checkTrait: aTrait) ifFalse: [^ self]] + ifFalse: [ (self checkTrait: aTrait) ifFalse: [ ^ self ] ] ifTrue: [ self recordGeneralizationsForTrait: aTrait ]. behaviorKey := self ensureBehaviorNameFor: aTrait. - (self onlySingleUserOf: aTrait) ifTrue: [ self writeSingleUseOf: aTrait.]. + (self onlySingleUserOf: aTrait) ifTrue: [ self writeSingleUseOf: aTrait ]. self writeTraitBeginningOf: aTrait with: behaviorKey. - aTrait properties do: [ :each | each acceptVisitor: self ]. + aTrait propertiesAndRelations do: [ :each | each acceptVisitor: self ]. - self writeTraitEnd. + self writeTraitEnd ] { #category : 'visiting' } @@ -245,38 +245,40 @@ FmxMBPlantTextVisitor >> withoutAllTraits [ FmxMBPlantTextVisitor >> writeClass: aClass mergingTraits: mergesTraits [ | behaviorKey displayedName | - displayedName := aClass name. mergesTraits - ifTrue: [ - (self behaviorNameOrNilFor: aClass traitGeneralizations first) - ifNil: [ behaviorKey := self ensureBehaviorNameFor: aClass. - self mergeTrait: aClass traitGeneralizations first withBehaviorNamed: behaviorKey. ] - ifNotNil: [ :key | - behaviorKey := key. - self mergeTrait: aClass withBehaviorNamed: behaviorKey. ]. - - displayedName := displayedName, ' / ', aClass traitGeneralizations first name ] - ifFalse: [ behaviorKey := self ensureBehaviorNameFor: aClass]. + ifTrue: [ + (self behaviorNameOrNilFor: aClass traitGeneralizations first) + ifNil: [ + behaviorKey := self ensureBehaviorNameFor: aClass. + self mergeTrait: aClass traitGeneralizations first withBehaviorNamed: behaviorKey ] + ifNotNil: [ :key | + behaviorKey := key. + self mergeTrait: aClass withBehaviorNamed: behaviorKey ]. + + displayedName := displayedName , ' / ' , aClass traitGeneralizations first name ] + ifFalse: [ behaviorKey := self ensureBehaviorNameFor: aClass ]. - stream + stream nextPutAll: 'class '; nextPutAll: behaviorKey; nextPutAll: ' as "'; nextPutAll: displayedName; - nextPutAll: '" {'; cr. + nextPutAll: '" {'; + cr. - aClass properties do: [ :each | each acceptVisitor: self ]. - - mergesTraits ifTrue: [ - | defs | - defs := typedProperties select: [ :each | each key = aClass traitGeneralizations first ]. - defs do: [ :assoc | - stream nextPutAll: assoc value ] ]. + aClass propertiesAndRelations do: [ :each | each acceptVisitor: self ]. - stream nextPutAll: '}'; cr; cr. - + mergesTraits ifTrue: [ + | defs | + defs := typedProperties select: [ :each | each key = aClass traitGeneralizations first ]. + defs do: [ :assoc | stream nextPutAll: assoc value ] ]. + + stream + nextPutAll: '}'; + cr; + cr ] { #category : 'relations' } @@ -334,13 +336,14 @@ FmxMBPlantTextVisitor >> writeRelations [ { #category : 'writing' } FmxMBPlantTextVisitor >> writeSingleUseOf: aTrait [ + | savedStream | - savedStream := stream. - stream := String new writeStream. - aTrait properties do: [ :each | each acceptVisitor: self ]. - typedProperties add: aTrait -> stream contents. - stream := savedStream. - ^ self + savedStream := stream. + stream := String new writeStream. + aTrait propertiesAndRelations do: [ :each | each acceptVisitor: self ]. + typedProperties add: aTrait -> stream contents. + stream := savedStream. + ^ self ] { #category : 'writing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBPrintVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBPrintVisitor.class.st index dd8971893..1f0cbbfd8 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBPrintVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBPrintVisitor.class.st @@ -18,8 +18,7 @@ Class { { #category : 'as yet unclassified' } FmxMBPrintVisitor >> prepareForPropertiesIn: aClassOrTrait [ - (aClassOrTrait properties isNotEmpty or: [ - aClassOrTrait relations isNotEmpty ]) ifFalse: [ ^ self ]. + aClassOrTrait propertiesAndRelations ifEmpty: [ ^ self ]. Transcript cr; diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st index 34aacfd84..7c4c64cb8 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st @@ -210,6 +210,12 @@ FmxMBRelationSide >> oppositeName [ ^ self otherSide name asSymbol ] +{ #category : 'accessing' } +FmxMBRelationSide >> oppositeSide [ + + ^ self otherSide +] + { #category : 'accessing' } FmxMBRelationSide >> oppositeType [ ^ (self otherSide builder configuration prefix , self otherSide relatedEntityName) asSymbol diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index 0b8da0e9e..c28b6de05 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -57,7 +57,7 @@ FmxMBTrait >> generate [ createTraitNamed: self fullName traitDefinitions: self allTraitDefinitions precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) - properties: (self properties select: #producesSlot) + properties: (self propertiesAndRelations select: #producesSlot) in: self packageName tag: self tag comment: self commentWithRelations. @@ -76,7 +76,8 @@ FmxMBTrait >> generateRemotes [ | aTrait | aTrait := self class environment at: self fullName ifAbsent: [ ^ self ]. - (self properties select: [ :prop | prop isRemote and: [ (aTrait localSelectors includes: prop name) not ] ]) do: [ :each | each generateAccessorsIn: self ] + (self propertiesAndRelations select: [ :prop | prop isRemote and: [ (aTrait localSelectors includes: prop name) not ] ]) do: [ :each | + each generateAccessorsIn: self ] ] { #category : 'testing' } @@ -104,5 +105,5 @@ FmxMBTrait >> propertyName [ { #category : 'accessing' } FmxMBTrait >> removeRelationSide: aRelationSide [ - properties remove: aRelationSide ifAbsent: [ ]. + propertiesAndRelations remove: aRelationSide ifAbsent: [ ]. ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBWalkerVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBWalkerVisitor.class.st index 84f5e668c..4b74d2772 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBWalkerVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBWalkerVisitor.class.st @@ -45,9 +45,7 @@ FmxMBWalkerVisitor >> visitClass: aClass [ "Visit all properties of aClass" self prepareForPropertiesIn: aClass. - aClass properties - do: [ :each | each acceptVisitor: self ] - separatedBy: [ self separateProperties ] + aClass propertiesAndRelations do: [ :each | each acceptVisitor: self ] separatedBy: [ self separateProperties ] ] { #category : 'visiting' } @@ -55,7 +53,5 @@ FmxMBWalkerVisitor >> visitTrait: aTrait [ "visit all properties of aTrait" self prepareForPropertiesIn: aTrait. - aTrait properties - do: [ :each | each acceptVisitor: self ] - separatedBy: [ self separateProperties ] + aTrait propertiesAndRelations do: [ :each | each acceptVisitor: self ] separatedBy: [ self separateProperties ] ] diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index 4f56cacf3..dd79ddbcb 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -32,7 +32,7 @@ FmxMBVisitorTrait >> generate [ createTraitNamed: self fullName asSymbol traitDefinitions: self allTraitDefinitions precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) - properties: (self properties select: #producesSlot) + properties: (self propertiesAndRelations select: #producesSlot) in: self packageName tag: self tag comment: self comment. From 0623311f78611d558675d5c939b1a1a29f1250f8 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Fri, 1 May 2026 02:50:45 +0200 Subject: [PATCH 069/121] FmxMBBehavior should not duplicate relations This class saves relations 2 times. Once in #relations and one in #propertiesAndRelations. This change removes this redoundancy --- .../FmxMBBehavior.class.st | 35 +++++++------------ .../FmxMBClass.class.st | 4 ++- .../FmxMBRelationSideTrait.trait.st | 2 -- .../FmxMBVisitorTrait.class.st | 18 +++++----- 4 files changed, 24 insertions(+), 35 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 27ad77421..e4034a35c 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -4,7 +4,6 @@ Class { #traits : 'FmxMBRelationSideTrait', #classTraits : 'FmxMBRelationSideTrait classTrait', #instVars : [ - 'relations', 'tag', 'prefix', 'packageName', @@ -59,15 +58,6 @@ FmxMBBehavior >> addMethod: code protocol: protocol [ ^ self addMethod: code classSide: false protocol: protocol ] -{ #category : 'accessing' } -FmxMBBehavior >> addRelation: aRelation with: anotherClass [ - - self relations add: aRelation. - anotherClass relations add: aRelation oppositeRelation - - -] - { #category : 'accessing' } FmxMBBehavior >> addRelationSide: aRelationSide [ @@ -287,19 +277,17 @@ FmxMBBehavior >> generateAccessors [ { #category : 'generating' } FmxMBBehavior >> generateAddToCollection [ - self relations - collect: #side - thenDo: [ :side | - side isMany ifTrue: [ - | sideName | - sideName := side name. - self - addMethod: ('add{1}: anObject + self relations do: [ :side | + side isMany ifTrue: [ + | sideName | + sideName := side name. + self + addMethod: ('add{1}: anObject ^ self {2} add: anObject' format: { - sideName capitalized asSingular. - sideName }) - protocol: #adding ] ] + sideName capitalized asSingular. + sideName }) + protocol: #adding ] ] ] { #category : 'generating' } @@ -344,8 +332,8 @@ FmxMBBehavior >> inheritsFromTrait: aTrait without: aCollection [ { #category : 'initialization' } FmxMBBehavior >> initialize [ + super initialize. - relations := OrderedCollection new. propertiesAndRelations := OrderedCollection new. prefix := ''. packageName := ''. @@ -518,7 +506,8 @@ FmxMBBehavior >> relatedEntityName [ { #category : 'accessing' } FmxMBBehavior >> relations [ - ^ relations + + ^ self propertiesAndRelations select: #isRelation ] { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index ea2c4d5ab..62034760b 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -246,7 +246,9 @@ FmxMBClass >> subclassOf: aClass [ FmxMBClass >> traitsFromRelations [ "returns traits defined by relations" - ^ (self relations collect: [ :each | each side trait ] thenSelect: #isNotNil) asSet + ^ (self relations + collect: [ :each | each trait ] + thenSelect: #isNotNil) asSet ] { #category : 'generalization' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st index b7624b32b..77ce1b9d3 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st @@ -211,7 +211,5 @@ FmxMBRelationSideTrait >> relationFrom: ownSide to: oppositeSide [ ownSide relation: aRelation. oppositeSide relation: aRelation. - ownSide relatedClass ifNotNil: [ ownSide relatedClass addRelation: aRelation with: oppositeSide relatedEntity ]. - ^ aRelation ] diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index dd79ddbcb..f88749c23 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -148,16 +148,16 @@ FmxMBVisitorTrait >> writeVisitRelationsFor: aFmxMBBehavior on: aStream [ aFmxMBBehavior relations do: [ :relation | - aStream << (' self visit{1}: a{2} {3}' format: { - (relation side isOne - ifTrue: [ 'Entity' ] - ifFalse: [ 'Collection' ]). - aFmxMBBehavior fullName. - relation side name }) ] + aStream << (' self visit{1}: a{2} {3}' format: { + (relation isOne + ifTrue: [ 'Entity' ] + ifFalse: [ 'Collection' ]). + aFmxMBBehavior fullName. + relation name }) ] separatedBy: [ - aStream - << $.; - cr ] + aStream + << $.; + cr ] ] { #category : 'generation - visit' } From 7f9c688b0d69cf0b18ae0a6d7712af09909e3a12 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Fri, 1 May 2026 02:58:15 +0200 Subject: [PATCH 070/121] =?UTF-8?q?Unify=20API=E2=80=AFof=20relations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...oteRelationSideGenerationStrategy.class.st | 20 +++++++++---------- .../FmxMBRelationSide.class.st | 19 +++++++----------- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBNonRemoteRelationSideGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBNonRemoteRelationSideGenerationStrategy.class.st index 1e5733ecc..eff568a4d 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBNonRemoteRelationSideGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBNonRemoteRelationSideGenerationStrategy.class.st @@ -37,17 +37,17 @@ FmxMBNonRemoteRelationSideGenerationStrategy >> generateGetterCoreOn: aStream fo aRelationSide isOne ifTrue: [ aStream nextPutAll: ' ifAbsent: [ nil ]' ]. - (aRelationSide otherSide isOne and: [ aRelationSide isMany ]) ifTrue: [ - aStream nextPutAll: (' ifAbsentPut: [ FMMultivalueLink on: self opposite: #{1}: ]' format: { aRelationSide otherSide name }) ]. + (aRelationSide oppositeSide isOne and: [ aRelationSide isMany ]) ifTrue: [ + aStream nextPutAll: (' ifAbsentPut: [ FMMultivalueLink on: self opposite: #{1}: ]' format: { aRelationSide oppositeSide name }) ]. - (aRelationSide isMany and: [ aRelationSide otherSide isMany ]) ifTrue: [ - aStream nextPutAll: (' ifAbsentPut: [ FMMultiMultivalueLink on: self opposite: #{1} ]' format: { aRelationSide otherSide name }) ] + (aRelationSide isMany and: [ aRelationSide oppositeSide isMany ]) ifTrue: [ + aStream nextPutAll: (' ifAbsentPut: [ FMMultiMultivalueLink on: self opposite: #{1} ]' format: { aRelationSide oppositeSide name }) ] ] { #category : 'generation' } FmxMBNonRemoteRelationSideGenerationStrategy >> generateSetterCoreOn: aStream for: aRelationSide [ - (aRelationSide isOne and: [ aRelationSide otherSide isOne ]) ifTrue: [ + (aRelationSide isOne and: [ aRelationSide oppositeSide isOne ]) ifTrue: [ aStream tab; nextPutAll: @@ -70,11 +70,11 @@ FmxMBNonRemoteRelationSideGenerationStrategy >> generateSetterCoreOn: aStream fo tab; tab; nextPutAll: - ('otherSide {1}: nil ]' format: { aRelationSide otherSide name }); + ('otherSide {1}: nil ]' format: { aRelationSide oppositeSide name }); cr; tab; nextPutAll: - ('ifNotNil: [ ' format: { aRelationSide otherSide name }); + ('ifNotNil: [ ' format: { aRelationSide oppositeSide name }); cr; tab; tab; @@ -84,7 +84,7 @@ FmxMBNonRemoteRelationSideGenerationStrategy >> generateSetterCoreOn: aStream fo tab; tab; nextPutAll: - ('anObject {1}: self ]' format: { aRelationSide otherSide name }) ]. + ('anObject {1}: self ]' format: { aRelationSide oppositeSide name }) ]. aRelationSide isMany ifTrue: [ aStream @@ -92,7 +92,7 @@ FmxMBNonRemoteRelationSideGenerationStrategy >> generateSetterCoreOn: aStream fo nextPutAll: ('self {1} value: anObject' format: { aRelationSide name }) ]. - (aRelationSide otherSide isMany and: [ aRelationSide isOne ]) + (aRelationSide oppositeSide isMany and: [ aRelationSide isOne ]) ifTrue: [ aStream tab; @@ -100,7 +100,7 @@ FmxMBNonRemoteRelationSideGenerationStrategy >> generateSetterCoreOn: aStream fo ('self attributeAt: #{1} put: (FMMultivalueLink on: self update: #{2} from: self {1} to: anObject).' format: { aRelationSide name. - aRelationSide otherSide name }) ] + aRelationSide oppositeSide name }) ] ] { #category : 'testing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st index 7c4c64cb8..29d2bee61 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st @@ -207,27 +207,22 @@ FmxMBRelationSide >> one [ { #category : 'accessing' } FmxMBRelationSide >> oppositeName [ - ^ self otherSide name asSymbol + ^ self oppositeSide name asSymbol ] { #category : 'accessing' } FmxMBRelationSide >> oppositeSide [ - ^ self otherSide + | aFromSide | + aFromSide := self relation from. + ^ aFromSide == self + ifTrue: [ self relation to ] + ifFalse: [ aFromSide ] ] { #category : 'accessing' } FmxMBRelationSide >> oppositeType [ - ^ (self otherSide builder configuration prefix , self otherSide relatedEntityName) asSymbol -] - -{ #category : 'accessing' } -FmxMBRelationSide >> otherSide [ - | aFromSide | - aFromSide := self relation from. - ^ aFromSide == self - ifTrue: [ self relation to ] - ifFalse: [ aFromSide ] + ^ (self oppositeSide builder configuration prefix , self oppositeSide relatedEntityName) asSymbol ] { #category : 'private' } From 7a2fdcf322979c1f60a5ba65b6c06f044099dfbb Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Fri, 1 May 2026 03:01:32 +0200 Subject: [PATCH 071/121] Some small cleanings --- .../FamixMetamodelGenerator.class.st | 2 +- .../FmxMBClass.class.st | 2 +- .../FmxMBRelationSide.class.st | 7 +----- ...xMBRelationSideGenerationStrategy.class.st | 22 +++++++++---------- 4 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st index 59727e45b..e2ec4daa8 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st @@ -217,7 +217,7 @@ FamixMetamodelGenerator >> apply: aTrait on: aGeneratedClass oppositeOn: another ((builder getTraitNamed: aTrait) propertiesAndRelations size = 1) ifFalse: [ self error: '#apply:on:oppositeOn: only accept traits with a unique opposite' ]. - oppositeTrait := (builder getTraitNamed: aTrait) propertiesAndRelations anyOne relation side relatedClass name. + oppositeTrait := (builder getTraitNamed: aTrait) propertiesAndRelations anyOne relatedClass name. self apply: aTrait on: aGeneratedClass oppositeTrait: oppositeTrait on: anotherGeneratedClass ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 62034760b..942a27102 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -247,7 +247,7 @@ FmxMBClass >> traitsFromRelations [ "returns traits defined by relations" ^ (self relations - collect: [ :each | each trait ] + collect: #trait thenSelect: #isNotNil) asSet ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st index 29d2bee61..a96cdfae5 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st @@ -97,11 +97,6 @@ FmxMBRelationSide >> generationStrategy: anObject [ generationStrategy := anObject ] -{ #category : 'testing' } -FmxMBRelationSide >> hasRelation [ - ^ self relation isNotNil -] - { #category : 'initialization' } FmxMBRelationSide >> initialize [ super initialize. @@ -357,5 +352,5 @@ FmxMBRelationSide >> type [ { #category : 'generating' } FmxMBRelationSide >> validate [ - self hasRelation ifFalse: [ FmxMBIncompletePropertyDefiniton signal ] + ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st index 3a140cfb6..81513ca15 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st @@ -30,19 +30,17 @@ FmxMBRelationSideGenerationStrategy >> generateGetterIn: aFmxBehavioral for: aRe methodSource := String streamContents: [ :s | s nextPutAll: aRelationSide name; + cr; + tab; + nextPutAll: '"Relation named: #'; + nextPutAll: relationSide name; + nextPutAll: ' type: #'; + nextPutAll: relationSide oppositeType; + nextPutAll: ' opposite: #'; + nextPutAll: relationSide oppositeName; + nextPutAll: '"'; + cr; cr. - aRelationSide hasRelation ifTrue: [ - s - tab; - nextPutAll: '"Relation named: #'; - nextPutAll: relationSide name; - nextPutAll: ' type: #'; - nextPutAll: relationSide oppositeType; - nextPutAll: ' opposite: #'; - nextPutAll: relationSide oppositeName; - nextPutAll: '"'; - cr; - cr ]. s tab; nextPutAll: ''; From f0f0281fe857a4d2f88b6bb573a82cde12b8251b Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Fri, 1 May 2026 16:10:47 +0200 Subject: [PATCH 072/121] Merge FmxMBRelation and FmxMBRelationSide This makes the generator simpler which is great considering its current complexity --- .../FmxMBRelation.extension.st | 13 -- .../FmxMBRelationSide.extension.st | 7 + .../FamixMetamodelGenerator.class.st | 14 +- .../FmxMBPlantTextVisitor.class.st | 111 ++++++++-------- .../FmxMBPlantTextVisitorPartial.class.st | 5 +- .../FmxMBRelation.class.st | 85 ------------ .../FmxMBRelationSide.class.st | 54 ++++---- .../FmxMBRelationSideTrait.trait.st | 80 ++++------- .../FmxMBRelationSideTest.class.st | 125 ++++++++---------- .../FmxMBRelationTest.class.st | 23 ---- 10 files changed, 182 insertions(+), 335 deletions(-) delete mode 100644 src/Famix-Deprecated/FmxMBRelation.extension.st create mode 100644 src/Famix-Deprecated/FmxMBRelationSide.extension.st delete mode 100644 src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st delete mode 100644 src/Famix-MetamodelBuilder-Tests/FmxMBRelationTest.class.st diff --git a/src/Famix-Deprecated/FmxMBRelation.extension.st b/src/Famix-Deprecated/FmxMBRelation.extension.st deleted file mode 100644 index 764dfb4c7..000000000 --- a/src/Famix-Deprecated/FmxMBRelation.extension.st +++ /dev/null @@ -1,13 +0,0 @@ -Extension { #name : 'FmxMBRelation' } - -{ #category : '*Famix-Deprecated' } -FmxMBRelation >> withNavigation [ - - self deprecated: 'Navigation are not used anymore by MooseIDE and got removed from the generator.' -] - -{ #category : '*Famix-Deprecated' } -FmxMBRelation >> withoutNavigation [ - - self deprecated: 'Navigation are not used anymore by MooseIDE and got removed from the generator.' -] diff --git a/src/Famix-Deprecated/FmxMBRelationSide.extension.st b/src/Famix-Deprecated/FmxMBRelationSide.extension.st new file mode 100644 index 000000000..b99e58941 --- /dev/null +++ b/src/Famix-Deprecated/FmxMBRelationSide.extension.st @@ -0,0 +1,7 @@ +Extension { #name : 'FmxMBRelationSide' } + +{ #category : '*Famix-Deprecated' } +FmxMBRelationSide >> withNavigation [ + + self deprecated: 'Navigation are not used anymore by MooseIDE and got removed from the generator.' +] diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st index e2ec4daa8..1e770b687 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st @@ -213,12 +213,18 @@ FamixMetamodelGenerator >> allSubBuilders [ FamixMetamodelGenerator >> apply: aTrait on: aGeneratedClass oppositeOn: anotherGeneratedClass [ "A shorter version of #apply:on:oppositeTrait:on: Only works if aTrait has excatly 1 opposite (slot)" - | oppositeTrait | - ((builder getTraitNamed: aTrait) propertiesAndRelations size = 1) ifFalse: [ self error: '#apply:on:oppositeOn: only accept traits with a unique opposite' ]. + | oppositeTrait properties | + properties := (builder getTraitNamed: aTrait) propertiesAndRelations. - oppositeTrait := (builder getTraitNamed: aTrait) propertiesAndRelations anyOne relatedClass name. - self apply: aTrait on: aGeneratedClass oppositeTrait: oppositeTrait on: anotherGeneratedClass + properties size = 1 ifFalse: [ self error: '#apply:on:oppositeOn: only accept traits with a unique opposite' ]. + + oppositeTrait := properties anyOne oppositeClass name. + self + apply: aTrait + on: aGeneratedClass + oppositeTrait: oppositeTrait + on: anotherGeneratedClass ] { #category : 'definition' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st index eecbe1ae4..5e6e58a4c 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st @@ -196,8 +196,7 @@ FmxMBPlantTextVisitor >> visitClass: aClass [ { #category : 'visiting' } FmxMBPlantTextVisitor >> visitRelationSide: aRelationSide [ - relations add: aRelationSide relation. - + relations add: aRelationSide ] { #category : 'visiting' } @@ -245,40 +244,38 @@ FmxMBPlantTextVisitor >> withoutAllTraits [ FmxMBPlantTextVisitor >> writeClass: aClass mergingTraits: mergesTraits [ | behaviorKey displayedName | + displayedName := aClass name. mergesTraits - ifTrue: [ - (self behaviorNameOrNilFor: aClass traitGeneralizations first) - ifNil: [ - behaviorKey := self ensureBehaviorNameFor: aClass. - self mergeTrait: aClass traitGeneralizations first withBehaviorNamed: behaviorKey ] - ifNotNil: [ :key | - behaviorKey := key. - self mergeTrait: aClass withBehaviorNamed: behaviorKey ]. - - displayedName := displayedName , ' / ' , aClass traitGeneralizations first name ] - ifFalse: [ behaviorKey := self ensureBehaviorNameFor: aClass ]. + ifTrue: [ + (self behaviorNameOrNilFor: aClass traitGeneralizations first) + ifNil: [ behaviorKey := self ensureBehaviorNameFor: aClass. + self mergeTrait: aClass traitGeneralizations first withBehaviorNamed: behaviorKey. ] + ifNotNil: [ :key | + behaviorKey := key. + self mergeTrait: aClass withBehaviorNamed: behaviorKey. ]. + + displayedName := displayedName, ' / ', aClass traitGeneralizations first name ] + ifFalse: [ behaviorKey := self ensureBehaviorNameFor: aClass]. - stream + stream nextPutAll: 'class '; nextPutAll: behaviorKey; nextPutAll: ' as "'; nextPutAll: displayedName; - nextPutAll: '" {'; - cr. + nextPutAll: '" {'; cr. aClass propertiesAndRelations do: [ :each | each acceptVisitor: self ]. + + mergesTraits ifTrue: [ + | defs | + defs := typedProperties select: [ :each | each key = aClass traitGeneralizations first ]. + defs do: [ :assoc | + stream nextPutAll: assoc value ] ]. - mergesTraits ifTrue: [ - | defs | - defs := typedProperties select: [ :each | each key = aClass traitGeneralizations first ]. - defs do: [ :assoc | stream nextPutAll: assoc value ] ]. - - stream - nextPutAll: '}'; - cr; - cr + stream nextPutAll: '}'; cr; cr. + ] { #category : 'relations' } @@ -297,41 +294,37 @@ FmxMBPlantTextVisitor >> writeGeneralizations [ FmxMBPlantTextVisitor >> writeRelations [ | isContainer | + relations do: [ :relation | + stream + nextPutAll: (self ensureBehaviorNameFor: relation relatedEntity); + nextPutAll: ' "'; + nextPutAll: relation oppositeSide name; + space; + nextPutAll: relation oppositeSide shortCardinalityString; + space; + nextPutAll: '"'. - relations do: [ :relation | - stream - nextPutAll: (self ensureBehaviorNameFor: relation from relatedEntity); - nextPutAll: ' "'; - nextPutAll: relation to name; - space; - nextPutAll: relation oppositeRelation shortCardinalityString; - space; - nextPutAll: '"'. - - isContainer := relation from isContainer or: [ relation to isContainer ]. - - stream space. - relation to isContainer - ifTrue: [ stream nextPutAll: 'o' ]. - - isContainer - ifTrue: [ stream nextPutAll: '-[#red]-'. ] - ifFalse: [ stream nextPutAll: '-[#black]-'. ]. - - relation from isContainer - ifTrue: [ stream nextPutAll: 'o' ]. - stream space. - - stream - nextPutAll: '"'; - nextPutAll: relation from name; - space; - nextPutAll: relation shortCardinalityString; - space; - nextPutAll: '" '; - nextPutAll: (self ensureBehaviorNameFor: relation to relatedEntity); - cr] - + isContainer := relation isContainer or: [ relation oppositeSide isContainer ]. + + stream space. + relation oppositeSide isContainer ifTrue: [ stream nextPutAll: 'o' ]. + + isContainer + ifTrue: [ stream nextPutAll: '-[#red]-' ] + ifFalse: [ stream nextPutAll: '-[#black]-' ]. + + relation isContainer ifTrue: [ stream nextPutAll: 'o' ]. + stream space. + + stream + nextPutAll: '"'; + nextPutAll: relation name; + space; + nextPutAll: relation shortCardinalityString; + space; + nextPutAll: '" '; + nextPutAll: (self ensureBehaviorNameFor: relation oppositeSide relatedEntity); + cr ] ] { #category : 'writing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitorPartial.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitorPartial.class.st index 02c73d1a5..42eb87c17 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitorPartial.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitorPartial.class.st @@ -32,11 +32,8 @@ FmxMBPlantTextVisitorPartial >> isWantedClass: aClass [ { #category : 'testing' } FmxMBPlantTextVisitorPartial >> isWantedRelation: aRelationSide [ - ^aRelationSide relation sides allSatisfy: [ :side | - side relatedClass notNil and: - [ self isWantedClass: side relatedClass ] - ] + ^ aRelationSide sides allSatisfy: [ :side | side relatedClass isNotNil and: [ self isWantedClass: side relatedClass ] ] ] { #category : 'visiting' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st deleted file mode 100644 index d814b41eb..000000000 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st +++ /dev/null @@ -1,85 +0,0 @@ -" -FamixMetamodelBuilderRelation -" -Class { - #name : 'FmxMBRelation', - #superclass : 'Object', - #instVars : [ - 'side', - 'oppositeSide' - ], - #category : 'Famix-MetamodelBuilder-Core-Implementation', - #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' -} - -{ #category : 'accessing' } -FmxMBRelation >> from [ - - ^ side -] - -{ #category : 'accessing' } -FmxMBRelation >> left [ - - ^ side -] - -{ #category : 'accessing' } -FmxMBRelation >> oppositeRelation [ - - ^ self copy swapSides -] - -{ #category : 'accessing' } -FmxMBRelation >> oppositeSide [ - ^ oppositeSide -] - -{ #category : 'accessing' } -FmxMBRelation >> oppositeSide: anObject [ - oppositeSide := anObject -] - -{ #category : 'accessing' } -FmxMBRelation >> right [ - - ^ oppositeSide -] - -{ #category : 'accessing' } -FmxMBRelation >> shortCardinalityString [ - ^ self from isMany ifTrue: [ '*' ] ifFalse: [ '' ] -] - -{ #category : 'accessing' } -FmxMBRelation >> side [ - - ^ side -] - -{ #category : 'accessing' } -FmxMBRelation >> side: anObject [ - side := anObject -] - -{ #category : 'accessing' } -FmxMBRelation >> sides [ - - ^ { side. oppositeSide } -] - -{ #category : 'accessing' } -FmxMBRelation >> swapSides [ - - | temp | - temp := oppositeSide. - oppositeSide := side. - side := temp -] - -{ #category : 'accessing' } -FmxMBRelation >> to [ - - ^ oppositeSide -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st index a96cdfae5..d86824d2d 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st @@ -10,12 +10,12 @@ Class { 'cardinality', 'trait', 'container', - 'relation', 'relatedClass', 'derived', 'source', 'target', - 'generationStrategy' + 'generationStrategy', + 'oppositeSide' ], #category : 'Famix-MetamodelBuilder-Core-Implementation', #package : 'Famix-MetamodelBuilder-Core', @@ -67,12 +67,6 @@ FmxMBRelationSide >> derived: anObject [ derived := anObject ] -{ #category : 'accessing' } -FmxMBRelationSide >> from [ - - ^ self relation from -] - { #category : 'generating' } FmxMBRelationSide >> generateGetterIn: aFmxBehavioral [ @@ -200,6 +194,12 @@ FmxMBRelationSide >> one [ cardinality := #one ] +{ #category : 'accessing' } +FmxMBRelationSide >> oppositeClass [ + + ^ oppositeSide relatedEntity +] + { #category : 'accessing' } FmxMBRelationSide >> oppositeName [ ^ self oppositeSide name asSymbol @@ -207,12 +207,15 @@ FmxMBRelationSide >> oppositeName [ { #category : 'accessing' } FmxMBRelationSide >> oppositeSide [ + ^ oppositeSide +] + +{ #category : 'accessing' } +FmxMBRelationSide >> oppositeSide: anObject [ + "We keep an opposite relation bidirectional" - | aFromSide | - aFromSide := self relation from. - ^ aFromSide == self - ifTrue: [ self relation to ] - ifFalse: [ aFromSide ] + oppositeSide := anObject. + anObject oppositeSide = self ifFalse: [ anObject oppositeSide: self ] ] { #category : 'accessing' } @@ -261,19 +264,25 @@ FmxMBRelationSide >> relatedEntityName [ ] { #category : 'accessing' } -FmxMBRelationSide >> relation [ - ^ relation +FmxMBRelationSide >> remoteBuilderDo: aBlock [ + + self relatedEntity additionalProperties at: #remoteBuilder ifPresent: aBlock ] { #category : 'accessing' } -FmxMBRelationSide >> relation: anObject [ - relation := anObject +FmxMBRelationSide >> shortCardinalityString [ + + ^ self isMany + ifTrue: [ '*' ] + ifFalse: [ '' ] ] { #category : 'accessing' } -FmxMBRelationSide >> remoteBuilderDo: aBlock [ +FmxMBRelationSide >> sides [ - self relatedEntity additionalProperties at: #remoteBuilder ifPresent: aBlock + ^ { + self. + self oppositeSide } ] { #category : 'name conversion' } @@ -325,12 +334,6 @@ FmxMBRelationSide >> target: anObject [ target := anObject ] -{ #category : 'accessing' } -FmxMBRelationSide >> to [ - - ^ self relation to -] - { #category : 'accessing' } FmxMBRelationSide >> trait [ ^ trait @@ -351,6 +354,7 @@ FmxMBRelationSide >> type [ { #category : 'generating' } FmxMBRelationSide >> validate [ + "Nothing to validate here" ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st index 77ce1b9d3..734a75995 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st @@ -73,7 +73,7 @@ FmxMBRelationSideTrait >> containsMany: aRelationSide [ | aRelation | aRelation := self oneToMany: aRelationSide. - aRelation right container. + aRelation oppositeSide container. ^ aRelation ] @@ -82,109 +82,96 @@ FmxMBRelationSideTrait >> containsOne: aRelationSide [ | aRelation | aRelation := self oneToOne: aRelationSide. - aRelation right container. + aRelation oppositeSide container. ^ aRelation ] { #category : 'relations - named containers' } FmxMBRelationSideTrait >> manyBelongTo: aRelationSide [ - | aRelation | - aRelation := self manyToOne: aRelationSide. - aRelation left container. - ^ aRelation + ^ (self manyToOne: aRelationSide) + container; + yourself ] { #category : 'relations - named' } FmxMBRelationSideTrait >> manyToMany: aRelationSide [ - | aRelation ownSide oppositeSide | - + | ownSide oppositeSide | ownSide := self asRelationSideNamed: aRelationSide pluralPropertyName. oppositeSide := aRelationSide asRelationSideNamed: self pluralPropertyName. ownSide many. ownSide derived. oppositeSide many. - aRelation := self relationFrom: ownSide to: oppositeSide. + ownSide oppositeSide: oppositeSide. self isRemote ifTrue: [ ownSide makeRemote ]. aRelationSide isRemote ifTrue: [ oppositeSide makeRemote ]. (self isRemote and: [ aRelationSide isRemote not ]) ifTrue: [ oppositeSide makeNonremote ]. (self isRemote not and: [ aRelationSide isRemote ]) ifTrue: [ ownSide makeNonremote ]. - - ^ aRelation - - + + ^ ownSide ] { #category : 'relations - named' } FmxMBRelationSideTrait >> manyToOne: aRelationSide [ - | aRelation ownSide oppositeSide | - + | ownSide oppositeSide | ownSide := self asRelationSideNamed: aRelationSide singularPropertyName. oppositeSide := aRelationSide asRelationSideNamed: self pluralPropertyName. oppositeSide many. oppositeSide derived. - aRelation := self relationFrom: ownSide to: oppositeSide. + ownSide oppositeSide: oppositeSide. self isRemote ifTrue: [ ownSide makeRemote ]. aRelationSide isRemote ifTrue: [ oppositeSide makeRemote ]. (self isRemote and: [ aRelationSide isRemote not ]) ifTrue: [ oppositeSide makeNonremote ]. (self isRemote not and: [ aRelationSide isRemote ]) ifTrue: [ ownSide makeNonremote ]. - - ^ aRelation - - + + ^ ownSide ] { #category : 'relations - named containers' } FmxMBRelationSideTrait >> oneBelongsTo: aRelationSide [ - | aRelation | - aRelation := self oneToOne: aRelationSide. - aRelation left container. - ^ aRelation + ^ (self oneToOne: aRelationSide) + container; + yourself ] { #category : 'relations - named' } FmxMBRelationSideTrait >> oneToMany: aRelationSide [ - | aRelation ownSide oppositeSide | + | ownSide oppositeSide | ownSide := self asRelationSideNamed: aRelationSide pluralPropertyName. oppositeSide := aRelationSide asRelationSideNamed: self singularPropertyName. ownSide many. ownSide derived. - aRelation := self relationFrom: ownSide to: oppositeSide. + ownSide oppositeSide: oppositeSide. self isRemote ifTrue: [ ownSide makeRemote ]. aRelationSide isRemote ifTrue: [ oppositeSide makeRemote ]. (self isRemote and: [ aRelationSide isRemote not ]) ifTrue: [ oppositeSide makeNonremote ]. - (self isRemote not and: [ aRelationSide isRemote ]) ifTrue: [ ownSide makeNonremote ]. - - ^ aRelation - - + (self isRemote not and: [ aRelationSide isRemote ]) ifTrue: [ ownSide makeNonremote ]. + + ^ ownSide ] { #category : 'relations - named' } FmxMBRelationSideTrait >> oneToOne: aRelationSide [ - | aRelation ownSide oppositeSide | - + | ownSide oppositeSide | ownSide := self asRelationSideNamed: aRelationSide propertyName. oppositeSide := aRelationSide asRelationSideNamed: self propertyName. oppositeSide derived. - aRelation := self relationFrom: ownSide to: oppositeSide. - + ownSide oppositeSide: oppositeSide. + self isRemote ifTrue: [ ownSide makeRemote ]. aRelationSide isRemote ifTrue: [ oppositeSide makeRemote ]. (self isRemote and: [ aRelationSide isRemote not ]) ifTrue: [ oppositeSide makeNonremote ]. (self isRemote not and: [ aRelationSide isRemote ]) ifTrue: [ ownSide makeNonremote ]. - - ^ aRelation - - + + ^ ownSide ] { #category : 'private' } @@ -198,18 +185,3 @@ FmxMBRelationSideTrait >> propertyName [ ^ self explicitRequirement ] - -{ #category : 'private' } -FmxMBRelationSideTrait >> relationFrom: ownSide to: oppositeSide [ - - | aRelation | - aRelation := FmxMBRelation new - side: ownSide; - oppositeSide: oppositeSide; - yourself. - - ownSide relation: aRelation. - oppositeSide relation: aRelation. - - ^ aRelation -] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st index 6a61251c3..6a259069b 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st @@ -25,78 +25,56 @@ FmxMBRelationSideTest >> testBasics [ FmxMBRelationSideTest >> testContainmentRelations [ | aClass aTrait relation | - aClass := builder newClassNamed: #AClass. aTrait := builder newTraitNamed: #ATrait. - + relation := aClass <>- aTrait. - self assert: relation left isOne. - self assert: relation right isOne. - self deny: relation left isContainer. - self assert: relation right isContainer. + self assert: relation isOne. + self assert: relation oppositeSide isOne. + self deny: relation isContainer. + self assert: relation oppositeSide isContainer. relation := aClass -<> aTrait. - self assert: relation left isOne. - self assert: relation right isOne. - self assert: relation left isContainer. - self deny: relation right isContainer. + self assert: relation isOne. + self assert: relation oppositeSide isOne. + self assert: relation isContainer. + self deny: relation oppositeSide isContainer. relation := aClass <>-* aTrait. - self assert: relation left isMany. - self assert: relation right isOne. - self deny: relation left isContainer. - self assert: relation right isContainer. + self assert: relation isMany. + self assert: relation oppositeSide isOne. + self deny: relation isContainer. + self assert: relation oppositeSide isContainer. relation := aClass *-<> aTrait. - self assert: relation left isOne. - self assert: relation right isMany. - self assert: relation left isContainer. - self deny: relation right isContainer. - -] - -{ #category : 'tests' } -FmxMBRelationSideTest >> testDirections [ - - "test setting of a type of the property" - - | aClass aTrait relation | - - aClass := builder newClassNamed: #AClass. - aTrait := builder newTraitNamed: #ATrait. - - relation := aClass - aTrait. - - self assert: relation left from equals: relation left. - self assert: relation right from equals: relation left. - - self assert: relation left to equals: relation right. - self assert: relation right to equals: relation right. - + self assert: relation isOne. + self assert: relation oppositeSide isMany. + self assert: relation isContainer. + self deny: relation oppositeSide isContainer ] { #category : 'tests' } FmxMBRelationSideTest >> testOppositeName [ + | aClass aTrait relation | - builder configuration prefix: 'Banane'. aClass := builder newClassNamed: #AClass. aTrait := builder newTraitNamed: #ATrait. - + relation := aClass <>- aTrait. - self assert: relation left oppositeName equals: 'aClass' + self assert: relation oppositeName equals: 'aClass' ] { #category : 'tests' } FmxMBRelationSideTest >> testOppositeType [ + | aClass aTrait relation | - builder configuration prefix: 'Banane'. aClass := builder newClassNamed: #AClass. aTrait := builder newTraitNamed: #ATrait. - + relation := aClass <>- aTrait. - self assert: relation left oppositeType equals: 'BananeATrait' + self assert: relation oppositeType equals: 'BananeATrait' ] { #category : 'tests' } @@ -111,7 +89,7 @@ FmxMBRelationSideTest >> testOppositeTypeInRemoteBuilder [ aTrait := builder2 newTraitNamed: #ATrait. relation := aClass <>- aTrait. - self assert: relation left oppositeType equals: 'FurryATrait' + self assert: relation oppositeType equals: 'FurryATrait' ] { #category : 'tests' } @@ -228,47 +206,58 @@ FmxMBRelationSideTest >> testReconnection [ { #category : 'tests' } FmxMBRelationSideTest >> testRelatedEntity [ - "test setting of a type of the property" | aClass aTrait relation | - aClass := builder newClassNamed: #AClass. aTrait := builder newTraitNamed: #ATrait. - + relation := aClass - aTrait. - - self assert: relation left relatedEntity equals: aClass. - self assert: relation right relatedEntity equals: aTrait. + self assert: relation relatedEntity equals: aClass. + self assert: relation oppositeSide relatedEntity equals: aTrait ] { #category : 'tests' } FmxMBRelationSideTest >> testRelations [ | aClass aTrait relation | - aClass := builder newClassNamed: #AClass. aTrait := builder newTraitNamed: #ATrait. - + relation := aClass - aTrait. - self assert: relation left isOne. - self assert: relation right isOne. - self deny: (relation left isContainer | relation left isContainer). + self assert: relation isOne. + self assert: relation oppositeSide isOne. + self deny: relation isContainer | relation oppositeSide isContainer. relation := aClass -* aTrait. - self assert: relation left isMany. - self assert: relation right isOne. - self deny: (relation left isContainer | relation left isContainer). - + self assert: relation isMany. + self assert: relation oppositeSide isOne. + self deny: relation isContainer | relation oppositeSide isContainer. + relation := aClass *- aTrait. - self assert: relation left isOne. - self assert: relation right isMany. - self deny: (relation left isContainer | relation left isContainer). - + self assert: relation isOne. + self assert: relation oppositeSide isMany. + self deny: relation isContainer | relation oppositeSide isContainer. + relation := aClass *-* aTrait. - self assert: relation left isMany. - self assert: relation right isMany. - self deny: (relation left isContainer | relation left isContainer). + self assert: relation isMany. + self assert: relation oppositeSide isMany. + self deny: relation isContainer | relation oppositeSide isContainer +] +{ #category : 'tests' } +FmxMBRelationSideTest >> testShortCardinalityString [ + + | tClass tMethod relation | + + tClass := builder newTraitNamed: #TClass. + tMethod := builder newTraitNamed: #TMethod. + + relation := (tClass <>-* (tMethod property: #methodClass)). + self assert: relation shortCardinalityString equals: '*'. + relation := (tClass - (tMethod property: #methodClass)). + self assert: relation shortCardinalityString equals: ''. + relation := (tClass *-* tMethod). + self assert: relation shortCardinalityString equals: '*'. ] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBRelationTest.class.st deleted file mode 100644 index d17115ea7..000000000 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationTest.class.st +++ /dev/null @@ -1,23 +0,0 @@ -Class { - #name : 'FmxMBRelationTest', - #superclass : 'FmxMBPropertyTest', - #category : 'Famix-MetamodelBuilder-Tests-Tests', - #package : 'Famix-MetamodelBuilder-Tests', - #tag : 'Tests' -} - -{ #category : 'tests' } -FmxMBRelationTest >> testShortCardinalityString [ - - | tClass tMethod relation | - - tClass := builder newTraitNamed: #TClass. - tMethod := builder newTraitNamed: #TMethod. - - relation := (tClass <>-* (tMethod property: #methodClass)). - self assert: relation shortCardinalityString equals: '*'. - relation := (tClass - (tMethod property: #methodClass)). - self assert: relation shortCardinalityString equals: ''. - relation := (tClass *-* tMethod). - self assert: relation shortCardinalityString equals: '*'. -] From eb783626f7f5c1f1703e518f0a96b16708c4ea48 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Fri, 1 May 2026 21:02:29 +0200 Subject: [PATCH 073/121] Simplify class comment generation. Do not use the generation strategy because it is useless + improve names --- .../FmxMBBehavior.class.st | 88 ++++++++++--------- 1 file changed, 46 insertions(+), 42 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index e4034a35c..16ce44953 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -150,58 +150,43 @@ FmxMBBehavior >> commentWithRelations [ "It is sometimes hard to find our way through all the methods and relations of a moose entity. To help, I add information in the class comments about the different kind of relations in the model." ^ String streamContents: [ :aStream | - aStream nextPutAll: self comment. self comment ifNotEmpty: [ aStream + nextPutAll: self comment; cr; cr ]. - self allRelations ifNotEmpty: [ :rels | + self allRelations ifNotEmpty: [ :relations | aStream nextPutAll: '## Relations ======================'; cr; cr. - OrderedDictionary new - at: 'Parents' put: [ :relation | relation isContainer ]; - at: 'Children' put: [ :relation | relation oppositeSide isContainer ]; - at: 'Outgoing dependencies' put: [ :relation | relation oppositeSide isSource ]; - at: 'Incoming dependencies' put: [ :relation | relation oppositeSide isTarget ]; - at: 'Association source' put: [ :relation | relation isSource ]; - at: 'Association target' put: [ :relation | relation isTarget ]; - at: 'Other' put: [ :relation | - relation isTarget not and: [ - relation isSource not and: [ - relation isContainer not and: [ - relation oppositeSide isTarget not and: [ relation oppositeSide isSource not and: [ relation oppositeSide isContainer not ] ] ] ] ] ]; - keysAndValuesDo: [ :relationKind :selectionBlock | - (rels select: selectionBlock) ifNotEmpty: [ :parents | + self relationSectionsToCommentMap keysAndValuesDo: [ :sectionTitle :selectionBlock | + (relations select: selectionBlock) ifNotEmpty: [ :selectedRelations | + aStream + nextPutAll: '### '; + nextPutAll: sectionTitle; + cr; + nextPutAll: '| Relation | Origin | Opposite | Type | Comment |'; + cr; + nextPutAll: '|---|'; + cr. + (selectedRelations sorted: #name ascending) do: [ :relation | aStream - nextPutAll: '### '; - nextPutAll: relationKind; - cr; - nextPutAll: '| Relation | Origin | Opposite | Type | Comment |'; - cr; - nextPutAll: '|---|'; - cr. - (parents sorted: [ :parent | parent generationStrategy relationSide name ] ascending) do: [ :parent | - | strategy | - strategy := parent generationStrategy. - - aStream - nextPutAll: '| `'; - nextPutAll: strategy relationSide name; - nextPutAll: '` | `'; - nextPutAll: strategy relationSide type; - nextPutAll: '` | `'; - nextPutAll: strategy relationSide oppositeName; - nextPutAll: '` | `'; - nextPutAll: strategy relationSide oppositeType; - nextPutAll: '` | '; - nextPutAll: (strategy relationSide comment copyWithRegex: (String with: Character cr with: $+) matchesReplacedWith: ' '); - nextPut: $|; - cr ]. - - aStream cr ] ]. + nextPutAll: '| `'; + nextPutAll: relation name; + nextPutAll: '` | `'; + nextPutAll: relation type; + nextPutAll: '` | `'; + nextPutAll: relation oppositeName; + nextPutAll: '` | `'; + nextPutAll: relation oppositeType; + nextPutAll: '` | '; + nextPutAll: (relation comment copyWithRegex: (String with: Character cr with: $+) matchesReplacedWith: ' '); + nextPut: $|; + cr ]. + + aStream cr ] ]. aStream cr ]. self allProperties ifNotEmpty: [ :props | @@ -504,6 +489,25 @@ FmxMBBehavior >> relatedEntityName [ ^ self name ] +{ #category : 'accessing' } +FmxMBBehavior >> relationSectionsToCommentMap [ + "When generating a class comment, we group the relations by kind. This method builds a dictionary to declare the sections to comment and declare how to select the relations inside." + + ^ OrderedDictionary new + at: 'Parents' put: [ :relation | relation isContainer ]; + at: 'Children' put: [ :relation | relation oppositeSide isContainer ]; + at: 'Outgoing dependencies' put: [ :relation | relation oppositeSide isSource ]; + at: 'Incoming dependencies' put: [ :relation | relation oppositeSide isTarget ]; + at: 'Association source' put: [ :relation | relation isSource ]; + at: 'Association target' put: [ :relation | relation isTarget ]; + at: 'Other' put: [ :relation | + relation isTarget not and: [ + relation isSource not and: [ + relation isContainer not and: [ + relation oppositeSide isTarget not and: [ relation oppositeSide isSource not and: [ relation oppositeSide isContainer not ] ] ] ] ] ]; + yourself +] + { #category : 'accessing' } FmxMBBehavior >> relations [ From f8f47c40ef74fed666b5287fab2181244ddccee8 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Fri, 1 May 2026 21:17:24 +0200 Subject: [PATCH 074/121] Generation strategy does not need the relation side in its ivar since it's passed as parameter --- .../FmxMBRelationSide.class.st | 15 ++++---- ...xMBRelationSideGenerationStrategy.class.st | 35 ++++--------------- ...oteRelationSideGenerationStrategy.class.st | 4 +-- 3 files changed, 18 insertions(+), 36 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st index d86824d2d..bb4b5dd9e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st @@ -70,7 +70,7 @@ FmxMBRelationSide >> derived: anObject [ { #category : 'generating' } FmxMBRelationSide >> generateGetterIn: aFmxBehavioral [ - ^ generationStrategy generateGetterIn: aFmxBehavioral for: self + ^ self generationStrategy generateGetterIn: aFmxBehavioral for: self ] { #category : 'generating' } @@ -154,20 +154,20 @@ FmxMBRelationSide >> isTarget [ { #category : 'converting' } FmxMBRelationSide >> makeNonremote [ - self generationStrategy: (FmxMBNonRemoteRelationSideGenerationStrategy for: self) + self generationStrategy: FmxMBNonRemoteRelationSideGenerationStrategy new ] { #category : 'converting' } FmxMBRelationSide >> makeRemote [ - self generationStrategy: (FmxMBRemoteRelationSideGenerationStrategy for: self). - self isRemote: true. + self generationStrategy: FmxMBRemoteRelationSideGenerationStrategy new. + self isRemote: true ] { #category : 'converting' } FmxMBRelationSide >> makeStandard [ - self generationStrategy: (FmxMBStandardRelationSideGenerationStrategy for: self) + self generationStrategy: FmxMBStandardRelationSideGenerationStrategy new ] { #category : 'accessing' } @@ -231,8 +231,11 @@ FmxMBRelationSide >> pluralPropertyName [ { #category : 'printing' } FmxMBRelationSide >> producesSlot [ + "I produce a slot if one of the side is remote. Else we will use the attribute mecanism" - ^ self generationStrategy producesSlot + self relatedClass isRemote ifTrue: [ ^ false ]. + + ^ self oppositeClass isRemote not ] { #category : 'private' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st index 81513ca15..666c01dc0 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st @@ -1,20 +1,11 @@ Class { #name : 'FmxMBRelationSideGenerationStrategy', #superclass : 'Object', - #instVars : [ - 'relationSide' - ], #category : 'Famix-MetamodelBuilder-Core-Implementation', #package : 'Famix-MetamodelBuilder-Core', #tag : 'Implementation' } -{ #category : 'instance creation' } -FmxMBRelationSideGenerationStrategy class >> for: aRelationSide [ - - ^ self new relationSide: aRelationSide -] - { #category : 'generation' } FmxMBRelationSideGenerationStrategy >> generateGetterCoreOn: aStream for: aRelationSide [ @@ -33,11 +24,11 @@ FmxMBRelationSideGenerationStrategy >> generateGetterIn: aFmxBehavioral for: aRe cr; tab; nextPutAll: '"Relation named: #'; - nextPutAll: relationSide name; + nextPutAll: aRelationSide name; nextPutAll: ' type: #'; - nextPutAll: relationSide oppositeType; + nextPutAll: aRelationSide oppositeType; nextPutAll: ' opposite: #'; - nextPutAll: relationSide oppositeName; + nextPutAll: aRelationSide oppositeName; nextPutAll: '"'; cr; cr. @@ -73,7 +64,7 @@ FmxMBRelationSideGenerationStrategy >> generateGetterIn: aFmxBehavioral for: aRe self generateGetterCoreOn: s for: aRelationSide ]. - aFmxBehavioral addMethod: methodSource protocol: self protocol + aFmxBehavioral addMethod: methodSource protocol: (self protocolFor: aRelationSide) ] { #category : 'generation' } @@ -98,23 +89,11 @@ FmxMBRelationSideGenerationStrategy >> generateSetterIn: aFmxBehavioral for: aRe cr. self generateSetterCoreOn: s for: aRelationSide ]. - aFmxBehavioral addMethod: methodSource protocol: self protocol + aFmxBehavioral addMethod: methodSource protocol: (self protocolFor: aRelationSide) ] { #category : 'accessing' } -FmxMBRelationSideGenerationStrategy >> protocol [ - - ^ #accessing -] +FmxMBRelationSideGenerationStrategy >> protocolFor: aRelation [ -{ #category : 'accessing' } -FmxMBRelationSideGenerationStrategy >> relationSide [ - - ^ relationSide -] - -{ #category : 'accessing' } -FmxMBRelationSideGenerationStrategy >> relationSide: anObject [ - - relationSide := anObject + ^ #accessing ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRemoteRelationSideGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRemoteRelationSideGenerationStrategy.class.st index 0e8e48c87..3855cacc8 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRemoteRelationSideGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRemoteRelationSideGenerationStrategy.class.st @@ -7,7 +7,7 @@ Class { } { #category : 'accessing' } -FmxMBRemoteRelationSideGenerationStrategy >> protocol [ +FmxMBRemoteRelationSideGenerationStrategy >> protocolFor: aRelation [ - ^ '*' , self relationSide builder parentBuilderPackageName + ^ '*' , aRelation builder parentBuilderPackageName ] From 6eff8bc979551e564862e819b4ce5bcedebd4a22 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Fri, 1 May 2026 21:33:30 +0200 Subject: [PATCH 075/121] Clean relations accessors management to simplify it Rename them, add comments, do not save them in the relation sides, simplify them --- ...ationAccessorsGenerationStrategy.class.st} | 31 ++++++++++++++----- ...tionAttributesGenerationStrategy.class.st} | 15 ++++++--- .../FmxMBRelationSide.class.st | 26 +++------------- .../FmxMBRelationSideTrait.trait.st | 8 ----- ...BRelationSlotsGenerationStrategy.class.st} | 15 ++++++--- ...oteRelationSideGenerationStrategy.class.st | 13 -------- 6 files changed, 48 insertions(+), 60 deletions(-) rename src/Famix-MetamodelBuilder-Core/{FmxMBRelationSideGenerationStrategy.class.st => FmxMBRelationAccessorsGenerationStrategy.class.st} (72%) rename src/Famix-MetamodelBuilder-Core/{FmxMBNonRemoteRelationSideGenerationStrategy.class.st => FmxMBRelationAttributesGenerationStrategy.class.st} (84%) rename src/Famix-MetamodelBuilder-Core/{FmxMBStandardRelationSideGenerationStrategy.class.st => FmxMBRelationSlotsGenerationStrategy.class.st} (50%) delete mode 100644 src/Famix-MetamodelBuilder-Core/FmxMBRemoteRelationSideGenerationStrategy.class.st diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st similarity index 72% rename from src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st rename to src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st index 666c01dc0..372f331da 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st @@ -1,19 +1,34 @@ +" +I am a strategy used during the generation of the Famix code to handle the way to generate accessors for a relation. + +I am an abstract class. Check my subclasses for more information +" Class { - #name : 'FmxMBRelationSideGenerationStrategy', + #name : 'FmxMBRelationAccessorsGenerationStrategy', #superclass : 'Object', + #classInstVars : [ + 'defaultInstance' + ], #category : 'Famix-MetamodelBuilder-Core-Implementation', #package : 'Famix-MetamodelBuilder-Core', #tag : 'Implementation' } +{ #category : 'accessing' } +FmxMBRelationAccessorsGenerationStrategy class >> defaultInstance [ + "Keeping a default instance since I have no state" + + ^ defaultInstance ifNil: [ defaultInstance := self new ] +] + { #category : 'generation' } -FmxMBRelationSideGenerationStrategy >> generateGetterCoreOn: aStream for: aRelationSide [ +FmxMBRelationAccessorsGenerationStrategy >> generateGetterCoreOn: aStream for: aRelationSide [ ^ self subclassResponsibility ] { #category : 'generation' } -FmxMBRelationSideGenerationStrategy >> generateGetterIn: aFmxBehavioral for: aRelationSide [ +FmxMBRelationAccessorsGenerationStrategy >> generateGetterIn: aFmxBehavioral for: aRelationSide [ | methodSource commentDefinition | commentDefinition := aRelationSide comment ifNotEmpty: [ :comment | '' format: { comment printString } ]. @@ -68,13 +83,13 @@ FmxMBRelationSideGenerationStrategy >> generateGetterIn: aFmxBehavioral for: aRe ] { #category : 'generation' } -FmxMBRelationSideGenerationStrategy >> generateSetterCoreOn: aStream for: aRelationSide [ +FmxMBRelationAccessorsGenerationStrategy >> generateSetterCoreOn: aStream for: aRelationSide [ ^ self subclassResponsibility ] { #category : 'generation' } -FmxMBRelationSideGenerationStrategy >> generateSetterIn: aFmxBehavioral for: aRelationSide [ +FmxMBRelationAccessorsGenerationStrategy >> generateSetterIn: aFmxBehavioral for: aRelationSide [ | methodSource | methodSource := String streamContents: [ :s | @@ -93,7 +108,9 @@ FmxMBRelationSideGenerationStrategy >> generateSetterIn: aFmxBehavioral for: aRe ] { #category : 'accessing' } -FmxMBRelationSideGenerationStrategy >> protocolFor: aRelation [ +FmxMBRelationAccessorsGenerationStrategy >> protocolFor: aRelation [ - ^ #accessing + ^ aRelation isRemote + ifTrue: [ '*' , aRelation builder parentBuilderPackageName ] + ifFalse: [ #accessing ] ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBNonRemoteRelationSideGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st similarity index 84% rename from src/Famix-MetamodelBuilder-Core/FmxMBNonRemoteRelationSideGenerationStrategy.class.st rename to src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st index eff568a4d..52e67658a 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBNonRemoteRelationSideGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st @@ -1,13 +1,18 @@ +" +I will generate accessors using the Moose concept of attributes to access a relation. + +This is used when one of the side of the relation is remote. +" Class { - #name : 'FmxMBNonRemoteRelationSideGenerationStrategy', - #superclass : 'FmxMBRelationSideGenerationStrategy', + #name : 'FmxMBRelationAttributesGenerationStrategy', + #superclass : 'FmxMBRelationAccessorsGenerationStrategy', #category : 'Famix-MetamodelBuilder-Core-Implementation', #package : 'Famix-MetamodelBuilder-Core', #tag : 'Implementation' } { #category : 'generation' } -FmxMBNonRemoteRelationSideGenerationStrategy >> generateGetterCoreOn: aStream for: aRelationSide [ +FmxMBRelationAttributesGenerationStrategy >> generateGetterCoreOn: aStream for: aRelationSide [ aStream tab; @@ -45,7 +50,7 @@ FmxMBNonRemoteRelationSideGenerationStrategy >> generateGetterCoreOn: aStream fo ] { #category : 'generation' } -FmxMBNonRemoteRelationSideGenerationStrategy >> generateSetterCoreOn: aStream for: aRelationSide [ +FmxMBRelationAttributesGenerationStrategy >> generateSetterCoreOn: aStream for: aRelationSide [ (aRelationSide isOne and: [ aRelationSide oppositeSide isOne ]) ifTrue: [ aStream @@ -104,7 +109,7 @@ FmxMBNonRemoteRelationSideGenerationStrategy >> generateSetterCoreOn: aStream fo ] { #category : 'testing' } -FmxMBNonRemoteRelationSideGenerationStrategy >> producesSlot [ +FmxMBRelationAttributesGenerationStrategy >> producesSlot [ ^ false ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st index bb4b5dd9e..04ae32fa4 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st @@ -14,7 +14,6 @@ Class { 'derived', 'source', 'target', - 'generationStrategy', 'oppositeSide' ], #category : 'Famix-MetamodelBuilder-Core-Implementation', @@ -83,12 +82,10 @@ FmxMBRelationSide >> generateSetterIn: aFmxBehavioral [ { #category : 'accessing' } FmxMBRelationSide >> generationStrategy [ - ^ generationStrategy -] -{ #category : 'accessing' } -FmxMBRelationSide >> generationStrategy: anObject [ - generationStrategy := anObject + ^ (self producesSlot + ifTrue: [ FmxMBRelationSlotsGenerationStrategy ] + ifFalse: [ FmxMBRelationAttributesGenerationStrategy ]) defaultInstance ] { #category : 'initialization' } @@ -99,9 +96,7 @@ FmxMBRelationSide >> initialize [ container := false. derived := false. target := false. - source := false. - - self makeStandard + source := false ] { #category : 'properties' } @@ -151,25 +146,12 @@ FmxMBRelationSide >> isTarget [ ^ target ] -{ #category : 'converting' } -FmxMBRelationSide >> makeNonremote [ - - self generationStrategy: FmxMBNonRemoteRelationSideGenerationStrategy new -] - { #category : 'converting' } FmxMBRelationSide >> makeRemote [ - self generationStrategy: FmxMBRemoteRelationSideGenerationStrategy new. self isRemote: true ] -{ #category : 'converting' } -FmxMBRelationSide >> makeStandard [ - - self generationStrategy: FmxMBStandardRelationSideGenerationStrategy new -] - { #category : 'accessing' } FmxMBRelationSide >> many [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st index 734a75995..011904f2c 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st @@ -107,8 +107,6 @@ FmxMBRelationSideTrait >> manyToMany: aRelationSide [ self isRemote ifTrue: [ ownSide makeRemote ]. aRelationSide isRemote ifTrue: [ oppositeSide makeRemote ]. - (self isRemote and: [ aRelationSide isRemote not ]) ifTrue: [ oppositeSide makeNonremote ]. - (self isRemote not and: [ aRelationSide isRemote ]) ifTrue: [ ownSide makeNonremote ]. ^ ownSide ] @@ -125,8 +123,6 @@ FmxMBRelationSideTrait >> manyToOne: aRelationSide [ self isRemote ifTrue: [ ownSide makeRemote ]. aRelationSide isRemote ifTrue: [ oppositeSide makeRemote ]. - (self isRemote and: [ aRelationSide isRemote not ]) ifTrue: [ oppositeSide makeNonremote ]. - (self isRemote not and: [ aRelationSide isRemote ]) ifTrue: [ ownSide makeNonremote ]. ^ ownSide ] @@ -151,8 +147,6 @@ FmxMBRelationSideTrait >> oneToMany: aRelationSide [ self isRemote ifTrue: [ ownSide makeRemote ]. aRelationSide isRemote ifTrue: [ oppositeSide makeRemote ]. - (self isRemote and: [ aRelationSide isRemote not ]) ifTrue: [ oppositeSide makeNonremote ]. - (self isRemote not and: [ aRelationSide isRemote ]) ifTrue: [ ownSide makeNonremote ]. ^ ownSide ] @@ -168,8 +162,6 @@ FmxMBRelationSideTrait >> oneToOne: aRelationSide [ self isRemote ifTrue: [ ownSide makeRemote ]. aRelationSide isRemote ifTrue: [ oppositeSide makeRemote ]. - (self isRemote and: [ aRelationSide isRemote not ]) ifTrue: [ oppositeSide makeNonremote ]. - (self isRemote not and: [ aRelationSide isRemote ]) ifTrue: [ ownSide makeNonremote ]. ^ ownSide ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBStandardRelationSideGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st similarity index 50% rename from src/Famix-MetamodelBuilder-Core/FmxMBStandardRelationSideGenerationStrategy.class.st rename to src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st index b30daa7e1..a7efa8f95 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBStandardRelationSideGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st @@ -1,13 +1,18 @@ +" +I will generate accessors accessing a slot for a relation. + +This is useful when both sides of the relation are non remote. +" Class { - #name : 'FmxMBStandardRelationSideGenerationStrategy', - #superclass : 'FmxMBRelationSideGenerationStrategy', + #name : 'FmxMBRelationSlotsGenerationStrategy', + #superclass : 'FmxMBRelationAccessorsGenerationStrategy', #category : 'Famix-MetamodelBuilder-Core-Implementation', #package : 'Famix-MetamodelBuilder-Core', #tag : 'Implementation' } { #category : 'generation' } -FmxMBStandardRelationSideGenerationStrategy >> generateGetterCoreOn: aStream for: aRelationSide [ +FmxMBRelationSlotsGenerationStrategy >> generateGetterCoreOn: aStream for: aRelationSide [ aStream tab; @@ -16,7 +21,7 @@ FmxMBStandardRelationSideGenerationStrategy >> generateGetterCoreOn: aStream for ] { #category : 'generation' } -FmxMBStandardRelationSideGenerationStrategy >> generateSetterCoreOn: aStream for: aRelationSide [ +FmxMBRelationSlotsGenerationStrategy >> generateSetterCoreOn: aStream for: aRelationSide [ aStream tab; @@ -27,7 +32,7 @@ FmxMBStandardRelationSideGenerationStrategy >> generateSetterCoreOn: aStream for ] { #category : 'testing' } -FmxMBStandardRelationSideGenerationStrategy >> producesSlot [ +FmxMBRelationSlotsGenerationStrategy >> producesSlot [ ^ true ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRemoteRelationSideGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRemoteRelationSideGenerationStrategy.class.st deleted file mode 100644 index 3855cacc8..000000000 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRemoteRelationSideGenerationStrategy.class.st +++ /dev/null @@ -1,13 +0,0 @@ -Class { - #name : 'FmxMBRemoteRelationSideGenerationStrategy', - #superclass : 'FmxMBNonRemoteRelationSideGenerationStrategy', - #category : 'Famix-MetamodelBuilder-Core-Implementation', - #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' -} - -{ #category : 'accessing' } -FmxMBRemoteRelationSideGenerationStrategy >> protocolFor: aRelation [ - - ^ '*' , aRelation builder parentBuilderPackageName -] From 3e869c466b61c41ffd10ba2e9fdbbd22b6f4a13c Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Fri, 1 May 2026 21:43:05 +0200 Subject: [PATCH 076/121] Update package tags --- .../FmxMBRelationAccessorsGenerationStrategy.class.st | 10 ++++++++-- .../FmxMBRelationAttributesGenerationStrategy.class.st | 10 ++-------- .../FmxMBRelationSlotsGenerationStrategy.class.st | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st index 372f331da..29dfcb741 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st @@ -9,9 +9,9 @@ Class { #classInstVars : [ 'defaultInstance' ], - #category : 'Famix-MetamodelBuilder-Core-Implementation', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' + #tag : 'Generation' } { #category : 'accessing' } @@ -107,6 +107,12 @@ FmxMBRelationAccessorsGenerationStrategy >> generateSetterIn: aFmxBehavioral for aFmxBehavioral addMethod: methodSource protocol: (self protocolFor: aRelationSide) ] +{ #category : 'testing' } +FmxMBRelationAccessorsGenerationStrategy >> producesSlot [ + + ^ false +] + { #category : 'accessing' } FmxMBRelationAccessorsGenerationStrategy >> protocolFor: aRelation [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st index 52e67658a..44cbeb88b 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st @@ -6,9 +6,9 @@ This is used when one of the side of the relation is remote. Class { #name : 'FmxMBRelationAttributesGenerationStrategy', #superclass : 'FmxMBRelationAccessorsGenerationStrategy', - #category : 'Famix-MetamodelBuilder-Core-Implementation', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' + #tag : 'Generation' } { #category : 'generation' } @@ -107,9 +107,3 @@ FmxMBRelationAttributesGenerationStrategy >> generateSetterCoreOn: aStream for: aRelationSide name. aRelationSide oppositeSide name }) ] ] - -{ #category : 'testing' } -FmxMBRelationAttributesGenerationStrategy >> producesSlot [ - - ^ false -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st index a7efa8f95..40df35de9 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st @@ -6,9 +6,9 @@ This is useful when both sides of the relation are non remote. Class { #name : 'FmxMBRelationSlotsGenerationStrategy', #superclass : 'FmxMBRelationAccessorsGenerationStrategy', - #category : 'Famix-MetamodelBuilder-Core-Implementation', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' + #tag : 'Generation' } { #category : 'generation' } From 616eada5ac6478798e916c3b352b28010a3063fe Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Sun, 3 May 2026 17:34:52 +0200 Subject: [PATCH 077/121] Simplify class generalization concept Remove it from FmxMBBehavior tp keep it only on FmxMBClass since traits cannot have a class generalization. Next step should be to rename it superclass to be more explicit --- .../FmxMBBehavior.class.st | 23 ++++++------------- .../FmxMBClass.class.st | 8 +++++++ .../FmxMBTrait.class.st | 11 +++++---- .../FmxMBTraitsGeneralizationError.class.st | 15 ------------ .../FmxMBTraitTest.class.st | 2 +- 5 files changed, 22 insertions(+), 37 deletions(-) delete mode 100644 src/Famix-MetamodelBuilder-Core/FmxMBTraitsGeneralizationError.class.st diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 16ce44953..50f49b273 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -129,20 +129,16 @@ FmxMBBehavior >> allTransitiveTraitsIncludingClassGeneralization [ ^ self allTransitiveTraits ] -{ #category : 'converting' } -FmxMBBehavior >> asRelationSideNamed: aPropertyName [ - - ^ self property: aPropertyName -] - { #category : 'accessing' } -FmxMBBehavior >> classGeneralization [ +FmxMBBehavior >> annotationSuperclass [ + ^ self subclassResponsibility ] -{ #category : 'accessing' } -FmxMBBehavior >> classGeneralization: anObject [ - ^ self subclassResponsibility +{ #category : 'converting' } +FmxMBBehavior >> asRelationSideNamed: aPropertyName [ + + ^ self property: aPropertyName ] { #category : 'accessing' } @@ -278,11 +274,6 @@ FmxMBBehavior >> generateAddToCollection [ { #category : 'generating' } FmxMBBehavior >> generateAnnotation [ - | aSuperclassName | - aSuperclassName := (self classGeneralization isNil or: [ self classGeneralization = self defaultSuperclass ]) - ifTrue: [ self defaultSuperclassName ] - ifFalse: [ self classGeneralization fullName ]. - self addMethod: ('annotation @@ -291,7 +282,7 @@ FmxMBBehavior >> generateAnnotation [ {4} ^ self' format: { self name. - aSuperclassName. + self annotationSuperclass. self builder safeAnnotationPackageName. self optionalPragma }) classSide: true diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 942a27102..2b32ef546 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -44,6 +44,14 @@ FmxMBClass >> allTransitiveTraitsIncludingClassGeneralization [ ^ result ] +{ #category : 'accessing' } +FmxMBClass >> annotationSuperclass [ + + ^ (self classGeneralization isNil or: [ self classGeneralization = self defaultSuperclass ]) + ifTrue: [ self defaultSuperclassName ] + ifFalse: [ self classGeneralization fullName ] +] + { #category : 'accessing' } FmxMBClass >> classGeneralization [ ^ classGeneralization diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index c28b6de05..6aef25f27 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -21,20 +21,21 @@ FmxMBTrait >> allTraitGeneralizations [ ] { #category : 'accessing' } -FmxMBTrait >> classGeneralization [ +FmxMBTrait >> annotationSuperclass [ - ^ Trait + ^ self defaultSuperclassName ] { #category : 'accessing' } -FmxMBTrait >> classGeneralization: anObject [ - FmxMBTraitsGeneralizationError signal +FmxMBTrait >> classGeneralization [ + + ^ Trait ] { #category : 'accessing' } FmxMBTrait >> defaultSuperclass [ - ^ self classGeneralization + ^ Trait ] { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTraitsGeneralizationError.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTraitsGeneralizationError.class.st deleted file mode 100644 index 054a6e6a3..000000000 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTraitsGeneralizationError.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : 'FmxMBTraitsGeneralizationError', - #superclass : 'Error', - #category : 'Famix-MetamodelBuilder-Core-Implementation', - #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' -} - -{ #category : 'accessing' } -FmxMBTraitsGeneralizationError >> messageText [ - - - - ^ 'Traits cannot inherit from classes' -] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st index ca382db96..128cb3afa 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBTraitTest.class.st @@ -62,7 +62,7 @@ FmxMBTraitTest >> testTraitGeneralization [ aTrait := builder newTraitNamed: #TVariable. aClass := builder newClassNamed: #Variable. - self should: [aTrait --|> aClass] raise: FmxMBTraitsGeneralizationError + self should: [aTrait --|> aClass] raise: Error ] { #category : 'tests' } From 577388b29936c4735db36e35d74139953893cc5e Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 4 May 2026 16:52:26 +0200 Subject: [PATCH 078/121] =?UTF-8?q?Forbid=20to=20have=202=E2=80=AFsupercla?= =?UTF-8?q?sses=20for=20an=20entity=20in=20a=20MM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st | 6 +++++- .../FmxMBClassTest.class.st | 13 +++++++++++++ .../FamixPharoSmalltalkGenerator.class.st | 3 +-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 2b32ef546..dd4259527 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -59,7 +59,11 @@ FmxMBClass >> classGeneralization [ { #category : 'accessing' } FmxMBClass >> classGeneralization: anObject [ - + + classGeneralization ifNotNil: [ + self error: + 'Cannot have two superclasses for an entity. ' , self name , ' declared ' , classGeneralization name , ' as superclass and try to set also ' , anObject name + , ' as second superclass.' ]. classGeneralization := anObject. ^ anObject ] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st index 146472b03..c6a4adf10 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st @@ -18,6 +18,19 @@ FmxMBClassTest >> newEntityNamed: aString [ ^ builder newClassNamed: aString ] +{ #category : 'tests - names' } +FmxMBClassTest >> testCannotHaveTwoSuperclasses [ + + | class1 class2 class3 | + class1 := builder newClassNamed: #Class1. + class2 := builder newClassNamed: #Class2. + class3 := builder newClassNamed: #Class3. + + + class1 --|> class2. + self should: [ class1 --|> class3 ] raise: Error +] + { #category : 'tests - names' } FmxMBClassTest >> testSingularPropertyName [ diff --git a/src/Famix-PharoSmalltalk-Generator/FamixPharoSmalltalkGenerator.class.st b/src/Famix-PharoSmalltalk-Generator/FamixPharoSmalltalkGenerator.class.st index 26d0fcbeb..3a5d2ae0e 100644 --- a/src/Famix-PharoSmalltalk-Generator/FamixPharoSmalltalkGenerator.class.st +++ b/src/Famix-PharoSmalltalk-Generator/FamixPharoSmalltalkGenerator.class.st @@ -85,9 +85,8 @@ FamixPharoSmalltalkGenerator >> defineHierarchy [ annotationType --|> #TWithAttributes. annotationType --|> #TPackageable. - annotationTypeAttribute --|> namedEntity. - annotationTypeAttribute --|> #TEntityMetaLevelDependency. annotationTypeAttribute --|> sourcedEntity. + annotationTypeAttribute --|> #TEntityMetaLevelDependency. annotationTypeAttribute --|> #TAnnotationTypeAttribute. attribute --|> namedEntity. From 8c16d845e3be93da9721fb0a1ab0af8e2162322e Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 4 May 2026 17:47:57 +0200 Subject: [PATCH 079/121] Remove #sides that return something different from what the name suggested --- .../FmxMBBehavior.class.st | 14 ++------ .../FmxMBPlantTextVisitorPartial.class.st | 2 +- .../FmxMBRelationSideTest.class.st | 36 +++++++++---------- 3 files changed, 22 insertions(+), 30 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 50f49b273..71abf07c0 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -59,13 +59,11 @@ FmxMBBehavior >> addMethod: code protocol: protocol [ ] { #category : 'accessing' } -FmxMBBehavior >> addRelationSide: aRelationSide [ +FmxMBBehavior >> addRelationSide: aRelation [ - "skip duplicities" - (self sides anySatisfy: [ :each | each name = aRelationSide name ]) - ifTrue: [ ^ self ]. + (self relations anySatisfy: [ :relation | relation name = aRelation name ]) ifTrue: [ ^ self ]. - self sides add: aRelationSide + self propertiesAndRelations add: aRelation ] { #category : 'accessing' } @@ -505,12 +503,6 @@ FmxMBBehavior >> relations [ ^ self propertiesAndRelations select: #isRelation ] -{ #category : 'accessing' } -FmxMBBehavior >> sides [ - - ^ self propertiesAndRelations -] - { #category : 'name conversion' } FmxMBBehavior >> singularPropertyName [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitorPartial.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitorPartial.class.st index 42eb87c17..2e49b4d3b 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitorPartial.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitorPartial.class.st @@ -33,7 +33,7 @@ FmxMBPlantTextVisitorPartial >> isWantedClass: aClass [ { #category : 'testing' } FmxMBPlantTextVisitorPartial >> isWantedRelation: aRelationSide [ - ^ aRelationSide sides allSatisfy: [ :side | side relatedClass isNotNil and: [ self isWantedClass: side relatedClass ] ] + ^ aRelationSide relations allSatisfy: [ :side | side relatedClass isNotNil and: [ self isWantedClass: side relatedClass ] ] ] { #category : 'visiting' } diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st index 6a259069b..f1729a8a3 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st @@ -164,44 +164,44 @@ FmxMBRelationSideTest >> testPropertyReservedName [ FmxMBRelationSideTest >> testPropertyType [ "test if after changing of related trait of a relation side all will be consistent" - | tClass tComment tAccess side | + | tClass tComment tAccess relation | tClass := builder newTraitNamed: #TClass. tComment := builder newTraitNamed: #TComment. tAccess := builder newTraitNamed: #TAccess. - (side := tClass property: #property1) - (tComment property: #property2). + (relation := tClass property: #property1) - (tComment property: #property2). - self assert: side relatedEntity equals: tClass. - self assertCollection: tClass sides asArray equals: {side}. - self assertEmpty: tAccess sides. + self assert: relation relatedEntity equals: tClass. + self assertCollection: tClass relations asArray equals: {relation}. + self assertEmpty: tAccess relations. - side trait: tAccess. + relation trait: tAccess. - self assert: side relatedEntity equals: tAccess. - self assertEmpty: tClass sides. - self assertCollection: tAccess sides asArray equals: {side} + self assert: relation relatedEntity equals: tAccess. + self assertEmpty: tClass relations. + self assertCollection: tAccess relations asArray equals: {relation} ] { #category : 'tests' } FmxMBRelationSideTest >> testReconnection [ "test if after changing of related trait of a relation side all will be consistent" - | tClass tComment tAccess side | + | tClass tComment tAccess relation | tClass := builder newTraitNamed: #TClass. tComment := builder newTraitNamed: #TComment. tAccess := builder newTraitNamed: #TAccess. - (side := tClass property: #property1) - (tComment property: #property2). + (relation := tClass property: #property1) - (tComment property: #property2). - self assert: side relatedEntity equals: tClass. - self assertCollection: tClass sides asArray equals: {side}. - self assertEmpty: tAccess sides. + self assert: relation relatedEntity equals: tClass. + self assertCollection: tClass relations asArray equals: { relation }. + self assertEmpty: tAccess relations. - side trait: tAccess. + relation trait: tAccess. - self assert: side trait equals: tAccess. - self assertEmpty: tClass sides. - self assertCollection: tAccess sides asArray equals: {side} + self assert: relation trait equals: tAccess. + self assertEmpty: tClass relations. + self assertCollection: tAccess relations asArray equals: { relation } ] { #category : 'tests' } From 71e320710f01eee4d8da4b98c000014c4da6cee3 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 4 May 2026 18:26:06 +0200 Subject: [PATCH 080/121] Simplify code Remove dead code + simplify the superclass management of behaviors, epsecially classes --- .../FamixMetamodelBuilder.class.st | 10 ----- .../FmxMBBehavior.class.st | 37 +++++-------------- .../FmxMBClass.class.st | 25 ++++++++----- .../FmxMBClassGroup.class.st | 4 +- .../FmxMBModel.class.st | 5 ++- .../FmxMBTrait.class.st | 20 +--------- .../FmxMBBehaviorTest.class.st | 10 ----- .../FmxMBClassTest.class.st | 9 +++++ 8 files changed, 41 insertions(+), 79 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index a7a1493aa..fc916324b 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -325,16 +325,6 @@ In order to fix the issue you should use #remoteTrait:withPrefix: in your genera ^ self traitNamed: aSymbol ] -{ #category : 'generating' } -FamixMetamodelBuilder >> groupOf: aClass [ - - | group | - group := (self newClassGroupNamed: aClass name , 'Group') - innerClass: aClass; - yourself. - ^ group -] - { #category : 'accessing' } FamixMetamodelBuilder >> importingContextName [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 71abf07c0..28099e267 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -69,9 +69,8 @@ FmxMBBehavior >> addRelationSide: aRelation [ { #category : 'accessing' } FmxMBBehavior >> addTraitGeneralization: aTrait [ - (self traitGeneralizations includes: aTrait) - ifFalse: [ self traitGeneralizations add: aTrait ]. - + (self traitGeneralizations includes: aTrait) ifFalse: [ self traitGeneralizations add: aTrait ]. + ^ aTrait ] @@ -208,17 +207,6 @@ FmxMBBehavior >> commentWithRelations [ cr ] ] ] ] -{ #category : 'settings - default' } -FmxMBBehavior >> defaultSuperclass [ - - ^ MooseEntity -] - -{ #category : 'generating' } -FmxMBBehavior >> defaultSuperclassName [ - ^ self defaultSuperclass name -] - { #category : 'settings - default' } FmxMBBehavior >> defaultTag [ @@ -629,25 +617,20 @@ FmxMBBehavior >> traitGeneralizations [ ^ traitGeneralizations ifNil: [ traitGeneralizations := OrderedCollection new ] ] -{ #category : 'accessing' } -FmxMBBehavior >> uses: aTrait [ - - ^ self generalization: aTrait -] - { #category : 'testing selectors' } FmxMBBehavior >> withGroup [ - ^ self builder groupOf: self + + ^ (self builder newClassGroupNamed: self name , 'Group') + innerClass: self; + yourself ] { #category : 'generalization' } FmxMBBehavior >> withPrecedenceOf: aTrait [ - self additionalProperties - at: #precedingTrait - put: - (aTrait isSymbol - ifTrue: [ (self builder getTraitNamed: aTrait) fullName ] - ifFalse: [ aTrait fullName ]) + + self additionalProperties at: #precedingTrait put: (aTrait isSymbol + ifTrue: [ (self builder getTraitNamed: aTrait) fullName ] + ifFalse: [ aTrait fullName ]) ] { #category : 'testing selectors' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index dd4259527..763b6302c 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -47,9 +47,7 @@ FmxMBClass >> allTransitiveTraitsIncludingClassGeneralization [ { #category : 'accessing' } FmxMBClass >> annotationSuperclass [ - ^ (self classGeneralization isNil or: [ self classGeneralization = self defaultSuperclass ]) - ifTrue: [ self defaultSuperclassName ] - ifFalse: [ self classGeneralization fullName ] + ^ self superclassName ] { #category : 'accessing' } @@ -68,17 +66,18 @@ FmxMBClass >> classGeneralization: anObject [ ^ anObject ] +{ #category : 'settings - default' } +FmxMBClass >> defaultSuperclassName [ + + ^ #MooseEntity +] + { #category : 'generating' } FmxMBClass >> generate [ - | superclassName | - superclassName := self classGeneralization - ifNil: [ self defaultSuperclassName ] - ifNotNil: #fullName. - self builder environment createClassNamed: self fullName asSymbol - superclass: superclassName + superclass: self superclassName traitDefinitions: self allTraitDefinitions precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) properties: (self propertiesAndRelations select: #producesSlot) @@ -254,6 +253,14 @@ FmxMBClass >> subclassOf: aClass [ self generalization: aClass ] +{ #category : 'settings - default' } +FmxMBClass >> superclassName [ + + ^ self classGeneralization + ifNil: [ self defaultSuperclassName ] + ifNotNil: #fullName +] + { #category : 'accessing' } FmxMBClass >> traitsFromRelations [ "returns traits defined by relations" diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st index d8b07d56b..73d7596c1 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st @@ -10,9 +10,9 @@ Class { } { #category : 'settings - default' } -FmxMBClassGroup >> defaultSuperclass [ +FmxMBClassGroup >> defaultSuperclassName [ - ^ MooseSpecializedGroup + ^ #MooseSpecializedGroup ] { #category : 'settings - default' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st index 17ab0bcc2..4f3c5b61e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st @@ -7,8 +7,9 @@ Class { } { #category : 'settings - default' } -FmxMBModel >> defaultSuperclass [ - ^ MooseModel +FmxMBModel >> defaultSuperclassName [ + + ^ #MooseModel ] { #category : 'settings - default' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index 6aef25f27..6740e4a84 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -22,25 +22,7 @@ FmxMBTrait >> allTraitGeneralizations [ { #category : 'accessing' } FmxMBTrait >> annotationSuperclass [ - - ^ self defaultSuperclassName -] - -{ #category : 'accessing' } -FmxMBTrait >> classGeneralization [ - - ^ Trait -] - -{ #category : 'accessing' } -FmxMBTrait >> defaultSuperclass [ - - ^ Trait -] - -{ #category : 'accessing' } -FmxMBTrait >> defaultSuperclassName [ - "In case of Traits we want the annotation to point Object as superclass." + "For trait we declare the Fame superclass as Object" ^ 'Object' ] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBBehaviorTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBBehaviorTest.class.st index bba2513ab..969fb1f7f 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBBehaviorTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBBehaviorTest.class.st @@ -54,16 +54,6 @@ FmxMBBehaviorTest >> testCustomTestingSelectorsAtOnce [ ] -{ #category : 'tests' } -FmxMBBehaviorTest >> testDefaultSuperclass [ - - | entity | - - entity := builder newClassNamed: #Entity. - - self assert: entity defaultSuperclass name equals: #MooseEntity. -] - { #category : 'tests' } FmxMBBehaviorTest >> testPluralOf [ diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st index c6a4adf10..f66f29f31 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBClassTest.class.st @@ -31,6 +31,15 @@ FmxMBClassTest >> testCannotHaveTwoSuperclasses [ self should: [ class1 --|> class3 ] raise: Error ] +{ #category : 'tests' } +FmxMBClassTest >> testDefaultSuperclassName [ + + | entity | + entity := builder newClassNamed: #Entity. + + self assert: entity defaultSuperclassName equals: #MooseEntity +] + { #category : 'tests - names' } FmxMBClassTest >> testSingularPropertyName [ From 41d457f778f21fd965f82954662fcc780fa69e0f Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 4 May 2026 18:43:25 +0200 Subject: [PATCH 081/121] Make FmxMBImportingContext a subclass of FmxMBClass and remove duplicated code --- .../FamixJavaImportingContext.class.st | 2 + .../FmxMBImportingContext.class.st | 48 ++++++++----------- .../FmxMBRingEnvironment.class.st | 2 +- .../FamixStImportingContext.class.st | 2 + .../FamixTest1ImportingContext.class.st | 2 + 5 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/Famix-Java-Entities/FamixJavaImportingContext.class.st b/src/Famix-Java-Entities/FamixJavaImportingContext.class.st index 1c44484c1..9b569c99b 100644 --- a/src/Famix-Java-Entities/FamixJavaImportingContext.class.st +++ b/src/Famix-Java-Entities/FamixJavaImportingContext.class.st @@ -1,6 +1,8 @@ " This class is used to choose the entities to be imported when loading a model from file. It is used by `MiImportingContextPresenter` in a `MiImportModelFromFileDialog` to import a FamixJavaModel. + + " Class { #name : 'FamixJavaImportingContext', diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index 581e13700..426313892 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -13,7 +13,7 @@ newBuilder " Class { #name : 'FmxMBImportingContext', - #superclass : 'FmxMBBehavior', + #superclass : 'FmxMBClass', #category : 'Famix-MetamodelBuilder-Core-Implementation', #package : 'Famix-MetamodelBuilder-Core', #tag : 'Implementation' @@ -25,49 +25,36 @@ FmxMBImportingContext >> acceptVisitor: aVisitor [ ^ aVisitor visitImportingContext: self ] -{ #category : 'accessing' } -FmxMBImportingContext >> classGeneralization [ - - ^ FamixImportingContext -] - { #category : 'accessing' } FmxMBImportingContext >> comment [ ^ 'This class is used to choose the entities to be imported when loading a model from file. -It is used by `MiImportingContextPresenter` in a `MiImportModelFromFileDialog` to import a {1}Model.' - format: { self builder configuration prefix } +It is used by `MiImportingContextPresenter` in a `MiImportModelFromFileDialog` to import a {1}Model.' format: { self builder configuration prefix } ] -{ #category : 'settings - default' } -FmxMBImportingContext >> defaultSuperclass [ +{ #category : 'accessing' } +FmxMBImportingContext >> defaultSuperclassName [ - ^ self classGeneralization + ^ #FamixImportingContext ] { #category : 'generating' } FmxMBImportingContext >> generate [ - | superclass | - superclass := self classGeneralization - ifNil: [ self defaultSuperclassName ] - ifNotNil: #name. - - self builder environment - createClassNamed: self fullName asSymbol - superclass: superclass - traitDefinitions: self allTraitDefinitions - precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) - properties: (self propertiesAndRelations select: #producesSlot) - in: self packageName - tag: self tag - comment: self comment. + super generate. self generateImportingContextMetamodel. self generateShouldImport. self generateImport ] +{ #category : 'generating' } +FmxMBImportingContext >> generateAnnotation [ + "We do not want the importing context to be part of the MM so we skip this method generation" + + +] + { #category : 'generating-methods' } FmxMBImportingContext >> generateImport [ @@ -126,8 +113,15 @@ FmxMBImportingContext >> generateShouldImport [ protocol: #testing ] ] ] +{ #category : 'testing' } +FmxMBImportingContext >> isRoot [ + "I am not a MM class root because I am not part of the MM" + + ^ false +] + { #category : 'accessing' } FmxMBImportingContext >> name [ - ^ 'ImportingContext' + ^ super name ifNil:[ 'ImportingContext'] ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 21df45ae6..5456fb4f9 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -198,7 +198,7 @@ FmxMBRingEnvironment >> recordMethodRemovalsOf: realClass [ "First we removed the generated methods should not be here anymore" (generatedMethodNamesOfRealClass difference: selectorsToGenerate) ifNotEmpty: [ :selectorsOfRemovedGeneratedMethod | - changesToApply add: (FmxMethodRemovals className: realClass name isClassSide: realClass isClassSide selectors: selectorsOfRemovedGeneratedMethod) ] + changesToApply add: (FmxMethodRemovals className: realClass instanceSide name isClassSide: realClass isClassSide selectors: selectorsOfRemovedGeneratedMethod) ] ] { #category : 'accessing' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStImportingContext.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStImportingContext.class.st index 41f9ebf9f..7935b998c 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStImportingContext.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStImportingContext.class.st @@ -1,6 +1,8 @@ " This class is used to choose the entities to be imported when loading a model from file. It is used by `MiImportingContextPresenter` in a `MiImportModelFromFileDialog` to import a FamixStModel. + + " Class { #name : 'FamixStImportingContext', diff --git a/src/Famix-Test1-Entities/FamixTest1ImportingContext.class.st b/src/Famix-Test1-Entities/FamixTest1ImportingContext.class.st index a58688d45..b94119762 100644 --- a/src/Famix-Test1-Entities/FamixTest1ImportingContext.class.st +++ b/src/Famix-Test1-Entities/FamixTest1ImportingContext.class.st @@ -1,6 +1,8 @@ " This class is used to choose the entities to be imported when loading a model from file. It is used by `MiImportingContextPresenter` in a `MiImportModelFromFileDialog` to import a FamixTest1Model. + + " Class { #name : 'FamixTest1ImportingContext', From 271ba2d8c64bcd3b38090fb8ce73cc4a7bce0757 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 4 May 2026 20:23:19 +0200 Subject: [PATCH 082/121] Improve the way to get a method selector --- src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st index 79d09efe6..dbc567c02 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st @@ -80,10 +80,7 @@ FmxMethodAddition >> protocol: anObject [ FmxMethodAddition >> selector [ "Cached" - ^ selector ifNil: [ - selector := (self class compiler - permitUndeclared: true; - compile: sourceCode) selector ] + ^ selector ifNil: [ selector := (OCParser parseMethod: sourceCode) selector ] ] { #category : 'accessing' } From 2300c4b7e74e942bf2cb083920b1cd9fb0bf9947 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 4 May 2026 20:23:58 +0200 Subject: [PATCH 083/121] Remove dead code --- .../FmxMBRingEnvironment.class.st | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 5456fb4f9..72325afc7 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -201,22 +201,6 @@ FmxMBRingEnvironment >> recordMethodRemovalsOf: realClass [ changesToApply add: (FmxMethodRemovals className: realClass instanceSide name isClassSide: realClass isClassSide selectors: selectorsOfRemovedGeneratedMethod) ] ] -{ #category : 'accessing' } -FmxMBRingEnvironment >> recordRemovalOfGeneratedEntitiesNotPresentIn: resolvedClasses [ - "Since the last generation it is possible some behaviorals were removed from the generator. In that case we should remove them. We will remove all classes and traits of Famix that are not part of the current generator." - - (self changesOfType: FmxPackageAddition) - collect: #systemPackage - thenDo: [ :package | - package ifNotNil: [ - package definedClasses - select: #isMetamodelEntity - thenDo: [ :class | - resolvedClasses - detect: [ :rgClass | rgClass name = class name ] - ifNone: [ changesToApply add: (FmxClassRemoval class: class) ] ] ] ] -] - { #category : 'accessing' } FmxMBRingEnvironment >> recordRemovalOfGeneratedPackagesAndClasses [ "Since the last generation it is possible some behaviorals were removed from the generator. In that case we should remove them. We will remove all classes and traits of Famix that are not part of the current generator." From 45347f2c4480fca793b546ba1326e10746e78ea0 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 4 May 2026 20:39:17 +0200 Subject: [PATCH 084/121] Generate #package: pragma en remote setters --- ...ationAttributesGenerationStrategy.class.st | 91 +++++++++---------- ...mixTestComposed1CustomEntity1.extension.st | 4 + ...mixTestComposed1CustomEntity2.extension.st | 4 + ...mixTestComposed1CustomEntity3.extension.st | 4 + ...mixTestComposed1CustomEntity4.extension.st | 4 + ...mixTestComposed1CustomEntity5.extension.st | 2 + .../FamixTestComposed1Method.extension.st | 2 + ...mixTestComposed2CustomEntity1.extension.st | 4 + ...mixTestComposed2CustomEntity2.extension.st | 4 + ...mixTestComposed2CustomEntity3.extension.st | 4 + ...mixTestComposed2CustomEntity4.extension.st | 4 + ...mixTestComposed2CustomEntity5.extension.st | 2 + 12 files changed, 81 insertions(+), 48 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st index 44cbeb88b..90cc8eb70 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st @@ -52,58 +52,53 @@ FmxMBRelationAttributesGenerationStrategy >> generateGetterCoreOn: aStream for: { #category : 'generation' } FmxMBRelationAttributesGenerationStrategy >> generateSetterCoreOn: aStream for: aRelationSide [ - (aRelationSide isOne and: [ aRelationSide oppositeSide isOne ]) ifTrue: [ - aStream - tab; - nextPutAll: - ('(self attributeAt: #{1} ifAbsentPut: [nil]) == anObject ifTrue: [ ^ anObject ].' - format: { aRelationSide name }); - cr; - tab; - nextPutAll: 'anObject ifNil: [ | otherSide |'; - cr; - tab; - tab; - nextPutAll: - ('otherSide := self {1}.' format: { aRelationSide name }); - cr; - tab; - tab; - nextPutAll: ('self attributeAt: #{1} put: anObject.' format: - { aRelationSide name }); - cr; - tab; - tab; - nextPutAll: - ('otherSide {1}: nil ]' format: { aRelationSide oppositeSide name }); - cr; - tab; - nextPutAll: - ('ifNotNil: [ ' format: { aRelationSide oppositeSide name }); - cr; - tab; - tab; - nextPutAll: ('self attributeAt: #{1} put: anObject.' format: - { aRelationSide name }); - cr; - tab; - tab; - nextPutAll: - ('anObject {1}: self ]' format: { aRelationSide oppositeSide name }) ]. + aRelationSide remoteBuilderDo: [ :aRemoteBuilder | + aStream + tab; + nextPutAll: ('' format: { aRemoteBuilder generator packageName }); + cr; + cr ]. - aRelationSide isMany ifTrue: [ - aStream - tab; - nextPutAll: - ('self {1} value: anObject' format: { aRelationSide name }) ]. + (aRelationSide isOne and: [ aRelationSide oppositeSide isOne ]) ifTrue: [ + aStream + tab; + nextPutAll: ('(self attributeAt: #{1} ifAbsentPut: [nil]) == anObject ifTrue: [ ^ anObject ].' format: { aRelationSide name }); + cr; + tab; + nextPutAll: 'anObject ifNil: [ | otherSide |'; + cr; + tab; + tab; + nextPutAll: ('otherSide := self {1}.' format: { aRelationSide name }); + cr; + tab; + tab; + nextPutAll: ('self attributeAt: #{1} put: anObject.' format: { aRelationSide name }); + cr; + tab; + tab; + nextPutAll: ('otherSide {1}: nil ]' format: { aRelationSide oppositeSide name }); + cr; + tab; + nextPutAll: ('ifNotNil: [ ' format: { aRelationSide oppositeSide name }); + cr; + tab; + tab; + nextPutAll: ('self attributeAt: #{1} put: anObject.' format: { aRelationSide name }); + cr; + tab; + tab; + nextPutAll: ('anObject {1}: self ]' format: { aRelationSide oppositeSide name }) ]. + + aRelationSide isMany ifTrue: [ + aStream + tab; + nextPutAll: ('self {1} value: anObject' format: { aRelationSide name }) ]. - (aRelationSide oppositeSide isMany and: [ aRelationSide isOne ]) - ifTrue: [ + (aRelationSide oppositeSide isMany and: [ aRelationSide isOne ]) ifTrue: [ aStream tab; - nextPutAll: - ('self attributeAt: #{1} put: (FMMultivalueLink on: self update: #{2} from: self {1} to: anObject).' - format: { + nextPutAll: ('self attributeAt: #{1} put: (FMMultivalueLink on: self update: #{2} from: self {1} to: anObject).' format: { aRelationSide name. aRelationSide oppositeSide name }) ] ] diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity1.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity1.extension.st index 281e55087..958f38251 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity1.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity1.extension.st @@ -14,6 +14,8 @@ FamixTestComposed1CustomEntity1 >> c21 [ FamixTestComposed1CustomEntity1 >> c21: anObject [ + + (self attributeAt: #c21 ifAbsentPut: [nil]) == anObject ifTrue: [ ^ anObject ]. anObject ifNil: [ | otherSide | otherSide := self c21. @@ -40,6 +42,8 @@ FamixTestComposed1CustomEntity1 >> customEntity1 [ FamixTestComposed1CustomEntity1 >> customEntity1: anObject [ + + (self attributeAt: #customEntity1 ifAbsentPut: [nil]) == anObject ifTrue: [ ^ anObject ]. anObject ifNil: [ | otherSide | otherSide := self customEntity1. diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity2.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity2.extension.st index cc577f747..439768f6e 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity2.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity2.extension.st @@ -16,6 +16,8 @@ FamixTestComposed1CustomEntity2 >> c22s [ FamixTestComposed1CustomEntity2 >> c22s: anObject [ + + self c22s value: anObject ] @@ -33,5 +35,7 @@ FamixTestComposed1CustomEntity2 >> customEntity2 [ FamixTestComposed1CustomEntity2 >> customEntity2: anObject [ + + self attributeAt: #customEntity2 put: (FMMultivalueLink on: self update: #customEntities2 from: self customEntity2 to: anObject). ] diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity3.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity3.extension.st index 9e5a62c29..d0b7f4c16 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity3.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity3.extension.st @@ -14,6 +14,8 @@ FamixTestComposed1CustomEntity3 >> c23 [ FamixTestComposed1CustomEntity3 >> c23: anObject [ + + self attributeAt: #c23 put: (FMMultivalueLink on: self update: #c13s from: self c23 to: anObject). ] @@ -33,5 +35,7 @@ FamixTestComposed1CustomEntity3 >> customEntities3 [ FamixTestComposed1CustomEntity3 >> customEntities3: anObject [ + + self customEntities3 value: anObject ] diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity4.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity4.extension.st index 02421ade2..32dc5c7ba 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity4.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity4.extension.st @@ -16,6 +16,8 @@ FamixTestComposed1CustomEntity4 >> c24s [ FamixTestComposed1CustomEntity4 >> c24s: anObject [ + + self c24s value: anObject ] @@ -34,5 +36,7 @@ FamixTestComposed1CustomEntity4 >> customEntities4 [ FamixTestComposed1CustomEntity4 >> customEntities4: anObject [ + + self customEntities4 value: anObject ] diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity5.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity5.extension.st index eb73c7df4..316a8c619 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity5.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1CustomEntity5.extension.st @@ -16,5 +16,7 @@ FamixTestComposed1CustomEntity5 >> associations [ FamixTestComposed1CustomEntity5 >> associations: anObject [ + + self associations value: anObject ] diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1Method.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1Method.extension.st index 6829473a9..8f23b95df 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1Method.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed1Method.extension.st @@ -15,6 +15,8 @@ FamixTestComposed1Method >> standardEntity [ FamixTestComposed1Method >> standardEntity: anObject [ + + (self attributeAt: #standardEntity ifAbsentPut: [nil]) == anObject ifTrue: [ ^ anObject ]. anObject ifNil: [ | otherSide | otherSide := self standardEntity. diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity1.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity1.extension.st index 949aaffe8..b85ad4bb3 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity1.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity1.extension.st @@ -26,6 +26,8 @@ FamixTestComposed2CustomEntity1 >> c11 [ FamixTestComposed2CustomEntity1 >> c11: anObject [ + + (self attributeAt: #c11 ifAbsentPut: [nil]) == anObject ifTrue: [ ^ anObject ]. anObject ifNil: [ | otherSide | otherSide := self c11. @@ -40,6 +42,8 @@ FamixTestComposed2CustomEntity1 >> c11: anObject [ FamixTestComposed2CustomEntity1 >> c1: anObject [ + + (self attributeAt: #c1 ifAbsentPut: [nil]) == anObject ifTrue: [ ^ anObject ]. anObject ifNil: [ | otherSide | otherSide := self c1. diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity2.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity2.extension.st index 90f37dac4..4ca75f72f 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity2.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity2.extension.st @@ -14,6 +14,8 @@ FamixTestComposed2CustomEntity2 >> c12 [ FamixTestComposed2CustomEntity2 >> c12: anObject [ + + self attributeAt: #c12 put: (FMMultivalueLink on: self update: #c22s from: self c12 to: anObject). ] @@ -31,5 +33,7 @@ FamixTestComposed2CustomEntity2 >> c2 [ FamixTestComposed2CustomEntity2 >> c2: anObject [ + + self attributeAt: #c2 put: (FMMultivalueLink on: self update: #c22s from: self c2 to: anObject). ] diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity3.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity3.extension.st index 3ea05259d..51533b5fd 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity3.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity3.extension.st @@ -16,6 +16,8 @@ FamixTestComposed2CustomEntity3 >> c13s [ FamixTestComposed2CustomEntity3 >> c13s: anObject [ + + self c13s value: anObject ] @@ -35,5 +37,7 @@ FamixTestComposed2CustomEntity3 >> c3s [ FamixTestComposed2CustomEntity3 >> c3s: anObject [ + + self c3s value: anObject ] diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity4.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity4.extension.st index 23b96bc35..e85e49cfd 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity4.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity4.extension.st @@ -15,6 +15,8 @@ FamixTestComposed2CustomEntity4 >> c14s [ FamixTestComposed2CustomEntity4 >> c14s: anObject [ + + self c14s value: anObject ] @@ -33,5 +35,7 @@ FamixTestComposed2CustomEntity4 >> c4s [ FamixTestComposed2CustomEntity4 >> c4s: anObject [ + + self c4s value: anObject ] diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity5.extension.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity5.extension.st index e2685faa0..9f59d7272 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity5.extension.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposed2CustomEntity5.extension.st @@ -16,5 +16,7 @@ FamixTestComposed2CustomEntity5 >> associations [ FamixTestComposed2CustomEntity5 >> associations: anObject [ + + self associations value: anObject ] From 85c6298cc9531b721917365c5fc203b36274fe3f Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 4 May 2026 22:56:13 +0200 Subject: [PATCH 085/121] Fix bug removing extension methods from other generators during generation --- .../FmxMBRingEnvironment.class.st | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 72325afc7..e8ef54029 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -191,10 +191,13 @@ FmxMBRingEnvironment >> recordMethodRemovalsOf: realClass [ collect: #method thenReject: [ :m | m isFromTrait ]. + "In case we have an extension, we remove it if the package is the right one" + self flag: #todo. "Demeter. Clean package name management." + generatedMethodsOfRealClass := generatedMethodsOfRealClass reject: [ :method | (method hasPragmaNamed: #package:) and: [ ((method pragmaAt: #package:) argumentAt: 1) ~= self builder generator packageName ] ]. + generatedMethodNamesOfRealClass := generatedMethodsOfRealClass collect: #selector. - selectorsToGenerate := ((self changesOfType: FmxMethodAddition) select: [ :change | - change className = realClass instanceSide name and: [ change isClassSide = realClass isClassSide ] ]) collect: #selector. + selectorsToGenerate := ((self changesOfType: FmxMethodAddition) select: [ :change | change className = realClass instanceSide name and: [ change isClassSide = realClass isClassSide ] ]) collect: #selector. "First we removed the generated methods should not be here anymore" (generatedMethodNamesOfRealClass difference: selectorsToGenerate) ifNotEmpty: [ :selectorsOfRemovedGeneratedMethod | From f5f594a0a10d1ab3f37521fead1e83b9a407e0c6 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 4 May 2026 23:08:28 +0200 Subject: [PATCH 086/121] Small speedups --- .../FamixMetamodelGenerator.class.st | 22 ++++++++----------- .../FmxMBClass.class.st | 2 +- .../FmxMethodAddition.class.st | 6 ++--- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st index 1e770b687..2019ebbe5 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st @@ -88,7 +88,7 @@ FamixMetamodelGenerator class >> generateAllMetamodels [ { #category : 'generation' } FamixMetamodelGenerator class >> generateAllMetamodelsSuchAs: aBlock [ - (self metamodelsToGenerate select: aBlock) do: [ :mm | mm generate ] displayingProgress: [ :mm | 'Regenerate ' , mm name ] + (self metamodelsToGenerate select: aBlock) do: [ :mm | mm generate ] displayingProgress: [ :mm | 'Regenerate ' , mm name ] every: 200 ] { #category : 'generation' } @@ -351,18 +351,14 @@ FamixMetamodelGenerator >> initialize [ builder := self newBuilder. self adoptBuilder: builder. - subBuildersMapByPrefix := Dictionary newFrom: - (self class submetamodels collect: [ :each | - | subbuilder | - subbuilder := each - builderWithDefinitions. - subbuilder parentBuilder: self builder. - builder environment: builder environment. - each prefix -> subbuilder ]). - - metamodelToolGenerators := self class metamodelToolGenerators - collect: [ :generatorClass | - generatorClass forGenerator: self ] + subBuildersMapByPrefix := Dictionary newFrom: (self class submetamodels collect: [ :each | + | subbuilder | + subbuilder := each builderWithDefinitions. + subbuilder parentBuilder: self builder. + builder environment: builder environment. + each prefix -> subbuilder ]). + + metamodelToolGenerators := self class metamodelToolGenerators collect: [ :generatorClass | generatorClass forGenerator: self ] ] { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 763b6302c..75abdf96d 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -76,7 +76,7 @@ FmxMBClass >> defaultSuperclassName [ FmxMBClass >> generate [ self builder environment - createClassNamed: self fullName asSymbol + createClassNamed: self fullName superclass: self superclassName traitDefinitions: self allTraitDefinitions precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st index dbc567c02..f8de04d0a 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st @@ -47,7 +47,7 @@ FmxMethodAddition >> isRequired [ ifNotNil: [ :class | class compiledMethodAt: self selector - ifPresent: [ :method | (method hasPragmaNamed: #generated) and: (method sourceCode ~= sourceCode or: [ (method protocolName = protocol) not ]) ] + ifPresent: [ :method | (method hasPragmaNamed: #generated) and: [ (method protocolName = protocol) not or: [ method sourceCode ~= sourceCode ] ] ] ifAbsent: [ true ] ] ] @@ -78,9 +78,9 @@ FmxMethodAddition >> protocol: anObject [ { #category : 'testing' } FmxMethodAddition >> selector [ - "Cached" + "Cached - parsing only the signature" - ^ selector ifNil: [ selector := (OCParser parseMethod: sourceCode) selector ] + ^ selector ifNil: [ selector := (OCParser parseMethod: sourceCode lines first) selector ] ] { #category : 'accessing' } From 2a8414863f2cfcee5eeb162ebfdd6daf90df61ef Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 5 May 2026 02:30:00 +0200 Subject: [PATCH 087/121] Speed up --- .../FamixMetamodelBuilder.class.st | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index fc916324b..4059b88d7 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -438,9 +438,9 @@ FamixMetamodelBuilder >> newTrait [ { #category : 'initialization' } FamixMetamodelBuilder >> newTraitNamed: aTraitName [ - (self traits select: [ :each | - each fullName = (self configuration prefix , aTraitName) ]) - ifNotEmpty: [ FmxMBEntityAlreadyExists signal ]. + | fullName | + fullName := self configuration prefix , aTraitName. + (self traits select: [ :each | each fullName = fullName ]) ifNotEmpty: [ FmxMBEntityAlreadyExists signal ]. ^ self unsafeNewTraitNamed: aTraitName ] From 83a55ad0957d195f48093936037a5784a4b086c7 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 5 May 2026 15:01:03 +0200 Subject: [PATCH 088/121] Rename #classGeneralization to #superclass Which is way more obvious --- .../FamixMetamodelBuilder.class.st | 4 +- .../FmxMBBehavior.class.st | 4 +- .../FmxMBClass.class.st | 75 +++++++++---------- .../FmxMBEntityCreatorTrait.class.st | 2 +- .../FmxMBPlantTextVisitor.class.st | 10 +-- .../FmxMBPrintVisitor.class.st | 9 +-- .../FmxMBBuilderTest.class.st | 12 +++ .../FmxMBClassGeneralizationsTest.class.st | 64 ---------------- .../FmxMBConfigurationTest.class.st | 19 ----- .../FmxMBSuperclassesTests.class.st | 58 ++++++++++++++ .../FmxMBClass.extension.st | 6 +- .../MooseModelGenerator.class.st | 3 +- 12 files changed, 123 insertions(+), 143 deletions(-) delete mode 100644 src/Famix-MetamodelBuilder-Tests/FmxMBClassGeneralizationsTest.class.st delete mode 100644 src/Famix-MetamodelBuilder-Tests/FmxMBConfigurationTest.class.st create mode 100644 src/Famix-MetamodelBuilder-Tests/FmxMBSuperclassesTests.class.st diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index 4059b88d7..bf881245a 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -266,7 +266,7 @@ FamixMetamodelBuilder >> generateRemotes [ FamixMetamodelBuilder >> generateTestingMethodsOfRemoteEntities [ | entitiesWithRemoteSuperclasses | - entitiesWithRemoteSuperclasses := self classes groupedBy: [ :class | class remoteClassGeneratization ]. + entitiesWithRemoteSuperclasses := self classes groupedBy: [ :class | class remoteSuperclass ]. entitiesWithRemoteSuperclasses keysAndValuesDo: [ :remoteClass :subclasses | @@ -557,7 +557,7 @@ FamixMetamodelBuilder >> sortedClasses [ ^ self classes sorted: [ :class | class isModelClass ifTrue: [ -1 ] - ifFalse: [ class allClassGeneralizations size ] ] ascending + ifFalse: [ class allSuperclasses size ] ] ascending ] { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 28099e267..341450428 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -121,7 +121,7 @@ FmxMBBehavior >> allTransitiveTraits [ ] { #category : 'accessing' } -FmxMBBehavior >> allTransitiveTraitsIncludingClassGeneralization [ +FmxMBBehavior >> allTransitiveTraitsIncludingSuperclasses [ ^ self allTransitiveTraits ] @@ -227,7 +227,7 @@ FmxMBBehavior >> generalization: anObject [ ifFalse: [ anObject isMetamodelTrait ifTrue: [ self addTraitGeneralization: anObject ] - ifFalse: [ self classGeneralization: anObject ] ] + ifFalse: [ self superclass: anObject ] ] ] { #category : 'generating' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 75abdf96d..4f4beffec 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -2,9 +2,9 @@ Class { #name : 'FmxMBClass', #superclass : 'FmxMBBehavior', #instVars : [ - 'classGeneralization', 'isAbstractClass', - 'propertiesForEqualityCheck' + 'propertiesForEqualityCheck', + 'superclass' ], #category : 'Famix-MetamodelBuilder-Core-Implementation', #package : 'Famix-MetamodelBuilder-Core', @@ -19,28 +19,31 @@ FmxMBClass >> acceptVisitor: aVisitor [ ] { #category : 'accessing' } -FmxMBClass >> allClassGeneralizations [ +FmxMBClass >> allLocalTraits [ + ^ self traitsFromRelations , super allLocalTraits +] + +{ #category : 'accessing' } +FmxMBClass >> allSuperclasses [ + | result c g | result := OrderedCollection new. c := self. - [ g := c classGeneralization. - g isNotNil and: [ g isKindOf: FmxMBClass ] ] - whileTrue: [ result add: g. + self flag: #todo. "This #isKindOf: is just here for one object we use as superclass that is not a FmxMBClass in MooseModelGenerator... We sould kill that and simplify the code." + [ + g := c superclass. + g isNotNil and: [ g isKindOf: FmxMBClass ] ] whileTrue: [ + result add: g. c := g ]. ^ result ] { #category : 'accessing' } -FmxMBClass >> allLocalTraits [ - ^ self traitsFromRelations , super allLocalTraits -] - -{ #category : 'accessing' } -FmxMBClass >> allTransitiveTraitsIncludingClassGeneralization [ +FmxMBClass >> allTransitiveTraitsIncludingSuperclasses [ | result | - result := super allTransitiveTraitsIncludingClassGeneralization. - self classGeneralization ifNotNil: [ :class | class ~= Object ifTrue: [ result addAll: class allTransitiveTraitsIncludingClassGeneralization ] ]. + result := super allTransitiveTraitsIncludingSuperclasses. + self superclass ifNotNil: [ :class | class ~= Object ifTrue: [ result addAll: class allTransitiveTraitsIncludingSuperclasses ] ]. ^ result ] @@ -50,22 +53,6 @@ FmxMBClass >> annotationSuperclass [ ^ self superclassName ] -{ #category : 'accessing' } -FmxMBClass >> classGeneralization [ - ^ classGeneralization -] - -{ #category : 'accessing' } -FmxMBClass >> classGeneralization: anObject [ - - classGeneralization ifNotNil: [ - self error: - 'Cannot have two superclasses for an entity. ' , self name , ' declared ' , classGeneralization name , ' as superclass and try to set also ' , anObject name - , ' as second superclass.' ]. - classGeneralization := anObject. - ^ anObject -] - { #category : 'settings - default' } FmxMBClass >> defaultSuperclassName [ @@ -228,7 +215,8 @@ FmxMBClass >> isMetamodelClass [ { #category : 'testing' } FmxMBClass >> isRoot [ - ^ self classGeneralization isNil + + ^ self superclass isNil ] { #category : 'generating' } @@ -242,21 +230,32 @@ FmxMBClass >> optionalPragma [ ] { #category : 'accessing' } -FmxMBClass >> remoteClassGeneratization [ +FmxMBClass >> remoteSuperclass [ - ^ self allClassGeneralizations detect: #isRemote ifNone: [ nil ] + ^ self allSuperclasses detect: #isRemote ifNone: [ nil ] ] -{ #category : 'generalization' } -FmxMBClass >> subclassOf: aClass [ - - self generalization: aClass +{ #category : 'accessing' } +FmxMBClass >> superclass [ + + ^ superclass +] + +{ #category : 'accessing' } +FmxMBClass >> superclass: aFmxClass [ + + superclass ifNotNil: [ + self error: + 'Cannot have two superclasses for an entity. ' , self name , ' declared ' , superclass name , ' as superclass and try to set also ' , aFmxClass name + , ' as second superclass.' ]. + superclass := aFmxClass. + ^ aFmxClass ] { #category : 'settings - default' } FmxMBClass >> superclassName [ - ^ self classGeneralization + ^ self superclass ifNil: [ self defaultSuperclassName ] ifNotNil: #fullName ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st index 455121084..a0528f01d 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st @@ -28,7 +28,7 @@ FmxMBEntityCreatorTrait >> generateEntityCreationMethods [ self builder concreteClasses do: [ :class | self generateEntityCreationMethodFor: class. - (class allTransitiveTraitsIncludingClassGeneralization anySatisfy: [ :trait | trait prefix = #Famix and: [ trait name = #TNamedEntity ] ]) ifTrue: [ + (class allTransitiveTraitsIncludingSuperclasses anySatisfy: [ :trait | trait prefix = #Famix and: [ trait name = #TNamedEntity ] ]) ifTrue: [ self generateNamedEntityCreationMethodFor: class ] ] ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st index 5e6e58a4c..65a24df50 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st @@ -115,12 +115,10 @@ FmxMBPlantTextVisitor >> onlySingleUserOf: aTrait [ { #category : 'private' } FmxMBPlantTextVisitor >> recordGeneralizationsForClass: aClass mergingTraits: mergesTrait [ - aClass classGeneralization ifNotNil: [ :generalization | - generalizationDefinitions add: generalization -> aClass ]. - mergesTrait ifFalse: [ - aClass traitGeneralizations ifNotEmpty: [ :generalizations | - generalizations do: [ :generalization | - generalizationDefinitions add: generalization -> aClass ] ] ] + aClass superclass ifNotNil: [ :superclass | generalizationDefinitions add: superclass -> aClass ]. + mergesTrait ifFalse: [ + aClass traitGeneralizations ifNotEmpty: [ :generalizations | + generalizations do: [ :generalization | generalizationDefinitions add: generalization -> aClass ] ] ] ] { #category : 'visiting' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBPrintVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBPrintVisitor.class.st index 1f0cbbfd8..28fdb0f40 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBPrintVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBPrintVisitor.class.st @@ -48,13 +48,10 @@ FmxMBPrintVisitor >> visitClass: aClass [ self traceCrTab: ''. aClass name trace. self trace: ' -|> '. - (aClass classGeneralization + (aClass superclass ifNil: [ 'Entity' ] - ifNotNil: [ :generalization | generalization name ]) trace. - aClass traitGeneralizations ifNotEmpty: [ :generalizations | - generalizations - do: [ :generalization | generalization name trace ] - separatedBy: [ ', ' trace ] ]. + ifNotNil: #name) trace. + aClass traitGeneralizations ifNotEmpty: [ :generalizations | generalizations do: [ :generalization | generalization name trace ] separatedBy: [ ', ' trace ] ]. super visitClass: aClass ] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st index b34c5745a..5a8853316 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st @@ -41,6 +41,18 @@ FmxMBBuilderTest >> testClassNamed [ self assert: (builder classNamed: #C2) isNil. ] +{ #category : 'tests' } +FmxMBBuilderTest >> testConfiguration [ + | config | + config := builder configuration. + + self assert: config isNotNil. + + self deny: config shouldGenerateFileImportHelpers. + config shouldGenerateFileImportHelpers: true. + self assert: config shouldGenerateFileImportHelpers +] + { #category : 'tests' } FmxMBBuilderTest >> testEnsureClassNamed [ diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBClassGeneralizationsTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBClassGeneralizationsTest.class.st deleted file mode 100644 index 1d13ebe45..000000000 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBClassGeneralizationsTest.class.st +++ /dev/null @@ -1,64 +0,0 @@ -Class { - #name : 'FmxMBClassGeneralizationsTest', - #superclass : 'FmxMBTestCase', - #instVars : [ - 'named', - 'behavior', - 'class' - ], - #category : 'Famix-MetamodelBuilder-Tests-Tests', - #package : 'Famix-MetamodelBuilder-Tests', - #tag : 'Tests' -} - -{ #category : 'running' } -FmxMBClassGeneralizationsTest >> checkHierarchy [ - self assertEmpty: named allClassGeneralizations. - self assertCollection: behavior allClassGeneralizations hasSameElements: {named}. - self assertCollection: class allClassGeneralizations hasSameElements: {named . behavior} -] - -{ #category : 'running' } -FmxMBClassGeneralizationsTest >> setUp [ - - super setUp. - - named := builder newClassNamed: #Named. - behavior := builder newClassNamed: #Behavior. - class := builder newClassNamed: #Class. - -] - -{ #category : 'tests' } -FmxMBClassGeneralizationsTest >> testAllClassGeneralizations [ - - named <|-- behavior. - behavior <|-- class. - - self checkHierarchy. -] - -{ #category : 'tests' } -FmxMBClassGeneralizationsTest >> testAllClassGeneralizationsInChain [ - - named <|-- behavior <|-- class. - - self checkHierarchy. -] - -{ #category : 'tests' } -FmxMBClassGeneralizationsTest >> testAllClassGeneralizationsInChainInverted [ - - class --|> behavior --|> named. - - self checkHierarchy. -] - -{ #category : 'tests' } -FmxMBClassGeneralizationsTest >> testSubclassOf [ - - behavior subclassOf: named. - class subclassOf: behavior. - - self checkHierarchy. -] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBConfigurationTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBConfigurationTest.class.st deleted file mode 100644 index fc6bc7fb4..000000000 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBConfigurationTest.class.st +++ /dev/null @@ -1,19 +0,0 @@ -Class { - #name : 'FmxMBConfigurationTest', - #superclass : 'FmxMBTestCase', - #category : 'Famix-MetamodelBuilder-Tests-Tests', - #package : 'Famix-MetamodelBuilder-Tests', - #tag : 'Tests' -} - -{ #category : 'tests' } -FmxMBConfigurationTest >> testConfiguration [ - | config | - config := builder configuration. - - self assert: config isNotNil. - - self deny: config shouldGenerateFileImportHelpers. - config shouldGenerateFileImportHelpers: true. - self assert: config shouldGenerateFileImportHelpers -] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBSuperclassesTests.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBSuperclassesTests.class.st new file mode 100644 index 000000000..6f3e87cbe --- /dev/null +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBSuperclassesTests.class.st @@ -0,0 +1,58 @@ +Class { + #name : 'FmxMBSuperclassesTests', + #superclass : 'FmxMBTestCase', + #instVars : [ + 'named', + 'behavior', + 'class' + ], + #category : 'Famix-MetamodelBuilder-Tests-Tests', + #package : 'Famix-MetamodelBuilder-Tests', + #tag : 'Tests' +} + +{ #category : 'running' } +FmxMBSuperclassesTests >> checkHierarchy [ + + self assertEmpty: named allSuperclasses. + self assertCollection: behavior allSuperclasses hasSameElements: { named }. + self assertCollection: class allSuperclasses hasSameElements: { + named. + behavior } +] + +{ #category : 'running' } +FmxMBSuperclassesTests >> setUp [ + + super setUp. + + named := builder newClassNamed: #Named. + behavior := builder newClassNamed: #Behavior. + class := builder newClassNamed: #Class. + +] + +{ #category : 'tests' } +FmxMBSuperclassesTests >> testAllSuperclasses [ + + named <|-- behavior. + behavior <|-- class. + + self checkHierarchy. +] + +{ #category : 'tests' } +FmxMBSuperclassesTests >> testAllSuperclassesInChain [ + + named <|-- behavior <|-- class. + + self checkHierarchy. +] + +{ #category : 'tests' } +FmxMBSuperclassesTests >> testAllSuperclassesInChainInverted [ + + class --|> behavior --|> named. + + self checkHierarchy. +] diff --git a/src/Famix-Visitor-Generation/FmxMBClass.extension.st b/src/Famix-Visitor-Generation/FmxMBClass.extension.st index b0b93c098..3e85e732f 100644 --- a/src/Famix-Visitor-Generation/FmxMBClass.extension.st +++ b/src/Famix-Visitor-Generation/FmxMBClass.extension.st @@ -5,7 +5,7 @@ FmxMBClass >> addTraitsFromGeneralizationsIn: aCollection [ super addTraitsFromGeneralizationsIn: aCollection. - self classGeneralization ifNotNil: [ :superclass | + self superclass ifNotNil: [ :superclass | superclass addTraitsFromGeneralizationsIn: aCollection ]. ^ aCollection @@ -18,7 +18,7 @@ FmxMBClass >> behaviorsToVisit [ behaviorsToVisit := super behaviorsToVisit. "Visit superclass if it is not #FamixXYZEntity" - self classGeneralization ifNotNil: [ :superclass | + self superclass ifNotNil: [ :superclass | superclass name = #Entity ifFalse: [ behaviorsToVisit add: superclass ] ]. @@ -31,7 +31,7 @@ FmxMBClass >> traitsFromGeneralizations [ | traitsFromGeneralizations | traitsFromGeneralizations := super traitsFromGeneralizations. - self classGeneralization ifNotNil: [ :superclass | + self superclass ifNotNil: [ :superclass | superclass addTraitsFromGeneralizationsIn: traitsFromGeneralizations ]. ^ traitsFromGeneralizations diff --git a/src/Moose-Core-Generator/MooseModelGenerator.class.st b/src/Moose-Core-Generator/MooseModelGenerator.class.st index 71d8903b2..ecd10275d 100644 --- a/src/Moose-Core-Generator/MooseModelGenerator.class.st +++ b/src/Moose-Core-Generator/MooseModelGenerator.class.st @@ -33,13 +33,12 @@ MooseModelGenerator >> defineClasses [ super defineClasses. obj := builder newClassNamed: #Object. - obj classGeneralization: Object. + obj superclass: Object. "Cyril: I am REALLY not a fan of this. The superclass is always a FmxMBClass except for this one case... I hate that. It pushes us to have extensions of Object and some weird conditions in the code..." abstractGroup := builder newClassNamed: #AbstractGroup. group := builder newClassNamed: #Group. specializedGroup := builder newClassNamed: #SpecializedGroup. model := builder newClassNamed: #Model. entity := builder newClassNamed: #Entity - ] { #category : 'definition' } From 537993aa65fd101099342194b129503ed9f70b6d Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 5 May 2026 18:22:24 +0200 Subject: [PATCH 089/121] Do not mix real objects and FmxMBClass in FmaxMBClass>>superclass --- .../FmxMBClass.class.st | 15 ++++++++++++++- .../Object.extension.st | 7 ------- .../MooseModelGenerator.class.st | 1 - 3 files changed, 14 insertions(+), 9 deletions(-) delete mode 100644 src/Famix-MetamodelBuilder-Core/Object.extension.st diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 4f4beffec..bc705f897 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -55,6 +55,9 @@ FmxMBClass >> annotationSuperclass [ { #category : 'settings - default' } FmxMBClass >> defaultSuperclassName [ + "We have a special case with MooseObject that should inherit from Object." + + self isMooseObject ifTrue: [ ^ #Object ]. ^ #MooseEntity ] @@ -213,10 +216,19 @@ FmxMBClass >> isMetamodelClass [ ^ true ] +{ #category : 'testing' } +FmxMBClass >> isMooseObject [ + + ^ self name = 'Object' and: [ self prefix = 'Moose' ] +] + { #category : 'testing' } FmxMBClass >> isRoot [ - ^ self superclass isNil + self superclass ifNotNil: [ ^ false ]. + + "We have a special case with MooseObject because we do not want to consider it as a root but it inherits from Object." + ^ self isMooseObject not ] { #category : 'generating' } @@ -243,6 +255,7 @@ FmxMBClass >> superclass [ { #category : 'accessing' } FmxMBClass >> superclass: aFmxClass [ + "In the past we could have real objects here but this is not the case anymore" superclass ifNotNil: [ self error: diff --git a/src/Famix-MetamodelBuilder-Core/Object.extension.st b/src/Famix-MetamodelBuilder-Core/Object.extension.st deleted file mode 100644 index 69cd95d6e..000000000 --- a/src/Famix-MetamodelBuilder-Core/Object.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : 'Object' } - -{ #category : '*Famix-MetamodelBuilder-Core' } -Object >> fullName [ - - ^ self name -] diff --git a/src/Moose-Core-Generator/MooseModelGenerator.class.st b/src/Moose-Core-Generator/MooseModelGenerator.class.st index ecd10275d..3dec7f64d 100644 --- a/src/Moose-Core-Generator/MooseModelGenerator.class.st +++ b/src/Moose-Core-Generator/MooseModelGenerator.class.st @@ -33,7 +33,6 @@ MooseModelGenerator >> defineClasses [ super defineClasses. obj := builder newClassNamed: #Object. - obj superclass: Object. "Cyril: I am REALLY not a fan of this. The superclass is always a FmxMBClass except for this one case... I hate that. It pushes us to have extensions of Object and some weird conditions in the code..." abstractGroup := builder newClassNamed: #AbstractGroup. group := builder newClassNamed: #Group. specializedGroup := builder newClassNamed: #SpecializedGroup. From d0357dd18c98d3b7e6b630a6fa7e978ce439d079 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 5 May 2026 18:29:49 +0200 Subject: [PATCH 090/121] Code simplification --- src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index bc705f897..74e6eff70 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -26,15 +26,14 @@ FmxMBClass >> allLocalTraits [ { #category : 'accessing' } FmxMBClass >> allSuperclasses [ - | result c g | + | result class g | result := OrderedCollection new. - c := self. - self flag: #todo. "This #isKindOf: is just here for one object we use as superclass that is not a FmxMBClass in MooseModelGenerator... We sould kill that and simplify the code." + class := self. [ - g := c superclass. - g isNotNil and: [ g isKindOf: FmxMBClass ] ] whileTrue: [ + g := class superclass. + g isNotNil ] whileTrue: [ result add: g. - c := g ]. + class := g ]. ^ result ] @@ -43,7 +42,7 @@ FmxMBClass >> allTransitiveTraitsIncludingSuperclasses [ | result | result := super allTransitiveTraitsIncludingSuperclasses. - self superclass ifNotNil: [ :class | class ~= Object ifTrue: [ result addAll: class allTransitiveTraitsIncludingSuperclasses ] ]. + self superclass ifNotNil: [ :class | result addAll: class allTransitiveTraitsIncludingSuperclasses ]. ^ result ] From c735dfc7abbd292010f912b2f8a5f48c3d0e8690 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Wed, 6 May 2026 01:11:05 +0200 Subject: [PATCH 091/121] Introduce FmxMBClassEntity to simplify FmxMBClass and its othes subclasses --- .../FamixMetamodelBuilder.class.st | 11 +- .../FmxMBClass.class.st | 138 ++--------------- .../FmxMBClassEntity.class.st | 146 ++++++++++++++++++ .../FmxMBEntity.class.st | 6 + .../FmxMBImportingContext.class.st | 9 +- .../FmxMBModel.class.st | 9 -- .../FamixTest3TypeGroup.class.st | 119 -------------- 7 files changed, 172 insertions(+), 266 deletions(-) create mode 100644 src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index bf881245a..6a49683f4 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -142,7 +142,7 @@ FamixMetamodelBuilder >> classes [ { #category : 'accessing' } FamixMetamodelBuilder >> concreteClasses [ - ^ self classes reject: [ :class | class isAbstractClass or: [ class isModelClass or: [ class isMetamodelClassGroup ] ] ] + ^ self classes select: #isConcreteClass ] { #category : 'accessing' } @@ -377,10 +377,11 @@ FamixMetamodelBuilder >> newAbstractClassNamed: aClassName [ FamixMetamodelBuilder >> newClass [ | aClass | - aClass := FmxMBClass new. - aClass builder: self. - aClass prefix: self configuration prefix. - aClass packageName: self configuration packageName. + aClass := FmxMBClassEntity new + builder: self; + prefix: self configuration prefix; + packageName: self configuration packageName; + yourself. self classes add: aClass. ^ aClass ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 74e6eff70..34d06c735 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -2,8 +2,6 @@ Class { #name : 'FmxMBClass', #superclass : 'FmxMBBehavior', #instVars : [ - 'isAbstractClass', - 'propertiesForEqualityCheck', 'superclass' ], #category : 'Famix-MetamodelBuilder-Core-Implementation', @@ -11,6 +9,12 @@ Class { #tag : 'Implementation' } +{ #category : 'testing' } +FmxMBClass class >> isAbstract [ + + ^ self = FmxMBClass +] + { #category : 'visitor' } FmxMBClass >> acceptVisitor: aVisitor [ @@ -74,89 +78,10 @@ FmxMBClass >> generate [ tag: self tag comment: self commentWithRelations. - self generateAccessors. - self generateAnnotation. - self generateIsAbstractMethodIfNecessary. - - self generateTestingMethods. - self generateMetamodelMethod. - - self generateAddToCollection. - - self generateEqualsMethod. - self generateHashMethod -] - -{ #category : 'generating-methods' } -FmxMBClass >> generateEqualsMethod [ - - propertiesForEqualityCheck ifNotNil: [ - | code | - code := String streamContents: [ :stream | - | variableName | - variableName := 'a' , self fullName. - stream << '= '. - stream << variableName. - stream << ' - - - ^ '. - stream - << variableName; - << ' '; - << propertiesForEqualityCheck first; - << ' = self '; - << propertiesForEqualityCheck first. - propertiesForEqualityCheck size > 1 ifTrue: [ - 2 to: propertiesForEqualityCheck size do: [ :idx | - stream << ' and: [ '. - stream - << variableName; - << ' '; - << (propertiesForEqualityCheck at: idx); - << ' = self '; - << (propertiesForEqualityCheck at: idx) ]. - 2 to: propertiesForEqualityCheck size do: [ :idx | stream << '] ' ] ] ]. - - self addMethod: code protocol: #comparing ] -] - -{ #category : 'generating-methods' } -FmxMBClass >> generateHashMethod [ - - propertiesForEqualityCheck ifNotNil: [ - | code | - code := String streamContents: [ :stream | - stream << 'hash'. - stream << ' - - - ^ '. - stream - << 'self '; - << propertiesForEqualityCheck first; - << ' hash '. - propertiesForEqualityCheck size > 1 ifTrue: [ - 2 to: propertiesForEqualityCheck size do: [ :idx | - stream - << 'bitXor: self '; - << (propertiesForEqualityCheck at: idx); - << ' hash ' ] ] ]. - - self addMethod: code protocol: #comparing ] -] - -{ #category : 'generating' } -FmxMBClass >> generateIsAbstractMethodIfNecessary [ - - self isAbstractClass ifTrue: [ - self - addMethod: ('isAbstract - - - ^ self == {1}' format: { self fullName }) - classSide: true - protocol: #testing ] + self + generateAccessors; + generateAnnotation; + generateMetamodelMethod ] { #category : 'generating-methods' } @@ -182,33 +107,6 @@ FmxMBClass >> generateRemotes [ (self propertiesAndRelations select: #isRemote) do: [ :each | each generateAccessorsIn: self ] ] -{ #category : 'generating-methods' } -FmxMBClass >> generateTestingMethods [ - - self isRoot ifTrue: [ - | selectorsToGenerate | - selectorsToGenerate := Set new. - builder testingSelectorsMapping keysAndValuesDo: [ :concernedClass :selectors | - (builder shouldGeneratorTestingMethodsOf: concernedClass in: self) ifTrue: [ selectorsToGenerate addAll: selectors ] ]. - - (selectorsToGenerate difference: (self traitGeneralizations flatCollect: #testingSelectors)) do: [ :sel | - self addMethod: (sel , '\\ \ ^ false') withCRs protocol: #testing ] ]. - - super generateTestingMethods -] - -{ #category : 'testing' } -FmxMBClass >> isAbstractClass [ - - ^ isAbstractClass ifNil: [ false ] -] - -{ #category : 'accessing' } -FmxMBClass >> isAbstractClass: aBoolean [ - - isAbstractClass := aBoolean -] - { #category : 'testing' } FmxMBClass >> isMetamodelClass [ @@ -230,16 +128,6 @@ FmxMBClass >> isRoot [ ^ self isMooseObject not ] -{ #category : 'generating' } -FmxMBClass >> optionalPragma [ - - ^ self isAbstractClass - ifTrue: [ - ' - ' ] - ifFalse: [ super optionalPragma ] -] - { #category : 'accessing' } FmxMBClass >> remoteSuperclass [ @@ -280,9 +168,3 @@ FmxMBClass >> traitsFromRelations [ collect: #trait thenSelect: #isNotNil) asSet ] - -{ #category : 'generalization' } -FmxMBClass >> withEqualityCheckOn: aCollectionOfPropertySymbol [ - - propertiesForEqualityCheck := aCollectionOfPropertySymbol -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st new file mode 100644 index 000000000..331d87d27 --- /dev/null +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st @@ -0,0 +1,146 @@ +Class { + #name : 'FmxMBClassEntity', + #superclass : 'FmxMBClass', + #instVars : [ + 'propertiesForEqualityCheck', + 'isAbstractClass' + ], + #category : 'Famix-MetamodelBuilder-Core-Implementation', + #package : 'Famix-MetamodelBuilder-Core', + #tag : 'Implementation' +} + +{ #category : 'generating-methods' } +FmxMBClassEntity >> generate [ + + super generate. + + self + generateIsAbstractMethodIfNecessary; + generateAddToCollection; + generateTestingMethods. + + propertiesForEqualityCheck ifNotNil: [ + self + generateEqualsMethod; + generateHashMethod ] +] + +{ #category : 'generating-methods' } +FmxMBClassEntity >> generateEqualsMethod [ + + | code | + code := String streamContents: [ :stream | + | variableName | + variableName := 'a' , self fullName. + stream << '= '. + stream << variableName. + stream << ' + + + ^ '. + stream + << variableName; + << ' '; + << propertiesForEqualityCheck first; + << ' = self '; + << propertiesForEqualityCheck first. + propertiesForEqualityCheck size > 1 ifTrue: [ + 2 to: propertiesForEqualityCheck size do: [ :idx | + stream << ' and: [ '. + stream + << variableName; + << ' '; + << (propertiesForEqualityCheck at: idx); + << ' = self '; + << (propertiesForEqualityCheck at: idx) ]. + 2 to: propertiesForEqualityCheck size do: [ :idx | stream << '] ' ] ] ]. + + self addMethod: code protocol: #comparing +] + +{ #category : 'generating-methods' } +FmxMBClassEntity >> generateHashMethod [ + + | code | + code := String streamContents: [ :stream | + stream << 'hash'. + stream << ' + + + ^ '. + stream + << 'self '; + << propertiesForEqualityCheck first; + << ' hash '. + propertiesForEqualityCheck size > 1 ifTrue: [ + 2 to: propertiesForEqualityCheck size do: [ :idx | + stream + << 'bitXor: self '; + << (propertiesForEqualityCheck at: idx); + << ' hash ' ] ] ]. + + self addMethod: code protocol: #comparing +] + +{ #category : 'generating' } +FmxMBClassEntity >> generateIsAbstractMethodIfNecessary [ + + self isAbstractClass ifTrue: [ + self + addMethod: ('isAbstract + + + ^ self == {1}' format: { self fullName }) + classSide: true + protocol: #testing ] +] + +{ #category : 'generating-methods' } +FmxMBClassEntity >> generateTestingMethods [ + + self isRoot ifTrue: [ + | selectorsToGenerate | + selectorsToGenerate := Set new. + builder testingSelectorsMapping keysAndValuesDo: [ :concernedClass :selectors | + (builder shouldGeneratorTestingMethodsOf: concernedClass in: self) ifTrue: [ selectorsToGenerate addAll: selectors ] ]. + + (selectorsToGenerate difference: (self traitGeneralizations flatCollect: #testingSelectors)) do: [ :sel | + self addMethod: (sel , '\\ \ ^ false') withCRs protocol: #testing ] ]. + + super generateTestingMethods +] + +{ #category : 'testing' } +FmxMBClassEntity >> isAbstractClass [ + + ^ isAbstractClass ifNil: [ false ] +] + +{ #category : 'accessing' } +FmxMBClassEntity >> isAbstractClass: aBoolean [ + + isAbstractClass := aBoolean +] + +{ #category : 'testing' } +FmxMBClassEntity >> isConcreteClass [ + + ^ self isAbstractClass not +] + +{ #category : 'generating' } +FmxMBClassEntity >> optionalPragma [ + + ^ self isAbstractClass + ifTrue: [ + ' + ' ] + ifFalse: [ super optionalPragma ] +] + +{ #category : 'generalization' } +FmxMBClassEntity >> withEqualityCheckOn: aCollectionOfPropertySymbol [ + + propertiesForEqualityCheck := aCollectionOfPropertySymbol +] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st index 8805fa463..5c30f5206 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st @@ -54,6 +54,12 @@ FmxMBEntity >> initialize [ isRemote := false. ] +{ #category : 'testing' } +FmxMBEntity >> isConcreteClass [ + + ^ false +] + { #category : 'accessing' } FmxMBEntity >> isRemote [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index 426313892..0e0f1c973 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -103,14 +103,13 @@ FmxMBImportingContext >> generateImportingContextMetamodel [ { #category : 'generating-methods' } FmxMBImportingContext >> generateShouldImport [ - self builder classes do: [ :each | "No need to generate methods for model and groups." - (each isModelClass or: [ each isMetamodelClassGroup or: [ each isAbstractClass ] ]) ifFalse: [ - self - addMethod: ('shouldImport{1} + self builder concreteClasses do: [ :each | + self + addMethod: ('shouldImport{1} ^ self shouldImport: #{1}' format: { each name }) - protocol: #testing ] ] + protocol: #testing ] ] { #category : 'testing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st index 4f3c5b61e..ce4c452f8 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st @@ -90,15 +90,6 @@ FmxMBModel >> generateSubmetamodelsMethod [ self addMethod: code classSide: true protocol: #accessing ] ] -{ #category : 'generating-methods' } -FmxMBModel >> generateTestingMethods [ - - "No need to define the testing methods in the #Model entity - because we already have a test that check that the entity is a Model" - - -] - { #category : 'testing' } FmxMBModel >> isModelClass [ diff --git a/src/Famix-Test3-Entities/FamixTest3TypeGroup.class.st b/src/Famix-Test3-Entities/FamixTest3TypeGroup.class.st index c0097875e..eec40238d 100644 --- a/src/Famix-Test3-Entities/FamixTest3TypeGroup.class.st +++ b/src/Famix-Test3-Entities/FamixTest3TypeGroup.class.st @@ -21,122 +21,3 @@ FamixTest3TypeGroup class >> metamodel [ ^ FamixTest3Model metamodel ] - -{ #category : 'testing' } -FamixTest3TypeGroup >> canBeStub [ - - - ^ false -] - -{ #category : 'testing' } -FamixTest3TypeGroup >> hasImmediateSource [ - - - ^ false -] - -{ #category : 'testing' } -FamixTest3TypeGroup >> isAccess [ - - - ^ false -] - -{ #category : 'testing' } -FamixTest3TypeGroup >> isAssociation [ - - - ^ false -] - -{ #category : 'testing' } -FamixTest3TypeGroup >> isAttribute [ - - - ^ false -] - -{ #category : 'testing' } -FamixTest3TypeGroup >> isBehavioural [ - - - ^ false -] - -{ #category : 'testing' } -FamixTest3TypeGroup >> isClass [ - - - ^ false -] - -{ #category : 'testing' } -FamixTest3TypeGroup >> isComment [ - - - ^ false -] - -{ #category : 'testing' } -FamixTest3TypeGroup >> isInvocation [ - - - ^ false -] - -{ #category : 'testing' } -FamixTest3TypeGroup >> isMethod [ - - - ^ false -] - -{ #category : 'testing' } -FamixTest3TypeGroup >> isNamedEntity [ - - - ^ false -] - -{ #category : 'testing' } -FamixTest3TypeGroup >> isPackage [ - - - ^ false -] - -{ #category : 'testing' } -FamixTest3TypeGroup >> isParametricEntity [ - - - ^ false -] - -{ #category : 'testing' } -FamixTest3TypeGroup >> isQueryable [ - - - ^ false -] - -{ #category : 'testing' } -FamixTest3TypeGroup >> isReference [ - - - ^ false -] - -{ #category : 'testing' } -FamixTest3TypeGroup >> isStructuralEntity [ - - - ^ false -] - -{ #category : 'testing' } -FamixTest3TypeGroup >> isType [ - - - ^ false -] From 6bf3d3b631a5474e01cff0864d934f9d113e8d81 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Wed, 6 May 2026 01:13:52 +0200 Subject: [PATCH 092/121] Small cleaning --- .../FmxMBImportingContext.class.st | 31 +++++++------------ 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index 0e0f1c973..3d73e5fa0 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -44,7 +44,6 @@ FmxMBImportingContext >> generate [ super generate. self generateImportingContextMetamodel. - self generateShouldImport. self generateImport ] @@ -58,12 +57,18 @@ FmxMBImportingContext >> generateAnnotation [ { #category : 'generating-methods' } FmxMBImportingContext >> generateImport [ - self builder classes do: [ :each | "No need to generate methods for model and groups." - (each isModelClass or: [ each isMetamodelClassGroup or: [ each isAbstractClass ] ]) ifFalse: [ "Associations and other entities are managed differently by the importing context" - each allTransitiveTraits - detect: [ :trait | trait name = #TAssociation ] - ifFound: [ self generateImportAssociation: each ] - ifNone: [ self generateImportConcreteEntity: each ] ] ] + self builder concreteClasses do: [ :each | + each allTransitiveTraits + detect: [ :trait | trait name = #TAssociation ] + ifFound: [ self generateImportAssociation: each ] + ifNone: [ self generateImportConcreteEntity: each ]. + + self + addMethod: ('shouldImport{1} + + + ^ self shouldImport: #{1}' format: { each name }) + protocol: #testing ] ] { #category : 'generating-methods' } @@ -100,18 +105,6 @@ FmxMBImportingContext >> generateImportingContextMetamodel [ protocol: #accessing ] -{ #category : 'generating-methods' } -FmxMBImportingContext >> generateShouldImport [ - - self builder concreteClasses do: [ :each | - self - addMethod: ('shouldImport{1} - - - ^ self shouldImport: #{1}' format: { each name }) - protocol: #testing ] -] - { #category : 'testing' } FmxMBImportingContext >> isRoot [ "I am not a MM class root because I am not part of the MM" From 2eb7a0bfb89b7606ef562a72ef1ab36ae0cca83c Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Wed, 6 May 2026 22:33:58 +0200 Subject: [PATCH 093/121] Remove useless #extensionBehaviors --- .../FamixMetamodelBuilder.class.st | 9 --------- .../FmxMBVisitor.class.st | 18 +++++++++++++++++- .../FamixMetamodelBuilder.extension.st | 2 +- .../FamixVisitorGenerator.class.st | 2 +- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index 6a49683f4..db2483c3c 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -55,7 +55,6 @@ Class { 'testingSelectorsMapping', 'configuration', 'parentBuilder', - 'extensionBehaviors', 'withoutBuilder' ], #category : 'Famix-MetamodelBuilder-Core-Basic', @@ -226,12 +225,6 @@ FamixMetamodelBuilder >> environment: anObject [ environment := anObject ] -{ #category : 'accessing' } -FamixMetamodelBuilder >> extensionBehaviors [ - - ^ extensionBehaviors -] - { #category : 'generating' } FamixMetamodelBuilder >> generate [ @@ -341,7 +334,6 @@ FamixMetamodelBuilder >> initialize [ classes := OrderedCollection new. traits := OrderedCollection new. - extensionBehaviors := OrderedCollection new. testingSelectorsMapping := Dictionary new. withoutBuilder := false ] @@ -483,7 +475,6 @@ FamixMetamodelBuilder >> prepareBehaviorsGeneration [ self classes do: [ :each | self testingSelectorsMapping at: each put: each testingSelectors ]. self traits do: [ :each | each generate ]. self sortedClasses do: [ :each | each generate ]. - self extensionBehaviors do: [ :each | each generate ]. self generateTestingMethodsOfRemoteEntities ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBVisitor.class.st index 77e0aac62..1ab172cc0 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBVisitor.class.st @@ -11,9 +11,16 @@ A minimum builder needs to subclass FamixMetamodelGenerator, and override the cl use the #FmxMBPrintVisitor class for a working example. general case: + +```st b := aFamixMetamodelGeneratorClass builderWithDefinitions. v := aFmxMBVisitorClass new. -b acceptVisitor: v. +b acceptVisitor: v +``` + +```st +aFmxMBVisitorClass visit: (aFamixMetamodelGeneratorClass builderWithDefinitions) +``` " Class { #name : 'FmxMBVisitor', @@ -23,6 +30,15 @@ Class { #tag : 'Visitors' } +{ #category : 'visiting' } +FmxMBVisitor class >> visit: aFmxEntity [ + + | visitor | + visitor := self new. + aFmxEntity acceptVisitor: visitor. + ^ visitor +] + { #category : 'visiting' } FmxMBVisitor >> visitBuilder: aBuilder [ diff --git a/src/Famix-Visitor-Generation/FamixMetamodelBuilder.extension.st b/src/Famix-Visitor-Generation/FamixMetamodelBuilder.extension.st index 66cdebb66..99deb2d5c 100644 --- a/src/Famix-Visitor-Generation/FamixMetamodelBuilder.extension.st +++ b/src/Famix-Visitor-Generation/FamixMetamodelBuilder.extension.st @@ -13,6 +13,6 @@ FamixMetamodelBuilder >> newVisitorTrait [ visitorTrait builder: self. visitorTrait prefix: self configuration prefix. - extensionBehaviors add: visitorTrait. + self traits add: visitorTrait. ^ visitorTrait ] diff --git a/src/Famix-Visitor-Generation/FamixVisitorGenerator.class.st b/src/Famix-Visitor-Generation/FamixVisitorGenerator.class.st index 110c71ae6..e967a105b 100644 --- a/src/Famix-Visitor-Generation/FamixVisitorGenerator.class.st +++ b/src/Famix-Visitor-Generation/FamixVisitorGenerator.class.st @@ -58,7 +58,7 @@ FamixVisitorGenerator >> define [ visitorTrait packageName: packageName. builder allSubBuilders do: [ :subBuilder | - subBuilder extensionBehaviors + subBuilder traits detect: [ :each | each isVisitorTrait ] ifFound: [ :famixTVistior | visitorTrait --|> famixTVistior ] ] ] From ba40e9c7598285e8f28695efd83d4ca313acc0ab Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Thu, 7 May 2026 01:08:07 +0200 Subject: [PATCH 094/121] Groups do not need to be part of the MM + fix bug in some classes removals (Originally we generated only annotated classes so we used the annotation to know if a class was from the generator. Now we need to includes also groups and the importing context) --- .../FamixMetamodelBuilder.class.st | 5 +- .../FmxMBClass.class.st | 38 +------------- .../FmxMBClassEntity.class.st | 49 ++++++++++++++++++- .../FmxMBEntity.class.st | 6 +++ .../FmxMBModel.class.st | 12 +---- .../FmxMBRingEnvironment.class.st | 2 +- .../FmxMBTrait.class.st | 11 ++--- .../Metaclass.extension.st | 8 +++ .../Object.extension.st | 7 +++ .../FamixTest3ClassGroup.class.st | 9 ---- .../FamixTest3TypeGroup.class.st | 16 ------ .../FamixAnnotationInstanceGroup.class.st | 16 ------ .../FamixAnnotationTypeGroup.class.st | 16 ------ src/Famix-Traits/FamixClassGroup.class.st | 9 ---- src/Famix-Traits/FamixFileGroup.class.st | 16 ------ src/Famix-Traits/FamixFolderGroup.class.st | 16 ------ .../FamixGlobalVariableGroup.class.st | 16 ------ .../FamixInvocationGroup.class.st | 16 ------ src/Famix-Traits/FamixMethodGroup.class.st | 16 ------ src/Famix-Traits/FamixNamespaceGroup.class.st | 16 ------ src/Famix-Traits/FamixPackageGroup.class.st | 16 ------ src/Famix-Traits/FamixTypeGroup.class.st | 16 ------ src/Moose-Core/FamixImportingContext.class.st | 7 +++ src/Moose-Core/MooseModel.class.st | 7 +++ 24 files changed, 95 insertions(+), 251 deletions(-) create mode 100644 src/Famix-MetamodelBuilder-Core/Metaclass.extension.st create mode 100644 src/Famix-MetamodelBuilder-Core/Object.extension.st diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index db2483c3c..ca3b55f9c 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -182,8 +182,9 @@ FamixMetamodelBuilder >> ensureEntityClassIsTheCommonSuperclass [ "All classes should have a common superclass called Entity. Here we ensure it is created and used." - self classes iterator | #isRoot selectIt - | #isMetamodelClassGroup rejectIt | #isModelClass rejectIt + self classes iterator + | #isClassEntity selectIt + | #isRoot selectIt | [ :class | class name = #Entity ] rejectIt | [ :class | class --|> (self ensureAbstractClassNamed: #Entity) ] doIt > NullAddableObject diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 34d06c735..1ad4595db 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -58,9 +58,6 @@ FmxMBClass >> annotationSuperclass [ { #category : 'settings - default' } FmxMBClass >> defaultSuperclassName [ - "We have a special case with MooseObject that should inherit from Object." - - self isMooseObject ifTrue: [ ^ #Object ]. ^ #MooseEntity ] @@ -78,25 +75,7 @@ FmxMBClass >> generate [ tag: self tag comment: self commentWithRelations. - self - generateAccessors; - generateAnnotation; - generateMetamodelMethod -] - -{ #category : 'generating-methods' } -FmxMBClass >> generateMetamodelMethod [ - - self isRoot ifFalse: [ ^ self ]. - - self builder model ifNotNil: [ :model | - self - addMethod: ('metamodel - - - ^ {1} metamodel' format: { model fullName }) - classSide: true - protocol: #meta ] + self generateAccessors ] { #category : 'generating' } @@ -113,21 +92,6 @@ FmxMBClass >> isMetamodelClass [ ^ true ] -{ #category : 'testing' } -FmxMBClass >> isMooseObject [ - - ^ self name = 'Object' and: [ self prefix = 'Moose' ] -] - -{ #category : 'testing' } -FmxMBClass >> isRoot [ - - self superclass ifNotNil: [ ^ false ]. - - "We have a special case with MooseObject because we do not want to consider it as a root but it inherits from Object." - ^ self isMooseObject not -] - { #category : 'accessing' } FmxMBClass >> remoteSuperclass [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st index 331d87d27..5908d9d4c 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st @@ -10,6 +10,15 @@ Class { #tag : 'Implementation' } +{ #category : 'settings - default' } +FmxMBClassEntity >> defaultSuperclassName [ + "We have a special case with MooseObject that should inherit from Object." + + self isMooseObject ifTrue: [ ^ #Object ]. + + ^ super defaultSuperclassName +] + { #category : 'generating-methods' } FmxMBClassEntity >> generate [ @@ -18,7 +27,9 @@ FmxMBClassEntity >> generate [ self generateIsAbstractMethodIfNecessary; generateAddToCollection; - generateTestingMethods. + generateTestingMethods; + generateMetamodelMethod; + generateAnnotation. propertiesForEqualityCheck ifNotNil: [ self @@ -96,6 +107,21 @@ FmxMBClassEntity >> generateIsAbstractMethodIfNecessary [ protocol: #testing ] ] +{ #category : 'generating-methods' } +FmxMBClassEntity >> generateMetamodelMethod [ + + self isRoot ifFalse: [ ^ self ]. + + self builder model ifNotNil: [ :model | + self + addMethod: ('metamodel + + + ^ {1} metamodel' format: { model fullName }) + classSide: true + protocol: #meta ] +] + { #category : 'generating-methods' } FmxMBClassEntity >> generateTestingMethods [ @@ -123,12 +149,33 @@ FmxMBClassEntity >> isAbstractClass: aBoolean [ isAbstractClass := aBoolean ] +{ #category : 'testing' } +FmxMBClassEntity >> isClassEntity [ + + ^ true +] + { #category : 'testing' } FmxMBClassEntity >> isConcreteClass [ ^ self isAbstractClass not ] +{ #category : 'testing' } +FmxMBClassEntity >> isMooseObject [ + + ^ self name = 'Object' and: [ self prefix = 'Moose' ] +] + +{ #category : 'testing' } +FmxMBClassEntity >> isRoot [ + + self superclass ifNotNil: [ ^ false ]. + + "We have a special case with MooseObject because we do not want to consider it as a root but it inherits from Object." + ^ self isMooseObject not +] + { #category : 'generating' } FmxMBClassEntity >> optionalPragma [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st index 5c30f5206..78923785e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st @@ -54,6 +54,12 @@ FmxMBEntity >> initialize [ isRemote := false. ] +{ #category : 'testing' } +FmxMBEntity >> isClassEntity [ + + ^ false +] + { #category : 'testing' } FmxMBEntity >> isConcreteClass [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st index ce4c452f8..0b6c1cfd7 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st @@ -24,7 +24,8 @@ FmxMBModel >> generate [ super generate. self generateFileImportMethods; - generateSubmetamodelsMethod + generateSubmetamodelsMethod; + generateAnnotation ] { #category : 'generating-methods' } @@ -62,15 +63,6 @@ FmxMBModel >> generateFileImportMethods [ protocol: #accessing ] -{ #category : 'generating-methods' } -FmxMBModel >> generateMetamodelMethod [ - - "no need to define the method #metamodel in the #Model entity - because it is already the #Model entity that hold the metamodel" - - -] - { #category : 'generating-methods' } FmxMBModel >> generateSubmetamodelsMethod [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index e8ef54029..95ace0c21 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -216,7 +216,7 @@ FmxMBRingEnvironment >> recordRemovalOfGeneratedPackagesAndClasses [ thenDo: [ :package | package ifNotNil: [ package definedClasses - select: #isMetamodelEntity + select: #canBeGenerated thenDo: [ :class | (classesToGenerate includes: class name) ifFalse: [ changesToApply add: (FmxClassRemoval class: class) ] ] ] ] ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index 6740e4a84..e17067548 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -45,12 +45,11 @@ FmxMBTrait >> generate [ tag: self tag comment: self commentWithRelations. - self generateAccessors. - self generateAnnotation. - - self generateTestingMethods. - - self generateAddToCollection + self + generateAccessors; + generateAnnotation; + generateTestingMethods; + generateAddToCollection ] { #category : 'generating' } diff --git a/src/Famix-MetamodelBuilder-Core/Metaclass.extension.st b/src/Famix-MetamodelBuilder-Core/Metaclass.extension.st new file mode 100644 index 000000000..0b9b8e380 --- /dev/null +++ b/src/Famix-MetamodelBuilder-Core/Metaclass.extension.st @@ -0,0 +1,8 @@ +Extension { #name : 'Metaclass' } + +{ #category : '*Famix-MetamodelBuilder-Core' } +Metaclass >> canBeGenerated [ + "I return true if I am the kind of entities generated by the metamodel generator of Famix." + + ^ self isMetamodelEntity +] diff --git a/src/Famix-MetamodelBuilder-Core/Object.extension.st b/src/Famix-MetamodelBuilder-Core/Object.extension.st new file mode 100644 index 000000000..02e9a049e --- /dev/null +++ b/src/Famix-MetamodelBuilder-Core/Object.extension.st @@ -0,0 +1,7 @@ +Extension { #name : 'Object' } + +{ #category : '*Famix-MetamodelBuilder-Core' } +Object >> canBeGenerated [ + + ^ self class canBeGenerated +] diff --git a/src/Famix-Test3-Entities/FamixTest3ClassGroup.class.st b/src/Famix-Test3-Entities/FamixTest3ClassGroup.class.st index 03c699aa1..9bbf6f3d5 100644 --- a/src/Famix-Test3-Entities/FamixTest3ClassGroup.class.st +++ b/src/Famix-Test3-Entities/FamixTest3ClassGroup.class.st @@ -5,12 +5,3 @@ Class { #package : 'Famix-Test3-Entities', #tag : 'Entities' } - -{ #category : 'meta' } -FamixTest3ClassGroup class >> annotation [ - - - - - ^ self -] diff --git a/src/Famix-Test3-Entities/FamixTest3TypeGroup.class.st b/src/Famix-Test3-Entities/FamixTest3TypeGroup.class.st index eec40238d..b45598d3b 100644 --- a/src/Famix-Test3-Entities/FamixTest3TypeGroup.class.st +++ b/src/Famix-Test3-Entities/FamixTest3TypeGroup.class.st @@ -5,19 +5,3 @@ Class { #package : 'Famix-Test3-Entities', #tag : 'Entities' } - -{ #category : 'meta' } -FamixTest3TypeGroup class >> annotation [ - - - - - ^ self -] - -{ #category : 'meta' } -FamixTest3TypeGroup class >> metamodel [ - - - ^ FamixTest3Model metamodel -] diff --git a/src/Famix-Traits/FamixAnnotationInstanceGroup.class.st b/src/Famix-Traits/FamixAnnotationInstanceGroup.class.st index 29892bc37..0d08d5ff5 100644 --- a/src/Famix-Traits/FamixAnnotationInstanceGroup.class.st +++ b/src/Famix-Traits/FamixAnnotationInstanceGroup.class.st @@ -5,19 +5,3 @@ Class { #package : 'Famix-Traits', #tag : 'Groups' } - -{ #category : 'meta' } -FamixAnnotationInstanceGroup class >> annotation [ - - - - - ^ self -] - -{ #category : 'meta' } -FamixAnnotationInstanceGroup class >> metamodel [ - - - ^ FamixModel metamodel -] diff --git a/src/Famix-Traits/FamixAnnotationTypeGroup.class.st b/src/Famix-Traits/FamixAnnotationTypeGroup.class.st index c52928e49..cf143ea85 100644 --- a/src/Famix-Traits/FamixAnnotationTypeGroup.class.st +++ b/src/Famix-Traits/FamixAnnotationTypeGroup.class.st @@ -5,19 +5,3 @@ Class { #package : 'Famix-Traits', #tag : 'Groups' } - -{ #category : 'meta' } -FamixAnnotationTypeGroup class >> annotation [ - - - - - ^ self -] - -{ #category : 'meta' } -FamixAnnotationTypeGroup class >> metamodel [ - - - ^ FamixModel metamodel -] diff --git a/src/Famix-Traits/FamixClassGroup.class.st b/src/Famix-Traits/FamixClassGroup.class.st index dc3edab30..8b74000f7 100644 --- a/src/Famix-Traits/FamixClassGroup.class.st +++ b/src/Famix-Traits/FamixClassGroup.class.st @@ -5,12 +5,3 @@ Class { #package : 'Famix-Traits', #tag : 'Groups' } - -{ #category : 'meta' } -FamixClassGroup class >> annotation [ - - - - - ^ self -] diff --git a/src/Famix-Traits/FamixFileGroup.class.st b/src/Famix-Traits/FamixFileGroup.class.st index 9f6173ea8..b6bbe95f0 100644 --- a/src/Famix-Traits/FamixFileGroup.class.st +++ b/src/Famix-Traits/FamixFileGroup.class.st @@ -5,19 +5,3 @@ Class { #package : 'Famix-Traits', #tag : 'Groups' } - -{ #category : 'meta' } -FamixFileGroup class >> annotation [ - - - - - ^ self -] - -{ #category : 'meta' } -FamixFileGroup class >> metamodel [ - - - ^ FamixModel metamodel -] diff --git a/src/Famix-Traits/FamixFolderGroup.class.st b/src/Famix-Traits/FamixFolderGroup.class.st index 785ea6997..d89006910 100644 --- a/src/Famix-Traits/FamixFolderGroup.class.st +++ b/src/Famix-Traits/FamixFolderGroup.class.st @@ -6,22 +6,6 @@ Class { #tag : 'Groups' } -{ #category : 'meta' } -FamixFolderGroup class >> annotation [ - - - - - ^ self -] - -{ #category : 'meta' } -FamixFolderGroup class >> metamodel [ - - - ^ FamixModel metamodel -] - { #category : 'accessing - dynamic' } FamixFolderGroup >> allFiles [ | files | diff --git a/src/Famix-Traits/FamixGlobalVariableGroup.class.st b/src/Famix-Traits/FamixGlobalVariableGroup.class.st index f0f0b19b3..59199f5f2 100644 --- a/src/Famix-Traits/FamixGlobalVariableGroup.class.st +++ b/src/Famix-Traits/FamixGlobalVariableGroup.class.st @@ -6,22 +6,6 @@ Class { #tag : 'Groups' } -{ #category : 'meta' } -FamixGlobalVariableGroup class >> annotation [ - - - - - ^ self -] - -{ #category : 'meta' } -FamixGlobalVariableGroup class >> metamodel [ - - - ^ FamixModel metamodel -] - { #category : 'accessing' } FamixGlobalVariableGroup >> variableNamed: aVarName [ "Maybe mooseName should be used instead" diff --git a/src/Famix-Traits/FamixInvocationGroup.class.st b/src/Famix-Traits/FamixInvocationGroup.class.st index 9074b649f..7848f5330 100644 --- a/src/Famix-Traits/FamixInvocationGroup.class.st +++ b/src/Famix-Traits/FamixInvocationGroup.class.st @@ -5,19 +5,3 @@ Class { #package : 'Famix-Traits', #tag : 'Groups' } - -{ #category : 'meta' } -FamixInvocationGroup class >> annotation [ - - - - - ^ self -] - -{ #category : 'meta' } -FamixInvocationGroup class >> metamodel [ - - - ^ FamixModel metamodel -] diff --git a/src/Famix-Traits/FamixMethodGroup.class.st b/src/Famix-Traits/FamixMethodGroup.class.st index d9e31a194..4dca53112 100644 --- a/src/Famix-Traits/FamixMethodGroup.class.st +++ b/src/Famix-Traits/FamixMethodGroup.class.st @@ -6,22 +6,6 @@ Class { #tag : 'Groups' } -{ #category : 'meta' } -FamixMethodGroup class >> annotation [ - - - - - ^ self -] - -{ #category : 'meta' } -FamixMethodGroup class >> metamodel [ - - - ^ FamixModel metamodel -] - { #category : 'navigation' } FamixMethodGroup >> allClasses [ diff --git a/src/Famix-Traits/FamixNamespaceGroup.class.st b/src/Famix-Traits/FamixNamespaceGroup.class.st index 704ea5321..6fef8726f 100644 --- a/src/Famix-Traits/FamixNamespaceGroup.class.st +++ b/src/Famix-Traits/FamixNamespaceGroup.class.st @@ -5,19 +5,3 @@ Class { #package : 'Famix-Traits', #tag : 'Groups' } - -{ #category : 'meta' } -FamixNamespaceGroup class >> annotation [ - - - - - ^ self -] - -{ #category : 'meta' } -FamixNamespaceGroup class >> metamodel [ - - - ^ FamixModel metamodel -] diff --git a/src/Famix-Traits/FamixPackageGroup.class.st b/src/Famix-Traits/FamixPackageGroup.class.st index 1083e569d..577f582aa 100644 --- a/src/Famix-Traits/FamixPackageGroup.class.st +++ b/src/Famix-Traits/FamixPackageGroup.class.st @@ -6,22 +6,6 @@ Class { #tag : 'Groups' } -{ #category : 'meta' } -FamixPackageGroup class >> annotation [ - - - - - ^ self -] - -{ #category : 'meta' } -FamixPackageGroup class >> metamodel [ - - - ^ FamixModel metamodel -] - { #category : 'navigation' } FamixPackageGroup >> allClasses [ ^ self flatCollect: [ :p | p localClasses ] diff --git a/src/Famix-Traits/FamixTypeGroup.class.st b/src/Famix-Traits/FamixTypeGroup.class.st index 8def856e7..a42db424b 100644 --- a/src/Famix-Traits/FamixTypeGroup.class.st +++ b/src/Famix-Traits/FamixTypeGroup.class.st @@ -6,22 +6,6 @@ Class { #tag : 'Groups' } -{ #category : 'meta' } -FamixTypeGroup class >> annotation [ - - - - - ^ self -] - -{ #category : 'meta' } -FamixTypeGroup class >> metamodel [ - - - ^ FamixModel metamodel -] - { #category : 'metrics' } FamixTypeGroup >> abstractness [ "Abstractness is the ratio between the number of abstract classes and the total number of classes in a package, in the range [0, 1]. 0 means the package is fully concrete, 1 it is fully abstract." diff --git a/src/Moose-Core/FamixImportingContext.class.st b/src/Moose-Core/FamixImportingContext.class.st index 9cf5c1bf6..84cfa6540 100644 --- a/src/Moose-Core/FamixImportingContext.class.st +++ b/src/Moose-Core/FamixImportingContext.class.st @@ -32,6 +32,13 @@ FamixImportingContext class >> allMetamodelConcreteEntities [ fm3Trait name = #TAssociation ] ] ] ] ] +{ #category : 'testing' } +FamixImportingContext class >> canBeGenerated [ + "My subclasses are generated." + + ^ self ~= FamixImportingContext +] + { #category : 'accessing' } FamixImportingContext class >> fm3ClassNamed: aName [ diff --git a/src/Moose-Core/MooseModel.class.st b/src/Moose-Core/MooseModel.class.st index fe3e3baff..50e75c1ef 100644 --- a/src/Moose-Core/MooseModel.class.st +++ b/src/Moose-Core/MooseModel.class.st @@ -30,6 +30,13 @@ MooseModel class >> annotation [ ] +{ #category : 'testing' } +MooseModel class >> canBeGenerated [ + "Models are generated." + + ^ true +] + { #category : 'testing' } MooseModel class >> canBeImportedFromFile [ From a357282338d8d5df26222248c58712a3d5da0080 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Thu, 7 May 2026 17:45:14 +0200 Subject: [PATCH 095/121] init visitor --- .../FamixMetamodelBuilder.class.st | 2 + .../FmxMBChangesBuilderVisitor.class.st | 140 ++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index ca3b55f9c..0a01999bd 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -229,7 +229,9 @@ FamixMetamodelBuilder >> environment: anObject [ { #category : 'generating' } FamixMetamodelBuilder >> generate [ + | changesBuilder | self prepareGeneration. + changesBuilder := FmxMBChangesBuilderVisitor visit: self. self apply ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st new file mode 100644 index 000000000..43279187c --- /dev/null +++ b/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st @@ -0,0 +1,140 @@ +Class { + #name : 'FmxMBChangesBuilderVisitor', + #superclass : 'FmxMBWalkerVisitor', + #instVars : [ + 'changesToApply' + ], + #category : 'Famix-MetamodelBuilder-Core-Implementation', + #package : 'Famix-MetamodelBuilder-Core', + #tag : 'Implementation' +} + +{ #category : 'initialization' } +FmxMBChangesBuilderVisitor >> buildSlotsDefinitionsFor: properties existingClass: currentClass [ + + | modelSlotDefinitions | + currentClass + ifNil: [ modelSlotDefinitions := properties collect: [ :property | property slotDefinition ] ] + ifNotNil: [ + | currentCustomSlots | + currentCustomSlots := currentClass localSlots copyWithoutAll: currentClass generatedSlots. + + (currentClass generatedSlots reject: [ :generatedSlot | properties anySatisfy: [ :property | property name = generatedSlot name ] ]) ifNotEmpty: [ + :slotRemovals | changesToApply add: (FmxSlotRemovals slots: slotRemovals) ]. + + modelSlotDefinitions := properties + reject: [ :property | currentCustomSlots anySatisfy: [ :slot | slot name = property name ] ] + thenCollect: [ :property | property slotDefinition ]. + + modelSlotDefinitions addAll: (currentCustomSlots collect: #definitionString) ]. + + modelSlotDefinitions ifEmpty: [ ^ nil ]. + ^ modelSlotDefinitions sorted +] + +{ #category : 'cleaning' } +FmxMBChangesBuilderVisitor >> changesOfType: aClass [ + + ^ changesToApply select: [ :change | change isKindOf: aClass ] +] + +{ #category : 'initialization' } +FmxMBChangesBuilderVisitor >> createTraitNamed: traitName traitDefinitions: traitDefinitions precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ + + | packageName tag realClass change | + realClass := self class environment at: traitName ifAbsent: [ nil ]. + + packageName := realClass + ifNil: [ defaultPackage ] + ifNotNil: [ realClass package name ]. + tag := realClass + ifNil: [ defaultTag ] + ifNotNil: [ realClass packageTag name ]. + + change := FmxTraitAddition new. + change + name: traitName; + package: packageName; + tag: tag. + + traitDefinitions ifNotEmpty: [ change traits: (self traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass) ]. + + properties ifNotEmpty: [ + self validateProperties: properties. + change slots: (self buildSlotsDefinitionsFor: properties existingClass: realClass) ]. + changesToApply add: change. + + self ensurePackageNamed: packageName. + + comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: traitName comment: comment) ] +] + +{ #category : 'private' } +FmxMBChangesBuilderVisitor >> ensurePackageNamed: packageName [ + + ((self changesOfType: FmxPackageAddition) anySatisfy: [ :change | change packageName = packageName ]) ifTrue: [ ^ self ]. + + changesToApply add: (FmxPackageAddition named: packageName) +] + +{ #category : 'initialization' } +FmxMBChangesBuilderVisitor >> initialize [ + + super initialize. + changesToApply := OrderedCollection new +] + +{ #category : 'installing' } +FmxMBChangesBuilderVisitor >> traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass [ + "We need to collect the generated traits + the custom traits added by the user." + + | customTraitNames traitCompositionString | + customTraitNames := ((realClass + ifNil: [ #( ) ] + ifNotNil: [ :class | class traitComposition rootMembers ]) select: [ :e | realClass customTraitNames includes: e name ]) collect: + #traitCompositionExpression. + "manage methods to remove." + traitCompositionString := traitDefinitions , customTraitNames ifEmpty: [ ^ '{ }' ] ifNotEmpty: [ :definitions | definitions joinUsing: ' + ' ]. + + precedingTrait ifNil: [ ^ traitCompositionString ]. + + ^ String streamContents: [ :s | + s + nextPutAll: '('; + nextPutAll: traitCompositionString; + nextPutAll: ' withPrecedenceOf: '; + nextPutAll: precedingTrait; + nextPutAll: ')' ] +] + +{ #category : 'installing' } +FmxMBChangesBuilderVisitor >> validateProperties: properties [ + + | names | + names := properties collect: #name. + self assert: names size = names asSet size description: 'Two properties of the same class cannot have the same names.'. + properties do: [ :property | property validate ] +] + +{ #category : 'visiting' } +FmxMBChangesBuilderVisitor >> visitBuilder: aBuilder [ + + self ensurePackageNamed: aBuilder configuration packageName. + + super visitBuilder: aBuilder +] + +{ #category : 'visiting' } +FmxMBChangesBuilderVisitor >> visitTrait: aTrait [ + + self + createTraitNamed: aTrait fullName + traitDefinitions: aTrait allTraitDefinitions + precedingTrait: (aTrait additionalProperties at: #precedingTrait ifAbsent: [ nil ]) + properties: (aTrait propertiesAndRelations select: #producesSlot) + in: aTrait packageName + tag: aTrait tag + comment: aTrait commentWithRelations. + + super visitTrait: aTrait +] From fb86d9aef846d37dc0b233e66421354fff3160a9 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Sat, 9 May 2026 01:04:14 +0200 Subject: [PATCH 096/121] Introduce method factory to simplify the generation code The generation code can be quite verbose. The introduction of this class group the methods to generate and simplify the generation code. --- .../FamixJavaModel.class.st | 2 + .../FamixMetamodelBuilder.class.st | 3 +- .../FmxMBBehavior.class.st | 35 ++- .../FmxMBClassEntity.class.st | 71 +----- .../FmxMBClassGroup.class.st | 8 +- .../FmxMBEntityCreatorTrait.class.st | 29 +-- .../FmxMBImportingContext.class.st | 36 +-- .../FmxMBMethodsFactory.class.st | 214 ++++++++++++++++++ .../FmxMBModel.class.st | 41 +--- .../FamixStModel.class.st | 2 + .../FamixTest1Model.class.st | 2 + .../FamixTest2Model.class.st | 2 + .../FamixTest3Model.class.st | 2 + .../FamixTest4Model.class.st | 2 + .../FamixTest5Model.class.st | 2 + .../FamixTest6Model.class.st | 2 + .../FamixTest7Model.class.st | 2 + .../FamixTest8Model.class.st | 2 + .../FamixTestComposed3Model.class.st | 2 + .../FamixTestComposedComposedModel.class.st | 2 + .../FamixTestComposedModel.class.st | 2 + .../FamixTestComposed1Model.class.st | 2 + .../FamixTestComposed2Model.class.st | 2 + .../FDModel.class.st | 2 + .../MooseMSEImporterTestModel.class.st | 2 + 25 files changed, 287 insertions(+), 184 deletions(-) create mode 100644 src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st diff --git a/src/Famix-Java-Entities/FamixJavaModel.class.st b/src/Famix-Java-Entities/FamixJavaModel.class.st index fb9079258..4087e6df7 100644 --- a/src/Famix-Java-Entities/FamixJavaModel.class.st +++ b/src/Famix-Java-Entities/FamixJavaModel.class.st @@ -16,9 +16,11 @@ FamixJavaModel class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixJavaModel class >> annotation [ + + ^ self ] { #category : 'testing' } diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index ca3b55f9c..111784a49 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -490,8 +490,7 @@ FamixMetamodelBuilder >> prepareGeneration [ model := self model. self withSubBuildersAddEntityCreatorTraitTo: model. self prepareBehaviorsGeneration. - self generateImportingContext. - self entityCreatorTrait generateEntityCreationMethods ] + self generateImportingContext ] ifFalse: [ self prepareBehaviorsGeneration ] ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 341450428..54a5cf1ca 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -244,33 +244,18 @@ FmxMBBehavior >> generateAccessors [ { #category : 'generating' } FmxMBBehavior >> generateAddToCollection [ - self relations do: [ :side | - side isMany ifTrue: [ - | sideName | - sideName := side name. - self - addMethod: ('add{1}: anObject - - ^ self {2} add: anObject' format: { - sideName capitalized asSingular. - sideName }) - protocol: #adding ] ] + self relations do: [ :relation | relation isMany ifTrue: [ self addMethod: (FmxMBMethodsFactory addToCollectionFor: relation name) protocol: #adding ] ] ] { #category : 'generating' } FmxMBBehavior >> generateAnnotation [ self - addMethod: ('annotation - - - - {4} - ^ self' format: { - self name. - self annotationSuperclass. - self builder safeAnnotationPackageName. - self optionalPragma }) + addMethod: (FmxMBMethodsFactory + annotationFor: self name + super: self annotationSuperclass + package: self builder safeAnnotationPackageName + isAbstract: self isAbstractClass) classSide: true protocol: #meta ] @@ -278,7 +263,7 @@ FmxMBBehavior >> generateAnnotation [ { #category : 'generating' } FmxMBBehavior >> generateTestingMethods [ - self testingSelectors do: [ :aSelector | self addMethod: (aSelector , '\\ \ ^ true') withCRs protocol: #testing ] + self testingSelectors do: [ :aSelector | self addMethod: (FmxMBMethodsFactory testReturning: true for: aSelector) protocol: #testing ] ] { #category : 'generalization' } @@ -302,6 +287,12 @@ FmxMBBehavior >> initialize [ testingSelectors := Set new ] +{ #category : 'testing' } +FmxMBBehavior >> isAbstractClass [ + + ^ false +] + { #category : 'testing' } FmxMBBehavior >> isEntityCreatorTrait [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st index 5908d9d4c..3e4f3c4ec 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st @@ -40,71 +40,19 @@ FmxMBClassEntity >> generate [ { #category : 'generating-methods' } FmxMBClassEntity >> generateEqualsMethod [ - | code | - code := String streamContents: [ :stream | - | variableName | - variableName := 'a' , self fullName. - stream << '= '. - stream << variableName. - stream << ' - - - ^ '. - stream - << variableName; - << ' '; - << propertiesForEqualityCheck first; - << ' = self '; - << propertiesForEqualityCheck first. - propertiesForEqualityCheck size > 1 ifTrue: [ - 2 to: propertiesForEqualityCheck size do: [ :idx | - stream << ' and: [ '. - stream - << variableName; - << ' '; - << (propertiesForEqualityCheck at: idx); - << ' = self '; - << (propertiesForEqualityCheck at: idx) ]. - 2 to: propertiesForEqualityCheck size do: [ :idx | stream << '] ' ] ] ]. - - self addMethod: code protocol: #comparing + self addMethod: (FmxMBMethodsFactory equalsForVariableNamed: 'a' , self fullName properties: propertiesForEqualityCheck) protocol: #comparing ] { #category : 'generating-methods' } FmxMBClassEntity >> generateHashMethod [ - | code | - code := String streamContents: [ :stream | - stream << 'hash'. - stream << ' - - - ^ '. - stream - << 'self '; - << propertiesForEqualityCheck first; - << ' hash '. - propertiesForEqualityCheck size > 1 ifTrue: [ - 2 to: propertiesForEqualityCheck size do: [ :idx | - stream - << 'bitXor: self '; - << (propertiesForEqualityCheck at: idx); - << ' hash ' ] ] ]. - - self addMethod: code protocol: #comparing + self addMethod: (FmxMBMethodsFactory hashForProperties: propertiesForEqualityCheck) protocol: #comparing ] { #category : 'generating' } FmxMBClassEntity >> generateIsAbstractMethodIfNecessary [ - self isAbstractClass ifTrue: [ - self - addMethod: ('isAbstract - - - ^ self == {1}' format: { self fullName }) - classSide: true - protocol: #testing ] + self isAbstractClass ifTrue: [ self addMethod: (FmxMBMethodsFactory isAbstractFor: self fullName) classSide: true protocol: #testing ] ] { #category : 'generating-methods' } @@ -112,14 +60,7 @@ FmxMBClassEntity >> generateMetamodelMethod [ self isRoot ifFalse: [ ^ self ]. - self builder model ifNotNil: [ :model | - self - addMethod: ('metamodel - - - ^ {1} metamodel' format: { model fullName }) - classSide: true - protocol: #meta ] + self builder model ifNotNil: [ :model | self addMethod: (FmxMBMethodsFactory metamodelFor: model fullName) classSide: true protocol: #meta ] ] { #category : 'generating-methods' } @@ -131,8 +72,8 @@ FmxMBClassEntity >> generateTestingMethods [ builder testingSelectorsMapping keysAndValuesDo: [ :concernedClass :selectors | (builder shouldGeneratorTestingMethodsOf: concernedClass in: self) ifTrue: [ selectorsToGenerate addAll: selectors ] ]. - (selectorsToGenerate difference: (self traitGeneralizations flatCollect: #testingSelectors)) do: [ :sel | - self addMethod: (sel , '\\ \ ^ false') withCRs protocol: #testing ] ]. + (selectorsToGenerate difference: (self traitGeneralizations flatCollect: #testingSelectors)) do: [ :selector | + self addMethod: (FmxMBMethodsFactory testReturning: false for: selector) protocol: #testing ] ]. super generateTestingMethods ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st index 73d7596c1..29caff1fa 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st @@ -31,13 +31,7 @@ FmxMBClassGroup >> generate [ { #category : 'generating-methods' } FmxMBClassGroup >> generateMooseGroupAnnotationIn: aFmxBehavioral as: aName [ - aFmxBehavioral - addMethod: ('annotation{1} - - - ^ {1}' format: { aName }) - classSide: true - protocol: #groups + aFmxBehavioral addMethod: (FmxMBMethodsFactory groupAnnotationNamed: aName) classSide: true protocol: #groups ] { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st index a0528f01d..b82947332 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st @@ -11,38 +11,19 @@ Class { } { #category : 'generating' } -FmxMBEntityCreatorTrait >> generateEntityCreationMethodFor: aClass [ +FmxMBEntityCreatorTrait >> generate [ - self - addMethod: ('new{1} - - - ^ self add: {2} new' format: { - aClass name. - aClass fullName }) - protocol: #'entity creation' + super generate. + self generateEntityCreationMethods ] { #category : 'generating' } FmxMBEntityCreatorTrait >> generateEntityCreationMethods [ self builder concreteClasses do: [ :class | - self generateEntityCreationMethodFor: class. + self addMethod: (FmxMBMethodsFactory instantiate: class) protocol: #'entity creation'. (class allTransitiveTraitsIncludingSuperclasses anySatisfy: [ :trait | trait prefix = #Famix and: [ trait name = #TNamedEntity ] ]) ifTrue: [ - self generateNamedEntityCreationMethodFor: class ] ] -] - -{ #category : 'generating' } -FmxMBEntityCreatorTrait >> generateNamedEntityCreationMethodFor: aClass [ - - self - addMethod: ('new{1}Named: aName - - - ^ self add: ({2} named: aName)' format: { - aClass name. - aClass fullName }) - protocol: #'entity creation' + self addMethod: (FmxMBMethodsFactory instantiateNamed: class) protocol: #'entity creation' ] ] ] { #category : 'initialization' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index 3d73e5fa0..910751be8 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -47,13 +47,6 @@ FmxMBImportingContext >> generate [ self generateImport ] -{ #category : 'generating' } -FmxMBImportingContext >> generateAnnotation [ - "We do not want the importing context to be part of the MM so we skip this method generation" - - -] - { #category : 'generating-methods' } FmxMBImportingContext >> generateImport [ @@ -63,46 +56,25 @@ FmxMBImportingContext >> generateImport [ ifFound: [ self generateImportAssociation: each ] ifNone: [ self generateImportConcreteEntity: each ]. - self - addMethod: ('shouldImport{1} - - - ^ self shouldImport: #{1}' format: { each name }) - protocol: #testing ] + self addMethod: (FmxMBMethodsFactory shouldImportNamed: each name) protocol: #testing ] ] { #category : 'generating-methods' } FmxMBImportingContext >> generateImportAssociation: aFmxMBAssociationClass [ - self - addMethod: ('import{1} - - - ^ self importAssociation: (self class fm3ClassNamed: #{1})' format: { aFmxMBAssociationClass name }) - protocol: #importing + self addMethod: (FmxMBMethodsFactory importAssociationNamed: aFmxMBAssociationClass name) protocol: #importing ] { #category : 'generating-methods' } FmxMBImportingContext >> generateImportConcreteEntity: aFmxMBClass [ - self - addMethod: ('import{1} - - - ^ self importConcreteEntity: (self class fm3ClassNamed: #{1})' format: { aFmxMBClass name }) - protocol: #importing + self addMethod: (FmxMBMethodsFactory importEntityNamed: aFmxMBClass name) protocol: #importing ] { #category : 'generating-methods' } FmxMBImportingContext >> generateImportingContextMetamodel [ - self - addMethod: ('importedMetamodel - - - ^ {1}Model metamodel' format: { self prefix }) - classSide: true - protocol: #accessing + self addMethod: (FmxMBMethodsFactory importedMetamodelForPrefix: self prefix) classSide: true protocol: #accessing ] { #category : 'testing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st new file mode 100644 index 000000000..4581325fd --- /dev/null +++ b/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st @@ -0,0 +1,214 @@ +Class { + #name : 'FmxMBMethodsFactory', + #superclass : 'Object', + #category : 'Famix-MetamodelBuilder-Core-Implementation', + #package : 'Famix-MetamodelBuilder-Core', + #tag : 'Implementation' +} + +{ #category : 'code generation' } +FmxMBMethodsFactory class >> addToCollectionFor: aName [ + + ^ 'add{1}: anObject + + ^ self {2} add: anObject' format: { + aName capitalized asSingular. + aName } +] + +{ #category : 'code generation' } +FmxMBMethodsFactory class >> allSubmetamodelsPackagesNamesFor: subBuilders [ + + ^ String streamContents: [ :stream | + | packages | + stream nextPutAll: 'allSubmetamodelsPackagesNames + + ^ #('. + + packages := (subBuilders collect: [ :subBuilder | subBuilder configuration packageName ]) asOrderedCollection sorted: #yourself descending. + + packages do: [ :package | stream print: package ] separatedBy: [ stream space ]. + + stream nextPut: $) ] +] + +{ #category : 'code generation' } +FmxMBMethodsFactory class >> annotationFor: aName super: superclassName package: package isAbstract: aBoolean [ + + ^ 'annotation + + + + {4} + ^ self' format: { + aName. + superclassName. + package. + (aBoolean + ifTrue: [ + ' + ' ] + ifFalse: [ '' ]) } +] + +{ #category : 'code generation' } +FmxMBMethodsFactory class >> canBeImportedFromFile [ + + ^ 'canBeImportedFromFile + + ^true' +] + +{ #category : 'code generation' } +FmxMBMethodsFactory class >> equalsForVariableNamed: variableName properties: properties [ + + ^ String streamContents: [ :stream | + stream + << '= '; + << variableName; + << ' + + + ^ '; + << variableName; + << ' '; + << properties first; + << ' = self '; + << properties first. + properties size > 1 ifTrue: [ + 2 to: properties size do: [ :idx | + stream << ' and: [ '. + stream + << variableName; + << ' '; + << (properties at: idx); + << ' = self '; + << (properties at: idx) ]. + 2 to: properties size do: [ :idx | stream << '] ' ] ] ] +] + +{ #category : 'code generation' } +FmxMBMethodsFactory class >> groupAnnotationNamed: aName [ + + ^ 'annotation{1} + + + ^ {1}' format: { aName } +] + +{ #category : 'code generation' } +FmxMBMethodsFactory class >> hashForProperties: properties [ + + ^ String streamContents: [ :stream | + stream << 'hash'. + stream << ' + + + ^ '. + stream + << 'self '; + << properties first; + << ' hash '. + properties size > 1 ifTrue: [ + 2 to: properties size do: [ :idx | + stream + << 'bitXor: self '; + << (properties at: idx); + << ' hash ' ] ] ] +] + +{ #category : 'code generation' } +FmxMBMethodsFactory class >> importAssociationNamed: aName [ + + ^ 'import{1} + + + ^ self importAssociation: (self class fm3ClassNamed: #{1})' format: { aName } +] + +{ #category : 'code generation' } +FmxMBMethodsFactory class >> importEntityNamed: aName [ + + ^ 'import{1} + + + ^ self importConcreteEntity: (self class fm3ClassNamed: #{1})' format: { aName } +] + +{ #category : 'code generation' } +FmxMBMethodsFactory class >> importedMetamodelForPrefix: prefix [ + + ^ 'importedMetamodel + + + ^ {1}Model metamodel' format: { prefix } +] + +{ #category : 'code generation' } +FmxMBMethodsFactory class >> importingClassNamed: aName [ + + ^ 'importingContextClass + + + ^ {1}' format: { aName } +] + +{ #category : 'code generation' } +FmxMBMethodsFactory class >> instantiate: aClass [ + + ^ 'new{1} + + + ^ self add: {2} new' format: { + aClass name. + aClass fullName } +] + +{ #category : 'code generation' } +FmxMBMethodsFactory class >> instantiateNamed: aClass [ + + ^ 'new{1}Named: aName + + + ^ self add: ({2} named: aName)' format: { + aClass name. + aClass fullName } +] + +{ #category : 'code generation' } +FmxMBMethodsFactory class >> isAbstractFor: className [ + + ^ 'isAbstract + + + ^ self == {1}' format: { className } +] + +{ #category : 'code generation' } +FmxMBMethodsFactory class >> metamodelFor: className [ + + ^ 'metamodel + + + ^ {1} metamodel' format: { className } +] + +{ #category : 'code generation' } +FmxMBMethodsFactory class >> shouldImportNamed: aName [ + + ^ 'shouldImport{1} + + + ^ self shouldImport: #{1}' format: { aName } +] + +{ #category : 'code generation' } +FmxMBMethodsFactory class >> testReturning: aBoolean for: aSelector [ + + ^ '{1} + + + ^ {2}' format: { + aSelector. + aBoolean printString } +] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st index 0b6c1cfd7..7f06ddb31 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st @@ -30,14 +30,14 @@ FmxMBModel >> generate [ { #category : 'generating-methods' } FmxMBModel >> generateAnnotation [ + "I do not know why for model we take the fullName and not the name as for other classes... This is not coherant, we should review this in a Moose metting" self - addMethod: ('annotation - - - ' format: { - self fullName. - self builder safeAnnotationPackageName }) + addMethod: (FmxMBMethodsFactory + annotationFor: self fullName + super: self defaultSuperclassName + package: self builder safeAnnotationPackageName + isAbstract: false) classSide: true protocol: #meta ] @@ -47,39 +47,16 @@ FmxMBModel >> generateFileImportMethods [ self builder configuration shouldGenerateFileImportHelpers ifFalse: [ ^ self ]. - self - addMethod: 'canBeImportedFromFile - - ^true' - classSide: true - protocol: #testing. - - self - addMethod: ('importingContextClass + self addMethod: FmxMBMethodsFactory canBeImportedFromFile classSide: true protocol: #testing. - - ^ {1}' format: { self builder importingContextName }) - classSide: true - protocol: #accessing + self addMethod: (FmxMBMethodsFactory importingClassNamed: self builder importingContextName) classSide: true protocol: #accessing ] { #category : 'generating-methods' } FmxMBModel >> generateSubmetamodelsMethod [ self builder allSubBuilders ifNotEmpty: [ :subBuilders | - | code | - code := String streamContents: [ :stream | - | packages | - stream nextPutAll: 'allSubmetamodelsPackagesNames - - ^ #('. - - packages := (subBuilders collect: [ :subBuilder | subBuilder configuration packageName ]) asOrderedCollection sorted: #yourself descending. - packages do: [ :package | stream print: package ] separatedBy: [ stream space ]. - - stream nextPut: $) ]. - - self addMethod: code classSide: true protocol: #accessing ] + self addMethod: (FmxMBMethodsFactory allSubmetamodelsPackagesNamesFor: subBuilders) classSide: true protocol: #accessing ] ] { #category : 'testing' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStModel.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStModel.class.st index a82889d0f..367a3ffd0 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStModel.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStModel.class.st @@ -16,9 +16,11 @@ FamixStModel class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixStModel class >> annotation [ + + ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test1-Entities/FamixTest1Model.class.st b/src/Famix-Test1-Entities/FamixTest1Model.class.st index bed658d0e..39b4c1d65 100644 --- a/src/Famix-Test1-Entities/FamixTest1Model.class.st +++ b/src/Famix-Test1-Entities/FamixTest1Model.class.st @@ -30,9 +30,11 @@ FamixTest1Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTest1Model class >> annotation [ + + ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test2-Entities/FamixTest2Model.class.st b/src/Famix-Test2-Entities/FamixTest2Model.class.st index b685f1dfa..eefabb1db 100644 --- a/src/Famix-Test2-Entities/FamixTest2Model.class.st +++ b/src/Famix-Test2-Entities/FamixTest2Model.class.st @@ -16,7 +16,9 @@ FamixTest2Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTest2Model class >> annotation [ + + ^ self ] diff --git a/src/Famix-Test3-Entities/FamixTest3Model.class.st b/src/Famix-Test3-Entities/FamixTest3Model.class.st index a35a8cc06..1ae4e4585 100644 --- a/src/Famix-Test3-Entities/FamixTest3Model.class.st +++ b/src/Famix-Test3-Entities/FamixTest3Model.class.st @@ -16,7 +16,9 @@ FamixTest3Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTest3Model class >> annotation [ + + ^ self ] diff --git a/src/Famix-Test4-Entities/FamixTest4Model.class.st b/src/Famix-Test4-Entities/FamixTest4Model.class.st index b9dfe507a..735ed8ef0 100644 --- a/src/Famix-Test4-Entities/FamixTest4Model.class.st +++ b/src/Famix-Test4-Entities/FamixTest4Model.class.st @@ -10,7 +10,9 @@ Class { { #category : 'meta' } FamixTest4Model class >> annotation [ + + ^ self ] diff --git a/src/Famix-Test5-Entities/FamixTest5Model.class.st b/src/Famix-Test5-Entities/FamixTest5Model.class.st index a49a21006..fa3ce9977 100644 --- a/src/Famix-Test5-Entities/FamixTest5Model.class.st +++ b/src/Famix-Test5-Entities/FamixTest5Model.class.st @@ -16,7 +16,9 @@ FamixTest5Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTest5Model class >> annotation [ + + ^ self ] diff --git a/src/Famix-Test6-Entities/FamixTest6Model.class.st b/src/Famix-Test6-Entities/FamixTest6Model.class.st index b1ee2118f..f5b0f1088 100644 --- a/src/Famix-Test6-Entities/FamixTest6Model.class.st +++ b/src/Famix-Test6-Entities/FamixTest6Model.class.st @@ -16,7 +16,9 @@ FamixTest6Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTest6Model class >> annotation [ + + ^ self ] diff --git a/src/Famix-Test7-Entities/FamixTest7Model.class.st b/src/Famix-Test7-Entities/FamixTest7Model.class.st index 05811e11f..40e1fc0d9 100644 --- a/src/Famix-Test7-Entities/FamixTest7Model.class.st +++ b/src/Famix-Test7-Entities/FamixTest7Model.class.st @@ -16,7 +16,9 @@ FamixTest7Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTest7Model class >> annotation [ + + ^ self ] diff --git a/src/Famix-Test8-Entities/FamixTest8Model.class.st b/src/Famix-Test8-Entities/FamixTest8Model.class.st index 499a4f4df..b01bb05b0 100644 --- a/src/Famix-Test8-Entities/FamixTest8Model.class.st +++ b/src/Famix-Test8-Entities/FamixTest8Model.class.st @@ -16,7 +16,9 @@ FamixTest8Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTest8Model class >> annotation [ + + ^ self ] diff --git a/src/Famix-TestComposed3Metamodel-Entities/FamixTestComposed3Model.class.st b/src/Famix-TestComposed3Metamodel-Entities/FamixTestComposed3Model.class.st index 72e4b9884..b411316b6 100644 --- a/src/Famix-TestComposed3Metamodel-Entities/FamixTestComposed3Model.class.st +++ b/src/Famix-TestComposed3Metamodel-Entities/FamixTestComposed3Model.class.st @@ -16,7 +16,9 @@ FamixTestComposed3Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTestComposed3Model class >> annotation [ + + ^ self ] diff --git a/src/Famix-TestComposedComposedMetamodel-Entities/FamixTestComposedComposedModel.class.st b/src/Famix-TestComposedComposedMetamodel-Entities/FamixTestComposedComposedModel.class.st index 15b56ee4b..8b77960cf 100644 --- a/src/Famix-TestComposedComposedMetamodel-Entities/FamixTestComposedComposedModel.class.st +++ b/src/Famix-TestComposedComposedMetamodel-Entities/FamixTestComposedComposedModel.class.st @@ -16,7 +16,9 @@ FamixTestComposedComposedModel class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTestComposedComposedModel class >> annotation [ + + ^ self ] diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedModel.class.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedModel.class.st index eaa19f71b..98a3bb612 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedModel.class.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedModel.class.st @@ -16,7 +16,9 @@ FamixTestComposedModel class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTestComposedModel class >> annotation [ + + ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Model.class.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Model.class.st index 3b5da9d6a..e2a07b4db 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Model.class.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Model.class.st @@ -16,7 +16,9 @@ FamixTestComposed1Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTestComposed1Model class >> annotation [ + + ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Model.class.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Model.class.st index cdd1ce171..e949dd09b 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Model.class.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Model.class.st @@ -16,7 +16,9 @@ FamixTestComposed2Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTestComposed2Model class >> annotation [ + + ^ self ] diff --git a/src/FamixDocumentor-TestMetaModel/FDModel.class.st b/src/FamixDocumentor-TestMetaModel/FDModel.class.st index 85f87d786..5d7661bf2 100644 --- a/src/FamixDocumentor-TestMetaModel/FDModel.class.st +++ b/src/FamixDocumentor-TestMetaModel/FDModel.class.st @@ -10,7 +10,9 @@ Class { { #category : 'meta' } FDModel class >> annotation [ + + ^ self ] diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestModel.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestModel.class.st index 3f5bbd6e1..a7b48e845 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestModel.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestModel.class.st @@ -16,7 +16,9 @@ MooseMSEImporterTestModel class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } MooseMSEImporterTestModel class >> annotation [ + + ^ self ] From 68e9f62c897c55e6df28c07f943d72ca08efd203 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Sat, 9 May 2026 01:10:53 +0200 Subject: [PATCH 097/121] Simplify generation code and make is more standard --- .../FamixMetamodelBuilder.class.st | 18 +++++++++--------- .../FmxMBVisitorTrait.class.st | 7 ++----- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index 111784a49..512450388 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -244,7 +244,9 @@ FamixMetamodelBuilder >> generateImportingContext [ aClass prefix: self configuration prefix. aClass packageName: self configuration packageName. aClass tag: 'Import'. - aClass generate + + self classes add: aClass. + ^ aClass ] { #category : 'generating' } @@ -484,14 +486,12 @@ FamixMetamodelBuilder >> prepareGeneration [ self environment ensurePackageNamed: self configuration packageName. self ensureEntityClassIsTheCommonSuperclass. - self shouldGenerateModel - ifTrue: [ - | model | - model := self model. - self withSubBuildersAddEntityCreatorTraitTo: model. - self prepareBehaviorsGeneration. - self generateImportingContext ] - ifFalse: [ self prepareBehaviorsGeneration ] + + self shouldGenerateModel ifTrue: [ + self withSubBuildersAddEntityCreatorTraitTo: self model. + self generateImportingContext ]. + + self prepareBehaviorsGeneration ] { #category : 'printing' } diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index f88749c23..d44eac834 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -65,11 +65,8 @@ FmxMBVisitorTrait >> generateCommonMethodsIfNecessary [ { #category : 'generating' } FmxMBVisitorTrait >> generateVisitAndAcceptMethods [ - (builder classes reject: [ :fmxMBClass | - fmxMBClass isModelClass or: [ fmxMBClass isMetamodelClassGroup ] ]) - , (builder traits select: [ :fmxTrait | - fmxTrait isMetamodelTrait and: [ fmxTrait isVisitorTrait not ] ]) - do: [ :fmxMBBehavior | + (builder classes select: #isClassEntity) , (builder traits select: [ :fmxTrait | fmxTrait isMetamodelTrait and: [ fmxTrait isVisitorTrait not ] ]) do: [ + :fmxMBBehavior | self generateVisitMethodFor: fmxMBBehavior. self generateAcceptMethodIn: fmxMBBehavior ] ] From e61dc372f06a075db495b934c87371d3de31baee Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Sat, 9 May 2026 01:19:59 +0200 Subject: [PATCH 098/121] Simplify code and add comment --- .../FmxMBBehavior.class.st | 8 ---- .../FmxMBClassEntity.class.st | 36 ++-------------- .../FmxMBClassGroup.class.st | 8 +--- .../FmxMBImportingContext.class.st | 42 ++++--------------- .../FmxMBMethodsFactory.class.st | 7 ++++ 5 files changed, 19 insertions(+), 82 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 54a5cf1ca..1d68b587e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -323,14 +323,6 @@ FmxMBBehavior >> isModelClass [ ^ false ] -{ #category : 'generating' } -FmxMBBehavior >> optionalPragma [ - - "Override to add a pragma to your entity #annotation method" - - ^ String new -] - { #category : 'accessing' } FmxMBBehavior >> packageName [ ^ packageName diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st index 3e4f3c4ec..a68bcfad8 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st @@ -25,34 +25,16 @@ FmxMBClassEntity >> generate [ super generate. self - generateIsAbstractMethodIfNecessary; generateAddToCollection; generateTestingMethods; generateMetamodelMethod; generateAnnotation. - propertiesForEqualityCheck ifNotNil: [ - self - generateEqualsMethod; - generateHashMethod ] -] - -{ #category : 'generating-methods' } -FmxMBClassEntity >> generateEqualsMethod [ - - self addMethod: (FmxMBMethodsFactory equalsForVariableNamed: 'a' , self fullName properties: propertiesForEqualityCheck) protocol: #comparing -] - -{ #category : 'generating-methods' } -FmxMBClassEntity >> generateHashMethod [ + self isAbstractClass ifTrue: [ self addMethod: (FmxMBMethodsFactory isAbstractFor: self fullName) classSide: true protocol: #testing ]. - self addMethod: (FmxMBMethodsFactory hashForProperties: propertiesForEqualityCheck) protocol: #comparing -] - -{ #category : 'generating' } -FmxMBClassEntity >> generateIsAbstractMethodIfNecessary [ - - self isAbstractClass ifTrue: [ self addMethod: (FmxMBMethodsFactory isAbstractFor: self fullName) classSide: true protocol: #testing ] + propertiesForEqualityCheck ifNotNil: [ + self addMethod: (FmxMBMethodsFactory equalsForVariableNamed: 'a' , self fullName properties: propertiesForEqualityCheck) protocol: #comparing. + self addMethod: (FmxMBMethodsFactory hashForProperties: propertiesForEqualityCheck) protocol: #comparing ] ] { #category : 'generating-methods' } @@ -117,16 +99,6 @@ FmxMBClassEntity >> isRoot [ ^ self isMooseObject not ] -{ #category : 'generating' } -FmxMBClassEntity >> optionalPragma [ - - ^ self isAbstractClass - ifTrue: [ - ' - ' ] - ifFalse: [ super optionalPragma ] -] - { #category : 'generalization' } FmxMBClassEntity >> withEqualityCheckOn: aCollectionOfPropertySymbol [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st index 29caff1fa..af3ce49bf 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st @@ -25,13 +25,7 @@ FmxMBClassGroup >> defaultTag [ FmxMBClassGroup >> generate [ super generate. - self generateMooseGroupAnnotationIn: innerClass as: self fullName -] - -{ #category : 'generating-methods' } -FmxMBClassGroup >> generateMooseGroupAnnotationIn: aFmxBehavioral as: aName [ - - aFmxBehavioral addMethod: (FmxMBMethodsFactory groupAnnotationNamed: aName) classSide: true protocol: #groups + innerClass addMethod: (FmxMBMethodsFactory groupAnnotationNamed: self fullName) classSide: true protocol: #groups ] { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index 910751be8..aa71f841b 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -43,47 +43,19 @@ FmxMBImportingContext >> generate [ super generate. - self generateImportingContextMetamodel. - self generateImport -] - -{ #category : 'generating-methods' } -FmxMBImportingContext >> generateImport [ + self addMethod: (FmxMBMethodsFactory importedMetamodelForPrefix: self prefix) classSide: true protocol: #accessing. self builder concreteClasses do: [ :each | - each allTransitiveTraits - detect: [ :trait | trait name = #TAssociation ] - ifFound: [ self generateImportAssociation: each ] - ifNone: [ self generateImportConcreteEntity: each ]. + self + addMethod: (each allTransitiveTraits + detect: [ :trait | trait name = #TAssociation ] + ifFound: [ FmxMBMethodsFactory importAssociationNamed: each name ] + ifNone: [ FmxMBMethodsFactory importEntityNamed: each name ]) + protocol: #importing. self addMethod: (FmxMBMethodsFactory shouldImportNamed: each name) protocol: #testing ] ] -{ #category : 'generating-methods' } -FmxMBImportingContext >> generateImportAssociation: aFmxMBAssociationClass [ - - self addMethod: (FmxMBMethodsFactory importAssociationNamed: aFmxMBAssociationClass name) protocol: #importing -] - -{ #category : 'generating-methods' } -FmxMBImportingContext >> generateImportConcreteEntity: aFmxMBClass [ - - self addMethod: (FmxMBMethodsFactory importEntityNamed: aFmxMBClass name) protocol: #importing -] - -{ #category : 'generating-methods' } -FmxMBImportingContext >> generateImportingContextMetamodel [ - - self addMethod: (FmxMBMethodsFactory importedMetamodelForPrefix: self prefix) classSide: true protocol: #accessing -] - -{ #category : 'testing' } -FmxMBImportingContext >> isRoot [ - "I am not a MM class root because I am not part of the MM" - - ^ false -] - { #category : 'accessing' } FmxMBImportingContext >> name [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st index 4581325fd..858a416d3 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st @@ -1,3 +1,10 @@ +" +The Famix metamodel generator needs to generate a lot of methods. Those can be quite verbose. + +My responsisbility is to return the code of all methods to generate. + +I'll be used during the generation of a metamodel. +" Class { #name : 'FmxMBMethodsFactory', #superclass : 'Object', From a53674e2aae484333b3183c6e5c75d0b0dc71475 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Sat, 9 May 2026 01:27:16 +0200 Subject: [PATCH 099/121] New uniformization of the API --- .../FmxMBBehavior.class.st | 15 ++++++++------- .../FmxMBClass.class.st | 6 ------ .../FmxMBModel.class.st | 2 +- .../FmxMBTrait.class.st | 14 +++++++------- 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 1d68b587e..bb60670dd 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -126,12 +126,6 @@ FmxMBBehavior >> allTransitiveTraitsIncludingSuperclasses [ ^ self allTransitiveTraits ] -{ #category : 'accessing' } -FmxMBBehavior >> annotationSuperclass [ - - ^ self subclassResponsibility -] - { #category : 'converting' } FmxMBBehavior >> asRelationSideNamed: aPropertyName [ @@ -253,7 +247,7 @@ FmxMBBehavior >> generateAnnotation [ self addMethod: (FmxMBMethodsFactory annotationFor: self name - super: self annotationSuperclass + super: self superclassName package: self builder safeAnnotationPackageName isAbstract: self isAbstractClass) classSide: true @@ -528,6 +522,13 @@ FmxMBBehavior >> sourceOneToOne: aFmxTrait [ source - (aFmxTrait property: #outgoing , self name) ] +{ #category : 'accessing' } +FmxMBBehavior >> superclassName [ + "Trait do not have a superclass but they declare one for the fame annotation" + + ^ self subclassResponsibility +] + { #category : 'accessing' } FmxMBBehavior >> tag [ ^ tag ifNil: [ self defaultTag ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index 1ad4595db..ae32b2e21 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -50,12 +50,6 @@ FmxMBClass >> allTransitiveTraitsIncludingSuperclasses [ ^ result ] -{ #category : 'accessing' } -FmxMBClass >> annotationSuperclass [ - - ^ self superclassName -] - { #category : 'settings - default' } FmxMBClass >> defaultSuperclassName [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st index 7f06ddb31..50a6b5db4 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st @@ -35,7 +35,7 @@ FmxMBModel >> generateAnnotation [ self addMethod: (FmxMBMethodsFactory annotationFor: self fullName - super: self defaultSuperclassName + super: self superclassName package: self builder safeAnnotationPackageName isAbstract: false) classSide: true diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index e17067548..71b031fc5 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -20,13 +20,6 @@ FmxMBTrait >> allTraitGeneralizations [ { each } , each allTraitGeneralizations ]) removeDuplicates ] -{ #category : 'accessing' } -FmxMBTrait >> annotationSuperclass [ - "For trait we declare the Fame superclass as Object" - - ^ 'Object' -] - { #category : 'settings-default' } FmxMBTrait >> defaultTag [ @@ -89,3 +82,10 @@ FmxMBTrait >> removeRelationSide: aRelationSide [ propertiesAndRelations remove: aRelationSide ifAbsent: [ ]. ] + +{ #category : 'accessing' } +FmxMBTrait >> superclassName [ + "For trait we declare the Fame superclass as Object" + + ^ 'Object' +] From 9dcb30a207395c2ca88f5f23c0492d8ae6931311 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Sat, 9 May 2026 01:30:15 +0200 Subject: [PATCH 100/121] Fix wrong annotation for models Model were the only classes using the full name for the fame annotation instead of the name. Now they are coherent with the other annotations. --- .../FamixJavaModel.class.st | 2 +- .../FmxMBEntityCreatorTrait.class.st | 6 +---- .../FmxMBModel.class.st | 25 +++---------------- .../FamixStModel.class.st | 2 +- .../FamixTest1Model.class.st | 2 +- .../FamixTest2Model.class.st | 2 +- .../FamixTest3Model.class.st | 2 +- .../FamixTest4Model.class.st | 2 +- .../FamixTest5Model.class.st | 2 +- .../FamixTest6Model.class.st | 2 +- .../FamixTest7Model.class.st | 2 +- .../FamixTest8Model.class.st | 2 +- .../FamixTestComposed3Model.class.st | 2 +- .../FamixTestComposedComposedModel.class.st | 2 +- .../FamixTestComposedModel.class.st | 2 +- .../FamixTestComposed1Model.class.st | 2 +- .../FamixTestComposed2Model.class.st | 2 +- .../FDModel.class.st | 2 +- .../MooseMSEImporterTestModel.class.st | 2 +- 19 files changed, 21 insertions(+), 44 deletions(-) diff --git a/src/Famix-Java-Entities/FamixJavaModel.class.st b/src/Famix-Java-Entities/FamixJavaModel.class.st index 4087e6df7..a2fbf5b2c 100644 --- a/src/Famix-Java-Entities/FamixJavaModel.class.st +++ b/src/Famix-Java-Entities/FamixJavaModel.class.st @@ -17,7 +17,7 @@ FamixJavaModel class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixJavaModel class >> annotation [ - + ^ self diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st index b82947332..280b70974 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st @@ -14,14 +14,10 @@ Class { FmxMBEntityCreatorTrait >> generate [ super generate. - self generateEntityCreationMethods -] - -{ #category : 'generating' } -FmxMBEntityCreatorTrait >> generateEntityCreationMethods [ self builder concreteClasses do: [ :class | self addMethod: (FmxMBMethodsFactory instantiate: class) protocol: #'entity creation'. + (class allTransitiveTraitsIncludingSuperclasses anySatisfy: [ :trait | trait prefix = #Famix and: [ trait name = #TNamedEntity ] ]) ifTrue: [ self addMethod: (FmxMBMethodsFactory instantiateNamed: class) protocol: #'entity creation' ] ] ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st index 50a6b5db4..09b14a429 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st @@ -24,22 +24,10 @@ FmxMBModel >> generate [ super generate. self generateFileImportMethods; - generateSubmetamodelsMethod; - generateAnnotation -] - -{ #category : 'generating-methods' } -FmxMBModel >> generateAnnotation [ - "I do not know why for model we take the fullName and not the name as for other classes... This is not coherant, we should review this in a Moose metting" + generateAnnotation. - self - addMethod: (FmxMBMethodsFactory - annotationFor: self fullName - super: self superclassName - package: self builder safeAnnotationPackageName - isAbstract: false) - classSide: true - protocol: #meta + self builder allSubBuilders ifNotEmpty: [ :subBuilders | + self addMethod: (FmxMBMethodsFactory allSubmetamodelsPackagesNamesFor: subBuilders) classSide: true protocol: #accessing ] ] { #category : 'generating-methods' } @@ -52,13 +40,6 @@ FmxMBModel >> generateFileImportMethods [ self addMethod: (FmxMBMethodsFactory importingClassNamed: self builder importingContextName) classSide: true protocol: #accessing ] -{ #category : 'generating-methods' } -FmxMBModel >> generateSubmetamodelsMethod [ - - self builder allSubBuilders ifNotEmpty: [ :subBuilders | - self addMethod: (FmxMBMethodsFactory allSubmetamodelsPackagesNamesFor: subBuilders) classSide: true protocol: #accessing ] -] - { #category : 'testing' } FmxMBModel >> isModelClass [ diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStModel.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStModel.class.st index 367a3ffd0..b8465b819 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStModel.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStModel.class.st @@ -17,7 +17,7 @@ FamixStModel class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixStModel class >> annotation [ - + ^ self diff --git a/src/Famix-Test1-Entities/FamixTest1Model.class.st b/src/Famix-Test1-Entities/FamixTest1Model.class.st index 39b4c1d65..a13feb76e 100644 --- a/src/Famix-Test1-Entities/FamixTest1Model.class.st +++ b/src/Famix-Test1-Entities/FamixTest1Model.class.st @@ -31,7 +31,7 @@ FamixTest1Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTest1Model class >> annotation [ - + ^ self diff --git a/src/Famix-Test2-Entities/FamixTest2Model.class.st b/src/Famix-Test2-Entities/FamixTest2Model.class.st index eefabb1db..06c557048 100644 --- a/src/Famix-Test2-Entities/FamixTest2Model.class.st +++ b/src/Famix-Test2-Entities/FamixTest2Model.class.st @@ -17,7 +17,7 @@ FamixTest2Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTest2Model class >> annotation [ - + ^ self diff --git a/src/Famix-Test3-Entities/FamixTest3Model.class.st b/src/Famix-Test3-Entities/FamixTest3Model.class.st index 1ae4e4585..5768c20e5 100644 --- a/src/Famix-Test3-Entities/FamixTest3Model.class.st +++ b/src/Famix-Test3-Entities/FamixTest3Model.class.st @@ -17,7 +17,7 @@ FamixTest3Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTest3Model class >> annotation [ - + ^ self diff --git a/src/Famix-Test4-Entities/FamixTest4Model.class.st b/src/Famix-Test4-Entities/FamixTest4Model.class.st index 735ed8ef0..50748bd99 100644 --- a/src/Famix-Test4-Entities/FamixTest4Model.class.st +++ b/src/Famix-Test4-Entities/FamixTest4Model.class.st @@ -11,7 +11,7 @@ Class { { #category : 'meta' } FamixTest4Model class >> annotation [ - + ^ self diff --git a/src/Famix-Test5-Entities/FamixTest5Model.class.st b/src/Famix-Test5-Entities/FamixTest5Model.class.st index fa3ce9977..3ab9018a8 100644 --- a/src/Famix-Test5-Entities/FamixTest5Model.class.st +++ b/src/Famix-Test5-Entities/FamixTest5Model.class.st @@ -17,7 +17,7 @@ FamixTest5Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTest5Model class >> annotation [ - + ^ self diff --git a/src/Famix-Test6-Entities/FamixTest6Model.class.st b/src/Famix-Test6-Entities/FamixTest6Model.class.st index f5b0f1088..9516b2477 100644 --- a/src/Famix-Test6-Entities/FamixTest6Model.class.st +++ b/src/Famix-Test6-Entities/FamixTest6Model.class.st @@ -17,7 +17,7 @@ FamixTest6Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTest6Model class >> annotation [ - + ^ self diff --git a/src/Famix-Test7-Entities/FamixTest7Model.class.st b/src/Famix-Test7-Entities/FamixTest7Model.class.st index 40e1fc0d9..b9e011bc7 100644 --- a/src/Famix-Test7-Entities/FamixTest7Model.class.st +++ b/src/Famix-Test7-Entities/FamixTest7Model.class.st @@ -17,7 +17,7 @@ FamixTest7Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTest7Model class >> annotation [ - + ^ self diff --git a/src/Famix-Test8-Entities/FamixTest8Model.class.st b/src/Famix-Test8-Entities/FamixTest8Model.class.st index b01bb05b0..3d9235433 100644 --- a/src/Famix-Test8-Entities/FamixTest8Model.class.st +++ b/src/Famix-Test8-Entities/FamixTest8Model.class.st @@ -17,7 +17,7 @@ FamixTest8Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTest8Model class >> annotation [ - + ^ self diff --git a/src/Famix-TestComposed3Metamodel-Entities/FamixTestComposed3Model.class.st b/src/Famix-TestComposed3Metamodel-Entities/FamixTestComposed3Model.class.st index b411316b6..fff1d3162 100644 --- a/src/Famix-TestComposed3Metamodel-Entities/FamixTestComposed3Model.class.st +++ b/src/Famix-TestComposed3Metamodel-Entities/FamixTestComposed3Model.class.st @@ -17,7 +17,7 @@ FamixTestComposed3Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTestComposed3Model class >> annotation [ - + ^ self diff --git a/src/Famix-TestComposedComposedMetamodel-Entities/FamixTestComposedComposedModel.class.st b/src/Famix-TestComposedComposedMetamodel-Entities/FamixTestComposedComposedModel.class.st index 8b77960cf..25aa0e0b9 100644 --- a/src/Famix-TestComposedComposedMetamodel-Entities/FamixTestComposedComposedModel.class.st +++ b/src/Famix-TestComposedComposedMetamodel-Entities/FamixTestComposedComposedModel.class.st @@ -17,7 +17,7 @@ FamixTestComposedComposedModel class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTestComposedComposedModel class >> annotation [ - + ^ self diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedModel.class.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedModel.class.st index 98a3bb612..3038c9db9 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedModel.class.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedModel.class.st @@ -17,7 +17,7 @@ FamixTestComposedModel class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTestComposedModel class >> annotation [ - + ^ self diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Model.class.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Model.class.st index e2a07b4db..e4f856820 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Model.class.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Model.class.st @@ -17,7 +17,7 @@ FamixTestComposed1Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTestComposed1Model class >> annotation [ - + ^ self diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Model.class.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Model.class.st index e949dd09b..8e4f7e411 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Model.class.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Model.class.st @@ -17,7 +17,7 @@ FamixTestComposed2Model class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } FamixTestComposed2Model class >> annotation [ - + ^ self diff --git a/src/FamixDocumentor-TestMetaModel/FDModel.class.st b/src/FamixDocumentor-TestMetaModel/FDModel.class.st index 5d7661bf2..deae68742 100644 --- a/src/FamixDocumentor-TestMetaModel/FDModel.class.st +++ b/src/FamixDocumentor-TestMetaModel/FDModel.class.st @@ -11,7 +11,7 @@ Class { { #category : 'meta' } FDModel class >> annotation [ - + ^ self diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestModel.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestModel.class.st index a7b48e845..d1a78e149 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestModel.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestModel.class.st @@ -17,7 +17,7 @@ MooseMSEImporterTestModel class >> allSubmetamodelsPackagesNames [ { #category : 'meta' } MooseMSEImporterTestModel class >> annotation [ - + ^ self From d599accbb6e023ad466a66c26a9a3092d9352ccf Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Sat, 9 May 2026 01:31:51 +0200 Subject: [PATCH 101/121] Keep simpler annotation method --- src/Famix-Java-Entities/FamixJavaAccess.class.st | 1 - src/Famix-Java-Entities/FamixJavaAnnotationInstance.class.st | 1 - .../FamixJavaAnnotationInstanceAttribute.class.st | 1 - src/Famix-Java-Entities/FamixJavaAnnotationType.class.st | 1 - .../FamixJavaAnnotationTypeAttribute.class.st | 1 - src/Famix-Java-Entities/FamixJavaAttribute.class.st | 1 - src/Famix-Java-Entities/FamixJavaClass.class.st | 1 - src/Famix-Java-Entities/FamixJavaComment.class.st | 1 - src/Famix-Java-Entities/FamixJavaConcretization.class.st | 1 - src/Famix-Java-Entities/FamixJavaContainerEntity.class.st | 1 - src/Famix-Java-Entities/FamixJavaEntity.class.st | 1 - src/Famix-Java-Entities/FamixJavaEntityTyping.class.st | 1 - src/Famix-Java-Entities/FamixJavaEnum.class.st | 1 - src/Famix-Java-Entities/FamixJavaEnumValue.class.st | 1 - src/Famix-Java-Entities/FamixJavaException.class.st | 1 - src/Famix-Java-Entities/FamixJavaImplementation.class.st | 1 - src/Famix-Java-Entities/FamixJavaImplicitVariable.class.st | 1 - src/Famix-Java-Entities/FamixJavaImport.class.st | 1 - src/Famix-Java-Entities/FamixJavaIndexedFileAnchor.class.st | 1 - src/Famix-Java-Entities/FamixJavaInheritance.class.st | 1 - src/Famix-Java-Entities/FamixJavaInitializer.class.st | 1 - src/Famix-Java-Entities/FamixJavaInterface.class.st | 1 - src/Famix-Java-Entities/FamixJavaInvocation.class.st | 1 - src/Famix-Java-Entities/FamixJavaLocalVariable.class.st | 1 - src/Famix-Java-Entities/FamixJavaMethod.class.st | 1 - src/Famix-Java-Entities/FamixJavaModel.class.st | 1 - src/Famix-Java-Entities/FamixJavaNamedEntity.class.st | 1 - src/Famix-Java-Entities/FamixJavaPackage.class.st | 1 - src/Famix-Java-Entities/FamixJavaParameter.class.st | 1 - src/Famix-Java-Entities/FamixJavaParametricClass.class.st | 1 - .../FamixJavaParametricEntityTyping.class.st | 1 - .../FamixJavaParametricImplementation.class.st | 1 - .../FamixJavaParametricInheritance.class.st | 1 - src/Famix-Java-Entities/FamixJavaParametricInterface.class.st | 1 - src/Famix-Java-Entities/FamixJavaParametricInvocation.class.st | 1 - src/Famix-Java-Entities/FamixJavaParametricMethod.class.st | 1 - src/Famix-Java-Entities/FamixJavaParametricReference.class.st | 1 - src/Famix-Java-Entities/FamixJavaPrimitiveType.class.st | 1 - src/Famix-Java-Entities/FamixJavaReference.class.st | 1 - src/Famix-Java-Entities/FamixJavaSourceAnchor.class.st | 1 - src/Famix-Java-Entities/FamixJavaSourceLanguage.class.st | 1 - src/Famix-Java-Entities/FamixJavaSourceTextAnchor.class.st | 1 - src/Famix-Java-Entities/FamixJavaSourcedEntity.class.st | 1 - src/Famix-Java-Entities/FamixJavaTBound.trait.st | 1 - src/Famix-Java-Entities/FamixJavaTBounded.trait.st | 1 - src/Famix-Java-Entities/FamixJavaTCanBeSynchronized.trait.st | 1 - src/Famix-Java-Entities/FamixJavaTCanBeTransient.trait.st | 1 - src/Famix-Java-Entities/FamixJavaTCanBeVolatile.trait.st | 1 - src/Famix-Java-Entities/FamixJavaTClassMetrics.trait.st | 1 - src/Famix-Java-Entities/FamixJavaTEntityCreator.trait.st | 1 - src/Famix-Java-Entities/FamixJavaTVisitor.trait.st | 1 - src/Famix-Java-Entities/FamixJavaTWithInterfaces.trait.st | 1 - src/Famix-Java-Entities/FamixJavaType.class.st | 1 - src/Famix-Java-Entities/FamixJavaTypeParameter.class.st | 1 - src/Famix-Java-Entities/FamixJavaUnknownVariable.class.st | 1 - src/Famix-Java-Entities/FamixJavaVariable.class.st | 1 - src/Famix-Java-Entities/FamixJavaWildcard.class.st | 1 - src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st | 3 +-- src/Famix-PharoSmalltalk-Entities/FamixStAccess.class.st | 1 - .../FamixStAnnotationInstance.class.st | 1 - .../FamixStAnnotationInstanceAttribute.class.st | 1 - .../FamixStAnnotationType.class.st | 1 - .../FamixStAnnotationTypeAttribute.class.st | 1 - src/Famix-PharoSmalltalk-Entities/FamixStAttribute.class.st | 1 - src/Famix-PharoSmalltalk-Entities/FamixStClass.class.st | 1 - src/Famix-PharoSmalltalk-Entities/FamixStComment.class.st | 1 - src/Famix-PharoSmalltalk-Entities/FamixStEntity.class.st | 1 - src/Famix-PharoSmalltalk-Entities/FamixStEntityTyping.class.st | 1 - .../FamixStGlobalVariable.class.st | 1 - .../FamixStImplicitVariable.class.st | 1 - src/Famix-PharoSmalltalk-Entities/FamixStInheritance.class.st | 1 - src/Famix-PharoSmalltalk-Entities/FamixStInvocation.class.st | 1 - .../FamixStLocalVariable.class.st | 1 - src/Famix-PharoSmalltalk-Entities/FamixStMethod.class.st | 1 - src/Famix-PharoSmalltalk-Entities/FamixStModel.class.st | 1 - src/Famix-PharoSmalltalk-Entities/FamixStNamedEntity.class.st | 1 - src/Famix-PharoSmalltalk-Entities/FamixStNamespace.class.st | 1 - src/Famix-PharoSmalltalk-Entities/FamixStPackage.class.st | 1 - src/Famix-PharoSmalltalk-Entities/FamixStParameter.class.st | 1 - .../FamixStPharoEntitySourceAnchor.class.st | 1 - src/Famix-PharoSmalltalk-Entities/FamixStReference.class.st | 1 - src/Famix-PharoSmalltalk-Entities/FamixStSourceAnchor.class.st | 1 - .../FamixStSourceLanguage.class.st | 1 - .../FamixStSourceTextAnchor.class.st | 1 - .../FamixStSourcedEntity.class.st | 1 - .../FamixStTEntityCreator.trait.st | 1 - .../FamixStUnknownVariable.class.st | 1 - src/Famix-Test1-Entities/FamixTest1Association.class.st | 1 - src/Famix-Test1-Entities/FamixTest1Attribute.class.st | 1 - src/Famix-Test1-Entities/FamixTest1BytesFileAnchor.class.st | 1 - src/Famix-Test1-Entities/FamixTest1Class.class.st | 1 - src/Famix-Test1-Entities/FamixTest1Comment.class.st | 1 - src/Famix-Test1-Entities/FamixTest1Entity.class.st | 1 - src/Famix-Test1-Entities/FamixTest1File.class.st | 1 - src/Famix-Test1-Entities/FamixTest1FileAnchor.class.st | 1 - src/Famix-Test1-Entities/FamixTest1Folder.class.st | 1 - src/Famix-Test1-Entities/FamixTest1IndexedFileAnchor.class.st | 1 - src/Famix-Test1-Entities/FamixTest1Method.class.st | 1 - src/Famix-Test1-Entities/FamixTest1Model.class.st | 1 - src/Famix-Test1-Entities/FamixTest1MultipleFileAnchor.class.st | 1 - src/Famix-Test1-Entities/FamixTest1NamedEntity.class.st | 1 - src/Famix-Test1-Entities/FamixTest1SourceAnchor.class.st | 1 - src/Famix-Test1-Entities/FamixTest1SourceLanguage.class.st | 1 - src/Famix-Test1-Entities/FamixTest1SourceTextAnchor.class.st | 1 - src/Famix-Test1-Entities/FamixTest1SourcedEntity.class.st | 1 - src/Famix-Test1-Entities/FamixTest1TCanBeClassSide.trait.st | 1 - src/Famix-Test1-Entities/FamixTest1TEntityCreator.trait.st | 1 - src/Famix-Test2-Entities/FamixTest2Class.class.st | 1 - src/Famix-Test2-Entities/FamixTest2Comment.class.st | 1 - src/Famix-Test2-Entities/FamixTest2Entity.class.st | 1 - src/Famix-Test2-Entities/FamixTest2Inheritance.class.st | 1 - src/Famix-Test2-Entities/FamixTest2Model.class.st | 1 - src/Famix-Test2-Entities/FamixTest2NamedEntity.class.st | 1 - src/Famix-Test2-Entities/FamixTest2SourceAnchor.class.st | 1 - src/Famix-Test2-Entities/FamixTest2SourceLanguage.class.st | 1 - src/Famix-Test2-Entities/FamixTest2SourceTextAnchor.class.st | 1 - src/Famix-Test2-Entities/FamixTest2SourcedEntity.class.st | 1 - src/Famix-Test2-Entities/FamixTest2TEntityCreator.trait.st | 1 - src/Famix-Test3-Entities/FamixTest3Access.class.st | 1 - src/Famix-Test3-Entities/FamixTest3Attribute.class.st | 1 - src/Famix-Test3-Entities/FamixTest3Class.class.st | 1 - src/Famix-Test3-Entities/FamixTest3Comment.class.st | 1 - src/Famix-Test3-Entities/FamixTest3Entity.class.st | 1 - src/Famix-Test3-Entities/FamixTest3Invocation.class.st | 1 - src/Famix-Test3-Entities/FamixTest3Method.class.st | 1 - src/Famix-Test3-Entities/FamixTest3Model.class.st | 1 - src/Famix-Test3-Entities/FamixTest3NamedEntity.class.st | 1 - src/Famix-Test3-Entities/FamixTest3Package.class.st | 1 - src/Famix-Test3-Entities/FamixTest3ParametricClass.class.st | 1 - src/Famix-Test3-Entities/FamixTest3PrimitiveType.class.st | 1 - src/Famix-Test3-Entities/FamixTest3Reference.class.st | 1 - src/Famix-Test3-Entities/FamixTest3SourceAnchor.class.st | 1 - src/Famix-Test3-Entities/FamixTest3SourceLanguage.class.st | 1 - src/Famix-Test3-Entities/FamixTest3SourceTextAnchor.class.st | 1 - src/Famix-Test3-Entities/FamixTest3SourcedEntity.class.st | 1 - src/Famix-Test3-Entities/FamixTest3TEntityCreator.trait.st | 1 - src/Famix-Test3-Entities/FamixTest3Type.class.st | 1 - src/Famix-Test4-Entities/FamixTest4Book.class.st | 1 - src/Famix-Test4-Entities/FamixTest4Cafeteria.class.st | 1 - src/Famix-Test4-Entities/FamixTest4Classroom.class.st | 1 - src/Famix-Test4-Entities/FamixTest4Entity.class.st | 1 - src/Famix-Test4-Entities/FamixTest4Model.class.st | 1 - src/Famix-Test4-Entities/FamixTest4Person.class.st | 1 - src/Famix-Test4-Entities/FamixTest4Principal.class.st | 1 - src/Famix-Test4-Entities/FamixTest4Room.class.st | 1 - src/Famix-Test4-Entities/FamixTest4School.class.st | 1 - src/Famix-Test4-Entities/FamixTest4Student.class.st | 1 - src/Famix-Test4-Entities/FamixTest4TEntityCreator.trait.st | 1 - src/Famix-Test4-Entities/FamixTest4Teacher.class.st | 1 - src/Famix-Test5-Entities/FamixTest5AnnotationType1.class.st | 1 - src/Famix-Test5-Entities/FamixTest5AnnotationType2.class.st | 1 - src/Famix-Test5-Entities/FamixTest5Entity.class.st | 1 - src/Famix-Test5-Entities/FamixTest5Model.class.st | 1 - src/Famix-Test5-Entities/FamixTest5TEntity.trait.st | 1 - src/Famix-Test5-Entities/FamixTest5TEntityCreator.trait.st | 1 - .../FamixTest5WithAnnotationType1.class.st | 1 - .../FamixTest5WithAnnotationType2.class.st | 1 - src/Famix-Test6-Entities/FamixTest6Bacon.class.st | 1 - src/Famix-Test6-Entities/FamixTest6Comment.class.st | 1 - src/Famix-Test6-Entities/FamixTest6Entity.class.st | 1 - src/Famix-Test6-Entities/FamixTest6Model.class.st | 1 - src/Famix-Test6-Entities/FamixTest6NamedEntity.class.st | 1 - src/Famix-Test6-Entities/FamixTest6SourceAnchor.class.st | 1 - src/Famix-Test6-Entities/FamixTest6SourceLanguage.class.st | 1 - src/Famix-Test6-Entities/FamixTest6SourceTextAnchor.class.st | 1 - src/Famix-Test6-Entities/FamixTest6SourcedEntity.class.st | 1 - src/Famix-Test6-Entities/FamixTest6Spam.class.st | 1 - src/Famix-Test6-Entities/FamixTest6TEntityCreator.trait.st | 1 - src/Famix-Test7-Entities/FamixTest7Class.class.st | 1 - src/Famix-Test7-Entities/FamixTest7Comment.class.st | 1 - src/Famix-Test7-Entities/FamixTest7Entity.class.st | 1 - src/Famix-Test7-Entities/FamixTest7Inheritance.class.st | 1 - src/Famix-Test7-Entities/FamixTest7Method.class.st | 1 - src/Famix-Test7-Entities/FamixTest7Model.class.st | 1 - src/Famix-Test7-Entities/FamixTest7NamedEntity.class.st | 1 - src/Famix-Test7-Entities/FamixTest7SourceAnchor.class.st | 1 - src/Famix-Test7-Entities/FamixTest7SourceLanguage.class.st | 1 - src/Famix-Test7-Entities/FamixTest7SourceTextAnchor.class.st | 1 - src/Famix-Test7-Entities/FamixTest7SourcedEntity.class.st | 1 - src/Famix-Test7-Entities/FamixTest7TEntityCreator.trait.st | 1 - src/Famix-Test8-Entities/FamixTest8Animal.class.st | 1 - src/Famix-Test8-Entities/FamixTest8Bacteria.class.st | 1 - src/Famix-Test8-Entities/FamixTest8Biotope.class.st | 1 - src/Famix-Test8-Entities/FamixTest8Entity.class.st | 1 - src/Famix-Test8-Entities/FamixTest8Infection.class.st | 1 - src/Famix-Test8-Entities/FamixTest8LivingBeing.class.st | 1 - src/Famix-Test8-Entities/FamixTest8Model.class.st | 1 - src/Famix-Test8-Entities/FamixTest8Plant.class.st | 1 - src/Famix-Test8-Entities/FamixTest8Residence.class.st | 1 - src/Famix-Test8-Entities/FamixTest8TBiotope.trait.st | 1 - src/Famix-Test8-Entities/FamixTest8TEntityCreator.trait.st | 1 - src/Famix-Test8-Entities/FamixTest8TInfectable.trait.st | 1 - src/Famix-Test8-Entities/FamixTest8TInfectious.trait.st | 1 - src/Famix-Test8-Entities/FamixTest8TResident.trait.st | 1 - src/Famix-Test8-Entities/FamixTest8Virus.class.st | 1 - .../FamixTestComposed3Model.class.st | 1 - .../FamixTestComposed3TEntityCreator.trait.st | 1 - .../FamixTestComposedComposedModel.class.st | 1 - .../FamixTestComposedComposedTEntityCreator.trait.st | 1 - .../FamixTestComposedAssociation.class.st | 1 - .../FamixTestComposedCustomEntity1.class.st | 1 - .../FamixTestComposedCustomEntity2.class.st | 1 - .../FamixTestComposedCustomEntity3.class.st | 1 - .../FamixTestComposedCustomEntity4.class.st | 1 - .../FamixTestComposedEntity.class.st | 1 - .../FamixTestComposedModel.class.st | 1 - .../FamixTestComposedStandardEntity.class.st | 1 - .../FamixTestComposedTEntityCreator.trait.st | 1 - .../FamixTestComposed1Class.class.st | 1 - .../FamixTestComposed1Comment.class.st | 1 - .../FamixTestComposed1CustomEntity1.class.st | 1 - .../FamixTestComposed1CustomEntity2.class.st | 1 - .../FamixTestComposed1CustomEntity3.class.st | 1 - .../FamixTestComposed1CustomEntity4.class.st | 1 - .../FamixTestComposed1CustomEntity5.class.st | 1 - .../FamixTestComposed1Entity.class.st | 1 - .../FamixTestComposed1Method.class.st | 1 - .../FamixTestComposed1Model.class.st | 1 - .../FamixTestComposed1NamedEntity.class.st | 1 - .../FamixTestComposed1SourceAnchor.class.st | 1 - .../FamixTestComposed1SourceLanguage.class.st | 1 - .../FamixTestComposed1SourceTextAnchor.class.st | 1 - .../FamixTestComposed1SourcedEntity.class.st | 1 - .../FamixTestComposed1TEntityCreator.trait.st | 1 - .../FamixTestComposed2Class.class.st | 1 - .../FamixTestComposed2Comment.class.st | 1 - .../FamixTestComposed2CustomEntity1.class.st | 1 - .../FamixTestComposed2CustomEntity2.class.st | 1 - .../FamixTestComposed2CustomEntity3.class.st | 1 - .../FamixTestComposed2CustomEntity4.class.st | 1 - .../FamixTestComposed2CustomEntity5.class.st | 1 - .../FamixTestComposed2Entity.class.st | 1 - .../FamixTestComposed2Method.class.st | 1 - .../FamixTestComposed2Model.class.st | 1 - .../FamixTestComposed2NamedEntity.class.st | 1 - .../FamixTestComposed2SourceAnchor.class.st | 1 - .../FamixTestComposed2SourceLanguage.class.st | 1 - .../FamixTestComposed2SourceTextAnchor.class.st | 1 - .../FamixTestComposed2SourcedEntity.class.st | 1 - .../FamixTestComposed2TEntityCreator.trait.st | 1 - src/Famix-Traits/FamixTAccess.trait.st | 1 - src/Famix-Traits/FamixTAccessible.trait.st | 1 - src/Famix-Traits/FamixTAnnotationInstance.trait.st | 1 - src/Famix-Traits/FamixTAnnotationInstanceAttribute.trait.st | 1 - src/Famix-Traits/FamixTAnnotationType.trait.st | 1 - src/Famix-Traits/FamixTAnnotationTypeAttribute.trait.st | 1 - src/Famix-Traits/FamixTAssociation.trait.st | 1 - src/Famix-Traits/FamixTAttribute.trait.st | 1 - src/Famix-Traits/FamixTBytesFileAnchor.trait.st | 1 - src/Famix-Traits/FamixTCanBeAbstract.trait.st | 1 - src/Famix-Traits/FamixTCanBeClassSide.trait.st | 1 - src/Famix-Traits/FamixTCanBeFinal.trait.st | 1 - src/Famix-Traits/FamixTCanBeStub.trait.st | 1 - src/Famix-Traits/FamixTCanImplement.trait.st | 1 - src/Famix-Traits/FamixTClass.trait.st | 1 - src/Famix-Traits/FamixTClassMetrics.trait.st | 1 - src/Famix-Traits/FamixTCohesionCouplingMetrics.trait.st | 1 - src/Famix-Traits/FamixTComment.trait.st | 1 - src/Famix-Traits/FamixTCompilationUnit.trait.st | 1 - src/Famix-Traits/FamixTConcretization.trait.st | 1 - src/Famix-Traits/FamixTDefinedInModule.trait.st | 1 - src/Famix-Traits/FamixTDereferencedInvocation.trait.st | 1 - src/Famix-Traits/FamixTEntityTyping.trait.st | 1 - src/Famix-Traits/FamixTEnum.trait.st | 1 - src/Famix-Traits/FamixTEnumValue.trait.st | 1 - src/Famix-Traits/FamixTException.trait.st | 1 - src/Famix-Traits/FamixTFile.trait.st | 1 - src/Famix-Traits/FamixTFileAnchor.trait.st | 1 - src/Famix-Traits/FamixTFileInclude.trait.st | 1 - src/Famix-Traits/FamixTFileNavigation.trait.st | 1 - src/Famix-Traits/FamixTFileSystemEntity.trait.st | 1 - src/Famix-Traits/FamixTFolder.trait.st | 1 - src/Famix-Traits/FamixTFunction.trait.st | 1 - src/Famix-Traits/FamixTGlobalVariable.trait.st | 1 - src/Famix-Traits/FamixTHasImmediateSource.trait.st | 1 - src/Famix-Traits/FamixTHasKind.trait.st | 1 - src/Famix-Traits/FamixTHasSignature.trait.st | 1 - src/Famix-Traits/FamixTHasVisibility.trait.st | 1 - src/Famix-Traits/FamixTImplementable.trait.st | 1 - src/Famix-Traits/FamixTImplementation.trait.st | 1 - src/Famix-Traits/FamixTImplicitVariable.trait.st | 1 - src/Famix-Traits/FamixTImport.trait.st | 1 - src/Famix-Traits/FamixTImportable.trait.st | 1 - src/Famix-Traits/FamixTIndexedFileNavigation.trait.st | 1 - src/Famix-Traits/FamixTInheritance.trait.st | 1 - src/Famix-Traits/FamixTInvocable.trait.st | 1 - src/Famix-Traits/FamixTInvocation.trait.st | 1 - src/Famix-Traits/FamixTInvocationsReceiver.trait.st | 1 - src/Famix-Traits/FamixTLCOMMetrics.trait.st | 1 - src/Famix-Traits/FamixTLambda.trait.st | 1 - src/Famix-Traits/FamixTLocalVariable.trait.st | 1 - src/Famix-Traits/FamixTMethod.trait.st | 1 - src/Famix-Traits/FamixTMethodMetrics.trait.st | 1 - src/Famix-Traits/FamixTModule.trait.st | 1 - src/Famix-Traits/FamixTMultipleFileAnchor.trait.st | 1 - src/Famix-Traits/FamixTNamedEntity.trait.st | 1 - src/Famix-Traits/FamixTNamespace.trait.st | 1 - src/Famix-Traits/FamixTPackage.trait.st | 1 - src/Famix-Traits/FamixTPackageable.trait.st | 1 - src/Famix-Traits/FamixTParameter.trait.st | 1 - src/Famix-Traits/FamixTParametricAssociation.trait.st | 1 - src/Famix-Traits/FamixTParametricEntity.trait.st | 1 - src/Famix-Traits/FamixTPrimitiveType.trait.st | 1 - src/Famix-Traits/FamixTReference.trait.st | 1 - src/Famix-Traits/FamixTReferenceable.trait.st | 1 - src/Famix-Traits/FamixTRelativeSourceAnchor.trait.st | 1 - src/Famix-Traits/FamixTShadowable.trait.st | 1 - src/Famix-Traits/FamixTShadower.trait.st | 1 - src/Famix-Traits/FamixTSourceAnchor.trait.st | 1 - src/Famix-Traits/FamixTSourceEntity.trait.st | 1 - src/Famix-Traits/FamixTSourceLanguage.trait.st | 1 - src/Famix-Traits/FamixTStructuralEntity.trait.st | 1 - src/Famix-Traits/FamixTTemplate.trait.st | 1 - src/Famix-Traits/FamixTTemplateUser.trait.st | 1 - src/Famix-Traits/FamixTThrowable.trait.st | 1 - src/Famix-Traits/FamixTTrait.trait.st | 1 - src/Famix-Traits/FamixTTraitUsage.trait.st | 1 - src/Famix-Traits/FamixTTraitUser.trait.st | 1 - src/Famix-Traits/FamixTType.trait.st | 1 - src/Famix-Traits/FamixTTypeAlias.trait.st | 1 - src/Famix-Traits/FamixTTypeArgument.trait.st | 1 - src/Famix-Traits/FamixTTypeParameter.trait.st | 1 - src/Famix-Traits/FamixTTypedEntity.trait.st | 1 - src/Famix-Traits/FamixTUnknownVariable.trait.st | 1 - src/Famix-Traits/FamixTVisitor.trait.st | 1 - src/Famix-Traits/FamixTWithAccesses.trait.st | 1 - src/Famix-Traits/FamixTWithAnnotationInstances.trait.st | 1 - src/Famix-Traits/FamixTWithAnnotationTypes.trait.st | 1 - src/Famix-Traits/FamixTWithAttributes.trait.st | 1 - src/Famix-Traits/FamixTWithClasses.trait.st | 1 - src/Famix-Traits/FamixTWithComments.trait.st | 1 - src/Famix-Traits/FamixTWithCompilationUnits.trait.st | 1 - src/Famix-Traits/FamixTWithDereferencedInvocations.trait.st | 1 - src/Famix-Traits/FamixTWithEnumValues.trait.st | 1 - src/Famix-Traits/FamixTWithExceptions.trait.st | 1 - src/Famix-Traits/FamixTWithFileIncludes.trait.st | 1 - src/Famix-Traits/FamixTWithFiles.trait.st | 1 - src/Famix-Traits/FamixTWithFunctions.trait.st | 1 - src/Famix-Traits/FamixTWithGlobalVariables.trait.st | 1 - src/Famix-Traits/FamixTWithImplicitVariables.trait.st | 1 - src/Famix-Traits/FamixTWithImports.trait.st | 1 - src/Famix-Traits/FamixTWithInheritances.trait.st | 1 - src/Famix-Traits/FamixTWithInvocations.trait.st | 1 - src/Famix-Traits/FamixTWithLambdas.trait.st | 1 - src/Famix-Traits/FamixTWithLocalVariables.trait.st | 1 - src/Famix-Traits/FamixTWithMethods.trait.st | 1 - src/Famix-Traits/FamixTWithParameters.trait.st | 1 - src/Famix-Traits/FamixTWithReferences.trait.st | 1 - src/Famix-Traits/FamixTWithSourceLanguages.trait.st | 1 - src/Famix-Traits/FamixTWithStatements.trait.st | 1 - src/Famix-Traits/FamixTWithTemplates.trait.st | 1 - src/Famix-Traits/FamixTWithTraits.trait.st | 1 - src/Famix-Traits/FamixTWithTypeAliases.trait.st | 1 - src/Famix-Traits/FamixTWithTypes.trait.st | 1 - src/FamixDocumentor-TestMetaModel/FDClass1.class.st | 1 - src/FamixDocumentor-TestMetaModel/FDClass2.class.st | 1 - src/FamixDocumentor-TestMetaModel/FDEntity.class.st | 1 - src/FamixDocumentor-TestMetaModel/FDModel.class.st | 1 - src/FamixDocumentor-TestMetaModel/FDTEntityCreator.trait.st | 1 - src/FamixDocumentor-TestMetaModel/FDTrait1.trait.st | 1 - src/FamixDocumentor-TestMetaModel/FDTrait2.trait.st | 1 - src/FamixDocumentor-TestMetaModel/FDTrait3.trait.st | 1 - src/FamixDocumentor-TestMetaModel/FDTrait4.trait.st | 1 - .../MooseMSEImporterTestAttribute.class.st | 1 - .../MooseMSEImporterTestClass.class.st | 1 - .../MooseMSEImporterTestComment.class.st | 1 - .../MooseMSEImporterTestEntity.class.st | 1 - .../MooseMSEImporterTestEntityTyping.class.st | 1 - .../MooseMSEImporterTestInheritance.class.st | 1 - .../MooseMSEImporterTestMethod.class.st | 1 - .../MooseMSEImporterTestModel.class.st | 1 - .../MooseMSEImporterTestNamedEntity.class.st | 1 - .../MooseMSEImporterTestNamespace.class.st | 1 - .../MooseMSEImporterTestPackage.class.st | 1 - .../MooseMSEImporterTestPrimitiveType.class.st | 1 - .../MooseMSEImporterTestSourceAnchor.class.st | 1 - .../MooseMSEImporterTestSourceLanguage.class.st | 1 - .../MooseMSEImporterTestSourceTextAnchor.class.st | 1 - .../MooseMSEImporterTestSourcedEntity.class.st | 1 - .../MooseMSEImporterTestTEntityCreator.trait.st | 1 - src/Moose-Query/TAssociationMetaLevelDependency.trait.st | 1 - src/Moose-Query/TEntityMetaLevelDependency.trait.st | 1 - 382 files changed, 1 insertion(+), 383 deletions(-) diff --git a/src/Famix-Java-Entities/FamixJavaAccess.class.st b/src/Famix-Java-Entities/FamixJavaAccess.class.st index 6a6fba473..f62db436a 100644 --- a/src/Famix-Java-Entities/FamixJavaAccess.class.st +++ b/src/Famix-Java-Entities/FamixJavaAccess.class.st @@ -44,7 +44,6 @@ FamixJavaAccess class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaAnnotationInstance.class.st b/src/Famix-Java-Entities/FamixJavaAnnotationInstance.class.st index f50a4831d..63252a5aa 100644 --- a/src/Famix-Java-Entities/FamixJavaAnnotationInstance.class.st +++ b/src/Famix-Java-Entities/FamixJavaAnnotationInstance.class.st @@ -32,7 +32,6 @@ FamixJavaAnnotationInstance class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaAnnotationInstanceAttribute.class.st b/src/Famix-Java-Entities/FamixJavaAnnotationInstanceAttribute.class.st index d58c1760d..045a954fd 100644 --- a/src/Famix-Java-Entities/FamixJavaAnnotationInstanceAttribute.class.st +++ b/src/Famix-Java-Entities/FamixJavaAnnotationInstanceAttribute.class.st @@ -37,7 +37,6 @@ FamixJavaAnnotationInstanceAttribute class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaAnnotationType.class.st b/src/Famix-Java-Entities/FamixJavaAnnotationType.class.st index 23843034e..d54e78d32 100644 --- a/src/Famix-Java-Entities/FamixJavaAnnotationType.class.st +++ b/src/Famix-Java-Entities/FamixJavaAnnotationType.class.st @@ -56,7 +56,6 @@ FamixJavaAnnotationType class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaAnnotationTypeAttribute.class.st b/src/Famix-Java-Entities/FamixJavaAnnotationTypeAttribute.class.st index a0f9f4b96..3e692e3c0 100644 --- a/src/Famix-Java-Entities/FamixJavaAnnotationTypeAttribute.class.st +++ b/src/Famix-Java-Entities/FamixJavaAnnotationTypeAttribute.class.st @@ -54,7 +54,6 @@ FamixJavaAnnotationTypeAttribute class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaAttribute.class.st b/src/Famix-Java-Entities/FamixJavaAttribute.class.st index 8cc29ff81..fc2e03d98 100644 --- a/src/Famix-Java-Entities/FamixJavaAttribute.class.st +++ b/src/Famix-Java-Entities/FamixJavaAttribute.class.st @@ -58,7 +58,6 @@ FamixJavaAttribute class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaClass.class.st b/src/Famix-Java-Entities/FamixJavaClass.class.st index 258c4ca4b..d2306fd6f 100644 --- a/src/Famix-Java-Entities/FamixJavaClass.class.st +++ b/src/Famix-Java-Entities/FamixJavaClass.class.st @@ -67,7 +67,6 @@ FamixJavaClass class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaComment.class.st b/src/Famix-Java-Entities/FamixJavaComment.class.st index 7ccd7ed66..f86ae2001 100644 --- a/src/Famix-Java-Entities/FamixJavaComment.class.st +++ b/src/Famix-Java-Entities/FamixJavaComment.class.st @@ -31,7 +31,6 @@ FamixJavaComment class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaConcretization.class.st b/src/Famix-Java-Entities/FamixJavaConcretization.class.st index 38be44b9e..16e4e231f 100644 --- a/src/Famix-Java-Entities/FamixJavaConcretization.class.st +++ b/src/Famix-Java-Entities/FamixJavaConcretization.class.st @@ -39,7 +39,6 @@ FamixJavaConcretization class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaContainerEntity.class.st b/src/Famix-Java-Entities/FamixJavaContainerEntity.class.st index 22d59ba39..88b51557a 100644 --- a/src/Famix-Java-Entities/FamixJavaContainerEntity.class.st +++ b/src/Famix-Java-Entities/FamixJavaContainerEntity.class.st @@ -28,7 +28,6 @@ FamixJavaContainerEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Java-Entities/FamixJavaEntity.class.st b/src/Famix-Java-Entities/FamixJavaEntity.class.st index 682c99700..ee0771168 100644 --- a/src/Famix-Java-Entities/FamixJavaEntity.class.st +++ b/src/Famix-Java-Entities/FamixJavaEntity.class.st @@ -13,7 +13,6 @@ FamixJavaEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Java-Entities/FamixJavaEntityTyping.class.st b/src/Famix-Java-Entities/FamixJavaEntityTyping.class.st index 50257c0e0..a7159279c 100644 --- a/src/Famix-Java-Entities/FamixJavaEntityTyping.class.st +++ b/src/Famix-Java-Entities/FamixJavaEntityTyping.class.st @@ -38,7 +38,6 @@ FamixJavaEntityTyping class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaEnum.class.st b/src/Famix-Java-Entities/FamixJavaEnum.class.st index 9010f0202..67704ef89 100644 --- a/src/Famix-Java-Entities/FamixJavaEnum.class.st +++ b/src/Famix-Java-Entities/FamixJavaEnum.class.st @@ -63,7 +63,6 @@ FamixJavaEnum class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaEnumValue.class.st b/src/Famix-Java-Entities/FamixJavaEnumValue.class.st index 5cea7030c..d5ff93412 100644 --- a/src/Famix-Java-Entities/FamixJavaEnumValue.class.st +++ b/src/Famix-Java-Entities/FamixJavaEnumValue.class.st @@ -53,7 +53,6 @@ FamixJavaEnumValue class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaException.class.st b/src/Famix-Java-Entities/FamixJavaException.class.st index a2ccd8d3a..62cc32afa 100644 --- a/src/Famix-Java-Entities/FamixJavaException.class.st +++ b/src/Famix-Java-Entities/FamixJavaException.class.st @@ -61,7 +61,6 @@ FamixJavaException class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaImplementation.class.st b/src/Famix-Java-Entities/FamixJavaImplementation.class.st index d9af101dd..adbbd45a6 100644 --- a/src/Famix-Java-Entities/FamixJavaImplementation.class.st +++ b/src/Famix-Java-Entities/FamixJavaImplementation.class.st @@ -38,7 +38,6 @@ FamixJavaImplementation class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaImplicitVariable.class.st b/src/Famix-Java-Entities/FamixJavaImplicitVariable.class.st index 0297da3dc..62b7ce040 100644 --- a/src/Famix-Java-Entities/FamixJavaImplicitVariable.class.st +++ b/src/Famix-Java-Entities/FamixJavaImplicitVariable.class.st @@ -48,7 +48,6 @@ FamixJavaImplicitVariable class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaImport.class.st b/src/Famix-Java-Entities/FamixJavaImport.class.st index d244a3dee..31f07aaaf 100644 --- a/src/Famix-Java-Entities/FamixJavaImport.class.st +++ b/src/Famix-Java-Entities/FamixJavaImport.class.st @@ -38,7 +38,6 @@ FamixJavaImport class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaIndexedFileAnchor.class.st b/src/Famix-Java-Entities/FamixJavaIndexedFileAnchor.class.st index a615ead6e..8d1a1f193 100644 --- a/src/Famix-Java-Entities/FamixJavaIndexedFileAnchor.class.st +++ b/src/Famix-Java-Entities/FamixJavaIndexedFileAnchor.class.st @@ -27,7 +27,6 @@ FamixJavaIndexedFileAnchor class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaInheritance.class.st b/src/Famix-Java-Entities/FamixJavaInheritance.class.st index e3504075b..a4514bf54 100644 --- a/src/Famix-Java-Entities/FamixJavaInheritance.class.st +++ b/src/Famix-Java-Entities/FamixJavaInheritance.class.st @@ -38,7 +38,6 @@ FamixJavaInheritance class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaInitializer.class.st b/src/Famix-Java-Entities/FamixJavaInitializer.class.st index 54a433e4e..17ba54fd1 100644 --- a/src/Famix-Java-Entities/FamixJavaInitializer.class.st +++ b/src/Famix-Java-Entities/FamixJavaInitializer.class.st @@ -24,7 +24,6 @@ FamixJavaInitializer class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaInterface.class.st b/src/Famix-Java-Entities/FamixJavaInterface.class.st index 3bd6d8bbd..d1d4d6836 100644 --- a/src/Famix-Java-Entities/FamixJavaInterface.class.st +++ b/src/Famix-Java-Entities/FamixJavaInterface.class.st @@ -60,7 +60,6 @@ FamixJavaInterface class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaInvocation.class.st b/src/Famix-Java-Entities/FamixJavaInvocation.class.st index a590322b6..3567f2902 100644 --- a/src/Famix-Java-Entities/FamixJavaInvocation.class.st +++ b/src/Famix-Java-Entities/FamixJavaInvocation.class.st @@ -45,7 +45,6 @@ FamixJavaInvocation class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaLocalVariable.class.st b/src/Famix-Java-Entities/FamixJavaLocalVariable.class.st index 80ec2edc3..56f3c5590 100644 --- a/src/Famix-Java-Entities/FamixJavaLocalVariable.class.st +++ b/src/Famix-Java-Entities/FamixJavaLocalVariable.class.st @@ -54,7 +54,6 @@ FamixJavaLocalVariable class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaMethod.class.st b/src/Famix-Java-Entities/FamixJavaMethod.class.st index f7e352ff5..72207f856 100644 --- a/src/Famix-Java-Entities/FamixJavaMethod.class.st +++ b/src/Famix-Java-Entities/FamixJavaMethod.class.st @@ -70,7 +70,6 @@ FamixJavaMethod class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaModel.class.st b/src/Famix-Java-Entities/FamixJavaModel.class.st index a2fbf5b2c..e35ce50bc 100644 --- a/src/Famix-Java-Entities/FamixJavaModel.class.st +++ b/src/Famix-Java-Entities/FamixJavaModel.class.st @@ -20,7 +20,6 @@ FamixJavaModel class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Java-Entities/FamixJavaNamedEntity.class.st b/src/Famix-Java-Entities/FamixJavaNamedEntity.class.st index 3108ab746..a61125fd3 100644 --- a/src/Famix-Java-Entities/FamixJavaNamedEntity.class.st +++ b/src/Famix-Java-Entities/FamixJavaNamedEntity.class.st @@ -33,7 +33,6 @@ FamixJavaNamedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Java-Entities/FamixJavaPackage.class.st b/src/Famix-Java-Entities/FamixJavaPackage.class.st index f32ffa112..901bbb5bc 100644 --- a/src/Famix-Java-Entities/FamixJavaPackage.class.st +++ b/src/Famix-Java-Entities/FamixJavaPackage.class.st @@ -49,7 +49,6 @@ FamixJavaPackage class >> annotation [ - ^ self ] { #category : 'Famix-Implementation' } diff --git a/src/Famix-Java-Entities/FamixJavaParameter.class.st b/src/Famix-Java-Entities/FamixJavaParameter.class.st index 716a6f9ec..17fcbc438 100644 --- a/src/Famix-Java-Entities/FamixJavaParameter.class.st +++ b/src/Famix-Java-Entities/FamixJavaParameter.class.st @@ -54,7 +54,6 @@ FamixJavaParameter class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaParametricClass.class.st b/src/Famix-Java-Entities/FamixJavaParametricClass.class.st index 0330b74b8..0fd0f3165 100644 --- a/src/Famix-Java-Entities/FamixJavaParametricClass.class.st +++ b/src/Famix-Java-Entities/FamixJavaParametricClass.class.st @@ -26,7 +26,6 @@ FamixJavaParametricClass class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaParametricEntityTyping.class.st b/src/Famix-Java-Entities/FamixJavaParametricEntityTyping.class.st index cd5d54373..cdf87ce85 100644 --- a/src/Famix-Java-Entities/FamixJavaParametricEntityTyping.class.st +++ b/src/Famix-Java-Entities/FamixJavaParametricEntityTyping.class.st @@ -26,7 +26,6 @@ FamixJavaParametricEntityTyping class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaParametricImplementation.class.st b/src/Famix-Java-Entities/FamixJavaParametricImplementation.class.st index 74faa4f0f..042ae980e 100644 --- a/src/Famix-Java-Entities/FamixJavaParametricImplementation.class.st +++ b/src/Famix-Java-Entities/FamixJavaParametricImplementation.class.st @@ -26,7 +26,6 @@ FamixJavaParametricImplementation class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaParametricInheritance.class.st b/src/Famix-Java-Entities/FamixJavaParametricInheritance.class.st index 9286e92ad..e680bbd35 100644 --- a/src/Famix-Java-Entities/FamixJavaParametricInheritance.class.st +++ b/src/Famix-Java-Entities/FamixJavaParametricInheritance.class.st @@ -26,7 +26,6 @@ FamixJavaParametricInheritance class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaParametricInterface.class.st b/src/Famix-Java-Entities/FamixJavaParametricInterface.class.st index a8150aa3f..b385a6ee5 100644 --- a/src/Famix-Java-Entities/FamixJavaParametricInterface.class.st +++ b/src/Famix-Java-Entities/FamixJavaParametricInterface.class.st @@ -26,7 +26,6 @@ FamixJavaParametricInterface class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaParametricInvocation.class.st b/src/Famix-Java-Entities/FamixJavaParametricInvocation.class.st index 0277d6c5c..ca5ebabad 100644 --- a/src/Famix-Java-Entities/FamixJavaParametricInvocation.class.st +++ b/src/Famix-Java-Entities/FamixJavaParametricInvocation.class.st @@ -26,7 +26,6 @@ FamixJavaParametricInvocation class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaParametricMethod.class.st b/src/Famix-Java-Entities/FamixJavaParametricMethod.class.st index 2257efe47..cea697700 100644 --- a/src/Famix-Java-Entities/FamixJavaParametricMethod.class.st +++ b/src/Famix-Java-Entities/FamixJavaParametricMethod.class.st @@ -26,7 +26,6 @@ FamixJavaParametricMethod class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaParametricReference.class.st b/src/Famix-Java-Entities/FamixJavaParametricReference.class.st index 8b61ca4fb..7385d48f0 100644 --- a/src/Famix-Java-Entities/FamixJavaParametricReference.class.st +++ b/src/Famix-Java-Entities/FamixJavaParametricReference.class.st @@ -26,7 +26,6 @@ FamixJavaParametricReference class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaPrimitiveType.class.st b/src/Famix-Java-Entities/FamixJavaPrimitiveType.class.st index 42a412790..d77d70037 100644 --- a/src/Famix-Java-Entities/FamixJavaPrimitiveType.class.st +++ b/src/Famix-Java-Entities/FamixJavaPrimitiveType.class.st @@ -49,7 +49,6 @@ FamixJavaPrimitiveType class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaReference.class.st b/src/Famix-Java-Entities/FamixJavaReference.class.st index a2c97fc2d..bea5616e1 100644 --- a/src/Famix-Java-Entities/FamixJavaReference.class.st +++ b/src/Famix-Java-Entities/FamixJavaReference.class.st @@ -38,7 +38,6 @@ FamixJavaReference class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaSourceAnchor.class.st b/src/Famix-Java-Entities/FamixJavaSourceAnchor.class.st index 9db90c6bf..88e39f4b3 100644 --- a/src/Famix-Java-Entities/FamixJavaSourceAnchor.class.st +++ b/src/Famix-Java-Entities/FamixJavaSourceAnchor.class.st @@ -27,7 +27,6 @@ FamixJavaSourceAnchor class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Java-Entities/FamixJavaSourceLanguage.class.st b/src/Famix-Java-Entities/FamixJavaSourceLanguage.class.st index d14eedf4d..71be81944 100644 --- a/src/Famix-Java-Entities/FamixJavaSourceLanguage.class.st +++ b/src/Famix-Java-Entities/FamixJavaSourceLanguage.class.st @@ -26,7 +26,6 @@ FamixJavaSourceLanguage class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaSourceTextAnchor.class.st b/src/Famix-Java-Entities/FamixJavaSourceTextAnchor.class.st index 95c8cd026..e45446734 100644 --- a/src/Famix-Java-Entities/FamixJavaSourceTextAnchor.class.st +++ b/src/Famix-Java-Entities/FamixJavaSourceTextAnchor.class.st @@ -32,7 +32,6 @@ FamixJavaSourceTextAnchor class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaSourcedEntity.class.st b/src/Famix-Java-Entities/FamixJavaSourcedEntity.class.st index 4a3edb41e..ebf9da843 100644 --- a/src/Famix-Java-Entities/FamixJavaSourcedEntity.class.st +++ b/src/Famix-Java-Entities/FamixJavaSourcedEntity.class.st @@ -27,7 +27,6 @@ FamixJavaSourcedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Java-Entities/FamixJavaTBound.trait.st b/src/Famix-Java-Entities/FamixJavaTBound.trait.st index c90fbc313..b310dc294 100644 --- a/src/Famix-Java-Entities/FamixJavaTBound.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTBound.trait.st @@ -30,7 +30,6 @@ FamixJavaTBound classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaTBounded.trait.st b/src/Famix-Java-Entities/FamixJavaTBounded.trait.st index 033fa3db4..03755879a 100644 --- a/src/Famix-Java-Entities/FamixJavaTBounded.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTBounded.trait.st @@ -30,7 +30,6 @@ FamixJavaTBounded classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaTCanBeSynchronized.trait.st b/src/Famix-Java-Entities/FamixJavaTCanBeSynchronized.trait.st index 42f32ddc1..31ab3634f 100644 --- a/src/Famix-Java-Entities/FamixJavaTCanBeSynchronized.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTCanBeSynchronized.trait.st @@ -36,7 +36,6 @@ FamixJavaTCanBeSynchronized classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaTCanBeTransient.trait.st b/src/Famix-Java-Entities/FamixJavaTCanBeTransient.trait.st index 94bc23a03..feb23b79a 100644 --- a/src/Famix-Java-Entities/FamixJavaTCanBeTransient.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTCanBeTransient.trait.st @@ -32,7 +32,6 @@ FamixJavaTCanBeTransient classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaTCanBeVolatile.trait.st b/src/Famix-Java-Entities/FamixJavaTCanBeVolatile.trait.st index 2566cf5a2..7dab60a75 100644 --- a/src/Famix-Java-Entities/FamixJavaTCanBeVolatile.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTCanBeVolatile.trait.st @@ -32,7 +32,6 @@ FamixJavaTCanBeVolatile classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaTClassMetrics.trait.st b/src/Famix-Java-Entities/FamixJavaTClassMetrics.trait.st index bfed24e94..f4b5f987f 100644 --- a/src/Famix-Java-Entities/FamixJavaTClassMetrics.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTClassMetrics.trait.st @@ -11,7 +11,6 @@ FamixJavaTClassMetrics classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaTEntityCreator.trait.st b/src/Famix-Java-Entities/FamixJavaTEntityCreator.trait.st index 1d497517a..b6e5c6b29 100644 --- a/src/Famix-Java-Entities/FamixJavaTEntityCreator.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTEntityCreator.trait.st @@ -17,7 +17,6 @@ FamixJavaTEntityCreator classSide >> annotation [ - ^ self ] { #category : 'entity creation' } diff --git a/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st b/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st index 8d33c4dfb..ba61d0b54 100644 --- a/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st @@ -17,7 +17,6 @@ FamixJavaTVisitor classSide >> annotation [ - ^ self ] { #category : 'visiting' } diff --git a/src/Famix-Java-Entities/FamixJavaTWithInterfaces.trait.st b/src/Famix-Java-Entities/FamixJavaTWithInterfaces.trait.st index b1707a9c2..21f2c56bd 100644 --- a/src/Famix-Java-Entities/FamixJavaTWithInterfaces.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTWithInterfaces.trait.st @@ -27,7 +27,6 @@ FamixJavaTWithInterfaces classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaType.class.st b/src/Famix-Java-Entities/FamixJavaType.class.st index daff518b2..7a1c03e2f 100644 --- a/src/Famix-Java-Entities/FamixJavaType.class.st +++ b/src/Famix-Java-Entities/FamixJavaType.class.st @@ -51,7 +51,6 @@ FamixJavaType class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaTypeParameter.class.st b/src/Famix-Java-Entities/FamixJavaTypeParameter.class.st index e0ece00ef..a7678fa47 100644 --- a/src/Famix-Java-Entities/FamixJavaTypeParameter.class.st +++ b/src/Famix-Java-Entities/FamixJavaTypeParameter.class.st @@ -41,7 +41,6 @@ FamixJavaTypeParameter class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaUnknownVariable.class.st b/src/Famix-Java-Entities/FamixJavaUnknownVariable.class.st index 126a1d1b2..4a1e124b6 100644 --- a/src/Famix-Java-Entities/FamixJavaUnknownVariable.class.st +++ b/src/Famix-Java-Entities/FamixJavaUnknownVariable.class.st @@ -43,7 +43,6 @@ FamixJavaUnknownVariable class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Java-Entities/FamixJavaVariable.class.st b/src/Famix-Java-Entities/FamixJavaVariable.class.st index 3fd9af776..ecd44f1b5 100644 --- a/src/Famix-Java-Entities/FamixJavaVariable.class.st +++ b/src/Famix-Java-Entities/FamixJavaVariable.class.st @@ -27,7 +27,6 @@ FamixJavaVariable class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Java-Entities/FamixJavaWildcard.class.st b/src/Famix-Java-Entities/FamixJavaWildcard.class.st index cd4ab87dc..9a35c9d32 100644 --- a/src/Famix-Java-Entities/FamixJavaWildcard.class.st +++ b/src/Famix-Java-Entities/FamixJavaWildcard.class.st @@ -32,7 +32,6 @@ FamixJavaWildcard class >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st index 858a416d3..c74529892 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st @@ -46,8 +46,7 @@ FmxMBMethodsFactory class >> annotationFor: aName super: superclassName package: - {4} - ^ self' format: { + {4}' format: { aName. superclassName. package. diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStAccess.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStAccess.class.st index ebd8ac479..bfb94d7a7 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStAccess.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStAccess.class.st @@ -44,5 +44,4 @@ FamixStAccess class >> annotation [ - ^ self ] diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStAnnotationInstance.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStAnnotationInstance.class.st index 9345d5408..9addf4892 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStAnnotationInstance.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStAnnotationInstance.class.st @@ -32,7 +32,6 @@ FamixStAnnotationInstance class >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStAnnotationInstanceAttribute.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStAnnotationInstanceAttribute.class.st index c8aa560ca..edf0d0872 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStAnnotationInstanceAttribute.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStAnnotationInstanceAttribute.class.st @@ -37,7 +37,6 @@ FamixStAnnotationInstanceAttribute class >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStAnnotationType.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStAnnotationType.class.st index 404c29b1f..d3c8e15fa 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStAnnotationType.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStAnnotationType.class.st @@ -37,7 +37,6 @@ FamixStAnnotationType class >> annotation [ - ^ self ] { #category : 'compatibility' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStAnnotationTypeAttribute.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStAnnotationTypeAttribute.class.st index fdcbfd445..f6c09e0af 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStAnnotationTypeAttribute.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStAnnotationTypeAttribute.class.st @@ -49,7 +49,6 @@ FamixStAnnotationTypeAttribute class >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStAttribute.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStAttribute.class.st index 50ac30ed2..9ce14f6b7 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStAttribute.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStAttribute.class.st @@ -50,7 +50,6 @@ FamixStAttribute class >> annotation [ - ^ self ] { #category : 'properties' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStClass.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStClass.class.st index 97126ca2b..c2f4e835e 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStClass.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStClass.class.st @@ -60,7 +60,6 @@ FamixStClass class >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStComment.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStComment.class.st index 69d411f9b..e64ddfe4e 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStComment.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStComment.class.st @@ -31,7 +31,6 @@ FamixStComment class >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStEntity.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStEntity.class.st index 3fd608bb5..a336370fb 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStEntity.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStEntity.class.st @@ -13,7 +13,6 @@ FamixStEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStEntityTyping.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStEntityTyping.class.st index 82deed2af..c0ea1d527 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStEntityTyping.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStEntityTyping.class.st @@ -38,5 +38,4 @@ FamixStEntityTyping class >> annotation [ - ^ self ] diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStGlobalVariable.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStGlobalVariable.class.st index 24ccd8287..4722254bc 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStGlobalVariable.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStGlobalVariable.class.st @@ -49,5 +49,4 @@ FamixStGlobalVariable class >> annotation [ - ^ self ] diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStImplicitVariable.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStImplicitVariable.class.st index 2ae76d006..66b1247a1 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStImplicitVariable.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStImplicitVariable.class.st @@ -49,7 +49,6 @@ FamixStImplicitVariable class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStInheritance.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStInheritance.class.st index 45c4365c3..f4ae3b470 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStInheritance.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStInheritance.class.st @@ -38,5 +38,4 @@ FamixStInheritance class >> annotation [ - ^ self ] diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStInvocation.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStInvocation.class.st index 412377bb3..aa38e9985 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStInvocation.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStInvocation.class.st @@ -45,7 +45,6 @@ FamixStInvocation class >> annotation [ - ^ self ] { #category : 'initialization' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStLocalVariable.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStLocalVariable.class.st index 29ddda652..d5bb67376 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStLocalVariable.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStLocalVariable.class.st @@ -49,7 +49,6 @@ FamixStLocalVariable class >> annotation [ - ^ self ] { #category : 'printing' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStMethod.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStMethod.class.st index 725026dfb..2308cf3ed 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStMethod.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStMethod.class.st @@ -70,7 +70,6 @@ FamixStMethod class >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStModel.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStModel.class.st index b8465b819..c7e8305d4 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStModel.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStModel.class.st @@ -20,7 +20,6 @@ FamixStModel class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStNamedEntity.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStNamedEntity.class.st index 2efb753c2..1e6bc4ea1 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStNamedEntity.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStNamedEntity.class.st @@ -33,7 +33,6 @@ FamixStNamedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStNamespace.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStNamespace.class.st index 1549708b4..c6b2f8ac1 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStNamespace.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStNamespace.class.st @@ -40,7 +40,6 @@ FamixStNamespace class >> annotation [ - ^ self ] { #category : 'Famix-Extensions-metrics' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStPackage.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStPackage.class.st index 1b87e5b32..0d655d795 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStPackage.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStPackage.class.st @@ -40,7 +40,6 @@ FamixStPackage class >> annotation [ - ^ self ] { #category : 'Famix-Extensions-metrics' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStParameter.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStParameter.class.st index e416ead9a..61666f482 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStParameter.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStParameter.class.st @@ -49,7 +49,6 @@ FamixStParameter class >> annotation [ - ^ self ] { #category : 'printing' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStPharoEntitySourceAnchor.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStPharoEntitySourceAnchor.class.st index 808f9f454..c0321531c 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStPharoEntitySourceAnchor.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStPharoEntitySourceAnchor.class.st @@ -27,7 +27,6 @@ FamixStPharoEntitySourceAnchor class >> annotation [ - ^ self ] { #category : 'initialization' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStReference.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStReference.class.st index 5182fe0f0..96ccedccd 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStReference.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStReference.class.st @@ -38,5 +38,4 @@ FamixStReference class >> annotation [ - ^ self ] diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStSourceAnchor.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStSourceAnchor.class.st index df5f1dc74..245bbdb6a 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStSourceAnchor.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStSourceAnchor.class.st @@ -27,7 +27,6 @@ FamixStSourceAnchor class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStSourceLanguage.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStSourceLanguage.class.st index 3de445849..8412470d4 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStSourceLanguage.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStSourceLanguage.class.st @@ -26,7 +26,6 @@ FamixStSourceLanguage class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStSourceTextAnchor.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStSourceTextAnchor.class.st index 2106e8eaa..3bd4c476d 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStSourceTextAnchor.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStSourceTextAnchor.class.st @@ -32,5 +32,4 @@ FamixStSourceTextAnchor class >> annotation [ - ^ self ] diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStSourcedEntity.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStSourcedEntity.class.st index d0f9ac065..560ec00f9 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStSourcedEntity.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStSourcedEntity.class.st @@ -27,7 +27,6 @@ FamixStSourcedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStTEntityCreator.trait.st b/src/Famix-PharoSmalltalk-Entities/FamixStTEntityCreator.trait.st index 8e3e687f1..1ea7bfee0 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStTEntityCreator.trait.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStTEntityCreator.trait.st @@ -17,7 +17,6 @@ FamixStTEntityCreator classSide >> annotation [ - ^ self ] { #category : 'entity creation' } diff --git a/src/Famix-PharoSmalltalk-Entities/FamixStUnknownVariable.class.st b/src/Famix-PharoSmalltalk-Entities/FamixStUnknownVariable.class.st index 49df84586..53ccd5082 100644 --- a/src/Famix-PharoSmalltalk-Entities/FamixStUnknownVariable.class.st +++ b/src/Famix-PharoSmalltalk-Entities/FamixStUnknownVariable.class.st @@ -44,5 +44,4 @@ FamixStUnknownVariable class >> annotation [ - ^ self ] diff --git a/src/Famix-Test1-Entities/FamixTest1Association.class.st b/src/Famix-Test1-Entities/FamixTest1Association.class.st index 455884c26..a2ff68447 100644 --- a/src/Famix-Test1-Entities/FamixTest1Association.class.st +++ b/src/Famix-Test1-Entities/FamixTest1Association.class.st @@ -28,7 +28,6 @@ FamixTest1Association class >> annotation [ - ^ self ] { #category : 'converting' } diff --git a/src/Famix-Test1-Entities/FamixTest1Attribute.class.st b/src/Famix-Test1-Entities/FamixTest1Attribute.class.st index 3e9874d4f..db9305a27 100644 --- a/src/Famix-Test1-Entities/FamixTest1Attribute.class.st +++ b/src/Famix-Test1-Entities/FamixTest1Attribute.class.st @@ -50,5 +50,4 @@ FamixTest1Attribute class >> annotation [ - ^ self ] diff --git a/src/Famix-Test1-Entities/FamixTest1BytesFileAnchor.class.st b/src/Famix-Test1-Entities/FamixTest1BytesFileAnchor.class.st index 35b755add..9dc449386 100644 --- a/src/Famix-Test1-Entities/FamixTest1BytesFileAnchor.class.st +++ b/src/Famix-Test1-Entities/FamixTest1BytesFileAnchor.class.st @@ -27,5 +27,4 @@ FamixTest1BytesFileAnchor class >> annotation [ - ^ self ] diff --git a/src/Famix-Test1-Entities/FamixTest1Class.class.st b/src/Famix-Test1-Entities/FamixTest1Class.class.st index 4b9024b94..be0220814 100644 --- a/src/Famix-Test1-Entities/FamixTest1Class.class.st +++ b/src/Famix-Test1-Entities/FamixTest1Class.class.st @@ -62,5 +62,4 @@ FamixTest1Class class >> annotation [ - ^ self ] diff --git a/src/Famix-Test1-Entities/FamixTest1Comment.class.st b/src/Famix-Test1-Entities/FamixTest1Comment.class.st index 83605eadd..399bf72ce 100644 --- a/src/Famix-Test1-Entities/FamixTest1Comment.class.st +++ b/src/Famix-Test1-Entities/FamixTest1Comment.class.st @@ -31,5 +31,4 @@ FamixTest1Comment class >> annotation [ - ^ self ] diff --git a/src/Famix-Test1-Entities/FamixTest1Entity.class.st b/src/Famix-Test1-Entities/FamixTest1Entity.class.st index 963190bcb..0b8ad4c7b 100644 --- a/src/Famix-Test1-Entities/FamixTest1Entity.class.st +++ b/src/Famix-Test1-Entities/FamixTest1Entity.class.st @@ -13,7 +13,6 @@ FamixTest1Entity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test1-Entities/FamixTest1File.class.st b/src/Famix-Test1-Entities/FamixTest1File.class.st index 7a5acf9c3..9abb59995 100644 --- a/src/Famix-Test1-Entities/FamixTest1File.class.st +++ b/src/Famix-Test1-Entities/FamixTest1File.class.st @@ -37,5 +37,4 @@ FamixTest1File class >> annotation [ - ^ self ] diff --git a/src/Famix-Test1-Entities/FamixTest1FileAnchor.class.st b/src/Famix-Test1-Entities/FamixTest1FileAnchor.class.st index 500c496ce..fffbc8b46 100644 --- a/src/Famix-Test1-Entities/FamixTest1FileAnchor.class.st +++ b/src/Famix-Test1-Entities/FamixTest1FileAnchor.class.st @@ -29,5 +29,4 @@ FamixTest1FileAnchor class >> annotation [ - ^ self ] diff --git a/src/Famix-Test1-Entities/FamixTest1Folder.class.st b/src/Famix-Test1-Entities/FamixTest1Folder.class.st index 8a19d9cd6..1ca2dc01d 100644 --- a/src/Famix-Test1-Entities/FamixTest1Folder.class.st +++ b/src/Famix-Test1-Entities/FamixTest1Folder.class.st @@ -37,5 +37,4 @@ FamixTest1Folder class >> annotation [ - ^ self ] diff --git a/src/Famix-Test1-Entities/FamixTest1IndexedFileAnchor.class.st b/src/Famix-Test1-Entities/FamixTest1IndexedFileAnchor.class.st index b9f6856da..6c757af94 100644 --- a/src/Famix-Test1-Entities/FamixTest1IndexedFileAnchor.class.st +++ b/src/Famix-Test1-Entities/FamixTest1IndexedFileAnchor.class.st @@ -27,5 +27,4 @@ FamixTest1IndexedFileAnchor class >> annotation [ - ^ self ] diff --git a/src/Famix-Test1-Entities/FamixTest1Method.class.st b/src/Famix-Test1-Entities/FamixTest1Method.class.st index d80e50a71..bdb8a2800 100644 --- a/src/Famix-Test1-Entities/FamixTest1Method.class.st +++ b/src/Famix-Test1-Entities/FamixTest1Method.class.st @@ -63,7 +63,6 @@ FamixTest1Method class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test1-Entities/FamixTest1Model.class.st b/src/Famix-Test1-Entities/FamixTest1Model.class.st index a13feb76e..27940a8cf 100644 --- a/src/Famix-Test1-Entities/FamixTest1Model.class.st +++ b/src/Famix-Test1-Entities/FamixTest1Model.class.st @@ -34,7 +34,6 @@ FamixTest1Model class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test1-Entities/FamixTest1MultipleFileAnchor.class.st b/src/Famix-Test1-Entities/FamixTest1MultipleFileAnchor.class.st index 5172fa6ec..ff490970d 100644 --- a/src/Famix-Test1-Entities/FamixTest1MultipleFileAnchor.class.st +++ b/src/Famix-Test1-Entities/FamixTest1MultipleFileAnchor.class.st @@ -32,5 +32,4 @@ FamixTest1MultipleFileAnchor class >> annotation [ - ^ self ] diff --git a/src/Famix-Test1-Entities/FamixTest1NamedEntity.class.st b/src/Famix-Test1-Entities/FamixTest1NamedEntity.class.st index 671c62e12..e51071ed4 100644 --- a/src/Famix-Test1-Entities/FamixTest1NamedEntity.class.st +++ b/src/Famix-Test1-Entities/FamixTest1NamedEntity.class.st @@ -24,7 +24,6 @@ FamixTest1NamedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test1-Entities/FamixTest1SourceAnchor.class.st b/src/Famix-Test1-Entities/FamixTest1SourceAnchor.class.st index 0ed277ec9..3498fbe1b 100644 --- a/src/Famix-Test1-Entities/FamixTest1SourceAnchor.class.st +++ b/src/Famix-Test1-Entities/FamixTest1SourceAnchor.class.st @@ -27,7 +27,6 @@ FamixTest1SourceAnchor class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test1-Entities/FamixTest1SourceLanguage.class.st b/src/Famix-Test1-Entities/FamixTest1SourceLanguage.class.st index 29788b9a5..2e62273f6 100644 --- a/src/Famix-Test1-Entities/FamixTest1SourceLanguage.class.st +++ b/src/Famix-Test1-Entities/FamixTest1SourceLanguage.class.st @@ -26,5 +26,4 @@ FamixTest1SourceLanguage class >> annotation [ - ^ self ] diff --git a/src/Famix-Test1-Entities/FamixTest1SourceTextAnchor.class.st b/src/Famix-Test1-Entities/FamixTest1SourceTextAnchor.class.st index ca4b4d9e2..dfb66d967 100644 --- a/src/Famix-Test1-Entities/FamixTest1SourceTextAnchor.class.st +++ b/src/Famix-Test1-Entities/FamixTest1SourceTextAnchor.class.st @@ -32,5 +32,4 @@ FamixTest1SourceTextAnchor class >> annotation [ - ^ self ] diff --git a/src/Famix-Test1-Entities/FamixTest1SourcedEntity.class.st b/src/Famix-Test1-Entities/FamixTest1SourcedEntity.class.st index b0ae9e8b2..4dce73a59 100644 --- a/src/Famix-Test1-Entities/FamixTest1SourcedEntity.class.st +++ b/src/Famix-Test1-Entities/FamixTest1SourcedEntity.class.st @@ -29,7 +29,6 @@ FamixTest1SourcedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test1-Entities/FamixTest1TCanBeClassSide.trait.st b/src/Famix-Test1-Entities/FamixTest1TCanBeClassSide.trait.st index a7d438fe4..f72975f37 100644 --- a/src/Famix-Test1-Entities/FamixTest1TCanBeClassSide.trait.st +++ b/src/Famix-Test1-Entities/FamixTest1TCanBeClassSide.trait.st @@ -23,7 +23,6 @@ FamixTest1TCanBeClassSide classSide >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Famix-Test1-Entities/FamixTest1TEntityCreator.trait.st b/src/Famix-Test1-Entities/FamixTest1TEntityCreator.trait.st index d4c18bfd2..9de33a199 100644 --- a/src/Famix-Test1-Entities/FamixTest1TEntityCreator.trait.st +++ b/src/Famix-Test1-Entities/FamixTest1TEntityCreator.trait.st @@ -17,7 +17,6 @@ FamixTest1TEntityCreator classSide >> annotation [ - ^ self ] { #category : 'entity creation' } diff --git a/src/Famix-Test2-Entities/FamixTest2Class.class.st b/src/Famix-Test2-Entities/FamixTest2Class.class.st index 6f322d9e2..27a9467c7 100644 --- a/src/Famix-Test2-Entities/FamixTest2Class.class.st +++ b/src/Famix-Test2-Entities/FamixTest2Class.class.st @@ -58,5 +58,4 @@ FamixTest2Class class >> annotation [ - ^ self ] diff --git a/src/Famix-Test2-Entities/FamixTest2Comment.class.st b/src/Famix-Test2-Entities/FamixTest2Comment.class.st index 0a4f911f2..6d923c856 100644 --- a/src/Famix-Test2-Entities/FamixTest2Comment.class.st +++ b/src/Famix-Test2-Entities/FamixTest2Comment.class.st @@ -31,5 +31,4 @@ FamixTest2Comment class >> annotation [ - ^ self ] diff --git a/src/Famix-Test2-Entities/FamixTest2Entity.class.st b/src/Famix-Test2-Entities/FamixTest2Entity.class.st index 965fea54c..109599331 100644 --- a/src/Famix-Test2-Entities/FamixTest2Entity.class.st +++ b/src/Famix-Test2-Entities/FamixTest2Entity.class.st @@ -13,7 +13,6 @@ FamixTest2Entity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test2-Entities/FamixTest2Inheritance.class.st b/src/Famix-Test2-Entities/FamixTest2Inheritance.class.st index 8f8cd3452..4d2a76d17 100644 --- a/src/Famix-Test2-Entities/FamixTest2Inheritance.class.st +++ b/src/Famix-Test2-Entities/FamixTest2Inheritance.class.st @@ -38,5 +38,4 @@ FamixTest2Inheritance class >> annotation [ - ^ self ] diff --git a/src/Famix-Test2-Entities/FamixTest2Model.class.st b/src/Famix-Test2-Entities/FamixTest2Model.class.st index 06c557048..73541cd43 100644 --- a/src/Famix-Test2-Entities/FamixTest2Model.class.st +++ b/src/Famix-Test2-Entities/FamixTest2Model.class.st @@ -20,5 +20,4 @@ FamixTest2Model class >> annotation [ - ^ self ] diff --git a/src/Famix-Test2-Entities/FamixTest2NamedEntity.class.st b/src/Famix-Test2-Entities/FamixTest2NamedEntity.class.st index 1e13a5cf7..2f0c54539 100644 --- a/src/Famix-Test2-Entities/FamixTest2NamedEntity.class.st +++ b/src/Famix-Test2-Entities/FamixTest2NamedEntity.class.st @@ -24,7 +24,6 @@ FamixTest2NamedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test2-Entities/FamixTest2SourceAnchor.class.st b/src/Famix-Test2-Entities/FamixTest2SourceAnchor.class.st index cfaa5c6c2..f18e9230f 100644 --- a/src/Famix-Test2-Entities/FamixTest2SourceAnchor.class.st +++ b/src/Famix-Test2-Entities/FamixTest2SourceAnchor.class.st @@ -27,7 +27,6 @@ FamixTest2SourceAnchor class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test2-Entities/FamixTest2SourceLanguage.class.st b/src/Famix-Test2-Entities/FamixTest2SourceLanguage.class.st index af94d069a..95f0b31fe 100644 --- a/src/Famix-Test2-Entities/FamixTest2SourceLanguage.class.st +++ b/src/Famix-Test2-Entities/FamixTest2SourceLanguage.class.st @@ -26,5 +26,4 @@ FamixTest2SourceLanguage class >> annotation [ - ^ self ] diff --git a/src/Famix-Test2-Entities/FamixTest2SourceTextAnchor.class.st b/src/Famix-Test2-Entities/FamixTest2SourceTextAnchor.class.st index 7464a7db5..93b19973c 100644 --- a/src/Famix-Test2-Entities/FamixTest2SourceTextAnchor.class.st +++ b/src/Famix-Test2-Entities/FamixTest2SourceTextAnchor.class.st @@ -32,5 +32,4 @@ FamixTest2SourceTextAnchor class >> annotation [ - ^ self ] diff --git a/src/Famix-Test2-Entities/FamixTest2SourcedEntity.class.st b/src/Famix-Test2-Entities/FamixTest2SourcedEntity.class.st index 02b5bf2b4..e62ea604a 100644 --- a/src/Famix-Test2-Entities/FamixTest2SourcedEntity.class.st +++ b/src/Famix-Test2-Entities/FamixTest2SourcedEntity.class.st @@ -27,7 +27,6 @@ FamixTest2SourcedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test2-Entities/FamixTest2TEntityCreator.trait.st b/src/Famix-Test2-Entities/FamixTest2TEntityCreator.trait.st index 6e6755490..40f88a0cb 100644 --- a/src/Famix-Test2-Entities/FamixTest2TEntityCreator.trait.st +++ b/src/Famix-Test2-Entities/FamixTest2TEntityCreator.trait.st @@ -17,7 +17,6 @@ FamixTest2TEntityCreator classSide >> annotation [ - ^ self ] { #category : 'entity creation' } diff --git a/src/Famix-Test3-Entities/FamixTest3Access.class.st b/src/Famix-Test3-Entities/FamixTest3Access.class.st index 38d233d68..63f8b71f3 100644 --- a/src/Famix-Test3-Entities/FamixTest3Access.class.st +++ b/src/Famix-Test3-Entities/FamixTest3Access.class.st @@ -44,5 +44,4 @@ FamixTest3Access class >> annotation [ - ^ self ] diff --git a/src/Famix-Test3-Entities/FamixTest3Attribute.class.st b/src/Famix-Test3-Entities/FamixTest3Attribute.class.st index 5900bfea7..d5fd89429 100644 --- a/src/Famix-Test3-Entities/FamixTest3Attribute.class.st +++ b/src/Famix-Test3-Entities/FamixTest3Attribute.class.st @@ -48,5 +48,4 @@ FamixTest3Attribute class >> annotation [ - ^ self ] diff --git a/src/Famix-Test3-Entities/FamixTest3Class.class.st b/src/Famix-Test3-Entities/FamixTest3Class.class.st index 4218f0d72..f117a3e8f 100644 --- a/src/Famix-Test3-Entities/FamixTest3Class.class.st +++ b/src/Famix-Test3-Entities/FamixTest3Class.class.st @@ -59,7 +59,6 @@ FamixTest3Class class >> annotation [ - ^ self ] { #category : 'groups' } diff --git a/src/Famix-Test3-Entities/FamixTest3Comment.class.st b/src/Famix-Test3-Entities/FamixTest3Comment.class.st index ee4f4a332..3f1d68625 100644 --- a/src/Famix-Test3-Entities/FamixTest3Comment.class.st +++ b/src/Famix-Test3-Entities/FamixTest3Comment.class.st @@ -31,5 +31,4 @@ FamixTest3Comment class >> annotation [ - ^ self ] diff --git a/src/Famix-Test3-Entities/FamixTest3Entity.class.st b/src/Famix-Test3-Entities/FamixTest3Entity.class.st index eb804371a..f3748bcf7 100644 --- a/src/Famix-Test3-Entities/FamixTest3Entity.class.st +++ b/src/Famix-Test3-Entities/FamixTest3Entity.class.st @@ -13,7 +13,6 @@ FamixTest3Entity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test3-Entities/FamixTest3Invocation.class.st b/src/Famix-Test3-Entities/FamixTest3Invocation.class.st index f2ab3a498..5be0fb49a 100644 --- a/src/Famix-Test3-Entities/FamixTest3Invocation.class.st +++ b/src/Famix-Test3-Entities/FamixTest3Invocation.class.st @@ -45,5 +45,4 @@ FamixTest3Invocation class >> annotation [ - ^ self ] diff --git a/src/Famix-Test3-Entities/FamixTest3Method.class.st b/src/Famix-Test3-Entities/FamixTest3Method.class.st index 9a136e8ca..9023a180c 100644 --- a/src/Famix-Test3-Entities/FamixTest3Method.class.st +++ b/src/Famix-Test3-Entities/FamixTest3Method.class.st @@ -59,5 +59,4 @@ FamixTest3Method class >> annotation [ - ^ self ] diff --git a/src/Famix-Test3-Entities/FamixTest3Model.class.st b/src/Famix-Test3-Entities/FamixTest3Model.class.st index 5768c20e5..602d4cf48 100644 --- a/src/Famix-Test3-Entities/FamixTest3Model.class.st +++ b/src/Famix-Test3-Entities/FamixTest3Model.class.st @@ -20,5 +20,4 @@ FamixTest3Model class >> annotation [ - ^ self ] diff --git a/src/Famix-Test3-Entities/FamixTest3NamedEntity.class.st b/src/Famix-Test3-Entities/FamixTest3NamedEntity.class.st index 7559dc04f..caed9dc6e 100644 --- a/src/Famix-Test3-Entities/FamixTest3NamedEntity.class.st +++ b/src/Famix-Test3-Entities/FamixTest3NamedEntity.class.st @@ -24,7 +24,6 @@ FamixTest3NamedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test3-Entities/FamixTest3Package.class.st b/src/Famix-Test3-Entities/FamixTest3Package.class.st index 5a3530556..13678a797 100644 --- a/src/Famix-Test3-Entities/FamixTest3Package.class.st +++ b/src/Famix-Test3-Entities/FamixTest3Package.class.st @@ -38,5 +38,4 @@ FamixTest3Package class >> annotation [ - ^ self ] diff --git a/src/Famix-Test3-Entities/FamixTest3ParametricClass.class.st b/src/Famix-Test3-Entities/FamixTest3ParametricClass.class.st index 5233839a2..f2bbcde50 100644 --- a/src/Famix-Test3-Entities/FamixTest3ParametricClass.class.st +++ b/src/Famix-Test3-Entities/FamixTest3ParametricClass.class.st @@ -26,5 +26,4 @@ FamixTest3ParametricClass class >> annotation [ - ^ self ] diff --git a/src/Famix-Test3-Entities/FamixTest3PrimitiveType.class.st b/src/Famix-Test3-Entities/FamixTest3PrimitiveType.class.st index eca2cbb9d..dff51289a 100644 --- a/src/Famix-Test3-Entities/FamixTest3PrimitiveType.class.st +++ b/src/Famix-Test3-Entities/FamixTest3PrimitiveType.class.st @@ -31,5 +31,4 @@ FamixTest3PrimitiveType class >> annotation [ - ^ self ] diff --git a/src/Famix-Test3-Entities/FamixTest3Reference.class.st b/src/Famix-Test3-Entities/FamixTest3Reference.class.st index 9a4fd2f28..984c413b1 100644 --- a/src/Famix-Test3-Entities/FamixTest3Reference.class.st +++ b/src/Famix-Test3-Entities/FamixTest3Reference.class.st @@ -38,5 +38,4 @@ FamixTest3Reference class >> annotation [ - ^ self ] diff --git a/src/Famix-Test3-Entities/FamixTest3SourceAnchor.class.st b/src/Famix-Test3-Entities/FamixTest3SourceAnchor.class.st index e63faa6a2..35e432813 100644 --- a/src/Famix-Test3-Entities/FamixTest3SourceAnchor.class.st +++ b/src/Famix-Test3-Entities/FamixTest3SourceAnchor.class.st @@ -27,7 +27,6 @@ FamixTest3SourceAnchor class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test3-Entities/FamixTest3SourceLanguage.class.st b/src/Famix-Test3-Entities/FamixTest3SourceLanguage.class.st index 98d7491f4..e77984e8d 100644 --- a/src/Famix-Test3-Entities/FamixTest3SourceLanguage.class.st +++ b/src/Famix-Test3-Entities/FamixTest3SourceLanguage.class.st @@ -26,5 +26,4 @@ FamixTest3SourceLanguage class >> annotation [ - ^ self ] diff --git a/src/Famix-Test3-Entities/FamixTest3SourceTextAnchor.class.st b/src/Famix-Test3-Entities/FamixTest3SourceTextAnchor.class.st index 719ec1757..937145844 100644 --- a/src/Famix-Test3-Entities/FamixTest3SourceTextAnchor.class.st +++ b/src/Famix-Test3-Entities/FamixTest3SourceTextAnchor.class.st @@ -32,5 +32,4 @@ FamixTest3SourceTextAnchor class >> annotation [ - ^ self ] diff --git a/src/Famix-Test3-Entities/FamixTest3SourcedEntity.class.st b/src/Famix-Test3-Entities/FamixTest3SourcedEntity.class.st index 62e1506fb..d9111af99 100644 --- a/src/Famix-Test3-Entities/FamixTest3SourcedEntity.class.st +++ b/src/Famix-Test3-Entities/FamixTest3SourcedEntity.class.st @@ -27,7 +27,6 @@ FamixTest3SourcedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test3-Entities/FamixTest3TEntityCreator.trait.st b/src/Famix-Test3-Entities/FamixTest3TEntityCreator.trait.st index b0340db52..77bc90437 100644 --- a/src/Famix-Test3-Entities/FamixTest3TEntityCreator.trait.st +++ b/src/Famix-Test3-Entities/FamixTest3TEntityCreator.trait.st @@ -17,7 +17,6 @@ FamixTest3TEntityCreator classSide >> annotation [ - ^ self ] { #category : 'entity creation' } diff --git a/src/Famix-Test3-Entities/FamixTest3Type.class.st b/src/Famix-Test3-Entities/FamixTest3Type.class.st index 9e9ede04e..c121a58a3 100644 --- a/src/Famix-Test3-Entities/FamixTest3Type.class.st +++ b/src/Famix-Test3-Entities/FamixTest3Type.class.st @@ -44,7 +44,6 @@ FamixTest3Type class >> annotation [ - ^ self ] { #category : 'groups' } diff --git a/src/Famix-Test4-Entities/FamixTest4Book.class.st b/src/Famix-Test4-Entities/FamixTest4Book.class.st index 70bfad845..7bed564b9 100644 --- a/src/Famix-Test4-Entities/FamixTest4Book.class.st +++ b/src/Famix-Test4-Entities/FamixTest4Book.class.st @@ -34,7 +34,6 @@ FamixTest4Book class >> annotation [ - ^ self ] { #category : 'comparing' } diff --git a/src/Famix-Test4-Entities/FamixTest4Cafeteria.class.st b/src/Famix-Test4-Entities/FamixTest4Cafeteria.class.st index ea36943b2..fab2630e5 100644 --- a/src/Famix-Test4-Entities/FamixTest4Cafeteria.class.st +++ b/src/Famix-Test4-Entities/FamixTest4Cafeteria.class.st @@ -12,5 +12,4 @@ FamixTest4Cafeteria class >> annotation [ - ^ self ] diff --git a/src/Famix-Test4-Entities/FamixTest4Classroom.class.st b/src/Famix-Test4-Entities/FamixTest4Classroom.class.st index 0c9ee079a..4aca8f8e7 100644 --- a/src/Famix-Test4-Entities/FamixTest4Classroom.class.st +++ b/src/Famix-Test4-Entities/FamixTest4Classroom.class.st @@ -12,5 +12,4 @@ FamixTest4Classroom class >> annotation [ - ^ self ] diff --git a/src/Famix-Test4-Entities/FamixTest4Entity.class.st b/src/Famix-Test4-Entities/FamixTest4Entity.class.st index fde49bc9b..2e1a17036 100644 --- a/src/Famix-Test4-Entities/FamixTest4Entity.class.st +++ b/src/Famix-Test4-Entities/FamixTest4Entity.class.st @@ -25,7 +25,6 @@ FamixTest4Entity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test4-Entities/FamixTest4Model.class.st b/src/Famix-Test4-Entities/FamixTest4Model.class.st index 50748bd99..11f96c8f0 100644 --- a/src/Famix-Test4-Entities/FamixTest4Model.class.st +++ b/src/Famix-Test4-Entities/FamixTest4Model.class.st @@ -14,5 +14,4 @@ FamixTest4Model class >> annotation [ - ^ self ] diff --git a/src/Famix-Test4-Entities/FamixTest4Person.class.st b/src/Famix-Test4-Entities/FamixTest4Person.class.st index c8a41f6a5..213a8ad86 100644 --- a/src/Famix-Test4-Entities/FamixTest4Person.class.st +++ b/src/Famix-Test4-Entities/FamixTest4Person.class.st @@ -39,7 +39,6 @@ FamixTest4Person class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test4-Entities/FamixTest4Principal.class.st b/src/Famix-Test4-Entities/FamixTest4Principal.class.st index 93eb91a5f..3668b8f39 100644 --- a/src/Famix-Test4-Entities/FamixTest4Principal.class.st +++ b/src/Famix-Test4-Entities/FamixTest4Principal.class.st @@ -27,7 +27,6 @@ FamixTest4Principal class >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Famix-Test4-Entities/FamixTest4Room.class.st b/src/Famix-Test4-Entities/FamixTest4Room.class.st index ea1910d82..86afa7bf4 100644 --- a/src/Famix-Test4-Entities/FamixTest4Room.class.st +++ b/src/Famix-Test4-Entities/FamixTest4Room.class.st @@ -27,7 +27,6 @@ FamixTest4Room class >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Famix-Test4-Entities/FamixTest4School.class.st b/src/Famix-Test4-Entities/FamixTest4School.class.st index 462e81b78..743865a85 100644 --- a/src/Famix-Test4-Entities/FamixTest4School.class.st +++ b/src/Famix-Test4-Entities/FamixTest4School.class.st @@ -33,7 +33,6 @@ FamixTest4School class >> annotation [ - ^ self ] { #category : 'adding' } diff --git a/src/Famix-Test4-Entities/FamixTest4Student.class.st b/src/Famix-Test4-Entities/FamixTest4Student.class.st index 51a9b4c27..06545ac56 100644 --- a/src/Famix-Test4-Entities/FamixTest4Student.class.st +++ b/src/Famix-Test4-Entities/FamixTest4Student.class.st @@ -33,7 +33,6 @@ FamixTest4Student class >> annotation [ - ^ self ] { #category : 'adding' } diff --git a/src/Famix-Test4-Entities/FamixTest4TEntityCreator.trait.st b/src/Famix-Test4-Entities/FamixTest4TEntityCreator.trait.st index b7e207702..d471d6d99 100644 --- a/src/Famix-Test4-Entities/FamixTest4TEntityCreator.trait.st +++ b/src/Famix-Test4-Entities/FamixTest4TEntityCreator.trait.st @@ -17,7 +17,6 @@ FamixTest4TEntityCreator classSide >> annotation [ - ^ self ] { #category : 'entity creation' } diff --git a/src/Famix-Test4-Entities/FamixTest4Teacher.class.st b/src/Famix-Test4-Entities/FamixTest4Teacher.class.st index a02d116d3..197e2cc9d 100644 --- a/src/Famix-Test4-Entities/FamixTest4Teacher.class.st +++ b/src/Famix-Test4-Entities/FamixTest4Teacher.class.st @@ -33,7 +33,6 @@ FamixTest4Teacher class >> annotation [ - ^ self ] { #category : 'adding' } diff --git a/src/Famix-Test5-Entities/FamixTest5AnnotationType1.class.st b/src/Famix-Test5-Entities/FamixTest5AnnotationType1.class.st index a0d5f5a29..2b86fe9e2 100644 --- a/src/Famix-Test5-Entities/FamixTest5AnnotationType1.class.st +++ b/src/Famix-Test5-Entities/FamixTest5AnnotationType1.class.st @@ -31,5 +31,4 @@ FamixTest5AnnotationType1 class >> annotation [ - ^ self ] diff --git a/src/Famix-Test5-Entities/FamixTest5AnnotationType2.class.st b/src/Famix-Test5-Entities/FamixTest5AnnotationType2.class.st index 736df1a91..c6b91ae44 100644 --- a/src/Famix-Test5-Entities/FamixTest5AnnotationType2.class.st +++ b/src/Famix-Test5-Entities/FamixTest5AnnotationType2.class.st @@ -31,5 +31,4 @@ FamixTest5AnnotationType2 class >> annotation [ - ^ self ] diff --git a/src/Famix-Test5-Entities/FamixTest5Entity.class.st b/src/Famix-Test5-Entities/FamixTest5Entity.class.st index b22cb92cb..d83a1a2c7 100644 --- a/src/Famix-Test5-Entities/FamixTest5Entity.class.st +++ b/src/Famix-Test5-Entities/FamixTest5Entity.class.st @@ -15,7 +15,6 @@ FamixTest5Entity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test5-Entities/FamixTest5Model.class.st b/src/Famix-Test5-Entities/FamixTest5Model.class.st index 3ab9018a8..87e2ce1b2 100644 --- a/src/Famix-Test5-Entities/FamixTest5Model.class.st +++ b/src/Famix-Test5-Entities/FamixTest5Model.class.st @@ -20,5 +20,4 @@ FamixTest5Model class >> annotation [ - ^ self ] diff --git a/src/Famix-Test5-Entities/FamixTest5TEntity.trait.st b/src/Famix-Test5-Entities/FamixTest5TEntity.trait.st index 3406efbcc..977a3d451 100644 --- a/src/Famix-Test5-Entities/FamixTest5TEntity.trait.st +++ b/src/Famix-Test5-Entities/FamixTest5TEntity.trait.st @@ -13,5 +13,4 @@ FamixTest5TEntity classSide >> annotation [ - ^ self ] diff --git a/src/Famix-Test5-Entities/FamixTest5TEntityCreator.trait.st b/src/Famix-Test5-Entities/FamixTest5TEntityCreator.trait.st index 416c3fdb2..5cf7e5be3 100644 --- a/src/Famix-Test5-Entities/FamixTest5TEntityCreator.trait.st +++ b/src/Famix-Test5-Entities/FamixTest5TEntityCreator.trait.st @@ -17,7 +17,6 @@ FamixTest5TEntityCreator classSide >> annotation [ - ^ self ] { #category : 'entity creation' } diff --git a/src/Famix-Test5-Entities/FamixTest5WithAnnotationType1.class.st b/src/Famix-Test5-Entities/FamixTest5WithAnnotationType1.class.st index 0296989eb..1e642220d 100644 --- a/src/Famix-Test5-Entities/FamixTest5WithAnnotationType1.class.st +++ b/src/Famix-Test5-Entities/FamixTest5WithAnnotationType1.class.st @@ -26,5 +26,4 @@ FamixTest5WithAnnotationType1 class >> annotation [ - ^ self ] diff --git a/src/Famix-Test5-Entities/FamixTest5WithAnnotationType2.class.st b/src/Famix-Test5-Entities/FamixTest5WithAnnotationType2.class.st index 56419001e..49523da66 100644 --- a/src/Famix-Test5-Entities/FamixTest5WithAnnotationType2.class.st +++ b/src/Famix-Test5-Entities/FamixTest5WithAnnotationType2.class.st @@ -26,5 +26,4 @@ FamixTest5WithAnnotationType2 class >> annotation [ - ^ self ] diff --git a/src/Famix-Test6-Entities/FamixTest6Bacon.class.st b/src/Famix-Test6-Entities/FamixTest6Bacon.class.st index 7ed0ab0bf..a416678dd 100644 --- a/src/Famix-Test6-Entities/FamixTest6Bacon.class.st +++ b/src/Famix-Test6-Entities/FamixTest6Bacon.class.st @@ -28,7 +28,6 @@ FamixTest6Bacon class >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Famix-Test6-Entities/FamixTest6Comment.class.st b/src/Famix-Test6-Entities/FamixTest6Comment.class.st index 58e8e5a34..f409bb0cd 100644 --- a/src/Famix-Test6-Entities/FamixTest6Comment.class.st +++ b/src/Famix-Test6-Entities/FamixTest6Comment.class.st @@ -31,5 +31,4 @@ FamixTest6Comment class >> annotation [ - ^ self ] diff --git a/src/Famix-Test6-Entities/FamixTest6Entity.class.st b/src/Famix-Test6-Entities/FamixTest6Entity.class.st index 272b4bbca..5e840c28b 100644 --- a/src/Famix-Test6-Entities/FamixTest6Entity.class.st +++ b/src/Famix-Test6-Entities/FamixTest6Entity.class.st @@ -13,7 +13,6 @@ FamixTest6Entity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test6-Entities/FamixTest6Model.class.st b/src/Famix-Test6-Entities/FamixTest6Model.class.st index 9516b2477..31580751b 100644 --- a/src/Famix-Test6-Entities/FamixTest6Model.class.st +++ b/src/Famix-Test6-Entities/FamixTest6Model.class.st @@ -20,5 +20,4 @@ FamixTest6Model class >> annotation [ - ^ self ] diff --git a/src/Famix-Test6-Entities/FamixTest6NamedEntity.class.st b/src/Famix-Test6-Entities/FamixTest6NamedEntity.class.st index 20b77821c..2120a9553 100644 --- a/src/Famix-Test6-Entities/FamixTest6NamedEntity.class.st +++ b/src/Famix-Test6-Entities/FamixTest6NamedEntity.class.st @@ -24,7 +24,6 @@ FamixTest6NamedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test6-Entities/FamixTest6SourceAnchor.class.st b/src/Famix-Test6-Entities/FamixTest6SourceAnchor.class.st index 7e624a2c9..760333a39 100644 --- a/src/Famix-Test6-Entities/FamixTest6SourceAnchor.class.st +++ b/src/Famix-Test6-Entities/FamixTest6SourceAnchor.class.st @@ -27,7 +27,6 @@ FamixTest6SourceAnchor class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test6-Entities/FamixTest6SourceLanguage.class.st b/src/Famix-Test6-Entities/FamixTest6SourceLanguage.class.st index 87b6d1233..a0d62653e 100644 --- a/src/Famix-Test6-Entities/FamixTest6SourceLanguage.class.st +++ b/src/Famix-Test6-Entities/FamixTest6SourceLanguage.class.st @@ -26,5 +26,4 @@ FamixTest6SourceLanguage class >> annotation [ - ^ self ] diff --git a/src/Famix-Test6-Entities/FamixTest6SourceTextAnchor.class.st b/src/Famix-Test6-Entities/FamixTest6SourceTextAnchor.class.st index 887b710ee..6869c4abd 100644 --- a/src/Famix-Test6-Entities/FamixTest6SourceTextAnchor.class.st +++ b/src/Famix-Test6-Entities/FamixTest6SourceTextAnchor.class.st @@ -32,5 +32,4 @@ FamixTest6SourceTextAnchor class >> annotation [ - ^ self ] diff --git a/src/Famix-Test6-Entities/FamixTest6SourcedEntity.class.st b/src/Famix-Test6-Entities/FamixTest6SourcedEntity.class.st index 52340e1e7..a44803213 100644 --- a/src/Famix-Test6-Entities/FamixTest6SourcedEntity.class.st +++ b/src/Famix-Test6-Entities/FamixTest6SourcedEntity.class.st @@ -27,7 +27,6 @@ FamixTest6SourcedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test6-Entities/FamixTest6Spam.class.st b/src/Famix-Test6-Entities/FamixTest6Spam.class.st index e6bf1c781..b3cecdbe4 100644 --- a/src/Famix-Test6-Entities/FamixTest6Spam.class.st +++ b/src/Famix-Test6-Entities/FamixTest6Spam.class.st @@ -24,7 +24,6 @@ FamixTest6Spam class >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Famix-Test6-Entities/FamixTest6TEntityCreator.trait.st b/src/Famix-Test6-Entities/FamixTest6TEntityCreator.trait.st index 72e32fb48..7c2c84c36 100644 --- a/src/Famix-Test6-Entities/FamixTest6TEntityCreator.trait.st +++ b/src/Famix-Test6-Entities/FamixTest6TEntityCreator.trait.st @@ -17,7 +17,6 @@ FamixTest6TEntityCreator classSide >> annotation [ - ^ self ] { #category : 'entity creation' } diff --git a/src/Famix-Test7-Entities/FamixTest7Class.class.st b/src/Famix-Test7-Entities/FamixTest7Class.class.st index 93efbe84d..7fb90c5c7 100644 --- a/src/Famix-Test7-Entities/FamixTest7Class.class.st +++ b/src/Famix-Test7-Entities/FamixTest7Class.class.st @@ -58,5 +58,4 @@ FamixTest7Class class >> annotation [ - ^ self ] diff --git a/src/Famix-Test7-Entities/FamixTest7Comment.class.st b/src/Famix-Test7-Entities/FamixTest7Comment.class.st index 53e206bb4..4fd355192 100644 --- a/src/Famix-Test7-Entities/FamixTest7Comment.class.st +++ b/src/Famix-Test7-Entities/FamixTest7Comment.class.st @@ -31,5 +31,4 @@ FamixTest7Comment class >> annotation [ - ^ self ] diff --git a/src/Famix-Test7-Entities/FamixTest7Entity.class.st b/src/Famix-Test7-Entities/FamixTest7Entity.class.st index a45d2bab7..fe10ccb5f 100644 --- a/src/Famix-Test7-Entities/FamixTest7Entity.class.st +++ b/src/Famix-Test7-Entities/FamixTest7Entity.class.st @@ -13,7 +13,6 @@ FamixTest7Entity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test7-Entities/FamixTest7Inheritance.class.st b/src/Famix-Test7-Entities/FamixTest7Inheritance.class.st index d19ac5e7c..d504a54be 100644 --- a/src/Famix-Test7-Entities/FamixTest7Inheritance.class.st +++ b/src/Famix-Test7-Entities/FamixTest7Inheritance.class.st @@ -38,5 +38,4 @@ FamixTest7Inheritance class >> annotation [ - ^ self ] diff --git a/src/Famix-Test7-Entities/FamixTest7Method.class.st b/src/Famix-Test7-Entities/FamixTest7Method.class.st index d622723d5..0866f1bd0 100644 --- a/src/Famix-Test7-Entities/FamixTest7Method.class.st +++ b/src/Famix-Test7-Entities/FamixTest7Method.class.st @@ -59,5 +59,4 @@ FamixTest7Method class >> annotation [ - ^ self ] diff --git a/src/Famix-Test7-Entities/FamixTest7Model.class.st b/src/Famix-Test7-Entities/FamixTest7Model.class.st index b9e011bc7..960e53143 100644 --- a/src/Famix-Test7-Entities/FamixTest7Model.class.st +++ b/src/Famix-Test7-Entities/FamixTest7Model.class.st @@ -20,5 +20,4 @@ FamixTest7Model class >> annotation [ - ^ self ] diff --git a/src/Famix-Test7-Entities/FamixTest7NamedEntity.class.st b/src/Famix-Test7-Entities/FamixTest7NamedEntity.class.st index c5fc9a407..e1438ebd6 100644 --- a/src/Famix-Test7-Entities/FamixTest7NamedEntity.class.st +++ b/src/Famix-Test7-Entities/FamixTest7NamedEntity.class.st @@ -24,7 +24,6 @@ FamixTest7NamedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test7-Entities/FamixTest7SourceAnchor.class.st b/src/Famix-Test7-Entities/FamixTest7SourceAnchor.class.st index 08dc9b39d..c49404036 100644 --- a/src/Famix-Test7-Entities/FamixTest7SourceAnchor.class.st +++ b/src/Famix-Test7-Entities/FamixTest7SourceAnchor.class.st @@ -27,7 +27,6 @@ FamixTest7SourceAnchor class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test7-Entities/FamixTest7SourceLanguage.class.st b/src/Famix-Test7-Entities/FamixTest7SourceLanguage.class.st index 1054cd727..e79eed36d 100644 --- a/src/Famix-Test7-Entities/FamixTest7SourceLanguage.class.st +++ b/src/Famix-Test7-Entities/FamixTest7SourceLanguage.class.st @@ -26,5 +26,4 @@ FamixTest7SourceLanguage class >> annotation [ - ^ self ] diff --git a/src/Famix-Test7-Entities/FamixTest7SourceTextAnchor.class.st b/src/Famix-Test7-Entities/FamixTest7SourceTextAnchor.class.st index 66f33e21e..889419f6b 100644 --- a/src/Famix-Test7-Entities/FamixTest7SourceTextAnchor.class.st +++ b/src/Famix-Test7-Entities/FamixTest7SourceTextAnchor.class.st @@ -32,5 +32,4 @@ FamixTest7SourceTextAnchor class >> annotation [ - ^ self ] diff --git a/src/Famix-Test7-Entities/FamixTest7SourcedEntity.class.st b/src/Famix-Test7-Entities/FamixTest7SourcedEntity.class.st index 521e0b975..db30335e2 100644 --- a/src/Famix-Test7-Entities/FamixTest7SourcedEntity.class.st +++ b/src/Famix-Test7-Entities/FamixTest7SourcedEntity.class.st @@ -27,7 +27,6 @@ FamixTest7SourcedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test7-Entities/FamixTest7TEntityCreator.trait.st b/src/Famix-Test7-Entities/FamixTest7TEntityCreator.trait.st index 523d2c635..6d15714f6 100644 --- a/src/Famix-Test7-Entities/FamixTest7TEntityCreator.trait.st +++ b/src/Famix-Test7-Entities/FamixTest7TEntityCreator.trait.st @@ -17,7 +17,6 @@ FamixTest7TEntityCreator classSide >> annotation [ - ^ self ] { #category : 'entity creation' } diff --git a/src/Famix-Test8-Entities/FamixTest8Animal.class.st b/src/Famix-Test8-Entities/FamixTest8Animal.class.st index 8674ad9b6..8c42d12de 100644 --- a/src/Famix-Test8-Entities/FamixTest8Animal.class.st +++ b/src/Famix-Test8-Entities/FamixTest8Animal.class.st @@ -26,5 +26,4 @@ FamixTest8Animal class >> annotation [ - ^ self ] diff --git a/src/Famix-Test8-Entities/FamixTest8Bacteria.class.st b/src/Famix-Test8-Entities/FamixTest8Bacteria.class.st index 3dbb9d9ab..eb8dd5531 100644 --- a/src/Famix-Test8-Entities/FamixTest8Bacteria.class.st +++ b/src/Famix-Test8-Entities/FamixTest8Bacteria.class.st @@ -32,5 +32,4 @@ FamixTest8Bacteria class >> annotation [ - ^ self ] diff --git a/src/Famix-Test8-Entities/FamixTest8Biotope.class.st b/src/Famix-Test8-Entities/FamixTest8Biotope.class.st index 308613e15..50e5b3c59 100644 --- a/src/Famix-Test8-Entities/FamixTest8Biotope.class.st +++ b/src/Famix-Test8-Entities/FamixTest8Biotope.class.st @@ -26,5 +26,4 @@ FamixTest8Biotope class >> annotation [ - ^ self ] diff --git a/src/Famix-Test8-Entities/FamixTest8Entity.class.st b/src/Famix-Test8-Entities/FamixTest8Entity.class.st index 392fc3765..fe061b782 100644 --- a/src/Famix-Test8-Entities/FamixTest8Entity.class.st +++ b/src/Famix-Test8-Entities/FamixTest8Entity.class.st @@ -13,7 +13,6 @@ FamixTest8Entity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-Test8-Entities/FamixTest8Infection.class.st b/src/Famix-Test8-Entities/FamixTest8Infection.class.st index 63cdc8724..ded51b700 100644 --- a/src/Famix-Test8-Entities/FamixTest8Infection.class.st +++ b/src/Famix-Test8-Entities/FamixTest8Infection.class.st @@ -49,7 +49,6 @@ FamixTest8Infection class >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Famix-Test8-Entities/FamixTest8LivingBeing.class.st b/src/Famix-Test8-Entities/FamixTest8LivingBeing.class.st index 1bd598b1d..39fd93a1b 100644 --- a/src/Famix-Test8-Entities/FamixTest8LivingBeing.class.st +++ b/src/Famix-Test8-Entities/FamixTest8LivingBeing.class.st @@ -26,5 +26,4 @@ FamixTest8LivingBeing class >> annotation [ - ^ self ] diff --git a/src/Famix-Test8-Entities/FamixTest8Model.class.st b/src/Famix-Test8-Entities/FamixTest8Model.class.st index 3d9235433..51750bbf5 100644 --- a/src/Famix-Test8-Entities/FamixTest8Model.class.st +++ b/src/Famix-Test8-Entities/FamixTest8Model.class.st @@ -20,5 +20,4 @@ FamixTest8Model class >> annotation [ - ^ self ] diff --git a/src/Famix-Test8-Entities/FamixTest8Plant.class.st b/src/Famix-Test8-Entities/FamixTest8Plant.class.st index e301dfcbc..b44eeca86 100644 --- a/src/Famix-Test8-Entities/FamixTest8Plant.class.st +++ b/src/Famix-Test8-Entities/FamixTest8Plant.class.st @@ -26,5 +26,4 @@ FamixTest8Plant class >> annotation [ - ^ self ] diff --git a/src/Famix-Test8-Entities/FamixTest8Residence.class.st b/src/Famix-Test8-Entities/FamixTest8Residence.class.st index d6fa23071..ad6a204d0 100644 --- a/src/Famix-Test8-Entities/FamixTest8Residence.class.st +++ b/src/Famix-Test8-Entities/FamixTest8Residence.class.st @@ -42,7 +42,6 @@ FamixTest8Residence class >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Famix-Test8-Entities/FamixTest8TBiotope.trait.st b/src/Famix-Test8-Entities/FamixTest8TBiotope.trait.st index 37cb9a4fd..c2c7824f0 100644 --- a/src/Famix-Test8-Entities/FamixTest8TBiotope.trait.st +++ b/src/Famix-Test8-Entities/FamixTest8TBiotope.trait.st @@ -26,7 +26,6 @@ FamixTest8TBiotope classSide >> annotation [ - ^ self ] { #category : 'adding' } diff --git a/src/Famix-Test8-Entities/FamixTest8TEntityCreator.trait.st b/src/Famix-Test8-Entities/FamixTest8TEntityCreator.trait.st index fd8a093f0..d8bc35413 100644 --- a/src/Famix-Test8-Entities/FamixTest8TEntityCreator.trait.st +++ b/src/Famix-Test8-Entities/FamixTest8TEntityCreator.trait.st @@ -17,7 +17,6 @@ FamixTest8TEntityCreator classSide >> annotation [ - ^ self ] { #category : 'entity creation' } diff --git a/src/Famix-Test8-Entities/FamixTest8TInfectable.trait.st b/src/Famix-Test8-Entities/FamixTest8TInfectable.trait.st index eb986ee55..cd8577ebf 100644 --- a/src/Famix-Test8-Entities/FamixTest8TInfectable.trait.st +++ b/src/Famix-Test8-Entities/FamixTest8TInfectable.trait.st @@ -33,7 +33,6 @@ FamixTest8TInfectable classSide >> annotation [ - ^ self ] { #category : 'adding' } diff --git a/src/Famix-Test8-Entities/FamixTest8TInfectious.trait.st b/src/Famix-Test8-Entities/FamixTest8TInfectious.trait.st index da8b54375..34feaa03f 100644 --- a/src/Famix-Test8-Entities/FamixTest8TInfectious.trait.st +++ b/src/Famix-Test8-Entities/FamixTest8TInfectious.trait.st @@ -26,7 +26,6 @@ FamixTest8TInfectious classSide >> annotation [ - ^ self ] { #category : 'adding' } diff --git a/src/Famix-Test8-Entities/FamixTest8TResident.trait.st b/src/Famix-Test8-Entities/FamixTest8TResident.trait.st index a3054eab9..29c4a7aae 100644 --- a/src/Famix-Test8-Entities/FamixTest8TResident.trait.st +++ b/src/Famix-Test8-Entities/FamixTest8TResident.trait.st @@ -26,7 +26,6 @@ FamixTest8TResident classSide >> annotation [ - ^ self ] { #category : 'adding' } diff --git a/src/Famix-Test8-Entities/FamixTest8Virus.class.st b/src/Famix-Test8-Entities/FamixTest8Virus.class.st index 833bb2851..99b2e715f 100644 --- a/src/Famix-Test8-Entities/FamixTest8Virus.class.st +++ b/src/Famix-Test8-Entities/FamixTest8Virus.class.st @@ -32,5 +32,4 @@ FamixTest8Virus class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposed3Metamodel-Entities/FamixTestComposed3Model.class.st b/src/Famix-TestComposed3Metamodel-Entities/FamixTestComposed3Model.class.st index fff1d3162..d7c0c3dbe 100644 --- a/src/Famix-TestComposed3Metamodel-Entities/FamixTestComposed3Model.class.st +++ b/src/Famix-TestComposed3Metamodel-Entities/FamixTestComposed3Model.class.st @@ -20,5 +20,4 @@ FamixTestComposed3Model class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposed3Metamodel-Entities/FamixTestComposed3TEntityCreator.trait.st b/src/Famix-TestComposed3Metamodel-Entities/FamixTestComposed3TEntityCreator.trait.st index c89f1f251..7c8c53980 100644 --- a/src/Famix-TestComposed3Metamodel-Entities/FamixTestComposed3TEntityCreator.trait.st +++ b/src/Famix-TestComposed3Metamodel-Entities/FamixTestComposed3TEntityCreator.trait.st @@ -17,5 +17,4 @@ FamixTestComposed3TEntityCreator classSide >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedComposedMetamodel-Entities/FamixTestComposedComposedModel.class.st b/src/Famix-TestComposedComposedMetamodel-Entities/FamixTestComposedComposedModel.class.st index 25aa0e0b9..379dc0a5e 100644 --- a/src/Famix-TestComposedComposedMetamodel-Entities/FamixTestComposedComposedModel.class.st +++ b/src/Famix-TestComposedComposedMetamodel-Entities/FamixTestComposedComposedModel.class.st @@ -20,5 +20,4 @@ FamixTestComposedComposedModel class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedComposedMetamodel-Entities/FamixTestComposedComposedTEntityCreator.trait.st b/src/Famix-TestComposedComposedMetamodel-Entities/FamixTestComposedComposedTEntityCreator.trait.st index 349787e82..83bf1fadc 100644 --- a/src/Famix-TestComposedComposedMetamodel-Entities/FamixTestComposedComposedTEntityCreator.trait.st +++ b/src/Famix-TestComposedComposedMetamodel-Entities/FamixTestComposedComposedTEntityCreator.trait.st @@ -17,5 +17,4 @@ FamixTestComposedComposedTEntityCreator classSide >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedAssociation.class.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedAssociation.class.st index 321cbe1ae..fc6890c32 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedAssociation.class.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedAssociation.class.st @@ -38,7 +38,6 @@ FamixTestComposedAssociation class >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedCustomEntity1.class.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedCustomEntity1.class.st index 0b520219c..64254cce2 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedCustomEntity1.class.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedCustomEntity1.class.st @@ -29,7 +29,6 @@ FamixTestComposedCustomEntity1 class >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedCustomEntity2.class.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedCustomEntity2.class.st index 7d0de1b97..59d5ff9cf 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedCustomEntity2.class.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedCustomEntity2.class.st @@ -25,7 +25,6 @@ FamixTestComposedCustomEntity2 class >> annotation [ - ^ self ] { #category : 'adding' } diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedCustomEntity3.class.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedCustomEntity3.class.st index 5a5e79dee..449d70b8e 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedCustomEntity3.class.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedCustomEntity3.class.st @@ -25,7 +25,6 @@ FamixTestComposedCustomEntity3 class >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedCustomEntity4.class.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedCustomEntity4.class.st index 867397277..bb460237e 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedCustomEntity4.class.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedCustomEntity4.class.st @@ -25,7 +25,6 @@ FamixTestComposedCustomEntity4 class >> annotation [ - ^ self ] { #category : 'adding' } diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedEntity.class.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedEntity.class.st index d4b85a9f2..111785291 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedEntity.class.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedEntity.class.st @@ -13,7 +13,6 @@ FamixTestComposedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedModel.class.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedModel.class.st index 3038c9db9..40f364840 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedModel.class.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedModel.class.st @@ -20,5 +20,4 @@ FamixTestComposedModel class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedStandardEntity.class.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedStandardEntity.class.st index d67d9ee73..7bd25317d 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedStandardEntity.class.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedStandardEntity.class.st @@ -24,7 +24,6 @@ FamixTestComposedStandardEntity class >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedTEntityCreator.trait.st b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedTEntityCreator.trait.st index 66b074201..c07303cb8 100644 --- a/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedTEntityCreator.trait.st +++ b/src/Famix-TestComposedMetamodel-Entities/FamixTestComposedTEntityCreator.trait.st @@ -17,7 +17,6 @@ FamixTestComposedTEntityCreator classSide >> annotation [ - ^ self ] { #category : 'entity creation' } diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Class.class.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Class.class.st index dae6617d5..6c401e213 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Class.class.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Class.class.st @@ -58,5 +58,4 @@ FamixTestComposed1Class class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Comment.class.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Comment.class.st index 107069009..2574ec3cf 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Comment.class.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Comment.class.st @@ -31,5 +31,4 @@ FamixTestComposed1Comment class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity1.class.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity1.class.st index efa7020c2..3d3ac9531 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity1.class.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity1.class.st @@ -12,5 +12,4 @@ FamixTestComposed1CustomEntity1 class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity2.class.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity2.class.st index 03f597022..c7a49d269 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity2.class.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity2.class.st @@ -12,5 +12,4 @@ FamixTestComposed1CustomEntity2 class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity3.class.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity3.class.st index 49725ef55..24e0b2d97 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity3.class.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity3.class.st @@ -12,5 +12,4 @@ FamixTestComposed1CustomEntity3 class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity4.class.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity4.class.st index f898723d6..67d4b93f0 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity4.class.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity4.class.st @@ -12,5 +12,4 @@ FamixTestComposed1CustomEntity4 class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity5.class.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity5.class.st index 5109801cf..34c507283 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity5.class.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1CustomEntity5.class.st @@ -14,5 +14,4 @@ FamixTestComposed1CustomEntity5 class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Entity.class.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Entity.class.st index bfef24ae5..4127abf1a 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Entity.class.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Entity.class.st @@ -13,7 +13,6 @@ FamixTestComposed1Entity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Method.class.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Method.class.st index 012302016..e0db311fb 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Method.class.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Method.class.st @@ -59,5 +59,4 @@ FamixTestComposed1Method class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Model.class.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Model.class.st index e4f856820..9eb7227d0 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Model.class.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1Model.class.st @@ -20,5 +20,4 @@ FamixTestComposed1Model class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1NamedEntity.class.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1NamedEntity.class.st index db7b56765..514b10742 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1NamedEntity.class.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1NamedEntity.class.st @@ -24,7 +24,6 @@ FamixTestComposed1NamedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1SourceAnchor.class.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1SourceAnchor.class.st index 2f7d37ab8..d480ea09c 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1SourceAnchor.class.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1SourceAnchor.class.st @@ -27,7 +27,6 @@ FamixTestComposed1SourceAnchor class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1SourceLanguage.class.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1SourceLanguage.class.st index bd0c6c85b..59905adcc 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1SourceLanguage.class.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1SourceLanguage.class.st @@ -26,5 +26,4 @@ FamixTestComposed1SourceLanguage class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1SourceTextAnchor.class.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1SourceTextAnchor.class.st index ac8903971..804d17cac 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1SourceTextAnchor.class.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1SourceTextAnchor.class.st @@ -32,5 +32,4 @@ FamixTestComposed1SourceTextAnchor class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1SourcedEntity.class.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1SourcedEntity.class.st index 2b987c09e..b5d7c168d 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1SourcedEntity.class.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1SourcedEntity.class.st @@ -27,7 +27,6 @@ FamixTestComposed1SourcedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1TEntityCreator.trait.st b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1TEntityCreator.trait.st index ed2fa263e..ba4ecc480 100644 --- a/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1TEntityCreator.trait.st +++ b/src/Famix-TestComposedSubmetamodel1-Entities/FamixTestComposed1TEntityCreator.trait.st @@ -17,7 +17,6 @@ FamixTestComposed1TEntityCreator classSide >> annotation [ - ^ self ] { #category : 'entity creation' } diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Class.class.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Class.class.st index 2d0caa050..0c5a9eabb 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Class.class.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Class.class.st @@ -58,5 +58,4 @@ FamixTestComposed2Class class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Comment.class.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Comment.class.st index 6c433411d..5c3ed5aab 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Comment.class.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Comment.class.st @@ -31,5 +31,4 @@ FamixTestComposed2Comment class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity1.class.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity1.class.st index 0bc06afc8..33305ceb4 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity1.class.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity1.class.st @@ -12,5 +12,4 @@ FamixTestComposed2CustomEntity1 class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity2.class.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity2.class.st index 9d4139cd2..ddc526d14 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity2.class.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity2.class.st @@ -12,5 +12,4 @@ FamixTestComposed2CustomEntity2 class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity3.class.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity3.class.st index 0e0aabbf0..5284eeaa6 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity3.class.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity3.class.st @@ -12,5 +12,4 @@ FamixTestComposed2CustomEntity3 class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity4.class.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity4.class.st index 4d7a6961d..f3d5ef2f3 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity4.class.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity4.class.st @@ -12,5 +12,4 @@ FamixTestComposed2CustomEntity4 class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity5.class.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity5.class.st index dc2e97ee8..cb4d036ec 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity5.class.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2CustomEntity5.class.st @@ -14,5 +14,4 @@ FamixTestComposed2CustomEntity5 class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Entity.class.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Entity.class.st index 335b3b210..8c898a35d 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Entity.class.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Entity.class.st @@ -13,7 +13,6 @@ FamixTestComposed2Entity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Method.class.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Method.class.st index 26edd3262..a93262266 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Method.class.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Method.class.st @@ -59,5 +59,4 @@ FamixTestComposed2Method class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Model.class.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Model.class.st index 8e4f7e411..46486b88b 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Model.class.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2Model.class.st @@ -20,5 +20,4 @@ FamixTestComposed2Model class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2NamedEntity.class.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2NamedEntity.class.st index 72b6748ff..a0b8ffcde 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2NamedEntity.class.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2NamedEntity.class.st @@ -24,7 +24,6 @@ FamixTestComposed2NamedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2SourceAnchor.class.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2SourceAnchor.class.st index 35c54158e..65cbff17d 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2SourceAnchor.class.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2SourceAnchor.class.st @@ -27,7 +27,6 @@ FamixTestComposed2SourceAnchor class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2SourceLanguage.class.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2SourceLanguage.class.st index bbbe94714..f692fa10d 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2SourceLanguage.class.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2SourceLanguage.class.st @@ -26,5 +26,4 @@ FamixTestComposed2SourceLanguage class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2SourceTextAnchor.class.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2SourceTextAnchor.class.st index e7331fbce..40de8dacc 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2SourceTextAnchor.class.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2SourceTextAnchor.class.st @@ -32,5 +32,4 @@ FamixTestComposed2SourceTextAnchor class >> annotation [ - ^ self ] diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2SourcedEntity.class.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2SourcedEntity.class.st index 4e5671d3e..1d646c30a 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2SourcedEntity.class.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2SourcedEntity.class.st @@ -27,7 +27,6 @@ FamixTestComposed2SourcedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2TEntityCreator.trait.st b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2TEntityCreator.trait.st index 5ff0910e8..b0ec53c64 100644 --- a/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2TEntityCreator.trait.st +++ b/src/Famix-TestComposedSubmetamodel2-Entities/FamixTestComposed2TEntityCreator.trait.st @@ -17,7 +17,6 @@ FamixTestComposed2TEntityCreator classSide >> annotation [ - ^ self ] { #category : 'entity creation' } diff --git a/src/Famix-Traits/FamixTAccess.trait.st b/src/Famix-Traits/FamixTAccess.trait.st index 34480be0c..fa94e89ce 100644 --- a/src/Famix-Traits/FamixTAccess.trait.st +++ b/src/Famix-Traits/FamixTAccess.trait.st @@ -61,7 +61,6 @@ FamixTAccess classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTAccessible.trait.st b/src/Famix-Traits/FamixTAccessible.trait.st index f7820b0b5..0dbd63883 100644 --- a/src/Famix-Traits/FamixTAccessible.trait.st +++ b/src/Famix-Traits/FamixTAccessible.trait.st @@ -26,7 +26,6 @@ FamixTAccessible classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTAnnotationInstance.trait.st b/src/Famix-Traits/FamixTAnnotationInstance.trait.st index e69f43acf..dc335578e 100644 --- a/src/Famix-Traits/FamixTAnnotationInstance.trait.st +++ b/src/Famix-Traits/FamixTAnnotationInstance.trait.st @@ -48,7 +48,6 @@ FamixTAnnotationInstance classSide >> annotation [ - ^ self ] { #category : 'groups' } diff --git a/src/Famix-Traits/FamixTAnnotationInstanceAttribute.trait.st b/src/Famix-Traits/FamixTAnnotationInstanceAttribute.trait.st index f8b346998..decc57adf 100644 --- a/src/Famix-Traits/FamixTAnnotationInstanceAttribute.trait.st +++ b/src/Famix-Traits/FamixTAnnotationInstanceAttribute.trait.st @@ -51,7 +51,6 @@ FamixTAnnotationInstanceAttribute classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTAnnotationType.trait.st b/src/Famix-Traits/FamixTAnnotationType.trait.st index e69e9b308..980814404 100644 --- a/src/Famix-Traits/FamixTAnnotationType.trait.st +++ b/src/Famix-Traits/FamixTAnnotationType.trait.st @@ -38,7 +38,6 @@ FamixTAnnotationType classSide >> annotation [ - ^ self ] { #category : 'groups' } diff --git a/src/Famix-Traits/FamixTAnnotationTypeAttribute.trait.st b/src/Famix-Traits/FamixTAnnotationTypeAttribute.trait.st index 4f4b720f0..a08a938b2 100644 --- a/src/Famix-Traits/FamixTAnnotationTypeAttribute.trait.st +++ b/src/Famix-Traits/FamixTAnnotationTypeAttribute.trait.st @@ -68,7 +68,6 @@ FamixTAnnotationTypeAttribute classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTAssociation.trait.st b/src/Famix-Traits/FamixTAssociation.trait.st index 5ace102cc..a41e4da34 100644 --- a/src/Famix-Traits/FamixTAssociation.trait.st +++ b/src/Famix-Traits/FamixTAssociation.trait.st @@ -49,7 +49,6 @@ FamixTAssociation classSide >> annotation [ - ^ self ] { #category : 'instance creation' } diff --git a/src/Famix-Traits/FamixTAttribute.trait.st b/src/Famix-Traits/FamixTAttribute.trait.st index 909e8454b..6826acf4d 100644 --- a/src/Famix-Traits/FamixTAttribute.trait.st +++ b/src/Famix-Traits/FamixTAttribute.trait.st @@ -53,7 +53,6 @@ FamixTAttribute classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTBytesFileAnchor.trait.st b/src/Famix-Traits/FamixTBytesFileAnchor.trait.st index 1401347b4..b882819c8 100644 --- a/src/Famix-Traits/FamixTBytesFileAnchor.trait.st +++ b/src/Famix-Traits/FamixTBytesFileAnchor.trait.st @@ -32,7 +32,6 @@ FamixTBytesFileAnchor classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTCanBeAbstract.trait.st b/src/Famix-Traits/FamixTCanBeAbstract.trait.st index 2c5f1df2b..21ab556ad 100644 --- a/src/Famix-Traits/FamixTCanBeAbstract.trait.st +++ b/src/Famix-Traits/FamixTCanBeAbstract.trait.st @@ -23,7 +23,6 @@ FamixTCanBeAbstract classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTCanBeClassSide.trait.st b/src/Famix-Traits/FamixTCanBeClassSide.trait.st index 52a66e33c..586f914c4 100644 --- a/src/Famix-Traits/FamixTCanBeClassSide.trait.st +++ b/src/Famix-Traits/FamixTCanBeClassSide.trait.st @@ -23,7 +23,6 @@ FamixTCanBeClassSide classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTCanBeFinal.trait.st b/src/Famix-Traits/FamixTCanBeFinal.trait.st index 924069161..2219d7eb8 100644 --- a/src/Famix-Traits/FamixTCanBeFinal.trait.st +++ b/src/Famix-Traits/FamixTCanBeFinal.trait.st @@ -23,7 +23,6 @@ FamixTCanBeFinal classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTCanBeStub.trait.st b/src/Famix-Traits/FamixTCanBeStub.trait.st index 59335ac18..89d6a76c3 100644 --- a/src/Famix-Traits/FamixTCanBeStub.trait.st +++ b/src/Famix-Traits/FamixTCanBeStub.trait.st @@ -34,7 +34,6 @@ FamixTCanBeStub classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTCanImplement.trait.st b/src/Famix-Traits/FamixTCanImplement.trait.st index c5d16c77b..15a618f5e 100644 --- a/src/Famix-Traits/FamixTCanImplement.trait.st +++ b/src/Famix-Traits/FamixTCanImplement.trait.st @@ -28,7 +28,6 @@ FamixTCanImplement classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTClass.trait.st b/src/Famix-Traits/FamixTClass.trait.st index fb6cfbaf0..2d3b84746 100644 --- a/src/Famix-Traits/FamixTClass.trait.st +++ b/src/Famix-Traits/FamixTClass.trait.st @@ -63,7 +63,6 @@ FamixTClass classSide >> annotation [ - ^ self ] { #category : 'groups' } diff --git a/src/Famix-Traits/FamixTClassMetrics.trait.st b/src/Famix-Traits/FamixTClassMetrics.trait.st index 149a3ba35..a34a79829 100644 --- a/src/Famix-Traits/FamixTClassMetrics.trait.st +++ b/src/Famix-Traits/FamixTClassMetrics.trait.st @@ -11,7 +11,6 @@ FamixTClassMetrics classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTCohesionCouplingMetrics.trait.st b/src/Famix-Traits/FamixTCohesionCouplingMetrics.trait.st index 995ee5e70..6415e8cf3 100644 --- a/src/Famix-Traits/FamixTCohesionCouplingMetrics.trait.st +++ b/src/Famix-Traits/FamixTCohesionCouplingMetrics.trait.st @@ -37,7 +37,6 @@ FamixTCohesionCouplingMetrics classSide >> annotation [ - ^ self ] { #category : 'metrics' } diff --git a/src/Famix-Traits/FamixTComment.trait.st b/src/Famix-Traits/FamixTComment.trait.st index 9e3bdb2d4..83f1dccdd 100644 --- a/src/Famix-Traits/FamixTComment.trait.st +++ b/src/Famix-Traits/FamixTComment.trait.st @@ -35,7 +35,6 @@ FamixTComment classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTCompilationUnit.trait.st b/src/Famix-Traits/FamixTCompilationUnit.trait.st index 4db438d57..ccb4bd45f 100644 --- a/src/Famix-Traits/FamixTCompilationUnit.trait.st +++ b/src/Famix-Traits/FamixTCompilationUnit.trait.st @@ -42,7 +42,6 @@ FamixTCompilationUnit classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTConcretization.trait.st b/src/Famix-Traits/FamixTConcretization.trait.st index 550f40562..099264568 100644 --- a/src/Famix-Traits/FamixTConcretization.trait.st +++ b/src/Famix-Traits/FamixTConcretization.trait.st @@ -46,7 +46,6 @@ FamixTConcretization classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTDefinedInModule.trait.st b/src/Famix-Traits/FamixTDefinedInModule.trait.st index bf9bdf12d..b3cd913ec 100644 --- a/src/Famix-Traits/FamixTDefinedInModule.trait.st +++ b/src/Famix-Traits/FamixTDefinedInModule.trait.st @@ -26,7 +26,6 @@ FamixTDefinedInModule classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTDereferencedInvocation.trait.st b/src/Famix-Traits/FamixTDereferencedInvocation.trait.st index df05c018d..67e2e5334 100644 --- a/src/Famix-Traits/FamixTDereferencedInvocation.trait.st +++ b/src/Famix-Traits/FamixTDereferencedInvocation.trait.st @@ -54,7 +54,6 @@ FamixTDereferencedInvocation classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTEntityTyping.trait.st b/src/Famix-Traits/FamixTEntityTyping.trait.st index fc1354e35..946d26830 100644 --- a/src/Famix-Traits/FamixTEntityTyping.trait.st +++ b/src/Famix-Traits/FamixTEntityTyping.trait.st @@ -41,7 +41,6 @@ FamixTEntityTyping classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTEnum.trait.st b/src/Famix-Traits/FamixTEnum.trait.st index ef7cf8ae6..248133f82 100644 --- a/src/Famix-Traits/FamixTEnum.trait.st +++ b/src/Famix-Traits/FamixTEnum.trait.st @@ -60,7 +60,6 @@ FamixTEnum classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTEnumValue.trait.st b/src/Famix-Traits/FamixTEnumValue.trait.st index 8fa1592f0..cbf433718 100644 --- a/src/Famix-Traits/FamixTEnumValue.trait.st +++ b/src/Famix-Traits/FamixTEnumValue.trait.st @@ -62,7 +62,6 @@ FamixTEnumValue classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTException.trait.st b/src/Famix-Traits/FamixTException.trait.st index 0d5f9192c..d992b2927 100644 --- a/src/Famix-Traits/FamixTException.trait.st +++ b/src/Famix-Traits/FamixTException.trait.st @@ -62,7 +62,6 @@ FamixTException classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTFile.trait.st b/src/Famix-Traits/FamixTFile.trait.st index b90892607..148a1b36b 100644 --- a/src/Famix-Traits/FamixTFile.trait.st +++ b/src/Famix-Traits/FamixTFile.trait.st @@ -41,7 +41,6 @@ FamixTFile classSide >> annotation [ - ^ self ] { #category : 'groups' } diff --git a/src/Famix-Traits/FamixTFileAnchor.trait.st b/src/Famix-Traits/FamixTFileAnchor.trait.st index f8687937e..ce294a26a 100644 --- a/src/Famix-Traits/FamixTFileAnchor.trait.st +++ b/src/Famix-Traits/FamixTFileAnchor.trait.st @@ -29,7 +29,6 @@ FamixTFileAnchor classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTFileInclude.trait.st b/src/Famix-Traits/FamixTFileInclude.trait.st index ac727ed6f..192f22ad4 100644 --- a/src/Famix-Traits/FamixTFileInclude.trait.st +++ b/src/Famix-Traits/FamixTFileInclude.trait.st @@ -33,7 +33,6 @@ FamixTFileInclude classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTFileNavigation.trait.st b/src/Famix-Traits/FamixTFileNavigation.trait.st index 10bcbe967..c00fcdea0 100644 --- a/src/Famix-Traits/FamixTFileNavigation.trait.st +++ b/src/Famix-Traits/FamixTFileNavigation.trait.st @@ -34,7 +34,6 @@ FamixTFileNavigation classSide >> annotation [ - ^ self ] { #category : 'instance creation' } diff --git a/src/Famix-Traits/FamixTFileSystemEntity.trait.st b/src/Famix-Traits/FamixTFileSystemEntity.trait.st index c09317c80..5656e79bc 100644 --- a/src/Famix-Traits/FamixTFileSystemEntity.trait.st +++ b/src/Famix-Traits/FamixTFileSystemEntity.trait.st @@ -34,7 +34,6 @@ FamixTFileSystemEntity classSide >> annotation [ - ^ self ] { #category : 'constants' } diff --git a/src/Famix-Traits/FamixTFolder.trait.st b/src/Famix-Traits/FamixTFolder.trait.st index da0300891..37590da57 100644 --- a/src/Famix-Traits/FamixTFolder.trait.st +++ b/src/Famix-Traits/FamixTFolder.trait.st @@ -41,7 +41,6 @@ FamixTFolder classSide >> annotation [ - ^ self ] { #category : 'groups' } diff --git a/src/Famix-Traits/FamixTFunction.trait.st b/src/Famix-Traits/FamixTFunction.trait.st index 3d98b5c36..249224849 100644 --- a/src/Famix-Traits/FamixTFunction.trait.st +++ b/src/Famix-Traits/FamixTFunction.trait.st @@ -62,7 +62,6 @@ FamixTFunction classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTGlobalVariable.trait.st b/src/Famix-Traits/FamixTGlobalVariable.trait.st index db8f29af1..55ec50bdb 100644 --- a/src/Famix-Traits/FamixTGlobalVariable.trait.st +++ b/src/Famix-Traits/FamixTGlobalVariable.trait.st @@ -53,7 +53,6 @@ FamixTGlobalVariable classSide >> annotation [ - ^ self ] { #category : 'groups' } diff --git a/src/Famix-Traits/FamixTHasImmediateSource.trait.st b/src/Famix-Traits/FamixTHasImmediateSource.trait.st index 2a76d8c81..1a08ee1ab 100644 --- a/src/Famix-Traits/FamixTHasImmediateSource.trait.st +++ b/src/Famix-Traits/FamixTHasImmediateSource.trait.st @@ -36,7 +36,6 @@ FamixTHasImmediateSource classSide >> annotation [ - ^ self ] { #category : 'instance creation' } diff --git a/src/Famix-Traits/FamixTHasKind.trait.st b/src/Famix-Traits/FamixTHasKind.trait.st index 10ea0fc40..6350de8b4 100644 --- a/src/Famix-Traits/FamixTHasKind.trait.st +++ b/src/Famix-Traits/FamixTHasKind.trait.st @@ -25,7 +25,6 @@ FamixTHasKind classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTHasSignature.trait.st b/src/Famix-Traits/FamixTHasSignature.trait.st index 73c8b8384..19b5c5ed6 100644 --- a/src/Famix-Traits/FamixTHasSignature.trait.st +++ b/src/Famix-Traits/FamixTHasSignature.trait.st @@ -25,7 +25,6 @@ FamixTHasSignature classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTHasVisibility.trait.st b/src/Famix-Traits/FamixTHasVisibility.trait.st index 7f9991eae..a68ca1371 100644 --- a/src/Famix-Traits/FamixTHasVisibility.trait.st +++ b/src/Famix-Traits/FamixTHasVisibility.trait.st @@ -23,7 +23,6 @@ FamixTHasVisibility classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTImplementable.trait.st b/src/Famix-Traits/FamixTImplementable.trait.st index 3ab75ee6a..58518db41 100644 --- a/src/Famix-Traits/FamixTImplementable.trait.st +++ b/src/Famix-Traits/FamixTImplementable.trait.st @@ -28,7 +28,6 @@ FamixTImplementable classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTImplementation.trait.st b/src/Famix-Traits/FamixTImplementation.trait.st index 10b27ca12..48960dfd3 100644 --- a/src/Famix-Traits/FamixTImplementation.trait.st +++ b/src/Famix-Traits/FamixTImplementation.trait.st @@ -41,7 +41,6 @@ FamixTImplementation classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTImplicitVariable.trait.st b/src/Famix-Traits/FamixTImplicitVariable.trait.st index c97402d44..2a92f0bfe 100644 --- a/src/Famix-Traits/FamixTImplicitVariable.trait.st +++ b/src/Famix-Traits/FamixTImplicitVariable.trait.st @@ -52,7 +52,6 @@ FamixTImplicitVariable classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTImport.trait.st b/src/Famix-Traits/FamixTImport.trait.st index af0fa0799..97297572d 100644 --- a/src/Famix-Traits/FamixTImport.trait.st +++ b/src/Famix-Traits/FamixTImport.trait.st @@ -41,7 +41,6 @@ FamixTImport classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTImportable.trait.st b/src/Famix-Traits/FamixTImportable.trait.st index a64bdc82a..789abe2c7 100644 --- a/src/Famix-Traits/FamixTImportable.trait.st +++ b/src/Famix-Traits/FamixTImportable.trait.st @@ -26,7 +26,6 @@ FamixTImportable classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTIndexedFileNavigation.trait.st b/src/Famix-Traits/FamixTIndexedFileNavigation.trait.st index 322846485..855732ea2 100644 --- a/src/Famix-Traits/FamixTIndexedFileNavigation.trait.st +++ b/src/Famix-Traits/FamixTIndexedFileNavigation.trait.st @@ -30,7 +30,6 @@ FamixTIndexedFileNavigation classSide >> annotation [ - ^ self ] { #category : 'instance creation' } diff --git a/src/Famix-Traits/FamixTInheritance.trait.st b/src/Famix-Traits/FamixTInheritance.trait.st index dc6afde5e..7958601cc 100644 --- a/src/Famix-Traits/FamixTInheritance.trait.st +++ b/src/Famix-Traits/FamixTInheritance.trait.st @@ -41,7 +41,6 @@ FamixTInheritance classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTInvocable.trait.st b/src/Famix-Traits/FamixTInvocable.trait.st index 913d8665a..0d9755a41 100644 --- a/src/Famix-Traits/FamixTInvocable.trait.st +++ b/src/Famix-Traits/FamixTInvocable.trait.st @@ -26,7 +26,6 @@ FamixTInvocable classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTInvocation.trait.st b/src/Famix-Traits/FamixTInvocation.trait.st index ced68bad7..b9eb06bf9 100644 --- a/src/Famix-Traits/FamixTInvocation.trait.st +++ b/src/Famix-Traits/FamixTInvocation.trait.st @@ -60,7 +60,6 @@ FamixTInvocation classSide >> annotation [ - ^ self ] { #category : 'groups' } diff --git a/src/Famix-Traits/FamixTInvocationsReceiver.trait.st b/src/Famix-Traits/FamixTInvocationsReceiver.trait.st index 9b802722f..3b7259c09 100644 --- a/src/Famix-Traits/FamixTInvocationsReceiver.trait.st +++ b/src/Famix-Traits/FamixTInvocationsReceiver.trait.st @@ -26,7 +26,6 @@ FamixTInvocationsReceiver classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTLCOMMetrics.trait.st b/src/Famix-Traits/FamixTLCOMMetrics.trait.st index e2af27e0f..7a15177dc 100644 --- a/src/Famix-Traits/FamixTLCOMMetrics.trait.st +++ b/src/Famix-Traits/FamixTLCOMMetrics.trait.st @@ -11,7 +11,6 @@ FamixTLCOMMetrics classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTLambda.trait.st b/src/Famix-Traits/FamixTLambda.trait.st index 92ed7ccf0..8f6b55a92 100644 --- a/src/Famix-Traits/FamixTLambda.trait.st +++ b/src/Famix-Traits/FamixTLambda.trait.st @@ -60,7 +60,6 @@ FamixTLambda classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTLocalVariable.trait.st b/src/Famix-Traits/FamixTLocalVariable.trait.st index 0e1909860..a206cb53e 100644 --- a/src/Famix-Traits/FamixTLocalVariable.trait.st +++ b/src/Famix-Traits/FamixTLocalVariable.trait.st @@ -52,7 +52,6 @@ FamixTLocalVariable classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTMethod.trait.st b/src/Famix-Traits/FamixTMethod.trait.st index 43b66023b..f0cacb039 100644 --- a/src/Famix-Traits/FamixTMethod.trait.st +++ b/src/Famix-Traits/FamixTMethod.trait.st @@ -65,7 +65,6 @@ FamixTMethod classSide >> annotation [ - ^ self ] { #category : 'groups' } diff --git a/src/Famix-Traits/FamixTMethodMetrics.trait.st b/src/Famix-Traits/FamixTMethodMetrics.trait.st index 6ef2501e4..81a319e0f 100644 --- a/src/Famix-Traits/FamixTMethodMetrics.trait.st +++ b/src/Famix-Traits/FamixTMethodMetrics.trait.st @@ -11,7 +11,6 @@ FamixTMethodMetrics classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTModule.trait.st b/src/Famix-Traits/FamixTModule.trait.st index 153618150..3169c7b72 100644 --- a/src/Famix-Traits/FamixTModule.trait.st +++ b/src/Famix-Traits/FamixTModule.trait.st @@ -29,7 +29,6 @@ FamixTModule classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTMultipleFileAnchor.trait.st b/src/Famix-Traits/FamixTMultipleFileAnchor.trait.st index bc9830e17..4f254c2cf 100644 --- a/src/Famix-Traits/FamixTMultipleFileAnchor.trait.st +++ b/src/Famix-Traits/FamixTMultipleFileAnchor.trait.st @@ -34,7 +34,6 @@ FamixTMultipleFileAnchor classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTNamedEntity.trait.st b/src/Famix-Traits/FamixTNamedEntity.trait.st index df560cd70..39fc276d0 100644 --- a/src/Famix-Traits/FamixTNamedEntity.trait.st +++ b/src/Famix-Traits/FamixTNamedEntity.trait.st @@ -23,7 +23,6 @@ FamixTNamedEntity classSide >> annotation [ - ^ self ] { #category : 'instance creation' } diff --git a/src/Famix-Traits/FamixTNamespace.trait.st b/src/Famix-Traits/FamixTNamespace.trait.st index 4cece3442..ba6120bbc 100644 --- a/src/Famix-Traits/FamixTNamespace.trait.st +++ b/src/Famix-Traits/FamixTNamespace.trait.st @@ -38,7 +38,6 @@ FamixTNamespace classSide >> annotation [ - ^ self ] { #category : 'groups' } diff --git a/src/Famix-Traits/FamixTPackage.trait.st b/src/Famix-Traits/FamixTPackage.trait.st index 3f72a5298..783ee5b52 100644 --- a/src/Famix-Traits/FamixTPackage.trait.st +++ b/src/Famix-Traits/FamixTPackage.trait.st @@ -44,7 +44,6 @@ FamixTPackage classSide >> annotation [ - ^ self ] { #category : 'groups' } diff --git a/src/Famix-Traits/FamixTPackageable.trait.st b/src/Famix-Traits/FamixTPackageable.trait.st index 65643449b..0b9299d92 100644 --- a/src/Famix-Traits/FamixTPackageable.trait.st +++ b/src/Famix-Traits/FamixTPackageable.trait.st @@ -26,7 +26,6 @@ FamixTPackageable classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTParameter.trait.st b/src/Famix-Traits/FamixTParameter.trait.st index 6bc2ba7b6..db76b03f1 100644 --- a/src/Famix-Traits/FamixTParameter.trait.st +++ b/src/Famix-Traits/FamixTParameter.trait.st @@ -62,7 +62,6 @@ FamixTParameter classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTParametricAssociation.trait.st b/src/Famix-Traits/FamixTParametricAssociation.trait.st index 03c141937..68f5f7f24 100644 --- a/src/Famix-Traits/FamixTParametricAssociation.trait.st +++ b/src/Famix-Traits/FamixTParametricAssociation.trait.st @@ -28,7 +28,6 @@ FamixTParametricAssociation classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTParametricEntity.trait.st b/src/Famix-Traits/FamixTParametricEntity.trait.st index cb5371f3a..a0355bf18 100644 --- a/src/Famix-Traits/FamixTParametricEntity.trait.st +++ b/src/Famix-Traits/FamixTParametricEntity.trait.st @@ -35,7 +35,6 @@ FamixTParametricEntity classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTPrimitiveType.trait.st b/src/Famix-Traits/FamixTPrimitiveType.trait.st index c7dfe92cd..55ad8229b 100644 --- a/src/Famix-Traits/FamixTPrimitiveType.trait.st +++ b/src/Famix-Traits/FamixTPrimitiveType.trait.st @@ -43,7 +43,6 @@ FamixTPrimitiveType classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTReference.trait.st b/src/Famix-Traits/FamixTReference.trait.st index 62aaa604f..3185f2cbc 100644 --- a/src/Famix-Traits/FamixTReference.trait.st +++ b/src/Famix-Traits/FamixTReference.trait.st @@ -54,7 +54,6 @@ FamixTReference classSide >> annotation [ - ^ self ] { #category : 'instance creation' } diff --git a/src/Famix-Traits/FamixTReferenceable.trait.st b/src/Famix-Traits/FamixTReferenceable.trait.st index 62af657ce..463c88ee8 100644 --- a/src/Famix-Traits/FamixTReferenceable.trait.st +++ b/src/Famix-Traits/FamixTReferenceable.trait.st @@ -38,7 +38,6 @@ FamixTReferenceable classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTRelativeSourceAnchor.trait.st b/src/Famix-Traits/FamixTRelativeSourceAnchor.trait.st index 3d86d7dd1..91a6c7a63 100644 --- a/src/Famix-Traits/FamixTRelativeSourceAnchor.trait.st +++ b/src/Famix-Traits/FamixTRelativeSourceAnchor.trait.st @@ -54,7 +54,6 @@ FamixTRelativeSourceAnchor classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTShadowable.trait.st b/src/Famix-Traits/FamixTShadowable.trait.st index 8e856b447..f94a0cca0 100644 --- a/src/Famix-Traits/FamixTShadowable.trait.st +++ b/src/Famix-Traits/FamixTShadowable.trait.st @@ -51,7 +51,6 @@ FamixTShadowable classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTShadower.trait.st b/src/Famix-Traits/FamixTShadower.trait.st index c97c9f858..a917ab99f 100644 --- a/src/Famix-Traits/FamixTShadower.trait.st +++ b/src/Famix-Traits/FamixTShadower.trait.st @@ -51,7 +51,6 @@ FamixTShadower classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTSourceAnchor.trait.st b/src/Famix-Traits/FamixTSourceAnchor.trait.st index 5b6c5e19e..4035407bf 100644 --- a/src/Famix-Traits/FamixTSourceAnchor.trait.st +++ b/src/Famix-Traits/FamixTSourceAnchor.trait.st @@ -28,7 +28,6 @@ FamixTSourceAnchor classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTSourceEntity.trait.st b/src/Famix-Traits/FamixTSourceEntity.trait.st index 8e7797919..d7c8566ce 100644 --- a/src/Famix-Traits/FamixTSourceEntity.trait.st +++ b/src/Famix-Traits/FamixTSourceEntity.trait.st @@ -28,7 +28,6 @@ FamixTSourceEntity classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTSourceLanguage.trait.st b/src/Famix-Traits/FamixTSourceLanguage.trait.st index e62c41d7a..e8d6d6297 100644 --- a/src/Famix-Traits/FamixTSourceLanguage.trait.st +++ b/src/Famix-Traits/FamixTSourceLanguage.trait.st @@ -31,7 +31,6 @@ FamixTSourceLanguage classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTStructuralEntity.trait.st b/src/Famix-Traits/FamixTStructuralEntity.trait.st index 0249b21b9..ac7775d20 100644 --- a/src/Famix-Traits/FamixTStructuralEntity.trait.st +++ b/src/Famix-Traits/FamixTStructuralEntity.trait.st @@ -44,7 +44,6 @@ FamixTStructuralEntity classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTTemplate.trait.st b/src/Famix-Traits/FamixTTemplate.trait.st index 709923a14..eb112c1e7 100644 --- a/src/Famix-Traits/FamixTTemplate.trait.st +++ b/src/Famix-Traits/FamixTTemplate.trait.st @@ -32,7 +32,6 @@ FamixTTemplate classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTTemplateUser.trait.st b/src/Famix-Traits/FamixTTemplateUser.trait.st index 9269a4a15..32a986968 100644 --- a/src/Famix-Traits/FamixTTemplateUser.trait.st +++ b/src/Famix-Traits/FamixTTemplateUser.trait.st @@ -26,7 +26,6 @@ FamixTTemplateUser classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTThrowable.trait.st b/src/Famix-Traits/FamixTThrowable.trait.st index 1348309b1..19db3b192 100644 --- a/src/Famix-Traits/FamixTThrowable.trait.st +++ b/src/Famix-Traits/FamixTThrowable.trait.st @@ -32,7 +32,6 @@ FamixTThrowable classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTTrait.trait.st b/src/Famix-Traits/FamixTTrait.trait.st index 150b8f97f..a1996dbe1 100644 --- a/src/Famix-Traits/FamixTTrait.trait.st +++ b/src/Famix-Traits/FamixTTrait.trait.st @@ -34,7 +34,6 @@ FamixTTrait classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTTraitUsage.trait.st b/src/Famix-Traits/FamixTTraitUsage.trait.st index e91d79ff7..2792c3d23 100644 --- a/src/Famix-Traits/FamixTTraitUsage.trait.st +++ b/src/Famix-Traits/FamixTTraitUsage.trait.st @@ -41,7 +41,6 @@ FamixTTraitUsage classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTTraitUser.trait.st b/src/Famix-Traits/FamixTTraitUser.trait.st index 9deae974e..a4cc5a6c6 100644 --- a/src/Famix-Traits/FamixTTraitUser.trait.st +++ b/src/Famix-Traits/FamixTTraitUser.trait.st @@ -26,7 +26,6 @@ FamixTTraitUser classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTType.trait.st b/src/Famix-Traits/FamixTType.trait.st index e8f2262f1..4acfef2b2 100644 --- a/src/Famix-Traits/FamixTType.trait.st +++ b/src/Famix-Traits/FamixTType.trait.st @@ -53,7 +53,6 @@ FamixTType classSide >> annotation [ - ^ self ] { #category : 'groups' } diff --git a/src/Famix-Traits/FamixTTypeAlias.trait.st b/src/Famix-Traits/FamixTTypeAlias.trait.st index 8da85e2ae..d5d5a208f 100644 --- a/src/Famix-Traits/FamixTTypeAlias.trait.st +++ b/src/Famix-Traits/FamixTTypeAlias.trait.st @@ -31,7 +31,6 @@ FamixTTypeAlias classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTTypeArgument.trait.st b/src/Famix-Traits/FamixTTypeArgument.trait.st index bb6bcb13c..cea0fcbf1 100644 --- a/src/Famix-Traits/FamixTTypeArgument.trait.st +++ b/src/Famix-Traits/FamixTTypeArgument.trait.st @@ -28,7 +28,6 @@ FamixTTypeArgument classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTTypeParameter.trait.st b/src/Famix-Traits/FamixTTypeParameter.trait.st index 3e5e24b6b..19c243749 100644 --- a/src/Famix-Traits/FamixTTypeParameter.trait.st +++ b/src/Famix-Traits/FamixTTypeParameter.trait.st @@ -34,7 +34,6 @@ FamixTTypeParameter classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTTypedEntity.trait.st b/src/Famix-Traits/FamixTTypedEntity.trait.st index 85a89c713..aeb41e798 100644 --- a/src/Famix-Traits/FamixTTypedEntity.trait.st +++ b/src/Famix-Traits/FamixTTypedEntity.trait.st @@ -26,7 +26,6 @@ FamixTTypedEntity classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTUnknownVariable.trait.st b/src/Famix-Traits/FamixTUnknownVariable.trait.st index 21dde3847..82d5630e1 100644 --- a/src/Famix-Traits/FamixTUnknownVariable.trait.st +++ b/src/Famix-Traits/FamixTUnknownVariable.trait.st @@ -42,7 +42,6 @@ FamixTUnknownVariable classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTVisitor.trait.st b/src/Famix-Traits/FamixTVisitor.trait.st index 8be702ec4..e3414b489 100644 --- a/src/Famix-Traits/FamixTVisitor.trait.st +++ b/src/Famix-Traits/FamixTVisitor.trait.st @@ -15,7 +15,6 @@ FamixTVisitor classSide >> annotation [ - ^ self ] { #category : 'visiting' } diff --git a/src/Famix-Traits/FamixTWithAccesses.trait.st b/src/Famix-Traits/FamixTWithAccesses.trait.st index 764a850f8..49d61f05f 100644 --- a/src/Famix-Traits/FamixTWithAccesses.trait.st +++ b/src/Famix-Traits/FamixTWithAccesses.trait.st @@ -26,7 +26,6 @@ FamixTWithAccesses classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithAnnotationInstances.trait.st b/src/Famix-Traits/FamixTWithAnnotationInstances.trait.st index a7aaeb0b6..c6ab3cd50 100644 --- a/src/Famix-Traits/FamixTWithAnnotationInstances.trait.st +++ b/src/Famix-Traits/FamixTWithAnnotationInstances.trait.st @@ -26,7 +26,6 @@ FamixTWithAnnotationInstances classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithAnnotationTypes.trait.st b/src/Famix-Traits/FamixTWithAnnotationTypes.trait.st index 1a3af62d8..76c052ac4 100644 --- a/src/Famix-Traits/FamixTWithAnnotationTypes.trait.st +++ b/src/Famix-Traits/FamixTWithAnnotationTypes.trait.st @@ -26,7 +26,6 @@ FamixTWithAnnotationTypes classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithAttributes.trait.st b/src/Famix-Traits/FamixTWithAttributes.trait.st index 30b080617..850d40f07 100644 --- a/src/Famix-Traits/FamixTWithAttributes.trait.st +++ b/src/Famix-Traits/FamixTWithAttributes.trait.st @@ -26,7 +26,6 @@ FamixTWithAttributes classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithClasses.trait.st b/src/Famix-Traits/FamixTWithClasses.trait.st index b12bbba34..eb7fd03a8 100644 --- a/src/Famix-Traits/FamixTWithClasses.trait.st +++ b/src/Famix-Traits/FamixTWithClasses.trait.st @@ -25,7 +25,6 @@ FamixTWithClasses classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithComments.trait.st b/src/Famix-Traits/FamixTWithComments.trait.st index ca3f820bb..7019bd46b 100644 --- a/src/Famix-Traits/FamixTWithComments.trait.st +++ b/src/Famix-Traits/FamixTWithComments.trait.st @@ -26,7 +26,6 @@ FamixTWithComments classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithCompilationUnits.trait.st b/src/Famix-Traits/FamixTWithCompilationUnits.trait.st index f0ec82b0f..77285faaf 100644 --- a/src/Famix-Traits/FamixTWithCompilationUnits.trait.st +++ b/src/Famix-Traits/FamixTWithCompilationUnits.trait.st @@ -26,7 +26,6 @@ FamixTWithCompilationUnits classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithDereferencedInvocations.trait.st b/src/Famix-Traits/FamixTWithDereferencedInvocations.trait.st index 277b1bde5..5ef21d830 100644 --- a/src/Famix-Traits/FamixTWithDereferencedInvocations.trait.st +++ b/src/Famix-Traits/FamixTWithDereferencedInvocations.trait.st @@ -26,7 +26,6 @@ FamixTWithDereferencedInvocations classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithEnumValues.trait.st b/src/Famix-Traits/FamixTWithEnumValues.trait.st index 6b371344b..b005112be 100644 --- a/src/Famix-Traits/FamixTWithEnumValues.trait.st +++ b/src/Famix-Traits/FamixTWithEnumValues.trait.st @@ -26,7 +26,6 @@ FamixTWithEnumValues classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithExceptions.trait.st b/src/Famix-Traits/FamixTWithExceptions.trait.st index ef40305d4..660f55f0c 100644 --- a/src/Famix-Traits/FamixTWithExceptions.trait.st +++ b/src/Famix-Traits/FamixTWithExceptions.trait.st @@ -30,7 +30,6 @@ FamixTWithExceptions classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithFileIncludes.trait.st b/src/Famix-Traits/FamixTWithFileIncludes.trait.st index 64b788c9d..a0d803e25 100644 --- a/src/Famix-Traits/FamixTWithFileIncludes.trait.st +++ b/src/Famix-Traits/FamixTWithFileIncludes.trait.st @@ -28,7 +28,6 @@ FamixTWithFileIncludes classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithFiles.trait.st b/src/Famix-Traits/FamixTWithFiles.trait.st index 34428d391..ab5d5f285 100644 --- a/src/Famix-Traits/FamixTWithFiles.trait.st +++ b/src/Famix-Traits/FamixTWithFiles.trait.st @@ -26,7 +26,6 @@ FamixTWithFiles classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithFunctions.trait.st b/src/Famix-Traits/FamixTWithFunctions.trait.st index 713fa6a6f..86f78c4a3 100644 --- a/src/Famix-Traits/FamixTWithFunctions.trait.st +++ b/src/Famix-Traits/FamixTWithFunctions.trait.st @@ -26,7 +26,6 @@ FamixTWithFunctions classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithGlobalVariables.trait.st b/src/Famix-Traits/FamixTWithGlobalVariables.trait.st index 6ecab75f7..239bb0cb5 100644 --- a/src/Famix-Traits/FamixTWithGlobalVariables.trait.st +++ b/src/Famix-Traits/FamixTWithGlobalVariables.trait.st @@ -28,7 +28,6 @@ FamixTWithGlobalVariables classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithImplicitVariables.trait.st b/src/Famix-Traits/FamixTWithImplicitVariables.trait.st index 2b52c065e..a41a66dee 100644 --- a/src/Famix-Traits/FamixTWithImplicitVariables.trait.st +++ b/src/Famix-Traits/FamixTWithImplicitVariables.trait.st @@ -26,7 +26,6 @@ FamixTWithImplicitVariables classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithImports.trait.st b/src/Famix-Traits/FamixTWithImports.trait.st index 6eaeda6d9..29898aff1 100644 --- a/src/Famix-Traits/FamixTWithImports.trait.st +++ b/src/Famix-Traits/FamixTWithImports.trait.st @@ -26,7 +26,6 @@ FamixTWithImports classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithInheritances.trait.st b/src/Famix-Traits/FamixTWithInheritances.trait.st index 9d978700a..b49f8c664 100644 --- a/src/Famix-Traits/FamixTWithInheritances.trait.st +++ b/src/Famix-Traits/FamixTWithInheritances.trait.st @@ -32,7 +32,6 @@ FamixTWithInheritances classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithInvocations.trait.st b/src/Famix-Traits/FamixTWithInvocations.trait.st index 824fe631a..9b11adf0b 100644 --- a/src/Famix-Traits/FamixTWithInvocations.trait.st +++ b/src/Famix-Traits/FamixTWithInvocations.trait.st @@ -26,7 +26,6 @@ FamixTWithInvocations classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithLambdas.trait.st b/src/Famix-Traits/FamixTWithLambdas.trait.st index d258de250..e0e6bf677 100644 --- a/src/Famix-Traits/FamixTWithLambdas.trait.st +++ b/src/Famix-Traits/FamixTWithLambdas.trait.st @@ -28,7 +28,6 @@ FamixTWithLambdas classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithLocalVariables.trait.st b/src/Famix-Traits/FamixTWithLocalVariables.trait.st index 85eccfb1b..2b172c54f 100644 --- a/src/Famix-Traits/FamixTWithLocalVariables.trait.st +++ b/src/Famix-Traits/FamixTWithLocalVariables.trait.st @@ -26,7 +26,6 @@ FamixTWithLocalVariables classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithMethods.trait.st b/src/Famix-Traits/FamixTWithMethods.trait.st index 3628ba8d6..5eaeb40bf 100644 --- a/src/Famix-Traits/FamixTWithMethods.trait.st +++ b/src/Famix-Traits/FamixTWithMethods.trait.st @@ -26,7 +26,6 @@ FamixTWithMethods classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithParameters.trait.st b/src/Famix-Traits/FamixTWithParameters.trait.st index 9c65add2a..6b8b0e4f1 100644 --- a/src/Famix-Traits/FamixTWithParameters.trait.st +++ b/src/Famix-Traits/FamixTWithParameters.trait.st @@ -26,7 +26,6 @@ FamixTWithParameters classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithReferences.trait.st b/src/Famix-Traits/FamixTWithReferences.trait.st index 82df88be5..b9dd33dfc 100644 --- a/src/Famix-Traits/FamixTWithReferences.trait.st +++ b/src/Famix-Traits/FamixTWithReferences.trait.st @@ -26,7 +26,6 @@ FamixTWithReferences classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithSourceLanguages.trait.st b/src/Famix-Traits/FamixTWithSourceLanguages.trait.st index 7511311ca..5bbe53c99 100644 --- a/src/Famix-Traits/FamixTWithSourceLanguages.trait.st +++ b/src/Famix-Traits/FamixTWithSourceLanguages.trait.st @@ -26,7 +26,6 @@ FamixTWithSourceLanguages classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithStatements.trait.st b/src/Famix-Traits/FamixTWithStatements.trait.st index 4a33a1994..c8de93d9b 100644 --- a/src/Famix-Traits/FamixTWithStatements.trait.st +++ b/src/Famix-Traits/FamixTWithStatements.trait.st @@ -38,7 +38,6 @@ FamixTWithStatements classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithTemplates.trait.st b/src/Famix-Traits/FamixTWithTemplates.trait.st index 355acc79d..8894bc397 100644 --- a/src/Famix-Traits/FamixTWithTemplates.trait.st +++ b/src/Famix-Traits/FamixTWithTemplates.trait.st @@ -26,7 +26,6 @@ FamixTWithTemplates classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithTraits.trait.st b/src/Famix-Traits/FamixTWithTraits.trait.st index 4412e9997..dc5dc7020 100644 --- a/src/Famix-Traits/FamixTWithTraits.trait.st +++ b/src/Famix-Traits/FamixTWithTraits.trait.st @@ -26,7 +26,6 @@ FamixTWithTraits classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithTypeAliases.trait.st b/src/Famix-Traits/FamixTWithTypeAliases.trait.st index f24304fdb..37c31d8d5 100644 --- a/src/Famix-Traits/FamixTWithTypeAliases.trait.st +++ b/src/Famix-Traits/FamixTWithTypeAliases.trait.st @@ -26,7 +26,6 @@ FamixTWithTypeAliases classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/Famix-Traits/FamixTWithTypes.trait.st b/src/Famix-Traits/FamixTWithTypes.trait.st index 0e1f1c90b..2f7300f2e 100644 --- a/src/Famix-Traits/FamixTWithTypes.trait.st +++ b/src/Famix-Traits/FamixTWithTypes.trait.st @@ -26,7 +26,6 @@ FamixTWithTypes classSide >> annotation [ - ^ self ] { #category : 'visitor' } diff --git a/src/FamixDocumentor-TestMetaModel/FDClass1.class.st b/src/FamixDocumentor-TestMetaModel/FDClass1.class.st index a36ef3c2b..c74fac833 100644 --- a/src/FamixDocumentor-TestMetaModel/FDClass1.class.st +++ b/src/FamixDocumentor-TestMetaModel/FDClass1.class.st @@ -29,7 +29,6 @@ FDClass1 class >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/FamixDocumentor-TestMetaModel/FDClass2.class.st b/src/FamixDocumentor-TestMetaModel/FDClass2.class.st index 3d209e81a..1cdf986f1 100644 --- a/src/FamixDocumentor-TestMetaModel/FDClass2.class.st +++ b/src/FamixDocumentor-TestMetaModel/FDClass2.class.st @@ -12,5 +12,4 @@ FDClass2 class >> annotation [ - ^ self ] diff --git a/src/FamixDocumentor-TestMetaModel/FDEntity.class.st b/src/FamixDocumentor-TestMetaModel/FDEntity.class.st index 485f57c72..a9007cd70 100644 --- a/src/FamixDocumentor-TestMetaModel/FDEntity.class.st +++ b/src/FamixDocumentor-TestMetaModel/FDEntity.class.st @@ -13,7 +13,6 @@ FDEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/FamixDocumentor-TestMetaModel/FDModel.class.st b/src/FamixDocumentor-TestMetaModel/FDModel.class.st index deae68742..1fb5ab7ee 100644 --- a/src/FamixDocumentor-TestMetaModel/FDModel.class.st +++ b/src/FamixDocumentor-TestMetaModel/FDModel.class.st @@ -14,5 +14,4 @@ FDModel class >> annotation [ - ^ self ] diff --git a/src/FamixDocumentor-TestMetaModel/FDTEntityCreator.trait.st b/src/FamixDocumentor-TestMetaModel/FDTEntityCreator.trait.st index ef66fb375..472208146 100644 --- a/src/FamixDocumentor-TestMetaModel/FDTEntityCreator.trait.st +++ b/src/FamixDocumentor-TestMetaModel/FDTEntityCreator.trait.st @@ -17,7 +17,6 @@ FDTEntityCreator classSide >> annotation [ - ^ self ] { #category : 'entity creation' } diff --git a/src/FamixDocumentor-TestMetaModel/FDTrait1.trait.st b/src/FamixDocumentor-TestMetaModel/FDTrait1.trait.st index dded8fa1c..d48f3dabe 100644 --- a/src/FamixDocumentor-TestMetaModel/FDTrait1.trait.st +++ b/src/FamixDocumentor-TestMetaModel/FDTrait1.trait.st @@ -11,5 +11,4 @@ FDTrait1 classSide >> annotation [ - ^ self ] diff --git a/src/FamixDocumentor-TestMetaModel/FDTrait2.trait.st b/src/FamixDocumentor-TestMetaModel/FDTrait2.trait.st index e2e59cb7b..aeabfbac0 100644 --- a/src/FamixDocumentor-TestMetaModel/FDTrait2.trait.st +++ b/src/FamixDocumentor-TestMetaModel/FDTrait2.trait.st @@ -13,5 +13,4 @@ FDTrait2 classSide >> annotation [ - ^ self ] diff --git a/src/FamixDocumentor-TestMetaModel/FDTrait3.trait.st b/src/FamixDocumentor-TestMetaModel/FDTrait3.trait.st index 5c19e34e3..1391cf264 100644 --- a/src/FamixDocumentor-TestMetaModel/FDTrait3.trait.st +++ b/src/FamixDocumentor-TestMetaModel/FDTrait3.trait.st @@ -13,5 +13,4 @@ FDTrait3 classSide >> annotation [ - ^ self ] diff --git a/src/FamixDocumentor-TestMetaModel/FDTrait4.trait.st b/src/FamixDocumentor-TestMetaModel/FDTrait4.trait.st index 2c4b04bb5..a57b091b9 100644 --- a/src/FamixDocumentor-TestMetaModel/FDTrait4.trait.st +++ b/src/FamixDocumentor-TestMetaModel/FDTrait4.trait.st @@ -37,7 +37,6 @@ FDTrait4 classSide >> annotation [ - ^ self ] { #category : 'adding' } diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestAttribute.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestAttribute.class.st index c65263a8e..4adacbe7c 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestAttribute.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestAttribute.class.st @@ -48,5 +48,4 @@ MooseMSEImporterTestAttribute class >> annotation [ - ^ self ] diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestClass.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestClass.class.st index 37754d611..8d6fcfb0e 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestClass.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestClass.class.st @@ -58,7 +58,6 @@ MooseMSEImporterTestClass class >> annotation [ - ^ self ] { #category : 'printing' } diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestComment.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestComment.class.st index 810c12e02..6122eae3e 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestComment.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestComment.class.st @@ -31,5 +31,4 @@ MooseMSEImporterTestComment class >> annotation [ - ^ self ] diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestEntity.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestEntity.class.st index 169988b9d..8d1caff1b 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestEntity.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestEntity.class.st @@ -13,7 +13,6 @@ MooseMSEImporterTestEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestEntityTyping.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestEntityTyping.class.st index 8c19fee20..71d707419 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestEntityTyping.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestEntityTyping.class.st @@ -38,5 +38,4 @@ MooseMSEImporterTestEntityTyping class >> annotation [ - ^ self ] diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestInheritance.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestInheritance.class.st index fea6861ce..3897b8e12 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestInheritance.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestInheritance.class.st @@ -38,5 +38,4 @@ MooseMSEImporterTestInheritance class >> annotation [ - ^ self ] diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestMethod.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestMethod.class.st index efbc15fa7..aacc0a2c1 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestMethod.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestMethod.class.st @@ -59,5 +59,4 @@ MooseMSEImporterTestMethod class >> annotation [ - ^ self ] diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestModel.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestModel.class.st index d1a78e149..1c6a6f3bc 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestModel.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestModel.class.st @@ -20,5 +20,4 @@ MooseMSEImporterTestModel class >> annotation [ - ^ self ] diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestNamedEntity.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestNamedEntity.class.st index bda41aaf3..561d19366 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestNamedEntity.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestNamedEntity.class.st @@ -24,7 +24,6 @@ MooseMSEImporterTestNamedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestNamespace.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestNamespace.class.st index 2015d13b2..a79e2e1fc 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestNamespace.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestNamespace.class.st @@ -38,5 +38,4 @@ MooseMSEImporterTestNamespace class >> annotation [ - ^ self ] diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestPackage.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestPackage.class.st index 930877efc..0a1383a5d 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestPackage.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestPackage.class.st @@ -44,5 +44,4 @@ MooseMSEImporterTestPackage class >> annotation [ - ^ self ] diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestPrimitiveType.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestPrimitiveType.class.st index 97da9a215..574501c64 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestPrimitiveType.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestPrimitiveType.class.st @@ -44,5 +44,4 @@ MooseMSEImporterTestPrimitiveType class >> annotation [ - ^ self ] diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestSourceAnchor.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestSourceAnchor.class.st index a4fe4c712..217d2f5e3 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestSourceAnchor.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestSourceAnchor.class.st @@ -27,7 +27,6 @@ MooseMSEImporterTestSourceAnchor class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestSourceLanguage.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestSourceLanguage.class.st index 0cd9a885a..4a1805eed 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestSourceLanguage.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestSourceLanguage.class.st @@ -26,5 +26,4 @@ MooseMSEImporterTestSourceLanguage class >> annotation [ - ^ self ] diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestSourceTextAnchor.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestSourceTextAnchor.class.st index 310a7456b..ea6200a56 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestSourceTextAnchor.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestSourceTextAnchor.class.st @@ -32,5 +32,4 @@ MooseMSEImporterTestSourceTextAnchor class >> annotation [ - ^ self ] diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestSourcedEntity.class.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestSourcedEntity.class.st index 01c7d7eb9..c2742f607 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestSourcedEntity.class.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestSourcedEntity.class.st @@ -27,7 +27,6 @@ MooseMSEImporterTestSourcedEntity class >> annotation [ - ^ self ] { #category : 'testing' } diff --git a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestTEntityCreator.trait.st b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestTEntityCreator.trait.st index 44402a4fe..172553808 100644 --- a/src/Moose-Core-Tests-Entities/MooseMSEImporterTestTEntityCreator.trait.st +++ b/src/Moose-Core-Tests-Entities/MooseMSEImporterTestTEntityCreator.trait.st @@ -17,7 +17,6 @@ MooseMSEImporterTestTEntityCreator classSide >> annotation [ - ^ self ] { #category : 'entity creation' } diff --git a/src/Moose-Query/TAssociationMetaLevelDependency.trait.st b/src/Moose-Query/TAssociationMetaLevelDependency.trait.st index b77b400ae..468b68848 100644 --- a/src/Moose-Query/TAssociationMetaLevelDependency.trait.st +++ b/src/Moose-Query/TAssociationMetaLevelDependency.trait.st @@ -16,7 +16,6 @@ TAssociationMetaLevelDependency classSide >> annotation [ - ^ self ] { #category : 'accessing' } diff --git a/src/Moose-Query/TEntityMetaLevelDependency.trait.st b/src/Moose-Query/TEntityMetaLevelDependency.trait.st index 40f9cc568..94353216d 100644 --- a/src/Moose-Query/TEntityMetaLevelDependency.trait.st +++ b/src/Moose-Query/TEntityMetaLevelDependency.trait.st @@ -94,7 +94,6 @@ TEntityMetaLevelDependency classSide >> annotation [ - ^ self ] { #category : 'accessing' } From 993ea838788ebe1ed49f2c97c0f11b4b39a9279e Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Sat, 9 May 2026 23:35:51 +0200 Subject: [PATCH 102/121] Progress on the creation of the changes builder visitor --- .../FmxMBVisitor.extension.st | 8 + .../FamixMetamodelBuilder.class.st | 2 + .../FmxMBBehavior.class.st | 7 + .../FmxMBChangesBuilderVisitor.class.st | 247 ++++++++++++++++++ .../FmxMBClassEntity.class.st | 13 + .../FmxMBClassGroup.class.st | 7 + .../FmxMBEntityCreatorTrait.class.st | 7 + .../FmxMBMethodsFactory.class.st | 68 +++++ .../FmxMBModel.class.st | 6 + .../FmxMBPlantTextVisitor.class.st | 2 +- .../FmxMBPlantTextVisitorPartial.class.st | 4 +- .../FmxMBPrintVisitor.class.st | 4 +- .../FmxMBProperty.class.st | 7 + ...lationAccessorsGenerationStrategy.class.st | 73 +++++- ...ationAttributesGenerationStrategy.class.st | 4 +- .../FmxMBRelationSide.class.st | 12 +- ...MBRelationSlotsGenerationStrategy.class.st | 4 +- .../FmxMBRingEnvironment.class.st | 6 + .../FmxMBTypedProperty.class.st | 65 +---- .../FmxMBVisitor.class.st | 52 +++- .../FmxMBWalkerVisitor.class.st | 22 +- .../FmxMBMethodsFactory.extension.st | 66 +++++ .../FmxMBVisitor.extension.st | 7 + .../FmxMBVisitorTrait.class.st | 126 +-------- 24 files changed, 610 insertions(+), 209 deletions(-) create mode 100644 src/Famix-Deprecated/FmxMBVisitor.extension.st create mode 100644 src/Famix-Visitor-Generation/FmxMBMethodsFactory.extension.st create mode 100644 src/Famix-Visitor-Generation/FmxMBVisitor.extension.st diff --git a/src/Famix-Deprecated/FmxMBVisitor.extension.st b/src/Famix-Deprecated/FmxMBVisitor.extension.st new file mode 100644 index 000000000..4091f4869 --- /dev/null +++ b/src/Famix-Deprecated/FmxMBVisitor.extension.st @@ -0,0 +1,8 @@ +Extension { #name : 'FmxMBVisitor' } + +{ #category : '*Famix-Deprecated' } +FmxMBVisitor >> visitRelationSide: a [ + + self deprecated: 'Use visitRelation:' transformWith: '`@rcv visitRelationSide: `@arg' -> '`@rcv visitRelation: `@arg'. + ^ self visitRelation: a +] diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index 1892e0c9f..9283b5de2 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -232,6 +232,8 @@ FamixMetamodelBuilder >> generate [ | changesBuilder | self prepareGeneration. changesBuilder := FmxMBChangesBuilderVisitor visit: self. + changesBuilder changesToApply size = self environment rawChangesToApply size ifFalse: [ self halt ]. + self apply ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index bb60670dd..dc495e232 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -33,6 +33,13 @@ FmxMBBehavior >> <|-- anObject [ ^ anObject ] +{ #category : 'visiting' } +FmxMBBehavior >> acceptVisitor: aVisitor [ + + + ^ aVisitor visitBehavioral: self +] + { #category : 'accessing' } FmxMBBehavior >> addAllTransitiveTraitsIn: aCollection [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st index 43279187c..40443b535 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st @@ -2,6 +2,8 @@ Class { #name : 'FmxMBChangesBuilderVisitor', #superclass : 'FmxMBWalkerVisitor', #instVars : [ + 'builder', + 'currentBehavioral', 'changesToApply' ], #category : 'Famix-MetamodelBuilder-Core-Implementation', @@ -9,6 +11,22 @@ Class { #tag : 'Implementation' } +{ #category : 'adding' } +FmxMBChangesBuilderVisitor >> addMethod: sourceCode classSide: aBoolean protocol: protocol [ + + changesToApply add: (FmxMethodAddition + className: currentBehavioral name + isClassSide: aBoolean + sourceCode: sourceCode + protocol: protocol) +] + +{ #category : 'adding' } +FmxMBChangesBuilderVisitor >> addMethod: sourceCode protocol: protocol [ + + self addMethod: sourceCode classSide: false protocol: protocol +] + { #category : 'initialization' } FmxMBChangesBuilderVisitor >> buildSlotsDefinitionsFor: properties existingClass: currentClass [ @@ -38,6 +56,42 @@ FmxMBChangesBuilderVisitor >> changesOfType: aClass [ ^ changesToApply select: [ :change | change isKindOf: aClass ] ] +{ #category : 'accessing' } +FmxMBChangesBuilderVisitor >> changesToApply [ + ^ changesToApply +] + +{ #category : 'initialization' } +FmxMBChangesBuilderVisitor >> createClassNamed: className superclass: superclassName traitDefinitions: traitDefinitions precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ + + | realClass packageName tag change | + realClass := self class environment at: className ifAbsent: [ nil ]. + + packageName := realClass + ifNil: [ defaultPackage ] + ifNotNil: [ realClass package name ]. + tag := realClass + ifNil: [ defaultTag ] + ifNotNil: [ realClass packageTag name ]. + + change := FmxClassAddition new. + change + name: className; + superclass: superclassName; + package: packageName; + tag: tag. + + traitDefinitions ifNotEmpty: [ change traits: (self traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass) ]. + + self validateProperties: properties. + change slots: (self buildSlotsDefinitionsFor: properties existingClass: realClass). + changesToApply add: change. + + self ensurePackageNamed: packageName. + + comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: className comment: comment) ] +] + { #category : 'initialization' } FmxMBChangesBuilderVisitor >> createTraitNamed: traitName traitDefinitions: traitDefinitions precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ @@ -77,6 +131,64 @@ FmxMBChangesBuilderVisitor >> ensurePackageNamed: packageName [ changesToApply add: (FmxPackageAddition named: packageName) ] +{ #category : 'as yet unclassified' } +FmxMBChangesBuilderVisitor >> generateAddToCollection [ + + currentBehavioral relations do: [ :relation | + relation isMany ifTrue: [ self addMethod: (self methodFactory addToCollectionFor: relation name) protocol: #adding ] ] +] + +{ #category : 'as yet unclassified' } +FmxMBChangesBuilderVisitor >> generateAnnotation [ + + self + addMethod: (self methodFactory + annotationFor: currentBehavioral name + super: currentBehavioral superclassName + package: builder safeAnnotationPackageName + isAbstract: currentBehavioral isAbstractClass) + classSide: true + protocol: #meta +] + +{ #category : 'as yet unclassified' } +FmxMBChangesBuilderVisitor >> generateFalseTestingMethods [ + + | selectorsToGenerate | + currentBehavioral isRoot ifFalse: [ ^ self ]. + + selectorsToGenerate := Set new. + builder testingSelectorsMapping keysAndValuesDo: [ :concernedClass :selectors | + (builder shouldGeneratorTestingMethodsOf: concernedClass in: currentBehavioral) ifTrue: [ selectorsToGenerate addAll: selectors ] ]. + + (selectorsToGenerate difference: (currentBehavioral traitGeneralizations flatCollect: #testingSelectors)) do: [ :selector | + self addMethod: (self methodFactory testReturning: false for: selector) protocol: #testing ] +] + +{ #category : 'generating-methods' } +FmxMBChangesBuilderVisitor >> generateFileImportMethods [ + + builder configuration shouldGenerateFileImportHelpers ifFalse: [ ^ self ]. + + self addMethod: self methodFactory canBeImportedFromFile classSide: true protocol: #testing. + + self addMethod: (self methodFactory importingClassNamed: builder importingContextName) classSide: true protocol: #accessing +] + +{ #category : 'generating-methods' } +FmxMBChangesBuilderVisitor >> generateMetamodelMethod [ + + currentBehavioral isRoot ifFalse: [ ^ self ]. + + builder model ifNotNil: [ :model | self addMethod: (self methodFactory metamodelFor: model fullName) classSide: true protocol: #meta ] +] + +{ #category : 'as yet unclassified' } +FmxMBChangesBuilderVisitor >> generateTrueTestingMethods [ + + currentBehavioral testingSelectors do: [ :aSelector | self addMethod: (self methodFactory testReturning: true for: aSelector) protocol: #testing ] +] + { #category : 'initialization' } FmxMBChangesBuilderVisitor >> initialize [ @@ -84,6 +196,12 @@ FmxMBChangesBuilderVisitor >> initialize [ changesToApply := OrderedCollection new ] +{ #category : 'as yet unclassified' } +FmxMBChangesBuilderVisitor >> methodFactory [ + + ^ FmxMBMethodsFactory +] + { #category : 'installing' } FmxMBChangesBuilderVisitor >> traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass [ "We need to collect the generated traits + the custom traits added by the user." @@ -119,14 +237,123 @@ FmxMBChangesBuilderVisitor >> validateProperties: properties [ { #category : 'visiting' } FmxMBChangesBuilderVisitor >> visitBuilder: aBuilder [ + builder := aBuilder. self ensurePackageNamed: aBuilder configuration packageName. super visitBuilder: aBuilder ] +{ #category : 'visiting' } +FmxMBChangesBuilderVisitor >> visitClass: aClass [ + + currentBehavioral := aClass. + + self + createClassNamed: aClass fullName + superclass: aClass superclassName + traitDefinitions: aClass allTraitDefinitions + precedingTrait: (aClass additionalProperties at: #precedingTrait ifAbsent: [ nil ]) + properties: (aClass propertiesAndRelations select: #producesSlot) + in: aClass packageName + tag: aClass tag + comment: aClass commentWithRelations. + + + super visitClass: aClass +] + +{ #category : 'visiting' } +FmxMBChangesBuilderVisitor >> visitClassEntity: aClass [ + + super visitClassEntity: aClass. + + self + generateAnnotation; + generateTrueTestingMethods; + generateFalseTestingMethods; + generateAddToCollection; + generateMetamodelMethod. + + aClass isAbstractClass ifTrue: [ self addMethod: (self methodFactory isAbstractFor: aClass fullName) classSide: true protocol: #testing ]. + + aClass propertiesForEqualityCheck ifNotNil: [ + self addMethod: (self methodFactory equalsForVariableNamed: 'a' , aClass fullName properties: aClass propertiesForEqualityCheck) protocol: #comparing. + self addMethod: (self methodFactory hashForProperties: aClass propertiesForEqualityCheck) protocol: #comparing ] +] + +{ #category : 'visiting' } +FmxMBChangesBuilderVisitor >> visitClassGroup: aClass [ + + super visitClassGroup: aClass. + aClass innerClass addMethod: (self methodFactory groupAnnotationNamed: aClass fullName) classSide: true protocol: #groups +] + +{ #category : 'visiting' } +FmxMBChangesBuilderVisitor >> visitEntityCreator: aTrait [ + + super visitEntityCreator: aTrait. + + builder concreteClasses do: [ :class | + self addMethod: (self methodFactory instantiate: class) protocol: #'entity creation'. + + (class allTransitiveTraitsIncludingSuperclasses anySatisfy: [ :trait | trait prefix = #Famix and: [ trait name = #TNamedEntity ] ]) ifTrue: [ + self addMethod: (self methodFactory instantiateNamed: class) protocol: #'entity creation' ] ] +] + +{ #category : 'visiting' } +FmxMBChangesBuilderVisitor >> visitImportingContext: aClass [ + + super visitImportingContext: aClass. + + self addMethod: (self methodFactory importedMetamodelForPrefix: aClass prefix) classSide: true protocol: #accessing. + + builder concreteClasses do: [ :each | + self + addMethod: (each allTransitiveTraits + detect: [ :trait | trait name = #TAssociation ] + ifFound: [ self methodFactory importAssociationNamed: each name ] + ifNone: [ self methodFactory importEntityNamed: each name ]) + protocol: #importing. + + self addMethod: (self methodFactory shouldImportNamed: each name) protocol: #testing ] +] + +{ #category : 'visiting' } +FmxMBChangesBuilderVisitor >> visitModel: aClass [ + + super visitClassGroup: aClass. + + self + generateFileImportMethods; + generateAnnotation. + + builder allSubBuilders ifNotEmpty: [ :subBuilders | + self addMethod: (self methodFactory allSubmetamodelsPackagesNamesFor: subBuilders) classSide: true protocol: #accessing ] +] + +{ #category : 'visiting' } +FmxMBChangesBuilderVisitor >> visitRelation: aRelation [ + + | generationStrategy protocol | + super visitRelation: aRelation. + + generationStrategy := (aRelation producesSlot + ifTrue: [ FmxMBRelationSlotsGenerationStrategy ] + ifFalse: [ FmxMBRelationAttributesGenerationStrategy ]) defaultInstance. + + protocol := aRelation isRemote + ifTrue: [ '*' , builder parentBuilderPackageName ] + ifFalse: [ #accessing ]. + + self addMethod: (generationStrategy generateSetterCodeFor: aRelation) protocol: protocol. + self addMethod: (generationStrategy generateGetterCodeFor: aRelation) protocol: protocol +] + { #category : 'visiting' } FmxMBChangesBuilderVisitor >> visitTrait: aTrait [ + currentBehavioral := aTrait. + self createTraitNamed: aTrait fullName traitDefinitions: aTrait allTraitDefinitions @@ -136,5 +363,25 @@ FmxMBChangesBuilderVisitor >> visitTrait: aTrait [ tag: aTrait tag comment: aTrait commentWithRelations. + self + generateAnnotation; + generateTrueTestingMethods; + generateAddToCollection. + super visitTrait: aTrait ] + +{ #category : 'visiting' } +FmxMBChangesBuilderVisitor >> visitTypedProperty: aTypedProperty [ + + | protocol | + super visitTypedProperty: aTypedProperty. + + protocol := aTypedProperty isRemote + ifTrue: [ '*' , builder parentBuilderPackageName ] + ifFalse: [ #accessing ]. + + self addMethod: (self methodFactory getTypedProperty: aTypedProperty) protocol: protocol. + + self addMethod: (self methodFactory setTypedProperty: aTypedProperty name remote: aTypedProperty isRemote) protocol: protocol +] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st index a68bcfad8..8570e802e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st @@ -10,6 +10,13 @@ Class { #tag : 'Implementation' } +{ #category : 'visitor' } +FmxMBClassEntity >> acceptVisitor: aVisitor [ + + + ^ aVisitor visitClassEntity: self +] + { #category : 'settings - default' } FmxMBClassEntity >> defaultSuperclassName [ "We have a special case with MooseObject that should inherit from Object." @@ -99,6 +106,12 @@ FmxMBClassEntity >> isRoot [ ^ self isMooseObject not ] +{ #category : 'accessing' } +FmxMBClassEntity >> propertiesForEqualityCheck [ + + ^ propertiesForEqualityCheck +] + { #category : 'generalization' } FmxMBClassEntity >> withEqualityCheckOn: aCollectionOfPropertySymbol [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st index af3ce49bf..9118f7ca9 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st @@ -9,6 +9,13 @@ Class { #tag : 'Implementation' } +{ #category : 'visitor' } +FmxMBClassGroup >> acceptVisitor: aVisitor [ + + + ^ aVisitor visitClassGroup: self +] + { #category : 'settings - default' } FmxMBClassGroup >> defaultSuperclassName [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st index 280b70974..7ac2eb484 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st @@ -10,6 +10,13 @@ Class { #tag : 'Implementation' } +{ #category : 'visitor' } +FmxMBEntityCreatorTrait >> acceptVisitor: aVisitor [ + + + ^ aVisitor visitEntityCreator: self +] + { #category : 'generating' } FmxMBEntityCreatorTrait >> generate [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st index c74529892..451b1a50b 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st @@ -93,6 +93,62 @@ FmxMBMethodsFactory class >> equalsForVariableNamed: variableName properties: pr 2 to: properties size do: [ :idx | stream << '] ' ] ] ] ] +{ #category : 'code generation' } +FmxMBMethodsFactory class >> getTypedProperty: aProperty [ + + | propertyDefinition commentDefinition pragmaFormat | + pragmaFormat := aProperty defaultValue + ifNil: [ '' ] + ifNotNil: [ '' ]. + propertyDefinition := pragmaFormat format: { + aProperty name. + aProperty propertyType. + aProperty defaultValue printString }. + + commentDefinition := aProperty comment ifNotEmpty: [ '' format: { aProperty comment printString } ]. + + ^ String streamContents: [ :s | + s + nextPutAll: aProperty name; + cr; + cr. + s + tab; + nextPutAll: propertyDefinition; + cr. + s + tab; + nextPutAll: ''; + cr. + aProperty isMultivalued ifTrue: [ + s + tab; + nextPutAll: ''; + cr ]. + commentDefinition ifNotEmpty: [ + s + tab; + nextPutAll: commentDefinition; + cr ]. + s + tab; + nextPutAll: '^ '. + + aProperty isRemote + ifTrue: [ + s + nextPutAll: 'self attributeAt: #'; + nextPutAll: aProperty name; + nextPutAll: ' ifAbsent: [ nil ]' ] + ifFalse: [ s nextPutAll: aProperty name ]. + + + aProperty defaultValue ifNotNil: [ + s nextPutAll: (' ifNil: [ {1} := {2} ]' format: { + aProperty name. + aProperty defaultValue printString }) ] ] +] + { #category : 'code generation' } FmxMBMethodsFactory class >> groupAnnotationNamed: aName [ @@ -199,6 +255,18 @@ FmxMBMethodsFactory class >> metamodelFor: className [ ^ {1} metamodel' format: { className } ] +{ #category : 'code generation' } +FmxMBMethodsFactory class >> setTypedProperty: aName remote: aBoolean [ + + ^ (String streamContents: [ :stream | + stream nextPutAll: '{1}: anObject + + '. + aBoolean + ifTrue: [ stream nextPutAll: 'self attributeAt: #{1} put: anObject' ] + ifFalse: [ stream nextPutAll: '{1} := anObject' ] ]) format: { aName } +] + { #category : 'code generation' } FmxMBMethodsFactory class >> shouldImportNamed: aName [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st index 09b14a429..8a9e1aba1 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st @@ -6,6 +6,12 @@ Class { #tag : 'Implementation' } +{ #category : 'visitor' } +FmxMBModel >> acceptVisitor: aVisitor [ + + ^ aVisitor visitModel: self +] + { #category : 'settings - default' } FmxMBModel >> defaultSuperclassName [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st index 65a24df50..8198da842 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st @@ -192,7 +192,7 @@ FmxMBPlantTextVisitor >> visitClass: aClass [ ] { #category : 'visiting' } -FmxMBPlantTextVisitor >> visitRelationSide: aRelationSide [ +FmxMBPlantTextVisitor >> visitRelation: aRelationSide [ relations add: aRelationSide ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitorPartial.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitorPartial.class.st index 2e49b4d3b..254538284 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitorPartial.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitorPartial.class.st @@ -43,10 +43,10 @@ FmxMBPlantTextVisitorPartial >> visitClass: aClass [ ] { #category : 'visiting' } -FmxMBPlantTextVisitorPartial >> visitRelationSide: aRelationSide [ +FmxMBPlantTextVisitorPartial >> visitRelation: aRelationSide [ (self isWantedRelation: aRelationSide) ifFalse: [ ^ self ]. - super visitRelationSide: aRelationSide + super visitRelation: aRelationSide ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBPrintVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBPrintVisitor.class.st index 28fdb0f40..ea40a6f10 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBPrintVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBPrintVisitor.class.st @@ -15,7 +15,7 @@ Class { #tag : 'Visitors' } -{ #category : 'as yet unclassified' } +{ #category : 'visiting' } FmxMBPrintVisitor >> prepareForPropertiesIn: aClassOrTrait [ aClassOrTrait propertiesAndRelations ifEmpty: [ ^ self ]. @@ -57,7 +57,7 @@ FmxMBPrintVisitor >> visitClass: aClass [ ] { #category : 'visiting' } -FmxMBPrintVisitor >> visitRelationSide: aRelationSide [ +FmxMBPrintVisitor >> visitRelation: aRelationSide [ self trace: aRelationSide name , ' (' , aRelationSide oppositeType , ')' diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st index a18798309..6b14888d7 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st @@ -11,6 +11,13 @@ FmxMBProperty class >> isAbstract [ ^ self = FmxMBProperty ] +{ #category : 'visiting' } +FmxMBProperty >> acceptVisitor: aVisitor [ + + + ^ aVisitor visitProperty: self +] + { #category : 'generating' } FmxMBProperty >> generateAccessorsIn: aFmxBehavioral [ self generateGetterIn: aFmxBehavioral. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st index 29dfcb741..217a2333e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st @@ -9,9 +9,9 @@ Class { #classInstVars : [ 'defaultInstance' ], - #category : 'Famix-MetamodelBuilder-Core-Generation', + #category : 'Famix-MetamodelBuilder-Core-Implementation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Generation' + #tag : 'Implementation' } { #category : 'accessing' } @@ -21,6 +21,59 @@ FmxMBRelationAccessorsGenerationStrategy class >> defaultInstance [ ^ defaultInstance ifNil: [ defaultInstance := self new ] ] +{ #category : 'generation' } +FmxMBRelationAccessorsGenerationStrategy >> generateGetterCodeFor: aRelationSide [ + + | commentDefinition | + commentDefinition := aRelationSide comment ifNotEmpty: [ :comment | '' format: { comment printString } ]. + + ^ String streamContents: [ :s | + s + nextPutAll: aRelationSide name; + cr; + tab; + nextPutAll: '"Relation named: #'; + nextPutAll: aRelationSide name; + nextPutAll: ' type: #'; + nextPutAll: aRelationSide oppositeType; + nextPutAll: ' opposite: #'; + nextPutAll: aRelationSide oppositeName; + nextPutAll: '"'; + cr; + cr. + s + tab; + nextPutAll: ''; + cr. + commentDefinition ifNotEmpty: [ + s + tab; + nextPutAll: commentDefinition; + cr ]. + aRelationSide isContainer ifTrue: [ + s + tab; + nextPutAll: ''; + cr ]. + aRelationSide isDerived ifTrue: [ + s + tab; + nextPutAll: ''; + cr ]. + aRelationSide isSource ifTrue: [ + s + tab; + nextPutAll: ''; + cr ]. + aRelationSide isTarget ifTrue: [ + s + tab; + nextPutAll: ''; + cr ]. + + self generateGetterCoreOn: s for: aRelationSide ] +] + { #category : 'generation' } FmxMBRelationAccessorsGenerationStrategy >> generateGetterCoreOn: aStream for: aRelationSide [ @@ -82,6 +135,22 @@ FmxMBRelationAccessorsGenerationStrategy >> generateGetterIn: aFmxBehavioral for aFmxBehavioral addMethod: methodSource protocol: (self protocolFor: aRelationSide) ] +{ #category : 'generation' } +FmxMBRelationAccessorsGenerationStrategy >> generateSetterCodeFor: aRelationSide [ + + ^ String streamContents: [ :s | + s + nextPutAll: aRelationSide name; + nextPutAll: ': anObject'; + cr; + cr. + s + tab; + nextPutAll: ''; + cr. + self generateSetterCoreOn: s for: aRelationSide ] +] + { #category : 'generation' } FmxMBRelationAccessorsGenerationStrategy >> generateSetterCoreOn: aStream for: aRelationSide [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st index 90cc8eb70..1e7930aca 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st @@ -6,9 +6,9 @@ This is used when one of the side of the relation is remote. Class { #name : 'FmxMBRelationAttributesGenerationStrategy', #superclass : 'FmxMBRelationAccessorsGenerationStrategy', - #category : 'Famix-MetamodelBuilder-Core-Generation', + #category : 'Famix-MetamodelBuilder-Core-Implementation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Generation' + #tag : 'Implementation' } { #category : 'generation' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st index 04ae32fa4..ff3ff2256 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st @@ -25,7 +25,7 @@ Class { FmxMBRelationSide >> acceptVisitor: aVisitor [ - ^ aVisitor visitRelationSide: self. + ^ aVisitor visitRelation: self. ] { #category : 'converting' } @@ -69,15 +69,17 @@ FmxMBRelationSide >> derived: anObject [ { #category : 'generating' } FmxMBRelationSide >> generateGetterIn: aFmxBehavioral [ - ^ self generationStrategy generateGetterIn: aFmxBehavioral for: self + aFmxBehavioral addMethod: (self generationStrategy generateGetterCodeFor: self) protocol: (self isRemote + ifTrue: [ '*' , self builder parentBuilderPackageName ] + ifFalse: [ #accessing ]) ] { #category : 'generating' } FmxMBRelationSide >> generateSetterIn: aFmxBehavioral [ - self generationStrategy generateSetterIn: aFmxBehavioral for: self - - + aFmxBehavioral addMethod: (self generationStrategy generateSetterCodeFor: self) protocol: (self isRemote + ifTrue: [ '*' , self builder parentBuilderPackageName ] + ifFalse: [ #accessing ]) ] { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st index 40df35de9..a7efa8f95 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st @@ -6,9 +6,9 @@ This is useful when both sides of the relation are non remote. Class { #name : 'FmxMBRelationSlotsGenerationStrategy', #superclass : 'FmxMBRelationAccessorsGenerationStrategy', - #category : 'Famix-MetamodelBuilder-Core-Generation', + #category : 'Famix-MetamodelBuilder-Core-Implementation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Generation' + #tag : 'Implementation' } { #category : 'generation' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index 95ace0c21..efb381562 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -183,6 +183,12 @@ FmxMBRingEnvironment >> initialize [ changesToApply := OrderedCollection new ] +{ #category : 'testing' } +FmxMBRingEnvironment >> rawChangesToApply [ + + ^ changesToApply +] + { #category : 'installing' } FmxMBRingEnvironment >> recordMethodRemovalsOf: realClass [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st index 5a14aa5ab..bad8a2403 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st @@ -33,59 +33,7 @@ FmxMBTypedProperty >> defaultValue: aValue [ { #category : 'generating' } FmxMBTypedProperty >> generateGetterIn: aFmxBehavioral [ - | methodSource propertyDefinition commentDefinition pragmaFormat | - pragmaFormat := self defaultValue - ifNil: [ '' ] - ifNotNil: [ '' ]. - propertyDefinition := pragmaFormat format: { - self name. - self propertyType. - self defaultValue printString }. - - commentDefinition := self comment ifNotEmpty: [ '' format: { self comment printString } ]. - - methodSource := String streamContents: [ :s | - s - nextPutAll: self name; - cr; - cr. - s - tab; - nextPutAll: propertyDefinition; - cr. - s - tab; - nextPutAll: ''; - cr. - self isMultivalued ifTrue: [ - s - tab; - nextPutAll: ''; - cr ]. - commentDefinition ifNotEmpty: [ - s - tab; - nextPutAll: commentDefinition; - cr ]. - s - tab; - nextPutAll: '^ '. - - self isRemote - ifTrue: [ - s - nextPutAll: 'self attributeAt: #'; - nextPutAll: self name; - nextPutAll: ' ifAbsent: [ nil ]' ] - ifFalse: [ s nextPutAll: self name ]. - - - self defaultValue ifNotNil: [ - s nextPutAll: (' ifNil: [ {1} := {2} ]' format: { - self name. - self defaultValue printString }) ] ]. - - aFmxBehavioral addMethod: methodSource protocol: (self isRemote + aFmxBehavioral addMethod: (FmxMBMethodsFactory getTypedProperty: self) protocol: (self isRemote ifTrue: [ '*' , self builder parentBuilderPackageName ] ifFalse: [ #accessing ]) ] @@ -93,16 +41,7 @@ FmxMBTypedProperty >> generateGetterIn: aFmxBehavioral [ { #category : 'generating' } FmxMBTypedProperty >> generateSetterIn: aFmxBehavioral [ - | methodToFormat | - methodToFormat := String streamContents: [ :stream | - stream nextPutAll: '{1}: anObject - - '. - self isRemote - ifTrue: [ stream nextPutAll: 'self attributeAt: #{1} put: anObject' ] - ifFalse: [ stream nextPutAll: '{1} := anObject' ] ]. - - aFmxBehavioral addMethod: (methodToFormat format: { self name }) protocol: (self isRemote + aFmxBehavioral addMethod: (FmxMBMethodsFactory setTypedProperty: self name remote: self isRemote) protocol: (self isRemote ifTrue: [ '*' , self builder parentBuilderPackageName ] ifFalse: [ 'accessing' ]) ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBVisitor.class.st index 1ab172cc0..e0b75fe53 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBVisitor.class.st @@ -39,6 +39,12 @@ FmxMBVisitor class >> visit: aFmxEntity [ ^ visitor ] +{ #category : 'visiting' } +FmxMBVisitor >> visitBehavioral: aBehavioral [ + + +] + { #category : 'visiting' } FmxMBVisitor >> visitBuilder: aBuilder [ @@ -47,16 +53,60 @@ FmxMBVisitor >> visitBuilder: aBuilder [ { #category : 'visiting' } FmxMBVisitor >> visitClass: aClass [ + + self visitBehavioral: aClass +] + +{ #category : 'visiting' } +FmxMBVisitor >> visitClassEntity: aClass [ + + ^ self visitClass: aClass +] + +{ #category : 'visiting' } +FmxMBVisitor >> visitClassGroup: aClass [ + + ^ self visitClass: aClass +] + +{ #category : 'visiting' } +FmxMBVisitor >> visitEntityCreator: aTrait [ + + self visitTrait: aTrait ] { #category : 'visiting' } -FmxMBVisitor >> visitRelationSide: aRelationSide [ +FmxMBVisitor >> visitImportingContext: aClass [ + + ^ self visitClass: aClass +] + +{ #category : 'visiting' } +FmxMBVisitor >> visitModel: aClass [ + + ^ self visitClass: aClass +] + +{ #category : 'visiting' } +FmxMBVisitor >> visitProperty: aRelationSide [ + + +] + +{ #category : 'visiting' } +FmxMBVisitor >> visitRelation: aRelation [ + + self visitProperty: aRelation ] { #category : 'visiting' } FmxMBVisitor >> visitTrait: aTrait [ + + self visitBehavioral: aTrait ] { #category : 'visiting' } FmxMBVisitor >> visitTypedProperty: aTypedProperty [ + + self visitProperty: aTypedProperty ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBWalkerVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBWalkerVisitor.class.st index 4b74d2772..daabf3af4 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBWalkerVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBWalkerVisitor.class.st @@ -33,25 +33,17 @@ FmxMBWalkerVisitor >> separateProperties [ ] { #category : 'visiting' } -FmxMBWalkerVisitor >> visitBuilder: aBuilder [ - "Visit every Traits, and classes after that." - - aBuilder sortedTraits do: [ :each | each acceptVisitor: self ]. - aBuilder sortedClasses do: [ :each | each acceptVisitor: self ] -] - -{ #category : 'visiting' } -FmxMBWalkerVisitor >> visitClass: aClass [ +FmxMBWalkerVisitor >> visitBehavioral: aBehavioral [ "Visit all properties of aClass" - self prepareForPropertiesIn: aClass. - aClass propertiesAndRelations do: [ :each | each acceptVisitor: self ] separatedBy: [ self separateProperties ] + self prepareForPropertiesIn: aBehavioral. + aBehavioral propertiesAndRelations do: [ :each | each acceptVisitor: self ] separatedBy: [ self separateProperties ] ] { #category : 'visiting' } -FmxMBWalkerVisitor >> visitTrait: aTrait [ - "visit all properties of aTrait" +FmxMBWalkerVisitor >> visitBuilder: aBuilder [ + "Visit every Traits, and classes after that." - self prepareForPropertiesIn: aTrait. - aTrait propertiesAndRelations do: [ :each | each acceptVisitor: self ] separatedBy: [ self separateProperties ] + aBuilder sortedTraits do: [ :each | each acceptVisitor: self ]. + aBuilder sortedClasses do: [ :each | each acceptVisitor: self ] ] diff --git a/src/Famix-Visitor-Generation/FmxMBMethodsFactory.extension.st b/src/Famix-Visitor-Generation/FmxMBMethodsFactory.extension.st new file mode 100644 index 000000000..0568f7870 --- /dev/null +++ b/src/Famix-Visitor-Generation/FmxMBMethodsFactory.extension.st @@ -0,0 +1,66 @@ +Extension { #name : 'FmxMBMethodsFactory' } + +{ #category : '*Famix-Visitor-Generation' } +FmxMBMethodsFactory class >> acceptFor: aName [ + + ^ 'accept: aVisitor + + + ^ aVisitor visit{1}: self' format: { aName } +] + +{ #category : '*Famix-Visitor-Generation' } +FmxMBMethodsFactory class >> visitBehavioral: aBehavioral [ + + ^ String streamContents: [ :aStream | + aStream << ('visit{1}: a{1} + + +' format: { aBehavioral fullName }). + + aBehavioral behaviorsToVisit + do: [ :behavior | + aStream << (' self visit{1}: a{2}' format: { + behavior fullName. + aBehavioral fullName }) ] + separatedBy: [ + aStream + << '.'; + cr ]; + ifNotEmpty: [ + aBehavioral relations ifNotEmpty: [ + aStream + << $.; + cr; + cr ] ]. + aBehavioral relations + do: [ :relation | + aStream << (' self visit{1}: a{2} {3}' format: { + (relation isOne + ifTrue: [ 'Entity' ] + ifFalse: [ 'Collection' ]). + aBehavioral fullName. + relation name }) ] + separatedBy: [ + aStream + << $.; + cr ] ] +] + +{ #category : '*Famix-Visitor-Generation' } +FmxMBMethodsFactory class >> visitCollection [ + + ^ 'visitCollection: aCollection + + + ^ aCollection collect: [ :each | each accept: self ]' +] + +{ #category : '*Famix-Visitor-Generation' } +FmxMBMethodsFactory class >> visitEntity [ + + ^ 'visitEntity: aFamixEntity + + + ^ aFamixEntity ifNotNil: [ aFamixEntity accept: self ]' +] diff --git a/src/Famix-Visitor-Generation/FmxMBVisitor.extension.st b/src/Famix-Visitor-Generation/FmxMBVisitor.extension.st new file mode 100644 index 000000000..e387c0d84 --- /dev/null +++ b/src/Famix-Visitor-Generation/FmxMBVisitor.extension.st @@ -0,0 +1,7 @@ +Extension { #name : 'FmxMBVisitor' } + +{ #category : '*Famix-Visitor-Generation' } +FmxMBVisitor >> visitVisitor: aTrait [ + + self visitTrait: aTrait +] diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index d44eac834..c7ffeb8f4 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -18,6 +18,13 @@ FmxMBVisitorTrait >> acceptMethodProtocol [ ifFalse: [ '*' , self packageName ] ] +{ #category : 'visitor' } +FmxMBVisitorTrait >> acceptVisitor: aVisitor [ + + + ^ aVisitor visitVisitor: self +] + { #category : 'accessing' } FmxMBVisitorTrait >> comment [ @@ -38,65 +45,15 @@ FmxMBVisitorTrait >> generate [ comment: self comment. self generateAnnotation. - self generateCommonMethodsIfNecessary. - self generateVisitAndAcceptMethods -] - -{ #category : 'generating' } -FmxMBVisitorTrait >> generateAcceptMethodIn: aFmxMBBehavior [ - aFmxMBBehavior - addMethod: ('accept: aVisitor - - - ^ aVisitor visit{1}: self' format: { aFmxMBBehavior fullName }) - protocol: self acceptMethodProtocol -] - -{ #category : 'generation - common' } -FmxMBVisitorTrait >> generateCommonMethodsIfNecessary [ - - self allLocalTraits ifNotEmpty: [ ^ self ]. - - self generateVisitEntityMethod. - self generateVisitCollectionMethod -] - -{ #category : 'generating' } -FmxMBVisitorTrait >> generateVisitAndAcceptMethods [ + self allLocalTraits ifEmpty: [ + self addMethod: FmxMBMethodsFactory visitEntity protocol: #visiting. + self addMethod: FmxMBMethodsFactory visitCollection protocol: #visiting ]. (builder classes select: #isClassEntity) , (builder traits select: [ :fmxTrait | fmxTrait isMetamodelTrait and: [ fmxTrait isVisitorTrait not ] ]) do: [ :fmxMBBehavior | - self generateVisitMethodFor: fmxMBBehavior. - self generateAcceptMethodIn: fmxMBBehavior ] -] - -{ #category : 'generation - common' } -FmxMBVisitorTrait >> generateVisitCollectionMethod [ - - self - addMethod: 'visitCollection: aCollection - - - ^ aCollection collect: [ :each | each accept: self ]' - protocol: #visiting -] - -{ #category : 'generation - common' } -FmxMBVisitorTrait >> generateVisitEntityMethod [ - - self - addMethod: 'visitEntity: aFamixEntity - - - ^ aFamixEntity ifNotNil: [ aFamixEntity accept: self ]' - protocol: #visiting -] - -{ #category : 'generation - visit' } -FmxMBVisitorTrait >> generateVisitMethodFor: aFmxMBBehavior [ - - self addMethod: (String streamContents: [ :s | self writeVisitMethodFor: aFmxMBBehavior on: s ]) protocol: #visiting + self addMethod: (FmxMBMethodsFactory visitBehavioral: fmxMBBehavior) protocol: #visiting. + fmxMBBehavior addMethod: (FmxMBMethodsFactory acceptFor: fmxMBBehavior fullName) protocol: self acceptMethodProtocol ] ] { #category : 'initialization' } @@ -112,62 +69,3 @@ FmxMBVisitorTrait >> isVisitorTrait [ ^ true ] - -{ #category : 'generation - visit' } -FmxMBVisitorTrait >> writeTransitionFor: aFmxMBBehavior on: aStream [ - - aFmxMBBehavior relations ifNotEmpty: [ - aStream - << $.; - cr; - cr ] -] - -{ #category : 'generation - visit' } -FmxMBVisitorTrait >> writeVisitMethodFor: aFmxMBBehavior on: aStream [ - - self writeVisitMethodHeaderFor: aFmxMBBehavior on: aStream. - self writeVisitTraitsAndSuperclassFor: aFmxMBBehavior on: aStream. - self writeVisitRelationsFor: aFmxMBBehavior on: aStream -] - -{ #category : 'generation - visit' } -FmxMBVisitorTrait >> writeVisitMethodHeaderFor: aFmxMBBehavior on: aStream [ - - aStream <<('visit{1}: a{1} - - -' format: { aFmxMBBehavior fullName }) -] - -{ #category : 'generation - visit' } -FmxMBVisitorTrait >> writeVisitRelationsFor: aFmxMBBehavior on: aStream [ - - aFmxMBBehavior relations - do: [ :relation | - aStream << (' self visit{1}: a{2} {3}' format: { - (relation isOne - ifTrue: [ 'Entity' ] - ifFalse: [ 'Collection' ]). - aFmxMBBehavior fullName. - relation name }) ] - separatedBy: [ - aStream - << $.; - cr ] -] - -{ #category : 'generation - visit' } -FmxMBVisitorTrait >> writeVisitTraitsAndSuperclassFor: aFmxMBBehavior on: aStream [ - - aFmxMBBehavior behaviorsToVisit - do: [ :behavior | - aStream << (' self visit{1}: a{2}' format: { - behavior fullName. - aFmxMBBehavior fullName }) ] - separatedBy: [ - aStream - << '.'; - cr ]; - ifNotEmpty: [ self writeTransitionFor: aFmxMBBehavior on: aStream ] -] From 4d0cb7909f808eed5093b8f50f42e62d45dc8ec9 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Sat, 9 May 2026 23:47:44 +0200 Subject: [PATCH 103/121] Introduce FmxMBTraitEntity --- .../FamixJavaTVisitor.trait.st | 2 ++ .../FamixMetamodelBuilder.class.st | 2 +- .../FmxMBTrait.class.st | 13 ++++++++----- .../FmxMBTraitEntity.class.st | 17 +++++++++++++++++ src/Famix-Traits/FamixTVisitor.trait.st | 2 ++ .../FmxMBVisitorTrait.class.st | 12 ++---------- 6 files changed, 32 insertions(+), 16 deletions(-) create mode 100644 src/Famix-MetamodelBuilder-Core/FmxMBTraitEntity.class.st diff --git a/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st b/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st index ba61d0b54..dcb920e4a 100644 --- a/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st @@ -1,6 +1,8 @@ " I am a visitor for FamixJavaEntities. I am generated with the metamodel. + + " Trait { #name : 'FamixJavaTVisitor', diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index 512450388..2cf518f18 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -423,7 +423,7 @@ FamixMetamodelBuilder >> newClassNamed: aClassName comment: aString [ FamixMetamodelBuilder >> newTrait [ | aTrait | - aTrait := FmxMBTrait new. + aTrait := FmxMBTraitEntity new. aTrait builder: self. aTrait prefix: self configuration prefix. aTrait packageName: self configuration packageName. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index 71b031fc5..d3e232624 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -6,6 +6,12 @@ Class { #tag : 'Implementation' } +{ #category : 'testing' } +FmxMBTrait class >> isAbstract [ + + ^ self = FmxMBTrait +] + { #category : 'visitor' } FmxMBTrait >> acceptVisitor: aVisitor [ @@ -38,11 +44,8 @@ FmxMBTrait >> generate [ tag: self tag comment: self commentWithRelations. - self - generateAccessors; - generateAnnotation; - generateTestingMethods; - generateAddToCollection + self generateAnnotation. + self generateAccessors ] { #category : 'generating' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTraitEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTraitEntity.class.st new file mode 100644 index 000000000..54540aeab --- /dev/null +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTraitEntity.class.st @@ -0,0 +1,17 @@ +Class { + #name : 'FmxMBTraitEntity', + #superclass : 'FmxMBTrait', + #category : 'Famix-MetamodelBuilder-Core-Implementation', + #package : 'Famix-MetamodelBuilder-Core', + #tag : 'Implementation' +} + +{ #category : 'generating' } +FmxMBTraitEntity >> generate [ + + super generate. + + self + generateAddToCollection; + generateTestingMethods +] diff --git a/src/Famix-Traits/FamixTVisitor.trait.st b/src/Famix-Traits/FamixTVisitor.trait.st index e3414b489..48bfb5f65 100644 --- a/src/Famix-Traits/FamixTVisitor.trait.st +++ b/src/Famix-Traits/FamixTVisitor.trait.st @@ -1,6 +1,8 @@ " I am a visitor for FamixEntities. I am generated with the metamodel. + + " Trait { #name : 'FamixTVisitor', diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index d44eac834..5cac6207d 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -28,16 +28,8 @@ I am generated with the metamodel.' format: { self prefix } { #category : 'generating' } FmxMBVisitorTrait >> generate [ - self builder environment - createTraitNamed: self fullName asSymbol - traitDefinitions: self allTraitDefinitions - precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) - properties: (self propertiesAndRelations select: #producesSlot) - in: self packageName - tag: self tag - comment: self comment. - - self generateAnnotation. + super generate. + self generateCommonMethodsIfNecessary. self generateVisitAndAcceptMethods ] From 2595c70cc71d56409cd79930c5597abe9e41b926 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Sun, 10 May 2026 01:27:38 +0200 Subject: [PATCH 104/121] Use new visitor except for remote builders for now --- .../FamixMetamodelBuilder.class.st | 7 +- .../FmxMBChangesBuilderVisitor.class.st | 145 +++++++++++++++++- .../FmxMBRingEnvironment.class.st | 6 + .../FmxMBTraitEntity.class.st | 7 + .../FmxMBVisitor.class.st | 6 + .../FmxMBChangesBuilderVisitor.extension.st | 22 +++ 6 files changed, 182 insertions(+), 11 deletions(-) create mode 100644 src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index 5ae192c52..1b247ce4b 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -232,9 +232,8 @@ FamixMetamodelBuilder >> generate [ | changesBuilder | self prepareGeneration. changesBuilder := FmxMBChangesBuilderVisitor visit: self. - changesBuilder changesToApply size = self environment rawChangesToApply size ifFalse: [ self halt ]. - - self apply + changesBuilder filterRedoundantChanges. + changesBuilder applyChanges ] { #category : 'generating' } @@ -256,6 +255,8 @@ FamixMetamodelBuilder >> generateImportingContext [ { #category : 'generating' } FamixMetamodelBuilder >> generateRemotes [ + self environment reset. + self traits do: [ :each | each generateRemotes ]. self classes do: [ :each | each generateRemotes ]. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st index 40443b535..8589e7b41 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st @@ -14,17 +14,51 @@ Class { { #category : 'adding' } FmxMBChangesBuilderVisitor >> addMethod: sourceCode classSide: aBoolean protocol: protocol [ + self + addMethod: sourceCode + in: currentBehavioral fullName + classSide: aBoolean + protocol: protocol +] + +{ #category : 'adding' } +FmxMBChangesBuilderVisitor >> addMethod: sourceCode in: aClassName classSide: aBoolean protocol: protocol [ + changesToApply add: (FmxMethodAddition - className: currentBehavioral name + className: aClassName isClassSide: aBoolean sourceCode: sourceCode protocol: protocol) ] +{ #category : 'adding' } +FmxMBChangesBuilderVisitor >> addMethod: sourceCode in: aClassName protocol: protocol [ + + self + addMethod: sourceCode + in: aClassName + classSide: false + protocol: protocol +] + { #category : 'adding' } FmxMBChangesBuilderVisitor >> addMethod: sourceCode protocol: protocol [ - self addMethod: sourceCode classSide: false protocol: protocol + self addMethod: sourceCode in: currentBehavioral fullName protocol: protocol +] + +{ #category : 'accessing' } +FmxMBChangesBuilderVisitor >> applyChanges [ + + | dependencies | + changesToApply ifEmpty: [ ^ self ]. + + "Now we have a list of changes to apply. Some changes needs to by applied before others (for example, we need to create a classe to compile its methods or compile superclasses before their subclasses or traits before their users)." + dependencies := changesToApply inject: Dictionary new into: [ :dictionary :change | + dictionary + at: change put: (change followingChangesIn: (changesToApply copyWithout: change)); + yourself ]. + (AITopologicalSorting sort: changesToApply followingIncomingProperty: [ :change | dependencies at: change ]) do: #apply ] { #category : 'initialization' } @@ -131,6 +165,12 @@ FmxMBChangesBuilderVisitor >> ensurePackageNamed: packageName [ changesToApply add: (FmxPackageAddition named: packageName) ] +{ #category : 'accessing' } +FmxMBChangesBuilderVisitor >> filterRedoundantChanges [ + + changesToApply := changesToApply select: #isRequired +] + { #category : 'as yet unclassified' } FmxMBChangesBuilderVisitor >> generateAddToCollection [ @@ -183,6 +223,29 @@ FmxMBChangesBuilderVisitor >> generateMetamodelMethod [ builder model ifNotNil: [ :model | self addMethod: (self methodFactory metamodelFor: model fullName) classSide: true protocol: #meta ] ] +{ #category : 'visiting' } +FmxMBChangesBuilderVisitor >> generateTestingMethodsOfRemoteEntities [ + + | entitiesWithRemoteSuperclasses | + entitiesWithRemoteSuperclasses := builder classes groupedBy: [ :class | class remoteSuperclass ]. + + + entitiesWithRemoteSuperclasses keysAndValuesDo: [ :remoteClass :subclasses | + remoteClass ifNotNil: [ + | subclassesAndTraits | + subclassesAndTraits := subclasses flatCollectAsSet: [ :subclass | subclass allTransitiveTraits , { subclass } ]. + + builder testingSelectorsMapping keysAndValuesDo: [ :behavior :selectors | + ((builder shouldGeneratorTestingMethodsOf: behavior in: remoteClass) and: [ subclassesAndTraits includes: behavior ]) ifTrue: [ + selectors do: [ :selector | + self class environment + at: remoteClass fullName + ifPresent: [ :class | + (class includesSelector: selector) ifFalse: [ + self addMethod: (self methodFactory testReturning: true for: selector) in: remoteClass name protocol: '*' , builder configuration packageName ] ] + ifAbsent: [ self error: 'The class ' , remoteClass fullName , ' was not found in the system to generate a remote testing method.' ] ] ] ] ] ] +] + { #category : 'as yet unclassified' } FmxMBChangesBuilderVisitor >> generateTrueTestingMethods [ @@ -202,6 +265,57 @@ FmxMBChangesBuilderVisitor >> methodFactory [ ^ FmxMBMethodsFactory ] +{ #category : 'installing' } +FmxMBChangesBuilderVisitor >> recordMethodRemovalsOf: realClass [ + + | generatedMethodsOfRealClass generatedMethodNamesOfRealClass selectorsToGenerate | + generatedMethodsOfRealClass := (Pragma allNamed: #generated in: realClass) + collect: #method + thenReject: [ :m | m isFromTrait ]. + + "In case we have an extension, we remove it if the package is the right one" + self flag: #todo. "Demeter. Clean package name management." + generatedMethodsOfRealClass := generatedMethodsOfRealClass reject: [ :method | (method hasPragmaNamed: #package:) and: [ ((method pragmaAt: #package:) argumentAt: 1) ~= builder generator packageName ] ]. + + generatedMethodNamesOfRealClass := generatedMethodsOfRealClass collect: #selector. + + selectorsToGenerate := ((self changesOfType: FmxMethodAddition) select: [ :change | change className = realClass instanceSide name and: [ change isClassSide = realClass isClassSide ] ]) collect: #selector. + + "First we removed the generated methods should not be here anymore" + (generatedMethodNamesOfRealClass difference: selectorsToGenerate) ifNotEmpty: [ :selectorsOfRemovedGeneratedMethod | + changesToApply add: (FmxMethodRemovals className: realClass instanceSide name isClassSide: realClass isClassSide selectors: selectorsOfRemovedGeneratedMethod) ] +] + +{ #category : 'accessing' } +FmxMBChangesBuilderVisitor >> recordRemovalOfGeneratedPackagesAndClasses [ + "Since the last generation it is possible some behaviorals were removed from the generator. In that case we should remove them. We will remove all classes and traits of Famix that are not part of the current generator." + + | classesToGenerate | + classesToGenerate := (self changesOfType: FmxBehavioralAddition) collectAsSet: #name. + + (self changesOfType: FmxPackageAddition) + collect: #systemPackage + thenDo: [ :package | + package ifNotNil: [ + package definedClasses + select: #canBeGenerated + thenDo: [ :class | (classesToGenerate includes: class name) ifFalse: [ changesToApply add: (FmxClassRemoval class: class) ] ] ] ] +] + +{ #category : 'visiting' } +FmxMBChangesBuilderVisitor >> registerRemovals [ + + | classesToGenerate | + classesToGenerate := (self changesOfType: FmxBehavioralAddition) collectAsSet: #name. + + classesToGenerate do: [ :className | + self class environment at: className asSymbol ifPresent: [ :realClass | + self recordMethodRemovalsOf: realClass. + self recordMethodRemovalsOf: realClass class ] ]. + + self recordRemovalOfGeneratedPackagesAndClasses +] + { #category : 'installing' } FmxMBChangesBuilderVisitor >> traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass [ "We need to collect the generated traits + the custom traits added by the user." @@ -240,7 +354,11 @@ FmxMBChangesBuilderVisitor >> visitBuilder: aBuilder [ builder := aBuilder. self ensurePackageNamed: aBuilder configuration packageName. - super visitBuilder: aBuilder + super visitBuilder: aBuilder. + + self generateTestingMethodsOfRemoteEntities. + + self registerRemovals ] { #category : 'visiting' } @@ -285,7 +403,11 @@ FmxMBChangesBuilderVisitor >> visitClassEntity: aClass [ FmxMBChangesBuilderVisitor >> visitClassGroup: aClass [ super visitClassGroup: aClass. - aClass innerClass addMethod: (self methodFactory groupAnnotationNamed: aClass fullName) classSide: true protocol: #groups + self + addMethod: (self methodFactory groupAnnotationNamed: aClass fullName) + in: aClass innerClass fullName + classSide: true + protocol: #groups ] { #category : 'visiting' } @@ -363,14 +485,21 @@ FmxMBChangesBuilderVisitor >> visitTrait: aTrait [ tag: aTrait tag comment: aTrait commentWithRelations. - self - generateAnnotation; - generateTrueTestingMethods; - generateAddToCollection. + self generateAnnotation. super visitTrait: aTrait ] +{ #category : 'visiting' } +FmxMBChangesBuilderVisitor >> visitTraitEntity: aTrait [ + + super visitTraitEntity: aTrait. + + self + generateTrueTestingMethods; + generateAddToCollection +] + { #category : 'visiting' } FmxMBChangesBuilderVisitor >> visitTypedProperty: aTypedProperty [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st index efb381562..239bad406 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st @@ -226,6 +226,12 @@ FmxMBRingEnvironment >> recordRemovalOfGeneratedPackagesAndClasses [ thenDo: [ :class | (classesToGenerate includes: class name) ifFalse: [ changesToApply add: (FmxClassRemoval class: class) ] ] ] ] ] +{ #category : 'initialization' } +FmxMBRingEnvironment >> reset [ + + changesToApply := OrderedCollection new +] + { #category : 'installing' } FmxMBRingEnvironment >> traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass [ "We need to collect the generated traits + the custom traits added by the user." diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTraitEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTraitEntity.class.st index 54540aeab..e2c5370fa 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTraitEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTraitEntity.class.st @@ -6,6 +6,13 @@ Class { #tag : 'Implementation' } +{ #category : 'visitor' } +FmxMBTraitEntity >> acceptVisitor: aVisitor [ + + + ^ aVisitor visitTraitEntity: self +] + { #category : 'generating' } FmxMBTraitEntity >> generate [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBVisitor.class.st index e0b75fe53..239b035ba 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBVisitor.class.st @@ -105,6 +105,12 @@ FmxMBVisitor >> visitTrait: aTrait [ self visitBehavioral: aTrait ] +{ #category : 'visiting' } +FmxMBVisitor >> visitTraitEntity: aTrait [ + + self visitTrait: aTrait +] + { #category : 'visiting' } FmxMBVisitor >> visitTypedProperty: aTypedProperty [ diff --git a/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st b/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st new file mode 100644 index 000000000..c2d423289 --- /dev/null +++ b/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st @@ -0,0 +1,22 @@ +Extension { #name : 'FmxMBChangesBuilderVisitor' } + +{ #category : '*Famix-Visitor-Generation' } +FmxMBChangesBuilderVisitor >> visitVisitor: aTrait [ + + super visitVisitor: aTrait. + + aTrait allLocalTraits ifEmpty: [ + self addMethod: self methodFactory visitEntity protocol: #visiting. + self addMethod: self methodFactory visitCollection protocol: #visiting ]. + + (builder classes select: #isClassEntity) , (builder traits select: [ :fmxTrait | fmxTrait isMetamodelTrait and: [ fmxTrait isVisitorTrait not ] ]) do: [ + :fmxMBBehavior | + | protocol | + self addMethod: (self methodFactory visitBehavioral: fmxMBBehavior) protocol: #visiting. + + protocol := aTrait packageName == builder configuration packageName + ifTrue: [ #visitor ] + ifFalse: [ '*' , aTrait packageName ]. + + self addMethod: (self methodFactory acceptFor: fmxMBBehavior fullName) in: fmxMBBehavior fullName protocol: protocol ] +] From a7c9a22190026bbc778cec87f47bda5b230726e6 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Sun, 10 May 2026 01:48:28 +0200 Subject: [PATCH 105/121] Use the new visitors to generate all the code Next step: remove the previous generator --- .../FamixMetamodelBuilder.class.st | 8 +- ...mxMBAbstractChangesBuilderVisitor.class.st | 265 ++++++++++++++++++ .../FmxMBChangesBuilderVisitor.class.st | 252 +---------------- .../FmxMBRemoteChangesBuilderVisitor.class.st | 28 ++ 4 files changed, 302 insertions(+), 251 deletions(-) create mode 100644 src/Famix-MetamodelBuilder-Core/FmxMBAbstractChangesBuilderVisitor.class.st create mode 100644 src/Famix-MetamodelBuilder-Core/FmxMBRemoteChangesBuilderVisitor.class.st diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index 1b247ce4b..d980dde22 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -233,7 +233,7 @@ FamixMetamodelBuilder >> generate [ self prepareGeneration. changesBuilder := FmxMBChangesBuilderVisitor visit: self. changesBuilder filterRedoundantChanges. - changesBuilder applyChanges + changesBuilder applyChanges. ] { #category : 'generating' } @@ -257,10 +257,12 @@ FamixMetamodelBuilder >> generateRemotes [ self environment reset. + self traits do: [ :each | each generateRemotes ]. self classes do: [ :each | each generateRemotes ]. - - self apply + (FmxMBRemoteChangesBuilderVisitor visit: self) + filterRedoundantChanges; + applyChanges "self apply" ] { #category : 'generating' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBAbstractChangesBuilderVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBAbstractChangesBuilderVisitor.class.st new file mode 100644 index 000000000..d71bb11f7 --- /dev/null +++ b/src/Famix-MetamodelBuilder-Core/FmxMBAbstractChangesBuilderVisitor.class.st @@ -0,0 +1,265 @@ +Class { + #name : 'FmxMBAbstractChangesBuilderVisitor', + #superclass : 'FmxMBWalkerVisitor', + #instVars : [ + 'builder', + 'currentBehavioral', + 'changesToApply' + ], + #category : 'Famix-MetamodelBuilder-Core-Implementation', + #package : 'Famix-MetamodelBuilder-Core', + #tag : 'Implementation' +} + +{ #category : 'instance creation' } +FmxMBAbstractChangesBuilderVisitor class >> generate: aBuilder [ + + (self visit: aBuilder) + filterRedoundantChanges; + applyChanges +] + +{ #category : 'adding' } +FmxMBAbstractChangesBuilderVisitor >> addMethod: sourceCode classSide: aBoolean protocol: protocol [ + + self + addMethod: sourceCode + in: currentBehavioral fullName + classSide: aBoolean + protocol: protocol +] + +{ #category : 'adding' } +FmxMBAbstractChangesBuilderVisitor >> addMethod: sourceCode in: aClassName classSide: aBoolean protocol: protocol [ + + changesToApply add: (FmxMethodAddition + className: aClassName + isClassSide: aBoolean + sourceCode: sourceCode + protocol: protocol) +] + +{ #category : 'adding' } +FmxMBAbstractChangesBuilderVisitor >> addMethod: sourceCode in: aClassName protocol: protocol [ + + self + addMethod: sourceCode + in: aClassName + classSide: false + protocol: protocol +] + +{ #category : 'adding' } +FmxMBAbstractChangesBuilderVisitor >> addMethod: sourceCode protocol: protocol [ + + self addMethod: sourceCode in: currentBehavioral fullName protocol: protocol +] + +{ #category : 'accessing' } +FmxMBAbstractChangesBuilderVisitor >> applyChanges [ + + | dependencies | + changesToApply ifEmpty: [ ^ self ]. + + "Now we have a list of changes to apply. Some changes needs to by applied before others (for example, we need to create a classe to compile its methods or compile superclasses before their subclasses or traits before their users)." + dependencies := changesToApply inject: Dictionary new into: [ :dictionary :change | + dictionary + at: change put: (change followingChangesIn: (changesToApply copyWithout: change)); + yourself ]. + (AITopologicalSorting sort: changesToApply followingIncomingProperty: [ :change | dependencies at: change ]) do: #apply +] + +{ #category : 'initialization' } +FmxMBAbstractChangesBuilderVisitor >> buildSlotsDefinitionsFor: properties existingClass: currentClass [ + + | modelSlotDefinitions | + currentClass + ifNil: [ modelSlotDefinitions := properties collect: [ :property | property slotDefinition ] ] + ifNotNil: [ + | currentCustomSlots | + currentCustomSlots := currentClass localSlots copyWithoutAll: currentClass generatedSlots. + + (currentClass generatedSlots reject: [ :generatedSlot | properties anySatisfy: [ :property | property name = generatedSlot name ] ]) ifNotEmpty: [ + :slotRemovals | changesToApply add: (FmxSlotRemovals slots: slotRemovals) ]. + + modelSlotDefinitions := properties + reject: [ :property | currentCustomSlots anySatisfy: [ :slot | slot name = property name ] ] + thenCollect: [ :property | property slotDefinition ]. + + modelSlotDefinitions addAll: (currentCustomSlots collect: #definitionString) ]. + + modelSlotDefinitions ifEmpty: [ ^ nil ]. + ^ modelSlotDefinitions sorted +] + +{ #category : 'cleaning' } +FmxMBAbstractChangesBuilderVisitor >> changesOfType: aClass [ + + ^ changesToApply select: [ :change | change isKindOf: aClass ] +] + +{ #category : 'accessing' } +FmxMBAbstractChangesBuilderVisitor >> changesToApply [ + ^ changesToApply +] + +{ #category : 'initialization' } +FmxMBAbstractChangesBuilderVisitor >> createClassNamed: className superclass: superclassName traitDefinitions: traitDefinitions precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ + + | realClass packageName tag change | + realClass := self class environment at: className ifAbsent: [ nil ]. + + packageName := realClass + ifNil: [ defaultPackage ] + ifNotNil: [ realClass package name ]. + tag := realClass + ifNil: [ defaultTag ] + ifNotNil: [ realClass packageTag name ]. + + change := FmxClassAddition new. + change + name: className; + superclass: superclassName; + package: packageName; + tag: tag. + + traitDefinitions ifNotEmpty: [ change traits: (self traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass) ]. + + self validateProperties: properties. + change slots: (self buildSlotsDefinitionsFor: properties existingClass: realClass). + changesToApply add: change. + + self ensurePackageNamed: packageName. + + comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: className comment: comment) ] +] + +{ #category : 'initialization' } +FmxMBAbstractChangesBuilderVisitor >> createTraitNamed: traitName traitDefinitions: traitDefinitions precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ + + | packageName tag realClass change | + realClass := self class environment at: traitName ifAbsent: [ nil ]. + + packageName := realClass + ifNil: [ defaultPackage ] + ifNotNil: [ realClass package name ]. + tag := realClass + ifNil: [ defaultTag ] + ifNotNil: [ realClass packageTag name ]. + + change := FmxTraitAddition new. + change + name: traitName; + package: packageName; + tag: tag. + + traitDefinitions ifNotEmpty: [ change traits: (self traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass) ]. + + properties ifNotEmpty: [ + self validateProperties: properties. + change slots: (self buildSlotsDefinitionsFor: properties existingClass: realClass) ]. + changesToApply add: change. + + self ensurePackageNamed: packageName. + + comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: traitName comment: comment) ] +] + +{ #category : 'private' } +FmxMBAbstractChangesBuilderVisitor >> ensurePackageNamed: packageName [ + + ((self changesOfType: FmxPackageAddition) anySatisfy: [ :change | change packageName = packageName ]) ifTrue: [ ^ self ]. + + changesToApply add: (FmxPackageAddition named: packageName) +] + +{ #category : 'accessing' } +FmxMBAbstractChangesBuilderVisitor >> filterRedoundantChanges [ + + changesToApply := changesToApply select: #isRequired +] + +{ #category : 'initialization' } +FmxMBAbstractChangesBuilderVisitor >> initialize [ + + super initialize. + changesToApply := OrderedCollection new +] + +{ #category : 'as yet unclassified' } +FmxMBAbstractChangesBuilderVisitor >> methodFactory [ + + ^ FmxMBMethodsFactory +] + +{ #category : 'installing' } +FmxMBAbstractChangesBuilderVisitor >> traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass [ + "We need to collect the generated traits + the custom traits added by the user." + + | customTraitNames traitCompositionString | + customTraitNames := ((realClass + ifNil: [ #( ) ] + ifNotNil: [ :class | class traitComposition rootMembers ]) select: [ :e | realClass customTraitNames includes: e name ]) collect: + #traitCompositionExpression. + "manage methods to remove." + traitCompositionString := traitDefinitions , customTraitNames ifEmpty: [ ^ '{ }' ] ifNotEmpty: [ :definitions | definitions joinUsing: ' + ' ]. + + precedingTrait ifNil: [ ^ traitCompositionString ]. + + ^ String streamContents: [ :s | + s + nextPutAll: '('; + nextPutAll: traitCompositionString; + nextPutAll: ' withPrecedenceOf: '; + nextPutAll: precedingTrait; + nextPutAll: ')' ] +] + +{ #category : 'installing' } +FmxMBAbstractChangesBuilderVisitor >> validateProperties: properties [ + + | names | + names := properties collect: #name. + self assert: names size = names asSet size description: 'Two properties of the same class cannot have the same names.'. + properties do: [ :property | property validate ] +] + +{ #category : 'visiting' } +FmxMBAbstractChangesBuilderVisitor >> visitBuilder: aBuilder [ + + builder := aBuilder. + super visitBuilder: aBuilder +] + +{ #category : 'visiting' } +FmxMBAbstractChangesBuilderVisitor >> visitRelation: aRelation [ + + | generationStrategy protocol | + super visitRelation: aRelation. + + generationStrategy := (aRelation producesSlot + ifTrue: [ FmxMBRelationSlotsGenerationStrategy ] + ifFalse: [ FmxMBRelationAttributesGenerationStrategy ]) defaultInstance. + + protocol := aRelation isRemote + ifTrue: [ '*' , builder parentBuilderPackageName ] + ifFalse: [ #accessing ]. + + self addMethod: (generationStrategy generateSetterCodeFor: aRelation) protocol: protocol. + self addMethod: (generationStrategy generateGetterCodeFor: aRelation) protocol: protocol +] + +{ #category : 'visiting' } +FmxMBAbstractChangesBuilderVisitor >> visitTypedProperty: aTypedProperty [ + + | protocol | + super visitTypedProperty: aTypedProperty. + + protocol := aTypedProperty isRemote + ifTrue: [ '*' , builder parentBuilderPackageName ] + ifFalse: [ #accessing ]. + + self addMethod: (self methodFactory getTypedProperty: aTypedProperty) protocol: protocol. + + self addMethod: (self methodFactory setTypedProperty: aTypedProperty name remote: aTypedProperty isRemote) protocol: protocol +] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st index 8589e7b41..ab0a1753d 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st @@ -1,176 +1,11 @@ Class { #name : 'FmxMBChangesBuilderVisitor', - #superclass : 'FmxMBWalkerVisitor', - #instVars : [ - 'builder', - 'currentBehavioral', - 'changesToApply' - ], + #superclass : 'FmxMBAbstractChangesBuilderVisitor', #category : 'Famix-MetamodelBuilder-Core-Implementation', #package : 'Famix-MetamodelBuilder-Core', #tag : 'Implementation' } -{ #category : 'adding' } -FmxMBChangesBuilderVisitor >> addMethod: sourceCode classSide: aBoolean protocol: protocol [ - - self - addMethod: sourceCode - in: currentBehavioral fullName - classSide: aBoolean - protocol: protocol -] - -{ #category : 'adding' } -FmxMBChangesBuilderVisitor >> addMethod: sourceCode in: aClassName classSide: aBoolean protocol: protocol [ - - changesToApply add: (FmxMethodAddition - className: aClassName - isClassSide: aBoolean - sourceCode: sourceCode - protocol: protocol) -] - -{ #category : 'adding' } -FmxMBChangesBuilderVisitor >> addMethod: sourceCode in: aClassName protocol: protocol [ - - self - addMethod: sourceCode - in: aClassName - classSide: false - protocol: protocol -] - -{ #category : 'adding' } -FmxMBChangesBuilderVisitor >> addMethod: sourceCode protocol: protocol [ - - self addMethod: sourceCode in: currentBehavioral fullName protocol: protocol -] - -{ #category : 'accessing' } -FmxMBChangesBuilderVisitor >> applyChanges [ - - | dependencies | - changesToApply ifEmpty: [ ^ self ]. - - "Now we have a list of changes to apply. Some changes needs to by applied before others (for example, we need to create a classe to compile its methods or compile superclasses before their subclasses or traits before their users)." - dependencies := changesToApply inject: Dictionary new into: [ :dictionary :change | - dictionary - at: change put: (change followingChangesIn: (changesToApply copyWithout: change)); - yourself ]. - (AITopologicalSorting sort: changesToApply followingIncomingProperty: [ :change | dependencies at: change ]) do: #apply -] - -{ #category : 'initialization' } -FmxMBChangesBuilderVisitor >> buildSlotsDefinitionsFor: properties existingClass: currentClass [ - - | modelSlotDefinitions | - currentClass - ifNil: [ modelSlotDefinitions := properties collect: [ :property | property slotDefinition ] ] - ifNotNil: [ - | currentCustomSlots | - currentCustomSlots := currentClass localSlots copyWithoutAll: currentClass generatedSlots. - - (currentClass generatedSlots reject: [ :generatedSlot | properties anySatisfy: [ :property | property name = generatedSlot name ] ]) ifNotEmpty: [ - :slotRemovals | changesToApply add: (FmxSlotRemovals slots: slotRemovals) ]. - - modelSlotDefinitions := properties - reject: [ :property | currentCustomSlots anySatisfy: [ :slot | slot name = property name ] ] - thenCollect: [ :property | property slotDefinition ]. - - modelSlotDefinitions addAll: (currentCustomSlots collect: #definitionString) ]. - - modelSlotDefinitions ifEmpty: [ ^ nil ]. - ^ modelSlotDefinitions sorted -] - -{ #category : 'cleaning' } -FmxMBChangesBuilderVisitor >> changesOfType: aClass [ - - ^ changesToApply select: [ :change | change isKindOf: aClass ] -] - -{ #category : 'accessing' } -FmxMBChangesBuilderVisitor >> changesToApply [ - ^ changesToApply -] - -{ #category : 'initialization' } -FmxMBChangesBuilderVisitor >> createClassNamed: className superclass: superclassName traitDefinitions: traitDefinitions precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ - - | realClass packageName tag change | - realClass := self class environment at: className ifAbsent: [ nil ]. - - packageName := realClass - ifNil: [ defaultPackage ] - ifNotNil: [ realClass package name ]. - tag := realClass - ifNil: [ defaultTag ] - ifNotNil: [ realClass packageTag name ]. - - change := FmxClassAddition new. - change - name: className; - superclass: superclassName; - package: packageName; - tag: tag. - - traitDefinitions ifNotEmpty: [ change traits: (self traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass) ]. - - self validateProperties: properties. - change slots: (self buildSlotsDefinitionsFor: properties existingClass: realClass). - changesToApply add: change. - - self ensurePackageNamed: packageName. - - comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: className comment: comment) ] -] - -{ #category : 'initialization' } -FmxMBChangesBuilderVisitor >> createTraitNamed: traitName traitDefinitions: traitDefinitions precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ - - | packageName tag realClass change | - realClass := self class environment at: traitName ifAbsent: [ nil ]. - - packageName := realClass - ifNil: [ defaultPackage ] - ifNotNil: [ realClass package name ]. - tag := realClass - ifNil: [ defaultTag ] - ifNotNil: [ realClass packageTag name ]. - - change := FmxTraitAddition new. - change - name: traitName; - package: packageName; - tag: tag. - - traitDefinitions ifNotEmpty: [ change traits: (self traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass) ]. - - properties ifNotEmpty: [ - self validateProperties: properties. - change slots: (self buildSlotsDefinitionsFor: properties existingClass: realClass) ]. - changesToApply add: change. - - self ensurePackageNamed: packageName. - - comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: traitName comment: comment) ] -] - -{ #category : 'private' } -FmxMBChangesBuilderVisitor >> ensurePackageNamed: packageName [ - - ((self changesOfType: FmxPackageAddition) anySatisfy: [ :change | change packageName = packageName ]) ifTrue: [ ^ self ]. - - changesToApply add: (FmxPackageAddition named: packageName) -] - -{ #category : 'accessing' } -FmxMBChangesBuilderVisitor >> filterRedoundantChanges [ - - changesToApply := changesToApply select: #isRequired -] - { #category : 'as yet unclassified' } FmxMBChangesBuilderVisitor >> generateAddToCollection [ @@ -242,7 +77,7 @@ FmxMBChangesBuilderVisitor >> generateTestingMethodsOfRemoteEntities [ at: remoteClass fullName ifPresent: [ :class | (class includesSelector: selector) ifFalse: [ - self addMethod: (self methodFactory testReturning: true for: selector) in: remoteClass name protocol: '*' , builder configuration packageName ] ] + self addMethod: (self methodFactory testReturning: true for: selector) in: remoteClass fullName protocol: '*' , builder configuration packageName ] ] ifAbsent: [ self error: 'The class ' , remoteClass fullName , ' was not found in the system to generate a remote testing method.' ] ] ] ] ] ] ] @@ -252,19 +87,6 @@ FmxMBChangesBuilderVisitor >> generateTrueTestingMethods [ currentBehavioral testingSelectors do: [ :aSelector | self addMethod: (self methodFactory testReturning: true for: aSelector) protocol: #testing ] ] -{ #category : 'initialization' } -FmxMBChangesBuilderVisitor >> initialize [ - - super initialize. - changesToApply := OrderedCollection new -] - -{ #category : 'as yet unclassified' } -FmxMBChangesBuilderVisitor >> methodFactory [ - - ^ FmxMBMethodsFactory -] - { #category : 'installing' } FmxMBChangesBuilderVisitor >> recordMethodRemovalsOf: realClass [ @@ -316,46 +138,13 @@ FmxMBChangesBuilderVisitor >> registerRemovals [ self recordRemovalOfGeneratedPackagesAndClasses ] -{ #category : 'installing' } -FmxMBChangesBuilderVisitor >> traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass [ - "We need to collect the generated traits + the custom traits added by the user." - - | customTraitNames traitCompositionString | - customTraitNames := ((realClass - ifNil: [ #( ) ] - ifNotNil: [ :class | class traitComposition rootMembers ]) select: [ :e | realClass customTraitNames includes: e name ]) collect: - #traitCompositionExpression. - "manage methods to remove." - traitCompositionString := traitDefinitions , customTraitNames ifEmpty: [ ^ '{ }' ] ifNotEmpty: [ :definitions | definitions joinUsing: ' + ' ]. - - precedingTrait ifNil: [ ^ traitCompositionString ]. - - ^ String streamContents: [ :s | - s - nextPutAll: '('; - nextPutAll: traitCompositionString; - nextPutAll: ' withPrecedenceOf: '; - nextPutAll: precedingTrait; - nextPutAll: ')' ] -] - -{ #category : 'installing' } -FmxMBChangesBuilderVisitor >> validateProperties: properties [ - - | names | - names := properties collect: #name. - self assert: names size = names asSet size description: 'Two properties of the same class cannot have the same names.'. - properties do: [ :property | property validate ] -] - { #category : 'visiting' } FmxMBChangesBuilderVisitor >> visitBuilder: aBuilder [ - builder := aBuilder. - self ensurePackageNamed: aBuilder configuration packageName. - super visitBuilder: aBuilder. + self ensurePackageNamed: aBuilder configuration packageName. + self generateTestingMethodsOfRemoteEntities. self registerRemovals @@ -453,24 +242,6 @@ FmxMBChangesBuilderVisitor >> visitModel: aClass [ self addMethod: (self methodFactory allSubmetamodelsPackagesNamesFor: subBuilders) classSide: true protocol: #accessing ] ] -{ #category : 'visiting' } -FmxMBChangesBuilderVisitor >> visitRelation: aRelation [ - - | generationStrategy protocol | - super visitRelation: aRelation. - - generationStrategy := (aRelation producesSlot - ifTrue: [ FmxMBRelationSlotsGenerationStrategy ] - ifFalse: [ FmxMBRelationAttributesGenerationStrategy ]) defaultInstance. - - protocol := aRelation isRemote - ifTrue: [ '*' , builder parentBuilderPackageName ] - ifFalse: [ #accessing ]. - - self addMethod: (generationStrategy generateSetterCodeFor: aRelation) protocol: protocol. - self addMethod: (generationStrategy generateGetterCodeFor: aRelation) protocol: protocol -] - { #category : 'visiting' } FmxMBChangesBuilderVisitor >> visitTrait: aTrait [ @@ -499,18 +270,3 @@ FmxMBChangesBuilderVisitor >> visitTraitEntity: aTrait [ generateTrueTestingMethods; generateAddToCollection ] - -{ #category : 'visiting' } -FmxMBChangesBuilderVisitor >> visitTypedProperty: aTypedProperty [ - - | protocol | - super visitTypedProperty: aTypedProperty. - - protocol := aTypedProperty isRemote - ifTrue: [ '*' , builder parentBuilderPackageName ] - ifFalse: [ #accessing ]. - - self addMethod: (self methodFactory getTypedProperty: aTypedProperty) protocol: protocol. - - self addMethod: (self methodFactory setTypedProperty: aTypedProperty name remote: aTypedProperty isRemote) protocol: protocol -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRemoteChangesBuilderVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRemoteChangesBuilderVisitor.class.st new file mode 100644 index 000000000..55f20fcc8 --- /dev/null +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRemoteChangesBuilderVisitor.class.st @@ -0,0 +1,28 @@ +Class { + #name : 'FmxMBRemoteChangesBuilderVisitor', + #superclass : 'FmxMBAbstractChangesBuilderVisitor', + #category : 'Famix-MetamodelBuilder-Core-Implementation', + #package : 'Famix-MetamodelBuilder-Core', + #tag : 'Implementation' +} + +{ #category : 'visiting' } +FmxMBRemoteChangesBuilderVisitor >> visitClass: aClass [ + + currentBehavioral := aClass. + self class environment at: aClass fullName ifAbsent: [ ^ self ]. + + (aClass propertiesAndRelations select: #isRemote) do: [ :each | each acceptVisitor: self ] +] + +{ #category : 'visiting' } +FmxMBRemoteChangesBuilderVisitor >> visitTrait: aTrait [ + + | realTrait | + currentBehavioral := aTrait. + + realTrait := self class environment at: aTrait fullName ifAbsent: [ ^ self ]. + + (aTrait propertiesAndRelations select: [ :prop | prop isRemote and: [ (realTrait localSelectors includes: prop name) not ] ]) do: [ :each | + each acceptVisitor: self ] +] From 90db7c6cfc0c16cc4bf9edfe5edf88cce68452e0 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Sun, 10 May 2026 02:15:49 +0200 Subject: [PATCH 106/121] Clean the code of the previous generator --- .../FamixMetamodelBuilder.class.st | 79 ++---- .../FamixMetamodelGenerator.class.st | 8 +- ...mxMBAbstractChangesBuilderVisitor.class.st | 26 +- .../FmxMBBehavior.class.st | 57 +--- .../FmxMBChangesBuilderVisitor.class.st | 20 +- .../FmxMBClass.class.st | 24 -- .../FmxMBClassEntity.class.st | 41 --- .../FmxMBClassGroup.class.st | 7 - .../FmxMBEntityCreatorTrait.class.st | 12 - .../FmxMBImportingContext.class.st | 18 -- .../FmxMBModel.class.st | 22 -- .../FmxMBProperty.class.st | 28 -- ...lationAccessorsGenerationStrategy.class.st | 74 ----- .../FmxMBRelationSide.class.st | 24 -- .../FmxMBRingEnvironment.class.st | 265 ------------------ .../FmxMBTrait.class.st | 26 -- .../FmxMBTraitEntity.class.st | 10 - .../FmxMBTypedProperty.class.st | 16 -- .../FamixMetamodelBuilder.extension.st | 1 - .../FamixMetamodelGenerator.extension.st | 8 - .../FmxMBBuilderTest.class.st | 13 - .../FmxMBStubEnvironment.class.st | 13 - .../FmxMBVisitorTrait.class.st | 23 -- 23 files changed, 47 insertions(+), 768 deletions(-) delete mode 100644 src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st delete mode 100644 src/Famix-MetamodelBuilder-Tests/FamixMetamodelGenerator.extension.st delete mode 100644 src/Famix-MetamodelBuilder-Tests/FmxMBStubEnvironment.class.st diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index d980dde22..759f079ee 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -48,7 +48,6 @@ Class { #name : 'FamixMetamodelBuilder', #superclass : 'Object', #instVars : [ - 'environment', 'classes', 'traits', 'generator', @@ -90,12 +89,6 @@ FamixMetamodelBuilder >> allSubBuilders [ ^ self generator ifNil: [ Set new ] ifNotNil: #allSubBuilders ] -{ #category : 'accessing' } -FamixMetamodelBuilder >> apply [ - - self environment apply -] - { #category : 'accessing' } FamixMetamodelBuilder >> association: anAssociationName [ @@ -117,7 +110,10 @@ FamixMetamodelBuilder >> baseImportingContextName [ FamixMetamodelBuilder >> changesToApply [ self prepareGeneration. - ^ self environment changesToApply + + ^ (FmxMBChangesBuilderVisitor visit: self) + filterRedoundantChanges; + changesToApply ] { #category : 'initialization' } @@ -214,26 +210,11 @@ FamixMetamodelBuilder >> entityCreatorTrait [ yourself) ] ] -{ #category : 'accessing' } -FamixMetamodelBuilder >> environment [ - - ^ environment -] - -{ #category : 'accessing' } -FamixMetamodelBuilder >> environment: anObject [ - - environment := anObject -] - { #category : 'generating' } FamixMetamodelBuilder >> generate [ - | changesBuilder | self prepareGeneration. - changesBuilder := FmxMBChangesBuilderVisitor visit: self. - changesBuilder filterRedoundantChanges. - changesBuilder applyChanges. + FmxMBChangesBuilderVisitor generate: self ] { #category : 'generating' } @@ -255,37 +236,7 @@ FamixMetamodelBuilder >> generateImportingContext [ { #category : 'generating' } FamixMetamodelBuilder >> generateRemotes [ - self environment reset. - - - self traits do: [ :each | each generateRemotes ]. - self classes do: [ :each | each generateRemotes ]. - (FmxMBRemoteChangesBuilderVisitor visit: self) - filterRedoundantChanges; - applyChanges "self apply" -] - -{ #category : 'generating' } -FamixMetamodelBuilder >> generateTestingMethodsOfRemoteEntities [ - - | entitiesWithRemoteSuperclasses | - entitiesWithRemoteSuperclasses := self classes groupedBy: [ :class | class remoteSuperclass ]. - - - entitiesWithRemoteSuperclasses keysAndValuesDo: [ :remoteClass :subclasses | - remoteClass ifNotNil: [ - | subclassesAndTraits | - subclassesAndTraits := subclasses flatCollectAsSet: [ :subclass | subclass allTransitiveTraits , { subclass } ]. - - self testingSelectorsMapping keysAndValuesDo: [ :behavior :selectors | - ((self shouldGeneratorTestingMethodsOf: behavior in: remoteClass) and: [ subclassesAndTraits includes: behavior ]) ifTrue: [ - selectors do: [ :selector | - self class environment - at: remoteClass fullName - ifPresent: [ :class | - (class includesSelector: selector) ifFalse: [ - remoteClass addMethod: ('{1}\\ \ ^ false' withCRs format: { selector }) protocol: '*' , self configuration packageName ] ] - ifAbsent: [ self error: 'The class ' , remoteClass fullName , ' was not found in the system to generate a remote testing method.' ] ] ] ] ] ] + FmxMBRemoteChangesBuilderVisitor generate: self ] { #category : 'accessing' } @@ -338,7 +289,6 @@ FamixMetamodelBuilder >> importingContextName [ FamixMetamodelBuilder >> initialize [ super initialize. - environment := FmxMBRingEnvironment for: self. configuration := FmxMBConfiguration new. @@ -466,8 +416,7 @@ FamixMetamodelBuilder >> parentBuilder [ { #category : 'accessing' } FamixMetamodelBuilder >> parentBuilder: anObject [ - parentBuilder := anObject. - self environment: parentBuilder environment + parentBuilder := anObject ] { #category : 'tests support' } @@ -482,16 +431,12 @@ FamixMetamodelBuilder >> parentBuilderPackageName [ FamixMetamodelBuilder >> prepareBehaviorsGeneration [ self traitsWithSubBuildersTraits do: [ :each | self testingSelectorsMapping at: each put: each testingSelectors ]. - self classes do: [ :each | self testingSelectorsMapping at: each put: each testingSelectors ]. - self traits do: [ :each | each generate ]. - self sortedClasses do: [ :each | each generate ]. - self generateTestingMethodsOfRemoteEntities + self classes do: [ :each | self testingSelectorsMapping at: each put: each testingSelectors ] ] { #category : 'generating' } FamixMetamodelBuilder >> prepareGeneration [ - self environment ensurePackageNamed: self configuration packageName. self ensureEntityClassIsTheCommonSuperclass. self shouldGenerateModel ifTrue: [ @@ -513,6 +458,14 @@ FamixMetamodelBuilder >> printOn: aStream [ nextPut: $) ] ] +{ #category : 'generating' } +FamixMetamodelBuilder >> remoteChangesToApply [ + + ^ (FmxMBRemoteChangesBuilderVisitor visit: self) + filterRedoundantChanges; + changesToApply +] + { #category : 'accessing' } FamixMetamodelBuilder >> reservedKeywords [ diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st index 2019ebbe5..842af16fd 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st @@ -252,8 +252,13 @@ FamixMetamodelGenerator >> builder: anObject [ { #category : 'testing' } FamixMetamodelGenerator >> changesToApply [ + + | allChanges | + allChanges := OrderedCollection new. self define. - ^ self builder changesToApply + allChanges addAll: self builder changesToApply. + self subBuilders do: [ :remote | allChanges addAll: remote remoteChangesToApply ]. + ^ allChanges ] { #category : 'accessing' } @@ -355,7 +360,6 @@ FamixMetamodelGenerator >> initialize [ | subbuilder | subbuilder := each builderWithDefinitions. subbuilder parentBuilder: self builder. - builder environment: builder environment. each prefix -> subbuilder ]). metamodelToolGenerators := self class metamodelToolGenerators collect: [ :generatorClass | generatorClass forGenerator: self ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBAbstractChangesBuilderVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBAbstractChangesBuilderVisitor.class.st index d71bb11f7..43ee3fd21 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBAbstractChangesBuilderVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBAbstractChangesBuilderVisitor.class.st @@ -19,7 +19,7 @@ FmxMBAbstractChangesBuilderVisitor class >> generate: aBuilder [ applyChanges ] -{ #category : 'adding' } +{ #category : 'private' } FmxMBAbstractChangesBuilderVisitor >> addMethod: sourceCode classSide: aBoolean protocol: protocol [ self @@ -29,7 +29,7 @@ FmxMBAbstractChangesBuilderVisitor >> addMethod: sourceCode classSide: aBoolean protocol: protocol ] -{ #category : 'adding' } +{ #category : 'private' } FmxMBAbstractChangesBuilderVisitor >> addMethod: sourceCode in: aClassName classSide: aBoolean protocol: protocol [ changesToApply add: (FmxMethodAddition @@ -39,7 +39,7 @@ FmxMBAbstractChangesBuilderVisitor >> addMethod: sourceCode in: aClassName class protocol: protocol) ] -{ #category : 'adding' } +{ #category : 'private' } FmxMBAbstractChangesBuilderVisitor >> addMethod: sourceCode in: aClassName protocol: protocol [ self @@ -49,13 +49,13 @@ FmxMBAbstractChangesBuilderVisitor >> addMethod: sourceCode in: aClassName proto protocol: protocol ] -{ #category : 'adding' } +{ #category : 'private' } FmxMBAbstractChangesBuilderVisitor >> addMethod: sourceCode protocol: protocol [ self addMethod: sourceCode in: currentBehavioral fullName protocol: protocol ] -{ #category : 'accessing' } +{ #category : 'operations' } FmxMBAbstractChangesBuilderVisitor >> applyChanges [ | dependencies | @@ -69,7 +69,7 @@ FmxMBAbstractChangesBuilderVisitor >> applyChanges [ (AITopologicalSorting sort: changesToApply followingIncomingProperty: [ :change | dependencies at: change ]) do: #apply ] -{ #category : 'initialization' } +{ #category : 'private' } FmxMBAbstractChangesBuilderVisitor >> buildSlotsDefinitionsFor: properties existingClass: currentClass [ | modelSlotDefinitions | @@ -92,7 +92,7 @@ FmxMBAbstractChangesBuilderVisitor >> buildSlotsDefinitionsFor: properties exist ^ modelSlotDefinitions sorted ] -{ #category : 'cleaning' } +{ #category : 'accessing' } FmxMBAbstractChangesBuilderVisitor >> changesOfType: aClass [ ^ changesToApply select: [ :change | change isKindOf: aClass ] @@ -103,7 +103,7 @@ FmxMBAbstractChangesBuilderVisitor >> changesToApply [ ^ changesToApply ] -{ #category : 'initialization' } +{ #category : 'private' } FmxMBAbstractChangesBuilderVisitor >> createClassNamed: className superclass: superclassName traitDefinitions: traitDefinitions precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ | realClass packageName tag change | @@ -134,7 +134,7 @@ FmxMBAbstractChangesBuilderVisitor >> createClassNamed: className superclass: su comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: className comment: comment) ] ] -{ #category : 'initialization' } +{ #category : 'private' } FmxMBAbstractChangesBuilderVisitor >> createTraitNamed: traitName traitDefinitions: traitDefinitions precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ | packageName tag realClass change | @@ -173,7 +173,7 @@ FmxMBAbstractChangesBuilderVisitor >> ensurePackageNamed: packageName [ changesToApply add: (FmxPackageAddition named: packageName) ] -{ #category : 'accessing' } +{ #category : 'operations' } FmxMBAbstractChangesBuilderVisitor >> filterRedoundantChanges [ changesToApply := changesToApply select: #isRequired @@ -186,13 +186,13 @@ FmxMBAbstractChangesBuilderVisitor >> initialize [ changesToApply := OrderedCollection new ] -{ #category : 'as yet unclassified' } +{ #category : 'accessing' } FmxMBAbstractChangesBuilderVisitor >> methodFactory [ ^ FmxMBMethodsFactory ] -{ #category : 'installing' } +{ #category : 'private' } FmxMBAbstractChangesBuilderVisitor >> traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass [ "We need to collect the generated traits + the custom traits added by the user." @@ -215,7 +215,7 @@ FmxMBAbstractChangesBuilderVisitor >> traitStringFrom: traitDefinitions precedin nextPutAll: ')' ] ] -{ #category : 'installing' } +{ #category : 'private' } FmxMBAbstractChangesBuilderVisitor >> validateProperties: properties [ | names | diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index dc495e232..9e22af354 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -48,23 +48,6 @@ FmxMBBehavior >> addAllTransitiveTraitsIn: aCollection [ ^ aCollection ] -{ #category : 'adding' } -FmxMBBehavior >> addMethod: code classSide: boolean protocol: protocol [ - - self flag: #todo. "Demeter" - self builder environment - addMethod: code - in: self fullName - classSide: boolean - protocol: protocol -] - -{ #category : 'adding' } -FmxMBBehavior >> addMethod: code protocol: protocol [ - - ^ self addMethod: code classSide: false protocol: protocol -] - { #category : 'accessing' } FmxMBBehavior >> addRelationSide: aRelation [ @@ -231,42 +214,6 @@ FmxMBBehavior >> generalization: anObject [ ifFalse: [ self superclass: anObject ] ] ] -{ #category : 'generating' } -FmxMBBehavior >> generate [ - ^ self subclassResponsibility -] - -{ #category : 'generating' } -FmxMBBehavior >> generateAccessors [ - - self propertiesAndRelations do: [ :each | each generateAccessorsIn: self ] -] - -{ #category : 'generating' } -FmxMBBehavior >> generateAddToCollection [ - - self relations do: [ :relation | relation isMany ifTrue: [ self addMethod: (FmxMBMethodsFactory addToCollectionFor: relation name) protocol: #adding ] ] -] - -{ #category : 'generating' } -FmxMBBehavior >> generateAnnotation [ - - self - addMethod: (FmxMBMethodsFactory - annotationFor: self name - super: self superclassName - package: self builder safeAnnotationPackageName - isAbstract: self isAbstractClass) - classSide: true - protocol: #meta -] - -{ #category : 'generating' } -FmxMBBehavior >> generateTestingMethods [ - - self testingSelectors do: [ :aSelector | self addMethod: (FmxMBMethodsFactory testReturning: true for: aSelector) protocol: #testing ] -] - { #category : 'generalization' } FmxMBBehavior >> inheritsFromTrait: aTrait without: aCollection [ self --|> aTrait. @@ -367,7 +314,7 @@ FmxMBBehavior >> prefix: anObject [ prefix := anObject ] -{ #category : 'generating' } +{ #category : 'printing' } FmxMBBehavior >> printOn: aStream [ aStream @@ -389,7 +336,7 @@ FmxMBBehavior >> propertiesAndRelations [ ^ propertiesAndRelations ] -{ #category : 'generating' } +{ #category : 'associations' } FmxMBBehavior >> property: propertyName [ | aSide | diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st index ab0a1753d..0b55ccea9 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st @@ -6,14 +6,14 @@ Class { #tag : 'Implementation' } -{ #category : 'as yet unclassified' } +{ #category : 'generation' } FmxMBChangesBuilderVisitor >> generateAddToCollection [ currentBehavioral relations do: [ :relation | relation isMany ifTrue: [ self addMethod: (self methodFactory addToCollectionFor: relation name) protocol: #adding ] ] ] -{ #category : 'as yet unclassified' } +{ #category : 'generation' } FmxMBChangesBuilderVisitor >> generateAnnotation [ self @@ -26,7 +26,7 @@ FmxMBChangesBuilderVisitor >> generateAnnotation [ protocol: #meta ] -{ #category : 'as yet unclassified' } +{ #category : 'generation' } FmxMBChangesBuilderVisitor >> generateFalseTestingMethods [ | selectorsToGenerate | @@ -40,7 +40,7 @@ FmxMBChangesBuilderVisitor >> generateFalseTestingMethods [ self addMethod: (self methodFactory testReturning: false for: selector) protocol: #testing ] ] -{ #category : 'generating-methods' } +{ #category : 'generation' } FmxMBChangesBuilderVisitor >> generateFileImportMethods [ builder configuration shouldGenerateFileImportHelpers ifFalse: [ ^ self ]. @@ -50,7 +50,7 @@ FmxMBChangesBuilderVisitor >> generateFileImportMethods [ self addMethod: (self methodFactory importingClassNamed: builder importingContextName) classSide: true protocol: #accessing ] -{ #category : 'generating-methods' } +{ #category : 'generation' } FmxMBChangesBuilderVisitor >> generateMetamodelMethod [ currentBehavioral isRoot ifFalse: [ ^ self ]. @@ -58,7 +58,7 @@ FmxMBChangesBuilderVisitor >> generateMetamodelMethod [ builder model ifNotNil: [ :model | self addMethod: (self methodFactory metamodelFor: model fullName) classSide: true protocol: #meta ] ] -{ #category : 'visiting' } +{ #category : 'generation' } FmxMBChangesBuilderVisitor >> generateTestingMethodsOfRemoteEntities [ | entitiesWithRemoteSuperclasses | @@ -81,13 +81,13 @@ FmxMBChangesBuilderVisitor >> generateTestingMethodsOfRemoteEntities [ ifAbsent: [ self error: 'The class ' , remoteClass fullName , ' was not found in the system to generate a remote testing method.' ] ] ] ] ] ] ] -{ #category : 'as yet unclassified' } +{ #category : 'generation' } FmxMBChangesBuilderVisitor >> generateTrueTestingMethods [ currentBehavioral testingSelectors do: [ :aSelector | self addMethod: (self methodFactory testReturning: true for: aSelector) protocol: #testing ] ] -{ #category : 'installing' } +{ #category : 'private' } FmxMBChangesBuilderVisitor >> recordMethodRemovalsOf: realClass [ | generatedMethodsOfRealClass generatedMethodNamesOfRealClass selectorsToGenerate | @@ -108,7 +108,7 @@ FmxMBChangesBuilderVisitor >> recordMethodRemovalsOf: realClass [ changesToApply add: (FmxMethodRemovals className: realClass instanceSide name isClassSide: realClass isClassSide selectors: selectorsOfRemovedGeneratedMethod) ] ] -{ #category : 'accessing' } +{ #category : 'private' } FmxMBChangesBuilderVisitor >> recordRemovalOfGeneratedPackagesAndClasses [ "Since the last generation it is possible some behaviorals were removed from the generator. In that case we should remove them. We will remove all classes and traits of Famix that are not part of the current generator." @@ -124,7 +124,7 @@ FmxMBChangesBuilderVisitor >> recordRemovalOfGeneratedPackagesAndClasses [ thenDo: [ :class | (classesToGenerate includes: class name) ifFalse: [ changesToApply add: (FmxClassRemoval class: class) ] ] ] ] ] -{ #category : 'visiting' } +{ #category : 'private' } FmxMBChangesBuilderVisitor >> registerRemovals [ | classesToGenerate | diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st index ae32b2e21..9603355f4 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClass.class.st @@ -56,30 +56,6 @@ FmxMBClass >> defaultSuperclassName [ ^ #MooseEntity ] -{ #category : 'generating' } -FmxMBClass >> generate [ - - self builder environment - createClassNamed: self fullName - superclass: self superclassName - traitDefinitions: self allTraitDefinitions - precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) - properties: (self propertiesAndRelations select: #producesSlot) - in: self packageName - tag: self tag - comment: self commentWithRelations. - - self generateAccessors -] - -{ #category : 'generating' } -FmxMBClass >> generateRemotes [ - - self class environment at: self fullName ifAbsent: [ ^ self ]. - - (self propertiesAndRelations select: #isRemote) do: [ :each | each generateAccessorsIn: self ] -] - { #category : 'testing' } FmxMBClass >> isMetamodelClass [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st index 8570e802e..df261f4b1 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClassEntity.class.st @@ -26,47 +26,6 @@ FmxMBClassEntity >> defaultSuperclassName [ ^ super defaultSuperclassName ] -{ #category : 'generating-methods' } -FmxMBClassEntity >> generate [ - - super generate. - - self - generateAddToCollection; - generateTestingMethods; - generateMetamodelMethod; - generateAnnotation. - - self isAbstractClass ifTrue: [ self addMethod: (FmxMBMethodsFactory isAbstractFor: self fullName) classSide: true protocol: #testing ]. - - propertiesForEqualityCheck ifNotNil: [ - self addMethod: (FmxMBMethodsFactory equalsForVariableNamed: 'a' , self fullName properties: propertiesForEqualityCheck) protocol: #comparing. - self addMethod: (FmxMBMethodsFactory hashForProperties: propertiesForEqualityCheck) protocol: #comparing ] -] - -{ #category : 'generating-methods' } -FmxMBClassEntity >> generateMetamodelMethod [ - - self isRoot ifFalse: [ ^ self ]. - - self builder model ifNotNil: [ :model | self addMethod: (FmxMBMethodsFactory metamodelFor: model fullName) classSide: true protocol: #meta ] -] - -{ #category : 'generating-methods' } -FmxMBClassEntity >> generateTestingMethods [ - - self isRoot ifTrue: [ - | selectorsToGenerate | - selectorsToGenerate := Set new. - builder testingSelectorsMapping keysAndValuesDo: [ :concernedClass :selectors | - (builder shouldGeneratorTestingMethodsOf: concernedClass in: self) ifTrue: [ selectorsToGenerate addAll: selectors ] ]. - - (selectorsToGenerate difference: (self traitGeneralizations flatCollect: #testingSelectors)) do: [ :selector | - self addMethod: (FmxMBMethodsFactory testReturning: false for: selector) protocol: #testing ] ]. - - super generateTestingMethods -] - { #category : 'testing' } FmxMBClassEntity >> isAbstractClass [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st index 9118f7ca9..e845e00f2 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBClassGroup.class.st @@ -28,13 +28,6 @@ FmxMBClassGroup >> defaultTag [ ^ #Groups ] -{ #category : 'generating' } -FmxMBClassGroup >> generate [ - - super generate. - innerClass addMethod: (FmxMBMethodsFactory groupAnnotationNamed: self fullName) classSide: true protocol: #groups -] - { #category : 'accessing' } FmxMBClassGroup >> innerClass [ ^ innerClass diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st index 7ac2eb484..06c1217e7 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntityCreatorTrait.class.st @@ -17,18 +17,6 @@ FmxMBEntityCreatorTrait >> acceptVisitor: aVisitor [ ^ aVisitor visitEntityCreator: self ] -{ #category : 'generating' } -FmxMBEntityCreatorTrait >> generate [ - - super generate. - - self builder concreteClasses do: [ :class | - self addMethod: (FmxMBMethodsFactory instantiate: class) protocol: #'entity creation'. - - (class allTransitiveTraitsIncludingSuperclasses anySatisfy: [ :trait | trait prefix = #Famix and: [ trait name = #TNamedEntity ] ]) ifTrue: [ - self addMethod: (FmxMBMethodsFactory instantiateNamed: class) protocol: #'entity creation' ] ] -] - { #category : 'initialization' } FmxMBEntityCreatorTrait >> initialize [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st index aa71f841b..3922d1159 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBImportingContext.class.st @@ -38,24 +38,6 @@ FmxMBImportingContext >> defaultSuperclassName [ ^ #FamixImportingContext ] -{ #category : 'generating' } -FmxMBImportingContext >> generate [ - - super generate. - - self addMethod: (FmxMBMethodsFactory importedMetamodelForPrefix: self prefix) classSide: true protocol: #accessing. - - self builder concreteClasses do: [ :each | - self - addMethod: (each allTransitiveTraits - detect: [ :trait | trait name = #TAssociation ] - ifFound: [ FmxMBMethodsFactory importAssociationNamed: each name ] - ifNone: [ FmxMBMethodsFactory importEntityNamed: each name ]) - protocol: #importing. - - self addMethod: (FmxMBMethodsFactory shouldImportNamed: each name) protocol: #testing ] -] - { #category : 'accessing' } FmxMBImportingContext >> name [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st index 8a9e1aba1..28c1ff7db 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBModel.class.st @@ -24,28 +24,6 @@ FmxMBModel >> defaultTag [ ^ #Model ] -{ #category : 'generating' } -FmxMBModel >> generate [ - - super generate. - self - generateFileImportMethods; - generateAnnotation. - - self builder allSubBuilders ifNotEmpty: [ :subBuilders | - self addMethod: (FmxMBMethodsFactory allSubmetamodelsPackagesNamesFor: subBuilders) classSide: true protocol: #accessing ] -] - -{ #category : 'generating-methods' } -FmxMBModel >> generateFileImportMethods [ - - self builder configuration shouldGenerateFileImportHelpers ifFalse: [ ^ self ]. - - self addMethod: FmxMBMethodsFactory canBeImportedFromFile classSide: true protocol: #testing. - - self addMethod: (FmxMBMethodsFactory importingClassNamed: self builder importingContextName) classSide: true protocol: #accessing -] - { #category : 'testing' } FmxMBModel >> isModelClass [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st index 6b14888d7..55454ba7e 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st @@ -18,40 +18,12 @@ FmxMBProperty >> acceptVisitor: aVisitor [ ^ aVisitor visitProperty: self ] -{ #category : 'generating' } -FmxMBProperty >> generateAccessorsIn: aFmxBehavioral [ - self generateGetterIn: aFmxBehavioral. - self generateSetterIn: aFmxBehavioral -] - -{ #category : 'generating' } -FmxMBProperty >> generateGetterIn: aFmxBehavioral [ - - self subclassResponsibility -] - -{ #category : 'generating' } -FmxMBProperty >> generateSetterIn: aFmxBehavioral [ - - self subclassResponsibility -] - -{ #category : 'printing' } -FmxMBProperty >> hasDefaultValue [ - ^ false -] - { #category : 'initialization' } FmxMBProperty >> initialize [ super initialize. comment := '' ] -{ #category : 'printing' } -FmxMBProperty >> isContainer [ - ^ false -] - { #category : 'accessing' } FmxMBProperty >> isRelation [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st index 217a2333e..d68e8f6f5 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st @@ -80,61 +80,6 @@ FmxMBRelationAccessorsGenerationStrategy >> generateGetterCoreOn: aStream for: a ^ self subclassResponsibility ] -{ #category : 'generation' } -FmxMBRelationAccessorsGenerationStrategy >> generateGetterIn: aFmxBehavioral for: aRelationSide [ - - | methodSource commentDefinition | - commentDefinition := aRelationSide comment ifNotEmpty: [ :comment | '' format: { comment printString } ]. - - methodSource := String streamContents: [ :s | - s - nextPutAll: aRelationSide name; - cr; - tab; - nextPutAll: '"Relation named: #'; - nextPutAll: aRelationSide name; - nextPutAll: ' type: #'; - nextPutAll: aRelationSide oppositeType; - nextPutAll: ' opposite: #'; - nextPutAll: aRelationSide oppositeName; - nextPutAll: '"'; - cr; - cr. - s - tab; - nextPutAll: ''; - cr. - commentDefinition ifNotEmpty: [ - s - tab; - nextPutAll: commentDefinition; - cr ]. - aRelationSide isContainer ifTrue: [ - s - tab; - nextPutAll: ''; - cr ]. - aRelationSide isDerived ifTrue: [ - s - tab; - nextPutAll: ''; - cr ]. - aRelationSide isSource ifTrue: [ - s - tab; - nextPutAll: ''; - cr ]. - aRelationSide isTarget ifTrue: [ - s - tab; - nextPutAll: ''; - cr ]. - - self generateGetterCoreOn: s for: aRelationSide ]. - - aFmxBehavioral addMethod: methodSource protocol: (self protocolFor: aRelationSide) -] - { #category : 'generation' } FmxMBRelationAccessorsGenerationStrategy >> generateSetterCodeFor: aRelationSide [ @@ -157,25 +102,6 @@ FmxMBRelationAccessorsGenerationStrategy >> generateSetterCoreOn: aStream for: a ^ self subclassResponsibility ] -{ #category : 'generation' } -FmxMBRelationAccessorsGenerationStrategy >> generateSetterIn: aFmxBehavioral for: aRelationSide [ - - | methodSource | - methodSource := String streamContents: [ :s | - s - nextPutAll: aRelationSide name; - nextPutAll: ': anObject'; - cr; - cr. - s - tab; - nextPutAll: ''; - cr. - self generateSetterCoreOn: s for: aRelationSide ]. - - aFmxBehavioral addMethod: methodSource protocol: (self protocolFor: aRelationSide) -] - { #category : 'testing' } FmxMBRelationAccessorsGenerationStrategy >> producesSlot [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st index ff3ff2256..cfd0b0d45 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st @@ -66,30 +66,6 @@ FmxMBRelationSide >> derived: anObject [ derived := anObject ] -{ #category : 'generating' } -FmxMBRelationSide >> generateGetterIn: aFmxBehavioral [ - - aFmxBehavioral addMethod: (self generationStrategy generateGetterCodeFor: self) protocol: (self isRemote - ifTrue: [ '*' , self builder parentBuilderPackageName ] - ifFalse: [ #accessing ]) -] - -{ #category : 'generating' } -FmxMBRelationSide >> generateSetterIn: aFmxBehavioral [ - - aFmxBehavioral addMethod: (self generationStrategy generateSetterCodeFor: self) protocol: (self isRemote - ifTrue: [ '*' , self builder parentBuilderPackageName ] - ifFalse: [ #accessing ]) -] - -{ #category : 'accessing' } -FmxMBRelationSide >> generationStrategy [ - - ^ (self producesSlot - ifTrue: [ FmxMBRelationSlotsGenerationStrategy ] - ifFalse: [ FmxMBRelationAttributesGenerationStrategy ]) defaultInstance -] - { #category : 'initialization' } FmxMBRelationSide >> initialize [ super initialize. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st deleted file mode 100644 index 239bad406..000000000 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRingEnvironment.class.st +++ /dev/null @@ -1,265 +0,0 @@ -Class { - #name : 'FmxMBRingEnvironment', - #superclass : 'Object', - #instVars : [ - 'changesToApply', - 'builder' - ], - #category : 'Famix-MetamodelBuilder-Core-Implementation', - #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' -} - -{ #category : 'instance creation' } -FmxMBRingEnvironment class >> for: aBuilder [ - - ^ self new - builder: aBuilder; - yourself. -] - -{ #category : 'installing' } -FmxMBRingEnvironment >> addMethod: sourceCode in: aClassName classSide: aBoolean protocol: protocol [ - - changesToApply add: (FmxMethodAddition - className: aClassName - isClassSide: aBoolean - sourceCode: sourceCode - protocol: protocol) -] - -{ #category : 'installing' } -FmxMBRingEnvironment >> apply [ - - | dependencies | - self collectChangesToApply. - "Now we have a list of changes to apply. Some changes needs to by applied before others (for example, we need to create a classe to compile its methods or compile superclasses before their subclasses or traits before their users)." - dependencies := changesToApply inject: Dictionary new into: [ :dictionary :change | - dictionary - at: change put: (change followingChangesIn: (changesToApply copyWithout: change)); - yourself ]. - (AITopologicalSorting sort: changesToApply followingIncomingProperty: [ :change | dependencies at: change ]) do: #apply. - changesToApply := OrderedCollection new -] - -{ #category : 'initialization' } -FmxMBRingEnvironment >> buildSlotsDefinitionsFor: properties existingClass: currentClass [ - - | modelSlotDefinitions | - currentClass - ifNil: [ modelSlotDefinitions := properties collect: [ :property | property slotDefinition ] ] - ifNotNil: [ - | currentCustomSlots | - currentCustomSlots := currentClass localSlots copyWithoutAll: currentClass generatedSlots. - - (currentClass generatedSlots reject: [ :generatedSlot | properties anySatisfy: [ :property | property name = generatedSlot name ] ]) ifNotEmpty: [ - :slotRemovals | changesToApply add: (FmxSlotRemovals slots: slotRemovals) ]. - - modelSlotDefinitions := properties - reject: [ :property | currentCustomSlots anySatisfy: [ :slot | slot name = property name ] ] - thenCollect: [ :property | property slotDefinition ]. - - modelSlotDefinitions addAll: (currentCustomSlots collect: #definitionString) ]. - - modelSlotDefinitions ifEmpty: [ ^ nil ]. - ^ modelSlotDefinitions sorted -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> builder [ - ^ builder -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> builder: anObject [ - builder := anObject -] - -{ #category : 'cleaning' } -FmxMBRingEnvironment >> changesOfType: aClass [ - - ^ changesToApply select: [ :change | change isKindOf: aClass ] -] - -{ #category : 'testing' } -FmxMBRingEnvironment >> changesToApply [ - "Return the list of changes to apply if a regeneration would cause changes in the system." - - self collectChangesToApply. - ^ changesToApply -] - -{ #category : 'installing' } -FmxMBRingEnvironment >> collectChangesToApply [ - - | classesToGenerate | - classesToGenerate := (self changesOfType: FmxBehavioralAddition) collectAsSet: #name. - - classesToGenerate do: [ :className | - self class environment at: className asSymbol ifPresent: [ :realClass | - self recordMethodRemovalsOf: realClass. - self recordMethodRemovalsOf: realClass class ] ]. - - self recordRemovalOfGeneratedPackagesAndClasses. - - "Reject changes that would not change anything on the current system." - changesToApply := changesToApply select: [ :change | change isRequired ] -] - -{ #category : 'installing' } -FmxMBRingEnvironment >> createClassNamed: className superclass: superclassName traitDefinitions: traitDefinitions precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ - - | realClass packageName tag change | - realClass := self class environment at: className ifAbsent: [ nil ]. - - packageName := realClass - ifNil: [ defaultPackage ] - ifNotNil: [ realClass package name ]. - tag := realClass - ifNil: [ defaultTag ] - ifNotNil: [ realClass packageTag name ]. - - change := FmxClassAddition new. - change - name: className; - superclass: superclassName; - package: packageName; - tag: tag. - - traitDefinitions ifNotEmpty: [ change traits: (self traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass) ]. - - self validateProperties: properties. - change slots: (self buildSlotsDefinitionsFor: properties existingClass: realClass). - changesToApply add: change. - - self ensurePackageNamed: packageName. - - comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: className comment: comment) ] -] - -{ #category : 'initialization' } -FmxMBRingEnvironment >> createTraitNamed: traitName traitDefinitions: traitDefinitions precedingTrait: precedingTrait properties: properties in: defaultPackage tag: defaultTag comment: comment [ - - | packageName tag realClass change | - realClass := self class environment at: traitName ifAbsent: [ nil ]. - - packageName := realClass - ifNil: [ defaultPackage ] - ifNotNil: [ realClass package name ]. - tag := realClass - ifNil: [ defaultTag ] - ifNotNil: [ realClass packageTag name ]. - - change := FmxTraitAddition new. - change - name: traitName; - package: packageName; - tag: tag. - - traitDefinitions ifNotEmpty: [ change traits: (self traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass) ]. - - properties ifNotEmpty: [ - self validateProperties: properties. - change slots: (self buildSlotsDefinitionsFor: properties existingClass: realClass) ]. - changesToApply add: change. - - self ensurePackageNamed: packageName. - - comment ifNotEmpty: [ changesToApply add: (FmxClassCommentUpdate className: traitName comment: comment) ] -] - -{ #category : 'private' } -FmxMBRingEnvironment >> ensurePackageNamed: packageName [ - - ((self changesOfType: FmxPackageAddition) anySatisfy: [ :change | change packageName = packageName ]) ifTrue: [ ^ self ]. - - changesToApply add: (FmxPackageAddition named: packageName) -] - -{ #category : 'initialization' } -FmxMBRingEnvironment >> initialize [ - - super initialize. - changesToApply := OrderedCollection new -] - -{ #category : 'testing' } -FmxMBRingEnvironment >> rawChangesToApply [ - - ^ changesToApply -] - -{ #category : 'installing' } -FmxMBRingEnvironment >> recordMethodRemovalsOf: realClass [ - - | generatedMethodsOfRealClass generatedMethodNamesOfRealClass selectorsToGenerate | - generatedMethodsOfRealClass := (Pragma allNamed: #generated in: realClass) - collect: #method - thenReject: [ :m | m isFromTrait ]. - - "In case we have an extension, we remove it if the package is the right one" - self flag: #todo. "Demeter. Clean package name management." - generatedMethodsOfRealClass := generatedMethodsOfRealClass reject: [ :method | (method hasPragmaNamed: #package:) and: [ ((method pragmaAt: #package:) argumentAt: 1) ~= self builder generator packageName ] ]. - - generatedMethodNamesOfRealClass := generatedMethodsOfRealClass collect: #selector. - - selectorsToGenerate := ((self changesOfType: FmxMethodAddition) select: [ :change | change className = realClass instanceSide name and: [ change isClassSide = realClass isClassSide ] ]) collect: #selector. - - "First we removed the generated methods should not be here anymore" - (generatedMethodNamesOfRealClass difference: selectorsToGenerate) ifNotEmpty: [ :selectorsOfRemovedGeneratedMethod | - changesToApply add: (FmxMethodRemovals className: realClass instanceSide name isClassSide: realClass isClassSide selectors: selectorsOfRemovedGeneratedMethod) ] -] - -{ #category : 'accessing' } -FmxMBRingEnvironment >> recordRemovalOfGeneratedPackagesAndClasses [ - "Since the last generation it is possible some behaviorals were removed from the generator. In that case we should remove them. We will remove all classes and traits of Famix that are not part of the current generator." - - | classesToGenerate | - classesToGenerate := (self changesOfType: FmxBehavioralAddition) collectAsSet: #name. - - (self changesOfType: FmxPackageAddition) - collect: #systemPackage - thenDo: [ :package | - package ifNotNil: [ - package definedClasses - select: #canBeGenerated - thenDo: [ :class | (classesToGenerate includes: class name) ifFalse: [ changesToApply add: (FmxClassRemoval class: class) ] ] ] ] -] - -{ #category : 'initialization' } -FmxMBRingEnvironment >> reset [ - - changesToApply := OrderedCollection new -] - -{ #category : 'installing' } -FmxMBRingEnvironment >> traitStringFrom: traitDefinitions precedingTrait: precedingTrait existingClass: realClass [ - "We need to collect the generated traits + the custom traits added by the user." - - | customTraitNames traitCompositionString | - customTraitNames := ((realClass - ifNil: [ #( ) ] - ifNotNil: [ :class | class traitComposition rootMembers ]) select: [ :e | realClass customTraitNames includes: e name ]) collect: - #traitCompositionExpression. - "manage methods to remove." - traitCompositionString := traitDefinitions , customTraitNames ifEmpty: [ ^ '{ }' ] ifNotEmpty: [ :definitions | definitions joinUsing: ' + ' ]. - - precedingTrait ifNil: [ ^ traitCompositionString ]. - - ^ String streamContents: [ :s | - s - nextPutAll: '('; - nextPutAll: traitCompositionString; - nextPutAll: ' withPrecedenceOf: '; - nextPutAll: precedingTrait; - nextPutAll: ')' ] -] - -{ #category : 'installing' } -FmxMBRingEnvironment >> validateProperties: properties [ - - | names | - names := properties collect: #name. - self assert: names size = names asSet size description: 'Two properties of the same class cannot have the same names.'. - properties do: [ :property | property validate ] -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index d3e232624..18c57b875 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -32,32 +32,6 @@ FmxMBTrait >> defaultTag [ ^ #Traits ] -{ #category : 'generating' } -FmxMBTrait >> generate [ - - self builder environment - createTraitNamed: self fullName - traitDefinitions: self allTraitDefinitions - precedingTrait: (self additionalProperties at: #precedingTrait ifAbsent: [ nil ]) - properties: (self propertiesAndRelations select: #producesSlot) - in: self packageName - tag: self tag - comment: self commentWithRelations. - - self generateAnnotation. - self generateAccessors -] - -{ #category : 'generating' } -FmxMBTrait >> generateRemotes [ - - | aTrait | - aTrait := self class environment at: self fullName ifAbsent: [ ^ self ]. - - (self propertiesAndRelations select: [ :prop | prop isRemote and: [ (aTrait localSelectors includes: prop name) not ] ]) do: [ :each | - each generateAccessorsIn: self ] -] - { #category : 'testing' } FmxMBTrait >> isMetamodelTrait [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTraitEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTraitEntity.class.st index e2c5370fa..bbe3e8b5d 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTraitEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTraitEntity.class.st @@ -12,13 +12,3 @@ FmxMBTraitEntity >> acceptVisitor: aVisitor [ ^ aVisitor visitTraitEntity: self ] - -{ #category : 'generating' } -FmxMBTraitEntity >> generate [ - - super generate. - - self - generateAddToCollection; - generateTestingMethods -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st index bad8a2403..b6d44f014 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTypedProperty.class.st @@ -30,22 +30,6 @@ FmxMBTypedProperty >> defaultValue: aValue [ defaultValue := aValue ] -{ #category : 'generating' } -FmxMBTypedProperty >> generateGetterIn: aFmxBehavioral [ - - aFmxBehavioral addMethod: (FmxMBMethodsFactory getTypedProperty: self) protocol: (self isRemote - ifTrue: [ '*' , self builder parentBuilderPackageName ] - ifFalse: [ #accessing ]) -] - -{ #category : 'generating' } -FmxMBTypedProperty >> generateSetterIn: aFmxBehavioral [ - - aFmxBehavioral addMethod: (FmxMBMethodsFactory setTypedProperty: self name remote: self isRemote) protocol: (self isRemote - ifTrue: [ '*' , self builder parentBuilderPackageName ] - ifFalse: [ 'accessing' ]) -] - { #category : 'generating' } FmxMBTypedProperty >> hasDefaultValue [ ^ defaultValue isNotNil diff --git a/src/Famix-MetamodelBuilder-Tests/FamixMetamodelBuilder.extension.st b/src/Famix-MetamodelBuilder-Tests/FamixMetamodelBuilder.extension.st index fa33a8249..b2ef30b6d 100644 --- a/src/Famix-MetamodelBuilder-Tests/FamixMetamodelBuilder.extension.st +++ b/src/Famix-MetamodelBuilder-Tests/FamixMetamodelBuilder.extension.st @@ -4,7 +4,6 @@ Extension { #name : 'FamixMetamodelBuilder' } FamixMetamodelBuilder >> beForTesting [ - self environment: (FmxMBStubEnvironment for: self). self configuration prefix: 'Tst'; packageName: 'Tst'. diff --git a/src/Famix-MetamodelBuilder-Tests/FamixMetamodelGenerator.extension.st b/src/Famix-MetamodelBuilder-Tests/FamixMetamodelGenerator.extension.st deleted file mode 100644 index e98bf3f7c..000000000 --- a/src/Famix-MetamodelBuilder-Tests/FamixMetamodelGenerator.extension.st +++ /dev/null @@ -1,8 +0,0 @@ -Extension { #name : 'FamixMetamodelGenerator' } - -{ #category : '*Famix-MetamodelBuilder-Tests' } -FamixMetamodelGenerator >> beForTesting [ - - builder environment: (FmxMBStubEnvironment for: builder). - -] diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st index 5a8853316..fc8522581 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st @@ -17,19 +17,6 @@ Class { #tag : 'Tests' } -{ #category : 'tests' } -FmxMBBuilderTest >> testChildBuildersShareTheSameEnvironment [ - - | parentBuilder childBuilder | - - parentBuilder := FamixMetamodelBuilder new. - childBuilder := FamixMetamodelBuilder new. - childBuilder parentBuilder: parentBuilder. - - self assert: childBuilder environment equals: parentBuilder environment. - -] - { #category : 'tests' } FmxMBBuilderTest >> testClassNamed [ diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBStubEnvironment.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBStubEnvironment.class.st deleted file mode 100644 index c00841d02..000000000 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBStubEnvironment.class.st +++ /dev/null @@ -1,13 +0,0 @@ -Class { - #name : 'FmxMBStubEnvironment', - #superclass : 'FmxMBRingEnvironment', - #category : 'Famix-MetamodelBuilder-Tests-Helpers', - #package : 'Famix-MetamodelBuilder-Tests', - #tag : 'Helpers' -} - -{ #category : 'accessing' } -FmxMBStubEnvironment >> apply [ - - "do nothing" -] diff --git a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st index 230229b8c..b18a470d6 100644 --- a/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st +++ b/src/Famix-Visitor-Generation/FmxMBVisitorTrait.class.st @@ -10,14 +10,6 @@ Class { #tag : 'MetamodelBuilder' } -{ #category : 'generating' } -FmxMBVisitorTrait >> acceptMethodProtocol [ - - ^ self packageName == self builder configuration packageName - ifTrue: [ #visitor ] - ifFalse: [ '*' , self packageName ] -] - { #category : 'visitor' } FmxMBVisitorTrait >> acceptVisitor: aVisitor [ @@ -32,21 +24,6 @@ FmxMBVisitorTrait >> comment [ I am generated with the metamodel.' format: { self prefix } ] -{ #category : 'generating' } -FmxMBVisitorTrait >> generate [ - - super generate. - - self allLocalTraits ifEmpty: [ - self addMethod: FmxMBMethodsFactory visitEntity protocol: #visiting. - self addMethod: FmxMBMethodsFactory visitCollection protocol: #visiting ]. - - (builder classes select: #isClassEntity) , (builder traits select: [ :fmxTrait | fmxTrait isMetamodelTrait and: [ fmxTrait isVisitorTrait not ] ]) do: [ - :fmxMBBehavior | - self addMethod: (FmxMBMethodsFactory visitBehavioral: fmxMBBehavior) protocol: #visiting. - fmxMBBehavior addMethod: (FmxMBMethodsFactory acceptFor: fmxMBBehavior fullName) protocol: self acceptMethodProtocol ] -] - { #category : 'initialization' } FmxMBVisitorTrait >> initialize [ From 3d9c125d96fc95774556849a15ef55cddaaf0d14 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Sun, 10 May 2026 02:28:17 +0200 Subject: [PATCH 107/121] Clean code --- ...xtension.st => FmxMBRelation.extension.st} | 4 +- ...etamodelGeneratorCleaningStrategy.class.st | 4 +- ...amodelGeneratorNoCleaningStrategy.class.st | 4 +- ...delGeneratorTotalCleaningStrategy.class.st | 4 +- .../FmxBehavioralAddition.class.st | 4 +- .../FmxClassAddition.class.st | 4 +- .../FmxClassCommentUpdate.class.st | 4 +- .../FmxClassRemoval.class.st | 4 +- .../FmxCodeChange.class.st | 4 +- .../FmxLazyClassChange.class.st | 4 +- ...mxMBAbstractChangesBuilderVisitor.class.st | 4 +- .../FmxMBBehavior.class.st | 8 +- .../FmxMBChangesBuilderVisitor.class.st | 4 +- .../FmxMBEntityAlreadyExists.class.st | 4 +- .../FmxMBIncompletePropertyDefiniton.class.st | 4 +- .../FmxMBMethodsFactory.class.st | 4 +- .../FmxMBPlantTextVisitor.class.st | 4 +- .../FmxMBPlantTextVisitorPartial.class.st | 11 +- .../FmxMBPrintVisitor.class.st | 4 +- .../FmxMBPropertyNameIsReserved.class.st | 4 +- ...onSide.class.st => FmxMBRelation.class.st} | 100 +++++++++--------- ...lationAccessorsGenerationStrategy.class.st | 36 +++---- ...ationAttributesGenerationStrategy.class.st | 58 +++++----- .../FmxMBRelationSideTrait.trait.st | 86 +++++++-------- ...MBRelationSlotsGenerationStrategy.class.st | 14 +-- .../FmxMBRemoteChangesBuilderVisitor.class.st | 4 +- .../FmxMBTrait.class.st | 4 +- .../FmxMBVisitor.class.st | 2 +- .../FmxMethodAddition.class.st | 4 +- .../FmxMethodRemovals.class.st | 4 +- .../FmxPackageAddition.class.st | 4 +- .../FmxSlotRemovals.class.st | 4 +- .../FmxTraitAddition.class.st | 4 +- .../FmxMBRelationSideTest.class.st | 6 +- 34 files changed, 210 insertions(+), 211 deletions(-) rename src/Famix-Deprecated/{FmxMBRelationSide.extension.st => FmxMBRelation.extension.st} (63%) rename src/Famix-MetamodelBuilder-Core/{FmxMBRelationSide.class.st => FmxMBRelation.class.st} (69%) diff --git a/src/Famix-Deprecated/FmxMBRelationSide.extension.st b/src/Famix-Deprecated/FmxMBRelation.extension.st similarity index 63% rename from src/Famix-Deprecated/FmxMBRelationSide.extension.st rename to src/Famix-Deprecated/FmxMBRelation.extension.st index b99e58941..5da07bc88 100644 --- a/src/Famix-Deprecated/FmxMBRelationSide.extension.st +++ b/src/Famix-Deprecated/FmxMBRelation.extension.st @@ -1,7 +1,7 @@ -Extension { #name : 'FmxMBRelationSide' } +Extension { #name : 'FmxMBRelation' } { #category : '*Famix-Deprecated' } -FmxMBRelationSide >> withNavigation [ +FmxMBRelation >> withNavigation [ self deprecated: 'Navigation are not used anymore by MooseIDE and got removed from the generator.' ] diff --git a/src/Famix-MetamodelBuilder-Core/FamixAbstractMetamodelGeneratorCleaningStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FamixAbstractMetamodelGeneratorCleaningStrategy.class.st index 9214238e2..e4e877296 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixAbstractMetamodelGeneratorCleaningStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixAbstractMetamodelGeneratorCleaningStrategy.class.st @@ -9,9 +9,9 @@ Cleaning strategies are used by a MM generator to know how to regenerate a MM. Class { #name : 'FamixAbstractMetamodelGeneratorCleaningStrategy', #superclass : 'Object', - #category : 'Famix-MetamodelBuilder-Core-Cleaning', + #category : 'Famix-MetamodelBuilder-Core-Basic', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Cleaning' + #tag : 'Basic' } { #category : 'testing' } diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelGeneratorNoCleaningStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelGeneratorNoCleaningStrategy.class.st index baf269089..c4fea115f 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelGeneratorNoCleaningStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelGeneratorNoCleaningStrategy.class.st @@ -7,9 +7,9 @@ I am a cleaning strategy that cleans nothing (Null design patter) Class { #name : 'FamixMetamodelGeneratorNoCleaningStrategy', #superclass : 'FamixAbstractMetamodelGeneratorCleaningStrategy', - #category : 'Famix-MetamodelBuilder-Core-Cleaning', + #category : 'Famix-MetamodelBuilder-Core-Basic', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Cleaning' + #tag : 'Basic' } { #category : 'action' } diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelGeneratorTotalCleaningStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelGeneratorTotalCleaningStrategy.class.st index c25daa50e..0e60f733a 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelGeneratorTotalCleaningStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelGeneratorTotalCleaningStrategy.class.st @@ -7,9 +7,9 @@ I am a hard cleaning strategy. I'll just delete the package generated by the gen Class { #name : 'FamixMetamodelGeneratorTotalCleaningStrategy', #superclass : 'FamixAbstractMetamodelGeneratorCleaningStrategy', - #category : 'Famix-MetamodelBuilder-Core-Cleaning', + #category : 'Famix-MetamodelBuilder-Core-Basic', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Cleaning' + #tag : 'Basic' } { #category : 'action' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st index 8578bf42e..5dfc0de90 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st @@ -8,9 +8,9 @@ Class { 'package', 'tag' ], - #category : 'Famix-MetamodelBuilder-Core-Changes', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Changes' + #tag : 'Generation' } { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st index 1777578f9..7a9f33ea8 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxClassAddition.class.st @@ -25,9 +25,9 @@ Class { #instVars : [ 'superclass' ], - #category : 'Famix-MetamodelBuilder-Core-Changes', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Changes' + #tag : 'Generation' } { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxClassCommentUpdate.class.st b/src/Famix-MetamodelBuilder-Core/FmxClassCommentUpdate.class.st index f3e308b4a..50c3f40df 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxClassCommentUpdate.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxClassCommentUpdate.class.st @@ -22,9 +22,9 @@ Class { #instVars : [ 'comment' ], - #category : 'Famix-MetamodelBuilder-Core-Changes', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Changes' + #tag : 'Generation' } { #category : 'instance creation' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxClassRemoval.class.st b/src/Famix-MetamodelBuilder-Core/FmxClassRemoval.class.st index 6da564d03..72e80e1ad 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxClassRemoval.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxClassRemoval.class.st @@ -22,9 +22,9 @@ Class { #instVars : [ 'class' ], - #category : 'Famix-MetamodelBuilder-Core-Changes', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Changes' + #tag : 'Generation' } { #category : 'instance creation' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxCodeChange.class.st b/src/Famix-MetamodelBuilder-Core/FmxCodeChange.class.st index 5248d3de0..bd4342076 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxCodeChange.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxCodeChange.class.st @@ -16,9 +16,9 @@ Public API and Key Messages Class { #name : 'FmxCodeChange', #superclass : 'Object', - #category : 'Famix-MetamodelBuilder-Core-Changes', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Changes' + #tag : 'Generation' } { #category : 'testing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxLazyClassChange.class.st b/src/Famix-MetamodelBuilder-Core/FmxLazyClassChange.class.st index 5d5431888..2fcb3e935 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxLazyClassChange.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxLazyClassChange.class.st @@ -20,9 +20,9 @@ Class { 'className', 'isClassSide' ], - #category : 'Famix-MetamodelBuilder-Core-Changes', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Changes' + #tag : 'Generation' } { #category : 'testing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBAbstractChangesBuilderVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBAbstractChangesBuilderVisitor.class.st index 43ee3fd21..d6eb07dbe 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBAbstractChangesBuilderVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBAbstractChangesBuilderVisitor.class.st @@ -6,9 +6,9 @@ Class { 'currentBehavioral', 'changesToApply' ], - #category : 'Famix-MetamodelBuilder-Core-Implementation', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' + #tag : 'Generation' } { #category : 'instance creation' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 9e22af354..9d229c6aa 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -49,7 +49,7 @@ FmxMBBehavior >> addAllTransitiveTraitsIn: aCollection [ ] { #category : 'accessing' } -FmxMBBehavior >> addRelationSide: aRelation [ +FmxMBBehavior >> addRelation: aRelation [ (self relations anySatisfy: [ :relation | relation name = aRelation name ]) ifTrue: [ ^ self ]. @@ -117,7 +117,7 @@ FmxMBBehavior >> allTransitiveTraitsIncludingSuperclasses [ ] { #category : 'converting' } -FmxMBBehavior >> asRelationSideNamed: aPropertyName [ +FmxMBBehavior >> asRelationNamed: aPropertyName [ ^ self property: aPropertyName ] @@ -343,13 +343,13 @@ FmxMBBehavior >> property: propertyName [ self assert: propertyName isString. - aSide := FmxMBRelationSide new + aSide := FmxMBRelation new builder: self builder; relatedClass: self; name: propertyName; yourself. - self addRelationSide: aSide. + self addRelation: aSide. ^ aSide. ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st index 0b55ccea9..8512a939a 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st @@ -1,9 +1,9 @@ Class { #name : 'FmxMBChangesBuilderVisitor', #superclass : 'FmxMBAbstractChangesBuilderVisitor', - #category : 'Famix-MetamodelBuilder-Core-Implementation', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' + #tag : 'Generation' } { #category : 'generation' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntityAlreadyExists.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntityAlreadyExists.class.st index 843c1d1b2..f6ff9e1ef 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntityAlreadyExists.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntityAlreadyExists.class.st @@ -1,9 +1,9 @@ Class { #name : 'FmxMBEntityAlreadyExists', #superclass : 'Error', - #category : 'Famix-MetamodelBuilder-Core-Implementation', + #category : 'Famix-MetamodelBuilder-Core-Exception', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' + #tag : 'Exception' } { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBIncompletePropertyDefiniton.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBIncompletePropertyDefiniton.class.st index 915483243..9a8482532 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBIncompletePropertyDefiniton.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBIncompletePropertyDefiniton.class.st @@ -4,9 +4,9 @@ FamixMetamodelBuilderIncompletePropertyDefiniton Class { #name : 'FmxMBIncompletePropertyDefiniton', #superclass : 'Error', - #category : 'Famix-MetamodelBuilder-Core-Implementation', + #category : 'Famix-MetamodelBuilder-Core-Exception', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' + #tag : 'Exception' } { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st index 451b1a50b..27b4fd8b3 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st @@ -8,9 +8,9 @@ I'll be used during the generation of a metamodel. Class { #name : 'FmxMBMethodsFactory', #superclass : 'Object', - #category : 'Famix-MetamodelBuilder-Core-Implementation', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' + #tag : 'Generation' } { #category : 'code generation' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st index 8198da842..1d0ccf026 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitor.class.st @@ -192,9 +192,9 @@ FmxMBPlantTextVisitor >> visitClass: aClass [ ] { #category : 'visiting' } -FmxMBPlantTextVisitor >> visitRelation: aRelationSide [ +FmxMBPlantTextVisitor >> visitRelation: aRelation [ - relations add: aRelationSide + relations add: aRelation ] { #category : 'visiting' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitorPartial.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitorPartial.class.st index 254538284..3f0eeab99 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitorPartial.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBPlantTextVisitorPartial.class.st @@ -31,9 +31,9 @@ FmxMBPlantTextVisitorPartial >> isWantedClass: aClass [ ] { #category : 'testing' } -FmxMBPlantTextVisitorPartial >> isWantedRelation: aRelationSide [ +FmxMBPlantTextVisitorPartial >> isWantedRelation: aRelation [ - ^ aRelationSide relations allSatisfy: [ :side | side relatedClass isNotNil and: [ self isWantedClass: side relatedClass ] ] + ^ aRelation relations allSatisfy: [ :side | side relatedClass isNotNil and: [ self isWantedClass: side relatedClass ] ] ] { #category : 'visiting' } @@ -43,11 +43,10 @@ FmxMBPlantTextVisitorPartial >> visitClass: aClass [ ] { #category : 'visiting' } -FmxMBPlantTextVisitorPartial >> visitRelation: aRelationSide [ - (self isWantedRelation: aRelationSide) - ifFalse: [ ^ self ]. - super visitRelation: aRelationSide +FmxMBPlantTextVisitorPartial >> visitRelation: aRelation [ + (self isWantedRelation: aRelation) ifFalse: [ ^ self ]. + super visitRelation: aRelation ] { #category : 'relations' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBPrintVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBPrintVisitor.class.st index ea40a6f10..1c838452f 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBPrintVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBPrintVisitor.class.st @@ -57,10 +57,10 @@ FmxMBPrintVisitor >> visitClass: aClass [ ] { #category : 'visiting' } -FmxMBPrintVisitor >> visitRelation: aRelationSide [ +FmxMBPrintVisitor >> visitRelation: aRelation [ self trace: - aRelationSide name , ' (' , aRelationSide oppositeType , ')' + aRelation name , ' (' , aRelation oppositeType , ')' ] { #category : 'visiting' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBPropertyNameIsReserved.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBPropertyNameIsReserved.class.st index ed68e698d..b8ea665fd 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBPropertyNameIsReserved.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBPropertyNameIsReserved.class.st @@ -1,9 +1,9 @@ Class { #name : 'FmxMBPropertyNameIsReserved', #superclass : 'Error', - #category : 'Famix-MetamodelBuilder-Core-Implementation', + #category : 'Famix-MetamodelBuilder-Core-Exception', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' + #tag : 'Exception' } { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st similarity index 69% rename from src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st rename to src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st index cfd0b0d45..bea573d84 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSide.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st @@ -2,7 +2,7 @@ Represents a property referencing another entity " Class { - #name : 'FmxMBRelationSide', + #name : 'FmxMBRelation', #superclass : 'FmxMBProperty', #traits : 'FmxMBRelationSideTrait', #classTraits : 'FmxMBRelationSideTrait classTrait', @@ -22,52 +22,52 @@ Class { } { #category : 'visitor' } -FmxMBRelationSide >> acceptVisitor: aVisitor [ +FmxMBRelation >> acceptVisitor: aVisitor [ ^ aVisitor visitRelation: self. ] { #category : 'converting' } -FmxMBRelationSide >> asRelationSideNamed: aPropertyName [ +FmxMBRelation >> asRelationNamed: aPropertyName [ "ignore the proposed name" ^ self ] { #category : 'accessing' } -FmxMBRelationSide >> cardinality [ +FmxMBRelation >> cardinality [ ^ cardinality ] { #category : 'accessing' } -FmxMBRelationSide >> cardinality: anObject [ +FmxMBRelation >> cardinality: anObject [ cardinality := anObject ] { #category : 'properties' } -FmxMBRelationSide >> container [ +FmxMBRelation >> container [ container := true ] { #category : 'accessing' } -FmxMBRelationSide >> container: anObject [ +FmxMBRelation >> container: anObject [ container := anObject ] { #category : 'properties' } -FmxMBRelationSide >> derived [ +FmxMBRelation >> derived [ derived := true ] { #category : 'properties' } -FmxMBRelationSide >> derived: anObject [ +FmxMBRelation >> derived: anObject [ derived := anObject ] { #category : 'initialization' } -FmxMBRelationSide >> initialize [ +FmxMBRelation >> initialize [ super initialize. cardinality := #one. @@ -78,100 +78,100 @@ FmxMBRelationSide >> initialize [ ] { #category : 'properties' } -FmxMBRelationSide >> isContainer [ +FmxMBRelation >> isContainer [ ^ container ] { #category : 'properties' } -FmxMBRelationSide >> isDerived [ +FmxMBRelation >> isDerived [ ^ derived ] { #category : 'testing' } -FmxMBRelationSide >> isMany [ +FmxMBRelation >> isMany [ ^ self cardinality = #many ] { #category : 'testing' } -FmxMBRelationSide >> isOne [ +FmxMBRelation >> isOne [ ^ self cardinality = #one ] { #category : 'testing' } -FmxMBRelationSide >> isRelation [ +FmxMBRelation >> isRelation [ ^ true ] { #category : 'testing' } -FmxMBRelationSide >> isRemote [ +FmxMBRelation >> isRemote [ ^ self relatedClass isRemote ] { #category : 'properties' } -FmxMBRelationSide >> isSource [ +FmxMBRelation >> isSource [ ^ source ] { #category : 'properties' } -FmxMBRelationSide >> isTarget [ +FmxMBRelation >> isTarget [ ^ target ] { #category : 'converting' } -FmxMBRelationSide >> makeRemote [ +FmxMBRelation >> makeRemote [ self isRemote: true ] { #category : 'accessing' } -FmxMBRelationSide >> many [ +FmxMBRelation >> many [ cardinality := #many ] { #category : 'properties' } -FmxMBRelationSide >> noContainer [ +FmxMBRelation >> noContainer [ container := false ] { #category : 'properties' } -FmxMBRelationSide >> notDerived [ +FmxMBRelation >> notDerived [ derived := false ] { #category : 'accessing' } -FmxMBRelationSide >> one [ +FmxMBRelation >> one [ cardinality := #one ] { #category : 'accessing' } -FmxMBRelationSide >> oppositeClass [ +FmxMBRelation >> oppositeClass [ ^ oppositeSide relatedEntity ] { #category : 'accessing' } -FmxMBRelationSide >> oppositeName [ +FmxMBRelation >> oppositeName [ ^ self oppositeSide name asSymbol ] { #category : 'accessing' } -FmxMBRelationSide >> oppositeSide [ +FmxMBRelation >> oppositeSide [ ^ oppositeSide ] { #category : 'accessing' } -FmxMBRelationSide >> oppositeSide: anObject [ +FmxMBRelation >> oppositeSide: anObject [ "We keep an opposite relation bidirectional" oppositeSide := anObject. @@ -179,18 +179,18 @@ FmxMBRelationSide >> oppositeSide: anObject [ ] { #category : 'accessing' } -FmxMBRelationSide >> oppositeType [ +FmxMBRelation >> oppositeType [ ^ (self oppositeSide builder configuration prefix , self oppositeSide relatedEntityName) asSymbol ] { #category : 'private' } -FmxMBRelationSide >> pluralPropertyName [ +FmxMBRelation >> pluralPropertyName [ ^ self propertyName ] { #category : 'printing' } -FmxMBRelationSide >> producesSlot [ +FmxMBRelation >> producesSlot [ "I produce a slot if one of the side is remote. Else we will use the attribute mecanism" self relatedClass isRemote ifTrue: [ ^ false ]. @@ -199,41 +199,41 @@ FmxMBRelationSide >> producesSlot [ ] { #category : 'private' } -FmxMBRelationSide >> propertyName [ +FmxMBRelation >> propertyName [ ^ self relatedClass propertyName ] { #category : 'accessing' } -FmxMBRelationSide >> relatedClass [ +FmxMBRelation >> relatedClass [ ^ relatedClass ] { #category : 'accessing' } -FmxMBRelationSide >> relatedClass: anObject [ +FmxMBRelation >> relatedClass: anObject [ relatedClass := anObject ] { #category : 'accessing' } -FmxMBRelationSide >> relatedEntity [ +FmxMBRelation >> relatedEntity [ ^ trait ifNil: [ relatedClass ] ] { #category : 'accessing' } -FmxMBRelationSide >> relatedEntityName [ +FmxMBRelation >> relatedEntityName [ ^ self relatedEntity name ] { #category : 'accessing' } -FmxMBRelationSide >> remoteBuilderDo: aBlock [ +FmxMBRelation >> remoteBuilderDo: aBlock [ self relatedEntity additionalProperties at: #remoteBuilder ifPresent: aBlock ] { #category : 'accessing' } -FmxMBRelationSide >> shortCardinalityString [ +FmxMBRelation >> shortCardinalityString [ ^ self isMany ifTrue: [ '*' ] @@ -241,7 +241,7 @@ FmxMBRelationSide >> shortCardinalityString [ ] { #category : 'accessing' } -FmxMBRelationSide >> sides [ +FmxMBRelation >> sides [ ^ { self. @@ -249,7 +249,7 @@ FmxMBRelationSide >> sides [ ] { #category : 'name conversion' } -FmxMBRelationSide >> singularPropertyName [ +FmxMBRelation >> singularPropertyName [ | normalizedName uncapitalized aName | @@ -268,7 +268,7 @@ FmxMBRelationSide >> singularPropertyName [ ] { #category : 'generating' } -FmxMBRelationSide >> slotExpression [ +FmxMBRelation >> slotExpression [ ^ (cardinality = #one ifTrue: [ 'FMOne' ] @@ -276,47 +276,47 @@ FmxMBRelationSide >> slotExpression [ ] { #category : 'properties' } -FmxMBRelationSide >> source [ +FmxMBRelation >> source [ source := true. ] { #category : 'properties' } -FmxMBRelationSide >> source: aBoolean [ +FmxMBRelation >> source: aBoolean [ source := aBoolean ] { #category : 'properties' } -FmxMBRelationSide >> target [ +FmxMBRelation >> target [ target := true. ] { #category : 'properties' } -FmxMBRelationSide >> target: anObject [ +FmxMBRelation >> target: anObject [ target := anObject ] { #category : 'accessing' } -FmxMBRelationSide >> trait [ +FmxMBRelation >> trait [ ^ trait ] { #category : 'accessing' } -FmxMBRelationSide >> trait: anObject [ - self relatedEntity ifNotNil: [ :aRelatedEntity | aRelatedEntity removeRelationSide: self ]. +FmxMBRelation >> trait: anObject [ + self relatedEntity ifNotNil: [ :aRelatedEntity | aRelatedEntity removeRelation: self ]. trait := anObject. - trait addRelationSide: self + trait addRelation: self ] { #category : 'accessing' } -FmxMBRelationSide >> type [ +FmxMBRelation >> type [ ^ (self builder configuration prefix , self relatedEntityName) asSymbol ] { #category : 'generating' } -FmxMBRelationSide >> validate [ +FmxMBRelation >> validate [ "Nothing to validate here" diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st index d68e8f6f5..79664c8ed 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st @@ -9,9 +9,9 @@ Class { #classInstVars : [ 'defaultInstance' ], - #category : 'Famix-MetamodelBuilder-Core-Implementation', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' + #tag : 'Generation' } { #category : 'accessing' } @@ -22,22 +22,22 @@ FmxMBRelationAccessorsGenerationStrategy class >> defaultInstance [ ] { #category : 'generation' } -FmxMBRelationAccessorsGenerationStrategy >> generateGetterCodeFor: aRelationSide [ +FmxMBRelationAccessorsGenerationStrategy >> generateGetterCodeFor: aRelation [ | commentDefinition | - commentDefinition := aRelationSide comment ifNotEmpty: [ :comment | '' format: { comment printString } ]. + commentDefinition := aRelation comment ifNotEmpty: [ :comment | '' format: { comment printString } ]. ^ String streamContents: [ :s | s - nextPutAll: aRelationSide name; + nextPutAll: aRelation name; cr; tab; nextPutAll: '"Relation named: #'; - nextPutAll: aRelationSide name; + nextPutAll: aRelation name; nextPutAll: ' type: #'; - nextPutAll: aRelationSide oppositeType; + nextPutAll: aRelation oppositeType; nextPutAll: ' opposite: #'; - nextPutAll: aRelationSide oppositeName; + nextPutAll: aRelation oppositeName; nextPutAll: '"'; cr; cr. @@ -50,42 +50,42 @@ FmxMBRelationAccessorsGenerationStrategy >> generateGetterCodeFor: aRelationSide tab; nextPutAll: commentDefinition; cr ]. - aRelationSide isContainer ifTrue: [ + aRelation isContainer ifTrue: [ s tab; nextPutAll: ''; cr ]. - aRelationSide isDerived ifTrue: [ + aRelation isDerived ifTrue: [ s tab; nextPutAll: ''; cr ]. - aRelationSide isSource ifTrue: [ + aRelation isSource ifTrue: [ s tab; nextPutAll: ''; cr ]. - aRelationSide isTarget ifTrue: [ + aRelation isTarget ifTrue: [ s tab; nextPutAll: ''; cr ]. - self generateGetterCoreOn: s for: aRelationSide ] + self generateGetterCoreOn: s for: aRelation ] ] { #category : 'generation' } -FmxMBRelationAccessorsGenerationStrategy >> generateGetterCoreOn: aStream for: aRelationSide [ +FmxMBRelationAccessorsGenerationStrategy >> generateGetterCoreOn: aStream for: aRelation [ ^ self subclassResponsibility ] { #category : 'generation' } -FmxMBRelationAccessorsGenerationStrategy >> generateSetterCodeFor: aRelationSide [ +FmxMBRelationAccessorsGenerationStrategy >> generateSetterCodeFor: aRelation [ ^ String streamContents: [ :s | s - nextPutAll: aRelationSide name; + nextPutAll: aRelation name; nextPutAll: ': anObject'; cr; cr. @@ -93,11 +93,11 @@ FmxMBRelationAccessorsGenerationStrategy >> generateSetterCodeFor: aRelationSide tab; nextPutAll: ''; cr. - self generateSetterCoreOn: s for: aRelationSide ] + self generateSetterCoreOn: s for: aRelation ] ] { #category : 'generation' } -FmxMBRelationAccessorsGenerationStrategy >> generateSetterCoreOn: aStream for: aRelationSide [ +FmxMBRelationAccessorsGenerationStrategy >> generateSetterCoreOn: aStream for: aRelation [ ^ self subclassResponsibility ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st index 1e7930aca..d0ceb429a 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st @@ -6,30 +6,30 @@ This is used when one of the side of the relation is remote. Class { #name : 'FmxMBRelationAttributesGenerationStrategy', #superclass : 'FmxMBRelationAccessorsGenerationStrategy', - #category : 'Famix-MetamodelBuilder-Core-Implementation', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' + #tag : 'Generation' } { #category : 'generation' } -FmxMBRelationAttributesGenerationStrategy >> generateGetterCoreOn: aStream for: aRelationSide [ +FmxMBRelationAttributesGenerationStrategy >> generateGetterCoreOn: aStream for: aRelation [ aStream tab; nextPutAll: ('' format: { - aRelationSide name. - aRelationSide oppositeType. - aRelationSide oppositeName }); + aRelation name. + aRelation oppositeType. + aRelation oppositeName }); cr. "We need to add the multivalued since we do not use a FMMany slot." - aRelationSide isMany ifTrue: [ + aRelation isMany ifTrue: [ aStream tab; nextPutAll: ''; cr ]. - aRelationSide remoteBuilderDo: [ :aRemoteBuilder | + aRelation remoteBuilderDo: [ :aRemoteBuilder | aStream tab; nextPutAll: ('' format: { aRemoteBuilder generator packageName }); @@ -38,67 +38,67 @@ FmxMBRelationAttributesGenerationStrategy >> generateGetterCoreOn: aStream for: aStream tab; nextPutAll: '^ self attributeAt: #'; - nextPutAll: aRelationSide name. + nextPutAll: aRelation name. - aRelationSide isOne ifTrue: [ aStream nextPutAll: ' ifAbsent: [ nil ]' ]. + aRelation isOne ifTrue: [ aStream nextPutAll: ' ifAbsent: [ nil ]' ]. - (aRelationSide oppositeSide isOne and: [ aRelationSide isMany ]) ifTrue: [ - aStream nextPutAll: (' ifAbsentPut: [ FMMultivalueLink on: self opposite: #{1}: ]' format: { aRelationSide oppositeSide name }) ]. + (aRelation oppositeSide isOne and: [ aRelation isMany ]) ifTrue: [ + aStream nextPutAll: (' ifAbsentPut: [ FMMultivalueLink on: self opposite: #{1}: ]' format: { aRelation oppositeSide name }) ]. - (aRelationSide isMany and: [ aRelationSide oppositeSide isMany ]) ifTrue: [ - aStream nextPutAll: (' ifAbsentPut: [ FMMultiMultivalueLink on: self opposite: #{1} ]' format: { aRelationSide oppositeSide name }) ] + (aRelation isMany and: [ aRelation oppositeSide isMany ]) ifTrue: [ + aStream nextPutAll: (' ifAbsentPut: [ FMMultiMultivalueLink on: self opposite: #{1} ]' format: { aRelation oppositeSide name }) ] ] { #category : 'generation' } -FmxMBRelationAttributesGenerationStrategy >> generateSetterCoreOn: aStream for: aRelationSide [ +FmxMBRelationAttributesGenerationStrategy >> generateSetterCoreOn: aStream for: aRelation [ - aRelationSide remoteBuilderDo: [ :aRemoteBuilder | + aRelation remoteBuilderDo: [ :aRemoteBuilder | aStream tab; nextPutAll: ('' format: { aRemoteBuilder generator packageName }); cr; cr ]. - (aRelationSide isOne and: [ aRelationSide oppositeSide isOne ]) ifTrue: [ + (aRelation isOne and: [ aRelation oppositeSide isOne ]) ifTrue: [ aStream tab; - nextPutAll: ('(self attributeAt: #{1} ifAbsentPut: [nil]) == anObject ifTrue: [ ^ anObject ].' format: { aRelationSide name }); + nextPutAll: ('(self attributeAt: #{1} ifAbsentPut: [nil]) == anObject ifTrue: [ ^ anObject ].' format: { aRelation name }); cr; tab; nextPutAll: 'anObject ifNil: [ | otherSide |'; cr; tab; tab; - nextPutAll: ('otherSide := self {1}.' format: { aRelationSide name }); + nextPutAll: ('otherSide := self {1}.' format: { aRelation name }); cr; tab; tab; - nextPutAll: ('self attributeAt: #{1} put: anObject.' format: { aRelationSide name }); + nextPutAll: ('self attributeAt: #{1} put: anObject.' format: { aRelation name }); cr; tab; tab; - nextPutAll: ('otherSide {1}: nil ]' format: { aRelationSide oppositeSide name }); + nextPutAll: ('otherSide {1}: nil ]' format: { aRelation oppositeSide name }); cr; tab; - nextPutAll: ('ifNotNil: [ ' format: { aRelationSide oppositeSide name }); + nextPutAll: ('ifNotNil: [ ' format: { aRelation oppositeSide name }); cr; tab; tab; - nextPutAll: ('self attributeAt: #{1} put: anObject.' format: { aRelationSide name }); + nextPutAll: ('self attributeAt: #{1} put: anObject.' format: { aRelation name }); cr; tab; tab; - nextPutAll: ('anObject {1}: self ]' format: { aRelationSide oppositeSide name }) ]. + nextPutAll: ('anObject {1}: self ]' format: { aRelation oppositeSide name }) ]. - aRelationSide isMany ifTrue: [ + aRelation isMany ifTrue: [ aStream tab; - nextPutAll: ('self {1} value: anObject' format: { aRelationSide name }) ]. + nextPutAll: ('self {1} value: anObject' format: { aRelation name }) ]. - (aRelationSide oppositeSide isMany and: [ aRelationSide isOne ]) ifTrue: [ + (aRelation oppositeSide isMany and: [ aRelation isOne ]) ifTrue: [ aStream tab; nextPutAll: ('self attributeAt: #{1} put: (FMMultivalueLink on: self update: #{2} from: self {1} to: anObject).' format: { - aRelationSide name. - aRelationSide oppositeSide name }) ] + aRelation name. + aRelation oppositeSide name }) ] ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st index 011904f2c..f8e2655f9 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSideTrait.trait.st @@ -1,67 +1,67 @@ Trait { #name : 'FmxMBRelationSideTrait', - #category : 'Famix-MetamodelBuilder-Core-Traits', + #category : 'Famix-MetamodelBuilder-Core-Implementation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Traits' + #tag : 'Implementation' } { #category : 'relations - arrows' } -FmxMBRelationSideTrait >> *- aRelationSide [ +FmxMBRelationSideTrait >> *- relationOrBehavior [ - ^ self manyToOne: aRelationSide + ^ self manyToOne: relationOrBehavior ] { #category : 'relations - arrows' } -FmxMBRelationSideTrait >> *-* aRelationSide [ +FmxMBRelationSideTrait >> *-* relationOrBehavior [ - ^ self manyToMany: aRelationSide + ^ self manyToMany: relationOrBehavior ] { #category : 'relations - arrows' } -FmxMBRelationSideTrait >> *-<> aRelationSide [ +FmxMBRelationSideTrait >> *-<> relationOrBehavior [ - ^ self manyBelongTo: aRelationSide + ^ self manyBelongTo: relationOrBehavior ] { #category : 'relations - arrows' } -FmxMBRelationSideTrait >> - aRelationSide [ +FmxMBRelationSideTrait >> - relationOrBehavior [ - ^ self oneToOne: aRelationSide + ^ self oneToOne: relationOrBehavior ] { #category : 'relations - arrows' } -FmxMBRelationSideTrait >> -* aRelationSide [ +FmxMBRelationSideTrait >> -* relationOrBehavior [ - ^ self oneToMany: aRelationSide + ^ self oneToMany: relationOrBehavior ] { #category : 'relations - arrows' } -FmxMBRelationSideTrait >> -<> aRelationSide [ +FmxMBRelationSideTrait >> -<> relationOrBehavior [ - ^ self oneBelongsTo: aRelationSide + ^ self oneBelongsTo: relationOrBehavior ] { #category : 'relations - arrows' } -FmxMBRelationSideTrait >> <>- aRelationSide [ +FmxMBRelationSideTrait >> <>- relationOrBehavior [ - ^ self containsOne: aRelationSide + ^ self containsOne: relationOrBehavior ] { #category : 'relations - arrows' } -FmxMBRelationSideTrait >> <>-* aRelationSide [ +FmxMBRelationSideTrait >> <>-* relationOrBehavior [ - ^ self containsMany: aRelationSide + ^ self containsMany: relationOrBehavior ] { #category : 'relations - named' } -FmxMBRelationSideTrait >> asRelationSideNamed: aPropertyName [ +FmxMBRelationSideTrait >> asRelationNamed: aPropertyName [ self explicitRequirement @@ -69,99 +69,99 @@ FmxMBRelationSideTrait >> asRelationSideNamed: aPropertyName [ ] { #category : 'relations - named containers' } -FmxMBRelationSideTrait >> containsMany: aRelationSide [ +FmxMBRelationSideTrait >> containsMany: relationOrBehavior [ | aRelation | - aRelation := self oneToMany: aRelationSide. + aRelation := self oneToMany: relationOrBehavior. aRelation oppositeSide container. ^ aRelation ] { #category : 'relations - named containers' } -FmxMBRelationSideTrait >> containsOne: aRelationSide [ +FmxMBRelationSideTrait >> containsOne: relationOrBehavior [ | aRelation | - aRelation := self oneToOne: aRelationSide. + aRelation := self oneToOne: relationOrBehavior. aRelation oppositeSide container. ^ aRelation ] { #category : 'relations - named containers' } -FmxMBRelationSideTrait >> manyBelongTo: aRelationSide [ +FmxMBRelationSideTrait >> manyBelongTo: relationOrBehavior [ - ^ (self manyToOne: aRelationSide) + ^ (self manyToOne: relationOrBehavior) container; yourself ] { #category : 'relations - named' } -FmxMBRelationSideTrait >> manyToMany: aRelationSide [ +FmxMBRelationSideTrait >> manyToMany: relationOrBehavior [ | ownSide oppositeSide | - ownSide := self asRelationSideNamed: aRelationSide pluralPropertyName. - oppositeSide := aRelationSide asRelationSideNamed: self pluralPropertyName. + ownSide := self asRelationNamed: relationOrBehavior pluralPropertyName. + oppositeSide := relationOrBehavior asRelationNamed: self pluralPropertyName. ownSide many. ownSide derived. oppositeSide many. ownSide oppositeSide: oppositeSide. self isRemote ifTrue: [ ownSide makeRemote ]. - aRelationSide isRemote ifTrue: [ oppositeSide makeRemote ]. + relationOrBehavior isRemote ifTrue: [ oppositeSide makeRemote ]. ^ ownSide ] { #category : 'relations - named' } -FmxMBRelationSideTrait >> manyToOne: aRelationSide [ +FmxMBRelationSideTrait >> manyToOne: relationOrBehavior [ | ownSide oppositeSide | - ownSide := self asRelationSideNamed: aRelationSide singularPropertyName. - oppositeSide := aRelationSide asRelationSideNamed: self pluralPropertyName. + ownSide := self asRelationNamed: relationOrBehavior singularPropertyName. + oppositeSide := relationOrBehavior asRelationNamed: self pluralPropertyName. oppositeSide many. oppositeSide derived. ownSide oppositeSide: oppositeSide. self isRemote ifTrue: [ ownSide makeRemote ]. - aRelationSide isRemote ifTrue: [ oppositeSide makeRemote ]. + relationOrBehavior isRemote ifTrue: [ oppositeSide makeRemote ]. ^ ownSide ] { #category : 'relations - named containers' } -FmxMBRelationSideTrait >> oneBelongsTo: aRelationSide [ +FmxMBRelationSideTrait >> oneBelongsTo: relationOrBehavior [ - ^ (self oneToOne: aRelationSide) + ^ (self oneToOne: relationOrBehavior) container; yourself ] { #category : 'relations - named' } -FmxMBRelationSideTrait >> oneToMany: aRelationSide [ +FmxMBRelationSideTrait >> oneToMany: relationOrBehavior [ | ownSide oppositeSide | - ownSide := self asRelationSideNamed: aRelationSide pluralPropertyName. - oppositeSide := aRelationSide asRelationSideNamed: self singularPropertyName. + ownSide := self asRelationNamed: relationOrBehavior pluralPropertyName. + oppositeSide := relationOrBehavior asRelationNamed: self singularPropertyName. ownSide many. ownSide derived. ownSide oppositeSide: oppositeSide. self isRemote ifTrue: [ ownSide makeRemote ]. - aRelationSide isRemote ifTrue: [ oppositeSide makeRemote ]. + relationOrBehavior isRemote ifTrue: [ oppositeSide makeRemote ]. ^ ownSide ] { #category : 'relations - named' } -FmxMBRelationSideTrait >> oneToOne: aRelationSide [ +FmxMBRelationSideTrait >> oneToOne: relationOrBehavior [ | ownSide oppositeSide | - ownSide := self asRelationSideNamed: aRelationSide propertyName. - oppositeSide := aRelationSide asRelationSideNamed: self propertyName. + ownSide := self asRelationNamed: relationOrBehavior propertyName. + oppositeSide := relationOrBehavior asRelationNamed: self propertyName. oppositeSide derived. ownSide oppositeSide: oppositeSide. self isRemote ifTrue: [ ownSide makeRemote ]. - aRelationSide isRemote ifTrue: [ oppositeSide makeRemote ]. + relationOrBehavior isRemote ifTrue: [ oppositeSide makeRemote ]. ^ ownSide ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st index a7efa8f95..0624f5e11 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st @@ -6,27 +6,27 @@ This is useful when both sides of the relation are non remote. Class { #name : 'FmxMBRelationSlotsGenerationStrategy', #superclass : 'FmxMBRelationAccessorsGenerationStrategy', - #category : 'Famix-MetamodelBuilder-Core-Implementation', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' + #tag : 'Generation' } { #category : 'generation' } -FmxMBRelationSlotsGenerationStrategy >> generateGetterCoreOn: aStream for: aRelationSide [ +FmxMBRelationSlotsGenerationStrategy >> generateGetterCoreOn: aStream for: aRelation [ aStream tab; nextPutAll: '^ '; - nextPutAll: aRelationSide name + nextPutAll: aRelation name ] { #category : 'generation' } -FmxMBRelationSlotsGenerationStrategy >> generateSetterCoreOn: aStream for: aRelationSide [ +FmxMBRelationSlotsGenerationStrategy >> generateSetterCoreOn: aStream for: aRelation [ aStream tab; - nextPutAll: aRelationSide name. - aRelationSide isOne + nextPutAll: aRelation name. + aRelation isOne ifTrue: [ aStream nextPutAll: ' := anObject' ] ifFalse: [ aStream nextPutAll: ' value: anObject' ] ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRemoteChangesBuilderVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRemoteChangesBuilderVisitor.class.st index 55f20fcc8..e86f4adb7 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRemoteChangesBuilderVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRemoteChangesBuilderVisitor.class.st @@ -1,9 +1,9 @@ Class { #name : 'FmxMBRemoteChangesBuilderVisitor', #superclass : 'FmxMBAbstractChangesBuilderVisitor', - #category : 'Famix-MetamodelBuilder-Core-Implementation', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Implementation' + #tag : 'Generation' } { #category : 'visiting' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st index 18c57b875..f78de7e0c 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTrait.class.st @@ -55,9 +55,9 @@ FmxMBTrait >> propertyName [ ] { #category : 'accessing' } -FmxMBTrait >> removeRelationSide: aRelationSide [ +FmxMBTrait >> removeRelation: aRelation [ - propertiesAndRelations remove: aRelationSide ifAbsent: [ ]. + propertiesAndRelations remove: aRelation ifAbsent: [ ]. ] { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBVisitor.class.st index 239b035ba..0cc57ebfa 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBVisitor.class.st @@ -88,7 +88,7 @@ FmxMBVisitor >> visitModel: aClass [ ] { #category : 'visiting' } -FmxMBVisitor >> visitProperty: aRelationSide [ +FmxMBVisitor >> visitProperty: aRelation [ ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st index f8de04d0a..f1d62d8ea 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMethodAddition.class.st @@ -17,9 +17,9 @@ Class { 'sourceCode', 'selector' ], - #category : 'Famix-MetamodelBuilder-Core-Changes', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Changes' + #tag : 'Generation' } { #category : 'instance creation' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxMethodRemovals.class.st b/src/Famix-MetamodelBuilder-Core/FmxMethodRemovals.class.st index 2d30776f8..b8415cc62 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMethodRemovals.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMethodRemovals.class.st @@ -22,9 +22,9 @@ Class { #instVars : [ 'selectors' ], - #category : 'Famix-MetamodelBuilder-Core-Changes', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Changes' + #tag : 'Generation' } { #category : 'instance creation' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxPackageAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxPackageAddition.class.st index 1895c2846..b938c92fc 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxPackageAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxPackageAddition.class.st @@ -21,9 +21,9 @@ Class { #instVars : [ 'packageName' ], - #category : 'Famix-MetamodelBuilder-Core-Changes', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Changes' + #tag : 'Generation' } { #category : 'instance creation' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxSlotRemovals.class.st b/src/Famix-MetamodelBuilder-Core/FmxSlotRemovals.class.st index 12a290f3c..74a690a70 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxSlotRemovals.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxSlotRemovals.class.st @@ -12,9 +12,9 @@ Class { #instVars : [ 'slots' ], - #category : 'Famix-MetamodelBuilder-Core-Changes', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Changes' + #tag : 'Generation' } { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st index dc81b3e22..3530e15bb 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxTraitAddition.class.st @@ -1,9 +1,9 @@ Class { #name : 'FmxTraitAddition', #superclass : 'FmxBehavioralAddition', - #category : 'Famix-MetamodelBuilder-Core-Changes', + #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', - #tag : 'Changes' + #tag : 'Generation' } { #category : 'accessing' } diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st index f1729a8a3..8d4153ff8 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st @@ -11,7 +11,7 @@ FmxMBRelationSideTest >> testBasics [ "check trivial testing and accessing methods" | side | - side := FmxMBRelationSide new. + side := FmxMBRelation new. self assert: side cardinality equals: #one. self deny: side isContainer. @@ -99,7 +99,7 @@ FmxMBRelationSideTest >> testProperties [ | side | - side := FmxMBRelationSide new. + side := FmxMBRelation new. self deny: side isContainer. side container: true. @@ -154,7 +154,7 @@ FmxMBRelationSideTest >> testPropertyReservedName [ "simple tests of basic relation side properties" | side | - side := FmxMBRelationSide new + side := FmxMBRelation new builder: builder; yourself. self should: [ side name: 'class' ] raise: FmxMBPropertyNameIsReserved From 71562f16a66ad67a7a9a9d4da698a68cfe9500b7 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 11 May 2026 00:46:14 +0200 Subject: [PATCH 108/121] Make it work in Pharo 14 --- .../FmxBehavioralAddition.class.st | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st index 5dfc0de90..bc69adab8 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st @@ -6,7 +6,8 @@ Class { 'traits', 'slots', 'package', - 'tag' + 'tag', + 'traitComposition' ], #category : 'Famix-MetamodelBuilder-Core-Generation', #package : 'Famix-MetamodelBuilder-Core', @@ -24,7 +25,7 @@ FmxBehavioralAddition >> apply [ package: package; tag: tag. - traits ifNotNil: [ builder traits: (self class compiler evaluate: traits) ]. + traits ifNotNil: [ builder traits: self traitComposition ]. slots ifNotNil: [ builder slots: (self class compiler evaluate: '{' , (slots joinUsing: '. ') , '}') ] ]. "If the class already exist we update it to not remove the class slots and shared variables." @@ -55,10 +56,7 @@ FmxBehavioralAddition >> isRequired [ ifTrue: [ self traits ifNotNil: [ ^ true ] ] ifFalse: [ self traits ifNil: [ ^ true ]. - (OpalCompiler new - failBlock: [ ^ true ]; - source: self traits; - evaluate) asTraitComposition = realClass traitComposition ifFalse: [ ^ true ] ]. + self traitComposition = realClass traitComposition ifFalse: [ ^ true ] ]. realClass package name = self package ifFalse: [ ^ true ]. realClass packageTag name ~= self tag ] @@ -134,6 +132,16 @@ FmxBehavioralAddition >> tag: anObject [ tag := anObject ] +{ #category : 'testing' } +FmxBehavioralAddition >> traitComposition [ + "Cached" + + ^ traitComposition ifNil: [ + traitComposition := (OpalCompiler new + source: self traits; + evaluate) asTraitComposition ] +] + { #category : 'accessing' } FmxBehavioralAddition >> traits [ ^ traits From 44edfd9880593f57aac0352a792dc5331fd4792e Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 11 May 2026 01:26:43 +0200 Subject: [PATCH 109/121] Add comments to the classes I added --- .../FmxMBAbstractChangesBuilderVisitor.class.st | 9 +++++++++ .../FmxMBChangesBuilderVisitor.class.st | 3 +++ ...xMBRelationAccessorsGenerationStrategy.class.st | 14 -------------- .../FmxMBRelationSlotsGenerationStrategy.class.st | 6 ------ .../FmxMBRemoteChangesBuilderVisitor.class.st | 3 +++ 5 files changed, 15 insertions(+), 20 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBAbstractChangesBuilderVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBAbstractChangesBuilderVisitor.class.st index d6eb07dbe..e7af4e701 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBAbstractChangesBuilderVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBAbstractChangesBuilderVisitor.class.st @@ -1,3 +1,12 @@ +" +I am ar abstract visitor to generate the code of metamodels. + +My subclasses will visit the model generated by the generator and build a list of changes to apply to the system. +Then I'll filter the changes to keep only those that would have an impact if we apply them on the system. +Then I sort them (we need to create a class before adding its methods for example) and apply the changes. + +I am using `FmxMBMethodsFactory` to build the code of all methods to generate without poluting the visitors. +" Class { #name : 'FmxMBAbstractChangesBuilderVisitor', #superclass : 'FmxMBWalkerVisitor', diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st index 8512a939a..2396fa0bd 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st @@ -1,3 +1,6 @@ +" +I am a visitor to generate the metamodel code of everything that is not remote. +" Class { #name : 'FmxMBChangesBuilderVisitor', #superclass : 'FmxMBAbstractChangesBuilderVisitor', diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st index 79664c8ed..cc3551296 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAccessorsGenerationStrategy.class.st @@ -101,17 +101,3 @@ FmxMBRelationAccessorsGenerationStrategy >> generateSetterCoreOn: aStream for: a ^ self subclassResponsibility ] - -{ #category : 'testing' } -FmxMBRelationAccessorsGenerationStrategy >> producesSlot [ - - ^ false -] - -{ #category : 'accessing' } -FmxMBRelationAccessorsGenerationStrategy >> protocolFor: aRelation [ - - ^ aRelation isRemote - ifTrue: [ '*' , aRelation builder parentBuilderPackageName ] - ifFalse: [ #accessing ] -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st index 0624f5e11..adf4bab38 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationSlotsGenerationStrategy.class.st @@ -30,9 +30,3 @@ FmxMBRelationSlotsGenerationStrategy >> generateSetterCoreOn: aStream for: aRela ifTrue: [ aStream nextPutAll: ' := anObject' ] ifFalse: [ aStream nextPutAll: ' value: anObject' ] ] - -{ #category : 'testing' } -FmxMBRelationSlotsGenerationStrategy >> producesSlot [ - - ^ true -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRemoteChangesBuilderVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRemoteChangesBuilderVisitor.class.st index e86f4adb7..c87533790 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRemoteChangesBuilderVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRemoteChangesBuilderVisitor.class.st @@ -1,3 +1,6 @@ +" +I am a visitor to generate the metamodel code of everything that is remote. +" Class { #name : 'FmxMBRemoteChangesBuilderVisitor', #superclass : 'FmxMBAbstractChangesBuilderVisitor', From f67e727bed2f87a5082ff580de39facf499ecaf6 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 11 May 2026 12:36:49 +0200 Subject: [PATCH 110/121] Simplify access to the package name of a builder --- .../FamixMetamodelBuilder.class.st | 22 +++++++++---------- .../FamixMetamodelGenerator.class.st | 17 +------------- .../FmxMBChangesBuilderVisitor.class.st | 6 ++--- .../FmxMBConfiguration.class.st | 12 +--------- .../FmxMBMethodsFactory.class.st | 2 +- ...ationAttributesGenerationStrategy.class.st | 2 +- .../FmxMBBuilderTest.class.st | 10 --------- 7 files changed, 18 insertions(+), 53 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index 759f079ee..facc3ec3b 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -206,7 +206,7 @@ FamixMetamodelBuilder >> entityCreatorTrait [ self traits add: (FmxMBEntityCreatorTrait new builder: self; prefix: self configuration prefix; - packageName: self configuration packageName; + packageName: self packageName; yourself) ] ] @@ -226,7 +226,7 @@ FamixMetamodelBuilder >> generateImportingContext [ aClass := FmxMBImportingContext new. aClass builder: self. aClass prefix: self configuration prefix. - aClass packageName: self configuration packageName. + aClass packageName: self packageName. aClass tag: 'Import'. self classes add: aClass. @@ -308,7 +308,7 @@ FamixMetamodelBuilder >> model [ aClass := FmxMBModel new. aClass builder: self. aClass prefix: self configuration prefix. - aClass packageName: self configuration packageName. + aClass packageName: self packageName. self classes add: aClass. ^ aClass ] @@ -332,7 +332,7 @@ FamixMetamodelBuilder >> newClass [ aClass := FmxMBClassEntity new builder: self; prefix: self configuration prefix; - packageName: self configuration packageName; + packageName: self packageName; yourself. self classes add: aClass. ^ aClass @@ -345,7 +345,7 @@ FamixMetamodelBuilder >> newClassGroup [ aClass := FmxMBClassGroup new. aClass builder: self. aClass prefix: self configuration prefix. - aClass packageName: self configuration packageName. + aClass packageName: self packageName. self classes add: aClass. ^ aClass ] @@ -406,6 +406,12 @@ FamixMetamodelBuilder >> newTraitNamed: aClassName comment: aString [ yourself ] +{ #category : 'accessing' } +FamixMetamodelBuilder >> packageName [ + + ^ self configuration packageName +] + { #category : 'accessing' } FamixMetamodelBuilder >> parentBuilder [ @@ -472,12 +478,6 @@ FamixMetamodelBuilder >> reservedKeywords [ ^ { #class } ] -{ #category : 'accessing' } -FamixMetamodelBuilder >> safeAnnotationPackageName [ - - ^ self configuration packageNameForAnnotations asSymbol printString -] - { #category : 'asserting' } FamixMetamodelBuilder >> shouldGenerateModel [ diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st index 842af16fd..4d7137d3d 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelGenerator.class.st @@ -153,13 +153,6 @@ FamixMetamodelGenerator class >> packageName [ self subclassResponsibility ] -{ #category : 'accessing' } -FamixMetamodelGenerator class >> packageNameForAnnotations [ - - - ^ self packageName -] - { #category : 'accessing' } FamixMetamodelGenerator class >> prefix [ @@ -194,8 +187,7 @@ FamixMetamodelGenerator >> adoptBuilder: aBuilder [ aBuilder configuration prefix: self prefix; - packageName: self packageName; - packageNameForAnnotations: self packageNameForAnnotations + packageName: self packageName ] { #category : 'accessing' } @@ -418,13 +410,6 @@ FamixMetamodelGenerator >> packageName [ ] -{ #category : 'definition' } -FamixMetamodelGenerator >> packageNameForAnnotations [ - - ^ self class packageNameForAnnotations - -] - { #category : 'definition' } FamixMetamodelGenerator >> prefix [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st index 2396fa0bd..3a4f92832 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBChangesBuilderVisitor.class.st @@ -23,7 +23,7 @@ FmxMBChangesBuilderVisitor >> generateAnnotation [ addMethod: (self methodFactory annotationFor: currentBehavioral name super: currentBehavioral superclassName - package: builder safeAnnotationPackageName + package: currentBehavioral packageName asSymbol printString isAbstract: currentBehavioral isAbstractClass) classSide: true protocol: #meta @@ -80,7 +80,7 @@ FmxMBChangesBuilderVisitor >> generateTestingMethodsOfRemoteEntities [ at: remoteClass fullName ifPresent: [ :class | (class includesSelector: selector) ifFalse: [ - self addMethod: (self methodFactory testReturning: true for: selector) in: remoteClass fullName protocol: '*' , builder configuration packageName ] ] + self addMethod: (self methodFactory testReturning: true for: selector) in: remoteClass fullName protocol: '*' , builder packageName ] ] ifAbsent: [ self error: 'The class ' , remoteClass fullName , ' was not found in the system to generate a remote testing method.' ] ] ] ] ] ] ] @@ -100,7 +100,7 @@ FmxMBChangesBuilderVisitor >> recordMethodRemovalsOf: realClass [ "In case we have an extension, we remove it if the package is the right one" self flag: #todo. "Demeter. Clean package name management." - generatedMethodsOfRealClass := generatedMethodsOfRealClass reject: [ :method | (method hasPragmaNamed: #package:) and: [ ((method pragmaAt: #package:) argumentAt: 1) ~= builder generator packageName ] ]. + generatedMethodsOfRealClass := generatedMethodsOfRealClass reject: [ :method | (method hasPragmaNamed: #package:) and: [ ((method pragmaAt: #package:) argumentAt: 1) ~= builder packageName ] ]. generatedMethodNamesOfRealClass := generatedMethodsOfRealClass collect: #selector. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBConfiguration.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBConfiguration.class.st index 0c05cc712..18d562888 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBConfiguration.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBConfiguration.class.st @@ -25,7 +25,7 @@ FmxMBConfiguration >> initialize [ { #category : 'accessing' } FmxMBConfiguration >> packageName [ - ^ packageName ifNil: [ packageName := #'FamixMetamodelBulder-Generated' ] + ^ packageName ifNil: [ packageName := #'FamixMetamodelBuilder-Generated' ] ] { #category : 'accessing' } @@ -33,16 +33,6 @@ FmxMBConfiguration >> packageName: anObject [ packageName := anObject ] -{ #category : 'accessing' } -FmxMBConfiguration >> packageNameForAnnotations [ - ^ packageNameForAnnotations ifNil: [ self packageName ]. -] - -{ #category : 'accessing' } -FmxMBConfiguration >> packageNameForAnnotations: anObject [ - packageNameForAnnotations := anObject -] - { #category : 'accessing' } FmxMBConfiguration >> prefix [ ^ prefix ifNil: [ prefix := '' ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st index 27b4fd8b3..c6ed5c562 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBMethodsFactory.class.st @@ -32,7 +32,7 @@ FmxMBMethodsFactory class >> allSubmetamodelsPackagesNamesFor: subBuilders [ ^ #('. - packages := (subBuilders collect: [ :subBuilder | subBuilder configuration packageName ]) asOrderedCollection sorted: #yourself descending. + packages := (subBuilders collect: [ :subBuilder | subBuilder packageName ]) asOrderedCollection sorted: #yourself descending. packages do: [ :package | stream print: package ] separatedBy: [ stream space ]. diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st index d0ceb429a..f88ba8b16 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelationAttributesGenerationStrategy.class.st @@ -32,7 +32,7 @@ FmxMBRelationAttributesGenerationStrategy >> generateGetterCoreOn: aStream for: aRelation remoteBuilderDo: [ :aRemoteBuilder | aStream tab; - nextPutAll: ('' format: { aRemoteBuilder generator packageName }); + nextPutAll: ('' format: { aRemoteBuilder packageName }); cr ]. aStream diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st index fc8522581..fbec8eab2 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBBuilderTest.class.st @@ -112,16 +112,6 @@ FmxMBBuilderTest >> testParentBuilder [ ] -{ #category : 'tests' } -FmxMBBuilderTest >> testSafeAnnotationPackageName [ - - builder configuration packageName: 'Package'. - self assert: builder safeAnnotationPackageName equals: '#Package'. - - builder configuration packageName: 'Package-Core'. - self assert: builder safeAnnotationPackageName equals: '#''Package-Core'''. -] - { #category : 'tests' } FmxMBBuilderTest >> testSortedClasses [ From 110328f407d0419f4898f484b6785a801bc4a9ff Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 11 May 2026 12:44:55 +0200 Subject: [PATCH 111/121] Last cleaning Properties do not need the builder --- .../FamixMetamodelBuilder.class.st | 6 --- .../FmxMBBehavior.class.st | 39 +++++++++---------- .../FmxMBEntity.class.st | 17 +++----- .../FmxMBProperty.class.st | 3 +- .../FmxMBPropertyNameIsReserved.class.st | 12 +----- .../FmxMBRelation.class.st | 5 ++- 6 files changed, 32 insertions(+), 50 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st index facc3ec3b..d4c8bd855 100644 --- a/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st +++ b/src/Famix-MetamodelBuilder-Core/FamixMetamodelBuilder.class.st @@ -472,12 +472,6 @@ FamixMetamodelBuilder >> remoteChangesToApply [ changesToApply ] -{ #category : 'accessing' } -FamixMetamodelBuilder >> reservedKeywords [ - - ^ { #class } -] - { #category : 'asserting' } FamixMetamodelBuilder >> shouldGenerateModel [ diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 9d229c6aa..54e69def4 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -4,6 +4,7 @@ Class { #traits : 'FmxMBRelationSideTrait', #classTraits : 'FmxMBRelationSideTrait classTrait', #instVars : [ + 'builder', 'tag', 'prefix', 'packageName', @@ -122,6 +123,17 @@ FmxMBBehavior >> asRelationNamed: aPropertyName [ ^ self property: aPropertyName ] +{ #category : 'accessing' } +FmxMBBehavior >> builder [ + + ^ builder +] + +{ #category : 'accessing' } +FmxMBBehavior >> builder: anObject [ + builder := anObject +] + { #category : 'accessing' } FmxMBBehavior >> commentWithRelations [ "It is sometimes hard to find our way through all the methods and relations of a moose entity. To help, I add information in the class comments about the different kind of relations in the model." @@ -340,33 +352,21 @@ FmxMBBehavior >> propertiesAndRelations [ FmxMBBehavior >> property: propertyName [ | aSide | - self assert: propertyName isString. - + aSide := FmxMBRelation new - builder: self builder; - relatedClass: self; - name: propertyName; - yourself. - + relatedClass: self; + name: propertyName; + yourself. + self addRelation: aSide. - ^ aSide. + ^ aSide ] { #category : 'accessing' } FmxMBBehavior >> property: propertyName type: aTypeName [ - | aSide | - aSide := FmxMBTypedProperty new - builder: self builder; - name: propertyName; - isRemote: self isRemote; - propertyType: aTypeName asSymbol; - yourself. - - self propertiesAndRelations add: aSide. - - ^ aSide + ^ self property: propertyName type: aTypeName defaultValue: nil ] { #category : 'accessing' } @@ -374,7 +374,6 @@ FmxMBBehavior >> property: propertyName type: aTypeName defaultValue: aValue [ | aSide | aSide := FmxMBTypedProperty new - builder: self builder; name: propertyName; isRemote: self isRemote; propertyType: aTypeName asSymbol; diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st index 78923785e..6f0853a34 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st @@ -4,7 +4,6 @@ Class { #instVars : [ 'name', 'comment', - 'builder', 'additionalProperties', 'isRemote' ], @@ -24,16 +23,6 @@ FmxMBEntity >> additionalProperties [ ^ additionalProperties ] -{ #category : 'accessing' } -FmxMBEntity >> builder [ - ^ builder -] - -{ #category : 'accessing' } -FmxMBEntity >> builder: anObject [ - builder := anObject -] - { #category : 'accessing' } FmxMBEntity >> comment [ ^ comment @@ -99,3 +88,9 @@ FmxMBEntity >> remoteBuilder: aRemoteBuilder [ self additionalProperties at: #remoteBuilder put: aRemoteBuilder ] + +{ #category : 'accessing' } +FmxMBEntity >> reservedKeywords [ + + ^ { #class } +] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st index 55454ba7e..5cc4ed983 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBProperty.class.st @@ -32,7 +32,8 @@ FmxMBProperty >> isRelation [ { #category : 'accessing' } FmxMBProperty >> name: aString [ - (self builder reservedKeywords includes: aString) ifTrue: [ FmxMBPropertyNameIsReserved signal ]. + + (self reservedKeywords includes: aString) ifTrue: [ FmxMBPropertyNameIsReserved signal ]. name := aString ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBPropertyNameIsReserved.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBPropertyNameIsReserved.class.st index b8ea665fd..c68a50bc5 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBPropertyNameIsReserved.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBPropertyNameIsReserved.class.st @@ -8,15 +8,7 @@ Class { { #category : 'accessing' } FmxMBPropertyNameIsReserved >> messageText [ + - ^ String - streamContents: [ :stream | - stream << 'Properties cannot have this name: '. - self receiver builder reservedKeywords - do: [ :keyword | - stream - << ''''; - << keyword; - << '''' ] - separatedBy: [ stream space ] ] + ^ String streamContents: [ :stream | stream << 'Properties cannot have this name' ] ] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st index bea573d84..43016bb63 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBRelation.class.st @@ -180,7 +180,8 @@ FmxMBRelation >> oppositeSide: anObject [ { #category : 'accessing' } FmxMBRelation >> oppositeType [ - ^ (self oppositeSide builder configuration prefix , self oppositeSide relatedEntityName) asSymbol + + ^ (self oppositeClass prefix , self oppositeSide relatedEntityName) asSymbol ] { #category : 'private' } @@ -312,7 +313,7 @@ FmxMBRelation >> trait: anObject [ { #category : 'accessing' } FmxMBRelation >> type [ - ^ (self builder configuration prefix , self relatedEntityName) asSymbol + ^ (self relatedClass prefix , self relatedEntityName) asSymbol ] { #category : 'generating' } From 56dac16487b8028580a630a5ad38b6b07ea2171d Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 11 May 2026 12:50:47 +0200 Subject: [PATCH 112/121] Fix test --- .../FmxMBRelationSideTest.class.st | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st index 8d4153ff8..5e163bff0 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBRelationSideTest.class.st @@ -153,11 +153,7 @@ FmxMBRelationSideTest >> testProperties [ FmxMBRelationSideTest >> testPropertyReservedName [ "simple tests of basic relation side properties" - | side | - side := FmxMBRelation new - builder: builder; - yourself. - self should: [ side name: 'class' ] raise: FmxMBPropertyNameIsReserved + self should: [ FmxMBRelation new name: 'class' ] raise: FmxMBPropertyNameIsReserved ] { #category : 'tests' } From 81e2893a1eb1e1f4f32d060bdd88f796b8ec39cf Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 18 May 2026 18:42:21 +0200 Subject: [PATCH 113/121] Adapt to the latest Pharo and latest Famix --- src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st | 1 + src/Famix-Visitor-Generation/FmxMBMethodsFactory.extension.st | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st index bc69adab8..f5466d6ae 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st @@ -139,6 +139,7 @@ FmxBehavioralAddition >> traitComposition [ ^ traitComposition ifNil: [ traitComposition := (OpalCompiler new source: self traits; + failBlock: [ nil ]; "This might happen if a trait is not yet in the system. In that case we return #nil to make #isRequired return true. Then during the application of the change I'll be recomputed." evaluate) asTraitComposition ] ] diff --git a/src/Famix-Visitor-Generation/FmxMBMethodsFactory.extension.st b/src/Famix-Visitor-Generation/FmxMBMethodsFactory.extension.st index 0568f7870..71a3e2110 100644 --- a/src/Famix-Visitor-Generation/FmxMBMethodsFactory.extension.st +++ b/src/Famix-Visitor-Generation/FmxMBMethodsFactory.extension.st @@ -33,7 +33,7 @@ FmxMBMethodsFactory class >> visitBehavioral: aBehavioral [ << $.; cr; cr ] ]. - aBehavioral relations + (aBehavioral relations reject: #isContainer) do: [ :relation | aStream << (' self visit{1}: a{2} {3}' format: { (relation isOne From eb8600dac831703c16badedb074576676152eeee Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Wed, 20 May 2026 18:35:43 +0200 Subject: [PATCH 114/121] Add regression test for #1135 This is fixed via an update of Fame but I'm adding a regression test in Famix --- .../FmxMBGeneratorCleaningStrategyTest.class.st | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Famix-MetamodelBuilder-Tests/FmxMBGeneratorCleaningStrategyTest.class.st b/src/Famix-MetamodelBuilder-Tests/FmxMBGeneratorCleaningStrategyTest.class.st index cb6a80f79..670ccda09 100644 --- a/src/Famix-MetamodelBuilder-Tests/FmxMBGeneratorCleaningStrategyTest.class.st +++ b/src/Famix-MetamodelBuilder-Tests/FmxMBGeneratorCleaningStrategyTest.class.st @@ -56,10 +56,17 @@ FmxMBGeneratorCleaningStrategyTest >> generateClasses [ (class slotNamed: #fursonas) inClass: #FmxTestCleaningStrategyEntity. "Here we change the type of the slot to ensure it is regenerated correctly" class comment: 'Test' ] ifAbsent: [ self fail ]. - self class classInstaller make: [ :aBuilder | + + "We add a manually added class to ensure it is not removed. Also, we add a metadescribed trait to it to ensure we do not remove classes metadescribed from a trait" + self class environment at: #FmxTestCleaningStrategyTATrait ifPresent: [ :trait | + + self class classInstaller make: [ :aBuilder | aBuilder name: #FmxCleanerTestAddedClass; + traits: trait; package: self packageName ]. + ] ifAbsent: [ self fail ]. + self class classInstaller make: [ :aBuilder | aBuilder beTrait; From 5ac10de41a73b95fb6d34358c1bbb5847286b9b1 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Wed, 20 May 2026 19:33:07 +0200 Subject: [PATCH 115/121] Small cleaning before refactoring the visitor generator --- .../FmxMBEntity.class.st | 6 ++++ .../FmxMBTraitEntity.class.st | 6 ++++ .../FmxMBChangesBuilderVisitor.extension.st | 36 ++++++++++++++----- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st index 6f0853a34..4c33a41cf 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBEntity.class.st @@ -66,6 +66,12 @@ FmxMBEntity >> isRemote: anObject [ isRemote := anObject ] +{ #category : 'testing' } +FmxMBEntity >> isTraitEntity [ + + ^ false +] + { #category : 'accessing' } FmxMBEntity >> name [ ^ name diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBTraitEntity.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBTraitEntity.class.st index bbe3e8b5d..66f1c2b59 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBTraitEntity.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBTraitEntity.class.st @@ -12,3 +12,9 @@ FmxMBTraitEntity >> acceptVisitor: aVisitor [ ^ aVisitor visitTraitEntity: self ] + +{ #category : 'testing' } +FmxMBTraitEntity >> isTraitEntity [ + + ^ true +] diff --git a/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st b/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st index c2d423289..a5894bc21 100644 --- a/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st +++ b/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st @@ -1,16 +1,24 @@ Extension { #name : 'FmxMBChangesBuilderVisitor' } { #category : '*Famix-Visitor-Generation' } -FmxMBChangesBuilderVisitor >> visitVisitor: aTrait [ +FmxMBChangesBuilderVisitor >> generateVisitMethodsIn: aTrait [ - super visitVisitor: aTrait. + | localBehaviorsToVisit remoteTraits | + localBehaviorsToVisit := (builder classes select: #isClassEntity) , (builder traits select: #isTraitEntity). - aTrait allLocalTraits ifEmpty: [ - self addMethod: self methodFactory visitEntity protocol: #visiting. - self addMethod: self methodFactory visitCollection protocol: #visiting ]. + localBehaviorsToVisit do: [ :fmxMBBehavior | + | protocol | + self addMethod: (self methodFactory visitBehavioral: fmxMBBehavior) protocol: #visiting. + + protocol := aTrait packageName == builder configuration packageName + ifTrue: [ #visitor ] + ifFalse: [ '*' , aTrait packageName ]. + + self addMethod: (self methodFactory acceptFor: fmxMBBehavior fullName) in: fmxMBBehavior fullName protocol: protocol ]. - (builder classes select: #isClassEntity) , (builder traits select: [ :fmxTrait | fmxTrait isMetamodelTrait and: [ fmxTrait isVisitorTrait not ] ]) do: [ - :fmxMBBehavior | + remoteTraits := localBehaviorsToVisit flatCollect: [ :class | class allTransitiveTraits select: #isRemote ] as: Set. + + "remoteTraits do: [ :fmxMBBehavior | | protocol | self addMethod: (self methodFactory visitBehavioral: fmxMBBehavior) protocol: #visiting. @@ -18,5 +26,17 @@ FmxMBChangesBuilderVisitor >> visitVisitor: aTrait [ ifTrue: [ #visitor ] ifFalse: [ '*' , aTrait packageName ]. - self addMethod: (self methodFactory acceptFor: fmxMBBehavior fullName) in: fmxMBBehavior fullName protocol: protocol ] + self addMethod: (self methodFactory acceptFor: fmxMBBehavior fullName) in: fmxMBBehavior fullName protocol: protocol ]" +] + +{ #category : '*Famix-Visitor-Generation' } +FmxMBChangesBuilderVisitor >> visitVisitor: aTrait [ + + super visitVisitor: aTrait. + + aTrait allLocalTraits ifEmpty: [ + self addMethod: self methodFactory visitEntity protocol: #visiting. + self addMethod: self methodFactory visitCollection protocol: #visiting ]. + + self generateVisitMethodsIn: aTrait ] From 21f045f5790377b4c8978aac1a18e31fb9494456 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Thu, 21 May 2026 01:15:10 +0200 Subject: [PATCH 116/121] Remove the need to have accept methods This will simplify the fact that multiple visitors (for multiple languages) will be able to visit the same entities without a clash --- .../FamixJavaAccess.class.st | 7 ------- .../FamixJavaAnnotationInstance.class.st | 7 ------- ...mixJavaAnnotationInstanceAttribute.class.st | 7 ------- .../FamixJavaAnnotationType.class.st | 7 ------- .../FamixJavaAnnotationTypeAttribute.class.st | 7 ------- .../FamixJavaAttribute.class.st | 7 ------- .../FamixJavaClass.class.st | 7 ------- .../FamixJavaComment.class.st | 7 ------- .../FamixJavaConcretization.class.st | 7 ------- .../FamixJavaContainerEntity.class.st | 7 ------- .../FamixJavaEntity.class.st | 7 ------- .../FamixJavaEntityTyping.class.st | 7 ------- src/Famix-Java-Entities/FamixJavaEnum.class.st | 7 ------- .../FamixJavaEnumValue.class.st | 7 ------- .../FamixJavaException.class.st | 7 ------- .../FamixJavaImplementation.class.st | 7 ------- .../FamixJavaImplicitVariable.class.st | 7 ------- .../FamixJavaImport.class.st | 7 ------- .../FamixJavaIndexedFileAnchor.class.st | 7 ------- .../FamixJavaInheritance.class.st | 7 ------- .../FamixJavaInitializer.class.st | 7 ------- .../FamixJavaInterface.class.st | 7 ------- .../FamixJavaInvocation.class.st | 7 ------- .../FamixJavaLocalVariable.class.st | 7 ------- .../FamixJavaMethod.class.st | 7 ------- .../FamixJavaNamedEntity.class.st | 7 ------- .../FamixJavaPackage.class.st | 7 ------- .../FamixJavaParameter.class.st | 7 ------- .../FamixJavaParametricClass.class.st | 7 ------- .../FamixJavaParametricEntityTyping.class.st | 7 ------- .../FamixJavaParametricImplementation.class.st | 7 ------- .../FamixJavaParametricInheritance.class.st | 7 ------- .../FamixJavaParametricInterface.class.st | 7 ------- .../FamixJavaParametricInvocation.class.st | 7 ------- .../FamixJavaParametricMethod.class.st | 7 ------- .../FamixJavaParametricReference.class.st | 7 ------- .../FamixJavaPrimitiveType.class.st | 7 ------- .../FamixJavaReference.class.st | 7 ------- .../FamixJavaSourceAnchor.class.st | 7 ------- .../FamixJavaSourceLanguage.class.st | 7 ------- .../FamixJavaSourceTextAnchor.class.st | 7 ------- .../FamixJavaSourcedEntity.class.st | 7 ------- .../FamixJavaTBound.trait.st | 7 ------- .../FamixJavaTBounded.trait.st | 7 ------- .../FamixJavaTCanBeSynchronized.trait.st | 7 ------- .../FamixJavaTCanBeTransient.trait.st | 7 ------- .../FamixJavaTCanBeVolatile.trait.st | 7 ------- .../FamixJavaTClassMetrics.trait.st | 7 ------- .../FamixJavaTWithInterfaces.trait.st | 7 ------- src/Famix-Java-Entities/FamixJavaType.class.st | 7 ------- .../FamixJavaTypeParameter.class.st | 7 ------- .../FamixJavaUnknownVariable.class.st | 7 ------- .../FamixJavaVariable.class.st | 7 ------- .../FamixJavaWildcard.class.st | 7 ------- .../FmxBehavioralAddition.class.st | 2 +- src/Famix-Traits/FamixTAccess.trait.st | 7 ------- src/Famix-Traits/FamixTAccessible.trait.st | 7 ------- .../FamixTAnnotationInstance.trait.st | 7 ------- .../FamixTAnnotationInstanceAttribute.trait.st | 7 ------- src/Famix-Traits/FamixTAnnotationType.trait.st | 7 ------- .../FamixTAnnotationTypeAttribute.trait.st | 7 ------- src/Famix-Traits/FamixTAssociation.trait.st | 7 ------- src/Famix-Traits/FamixTAttribute.trait.st | 7 ------- .../FamixTBytesFileAnchor.trait.st | 7 ------- src/Famix-Traits/FamixTCanBeAbstract.trait.st | 7 ------- src/Famix-Traits/FamixTCanBeClassSide.trait.st | 7 ------- src/Famix-Traits/FamixTCanBeFinal.trait.st | 7 ------- src/Famix-Traits/FamixTCanBeStub.trait.st | 7 ------- src/Famix-Traits/FamixTCanImplement.trait.st | 7 ------- src/Famix-Traits/FamixTClass.trait.st | 7 ------- src/Famix-Traits/FamixTClassMetrics.trait.st | 7 ------- .../FamixTCohesionCouplingMetrics.trait.st | 7 ------- src/Famix-Traits/FamixTComment.trait.st | 7 ------- .../FamixTCompilationUnit.trait.st | 7 ------- src/Famix-Traits/FamixTConcretization.trait.st | 7 ------- .../FamixTDefinedInModule.trait.st | 7 ------- .../FamixTDereferencedInvocation.trait.st | 7 ------- src/Famix-Traits/FamixTEntityTyping.trait.st | 7 ------- src/Famix-Traits/FamixTEnum.trait.st | 7 ------- src/Famix-Traits/FamixTEnumValue.trait.st | 7 ------- src/Famix-Traits/FamixTException.trait.st | 7 ------- src/Famix-Traits/FamixTFile.trait.st | 7 ------- src/Famix-Traits/FamixTFileAnchor.trait.st | 7 ------- src/Famix-Traits/FamixTFileInclude.trait.st | 7 ------- src/Famix-Traits/FamixTFileNavigation.trait.st | 7 ------- .../FamixTFileSystemEntity.trait.st | 7 ------- src/Famix-Traits/FamixTFolder.trait.st | 7 ------- src/Famix-Traits/FamixTFunction.trait.st | 7 ------- src/Famix-Traits/FamixTGlobalVariable.trait.st | 7 ------- .../FamixTHasImmediateSource.trait.st | 7 ------- src/Famix-Traits/FamixTHasKind.trait.st | 7 ------- src/Famix-Traits/FamixTHasSignature.trait.st | 7 ------- src/Famix-Traits/FamixTHasVisibility.trait.st | 7 ------- src/Famix-Traits/FamixTImplementable.trait.st | 7 ------- src/Famix-Traits/FamixTImplementation.trait.st | 7 ------- .../FamixTImplicitVariable.trait.st | 7 ------- src/Famix-Traits/FamixTImport.trait.st | 7 ------- src/Famix-Traits/FamixTImportable.trait.st | 7 ------- .../FamixTIndexedFileNavigation.trait.st | 7 ------- src/Famix-Traits/FamixTInheritance.trait.st | 7 ------- src/Famix-Traits/FamixTInvocable.trait.st | 7 ------- src/Famix-Traits/FamixTInvocation.trait.st | 7 ------- .../FamixTInvocationsReceiver.trait.st | 7 ------- src/Famix-Traits/FamixTLCOMMetrics.trait.st | 7 ------- src/Famix-Traits/FamixTLambda.trait.st | 7 ------- src/Famix-Traits/FamixTLocalVariable.trait.st | 7 ------- src/Famix-Traits/FamixTMethod.trait.st | 7 ------- src/Famix-Traits/FamixTMethodMetrics.trait.st | 7 ------- src/Famix-Traits/FamixTModule.trait.st | 7 ------- .../FamixTMultipleFileAnchor.trait.st | 7 ------- src/Famix-Traits/FamixTNamedEntity.trait.st | 7 ------- src/Famix-Traits/FamixTNamespace.trait.st | 7 ------- src/Famix-Traits/FamixTPackage.trait.st | 7 ------- src/Famix-Traits/FamixTPackageable.trait.st | 7 ------- src/Famix-Traits/FamixTParameter.trait.st | 7 ------- .../FamixTParametricAssociation.trait.st | 7 ------- .../FamixTParametricEntity.trait.st | 7 ------- src/Famix-Traits/FamixTPrimitiveType.trait.st | 7 ------- src/Famix-Traits/FamixTReference.trait.st | 7 ------- src/Famix-Traits/FamixTReferenceable.trait.st | 7 ------- .../FamixTRelativeSourceAnchor.trait.st | 7 ------- src/Famix-Traits/FamixTShadowable.trait.st | 7 ------- src/Famix-Traits/FamixTShadower.trait.st | 7 ------- src/Famix-Traits/FamixTSourceAnchor.trait.st | 7 ------- src/Famix-Traits/FamixTSourceEntity.trait.st | 18 ------------------ src/Famix-Traits/FamixTSourceLanguage.trait.st | 7 ------- .../FamixTStructuralEntity.trait.st | 7 ------- src/Famix-Traits/FamixTTemplate.trait.st | 7 ------- src/Famix-Traits/FamixTTemplateUser.trait.st | 7 ------- src/Famix-Traits/FamixTThrowable.trait.st | 7 ------- src/Famix-Traits/FamixTTrait.trait.st | 7 ------- src/Famix-Traits/FamixTTraitUsage.trait.st | 7 ------- src/Famix-Traits/FamixTTraitUser.trait.st | 7 ------- src/Famix-Traits/FamixTType.trait.st | 7 ------- src/Famix-Traits/FamixTTypeAlias.trait.st | 7 ------- src/Famix-Traits/FamixTTypeArgument.trait.st | 7 ------- src/Famix-Traits/FamixTTypeParameter.trait.st | 7 ------- src/Famix-Traits/FamixTTypedEntity.trait.st | 7 ------- .../FamixTUnknownVariable.trait.st | 7 ------- src/Famix-Traits/FamixTWithAccesses.trait.st | 7 ------- .../FamixTWithAnnotationInstances.trait.st | 7 ------- .../FamixTWithAnnotationTypes.trait.st | 7 ------- src/Famix-Traits/FamixTWithAttributes.trait.st | 7 ------- src/Famix-Traits/FamixTWithClasses.trait.st | 7 ------- src/Famix-Traits/FamixTWithComments.trait.st | 7 ------- .../FamixTWithCompilationUnits.trait.st | 7 ------- .../FamixTWithDereferencedInvocations.trait.st | 7 ------- src/Famix-Traits/FamixTWithEnumValues.trait.st | 7 ------- src/Famix-Traits/FamixTWithExceptions.trait.st | 7 ------- .../FamixTWithFileIncludes.trait.st | 7 ------- src/Famix-Traits/FamixTWithFiles.trait.st | 7 ------- src/Famix-Traits/FamixTWithFunctions.trait.st | 7 ------- .../FamixTWithGlobalVariables.trait.st | 7 ------- .../FamixTWithImplicitVariables.trait.st | 7 ------- src/Famix-Traits/FamixTWithImports.trait.st | 7 ------- .../FamixTWithInheritances.trait.st | 7 ------- .../FamixTWithInvocations.trait.st | 7 ------- src/Famix-Traits/FamixTWithLambdas.trait.st | 7 ------- .../FamixTWithLocalVariables.trait.st | 7 ------- src/Famix-Traits/FamixTWithMethods.trait.st | 7 ------- src/Famix-Traits/FamixTWithParameters.trait.st | 7 ------- src/Famix-Traits/FamixTWithReferences.trait.st | 7 ------- .../FamixTWithSourceLanguages.trait.st | 7 ------- src/Famix-Traits/FamixTWithStatements.trait.st | 7 ------- src/Famix-Traits/FamixTWithTemplates.trait.st | 7 ------- src/Famix-Traits/FamixTWithTraits.trait.st | 7 ------- .../FamixTWithTypeAliases.trait.st | 7 ------- src/Famix-Traits/FamixTWithTypes.trait.st | 7 ------- .../FmxMBChangesBuilderVisitor.extension.st | 12 ++---------- .../MooseObject.extension.st | 7 +++++++ 170 files changed, 10 insertions(+), 1191 deletions(-) create mode 100644 src/Famix-Visitor-Generation/MooseObject.extension.st diff --git a/src/Famix-Java-Entities/FamixJavaAccess.class.st b/src/Famix-Java-Entities/FamixJavaAccess.class.st index f62db436a..c0ea3f436 100644 --- a/src/Famix-Java-Entities/FamixJavaAccess.class.st +++ b/src/Famix-Java-Entities/FamixJavaAccess.class.st @@ -45,10 +45,3 @@ FamixJavaAccess class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaAccess >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaAccess: self -] diff --git a/src/Famix-Java-Entities/FamixJavaAnnotationInstance.class.st b/src/Famix-Java-Entities/FamixJavaAnnotationInstance.class.st index 63252a5aa..352d14dbd 100644 --- a/src/Famix-Java-Entities/FamixJavaAnnotationInstance.class.st +++ b/src/Famix-Java-Entities/FamixJavaAnnotationInstance.class.st @@ -34,13 +34,6 @@ FamixJavaAnnotationInstance class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaAnnotationInstance >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaAnnotationInstance: self -] - { #category : 'printing' } FamixJavaAnnotationInstance >> mooseNameOn: aStream [ self annotationType ifNotNil: [ :at | at mooseNameOn: aStream ]. diff --git a/src/Famix-Java-Entities/FamixJavaAnnotationInstanceAttribute.class.st b/src/Famix-Java-Entities/FamixJavaAnnotationInstanceAttribute.class.st index 045a954fd..8c9fb716d 100644 --- a/src/Famix-Java-Entities/FamixJavaAnnotationInstanceAttribute.class.st +++ b/src/Famix-Java-Entities/FamixJavaAnnotationInstanceAttribute.class.st @@ -39,13 +39,6 @@ FamixJavaAnnotationInstanceAttribute class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaAnnotationInstanceAttribute >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaAnnotationInstanceAttribute: self -] - { #category : 'accessing' } FamixJavaAnnotationInstanceAttribute >> name [ ^ self annotationTypeAttribute ifNotNil: #name diff --git a/src/Famix-Java-Entities/FamixJavaAnnotationType.class.st b/src/Famix-Java-Entities/FamixJavaAnnotationType.class.st index d54e78d32..a920a62ac 100644 --- a/src/Famix-Java-Entities/FamixJavaAnnotationType.class.st +++ b/src/Famix-Java-Entities/FamixJavaAnnotationType.class.st @@ -58,13 +58,6 @@ FamixJavaAnnotationType class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaAnnotationType >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaAnnotationType: self -] - { #category : 'accessing-query' } FamixJavaAnnotationType >> annotatedEntities [ ^ self instances collect: [:each | each annotatedEntity ] diff --git a/src/Famix-Java-Entities/FamixJavaAnnotationTypeAttribute.class.st b/src/Famix-Java-Entities/FamixJavaAnnotationTypeAttribute.class.st index 3e692e3c0..b3d9b7dc1 100644 --- a/src/Famix-Java-Entities/FamixJavaAnnotationTypeAttribute.class.st +++ b/src/Famix-Java-Entities/FamixJavaAnnotationTypeAttribute.class.st @@ -56,13 +56,6 @@ FamixJavaAnnotationTypeAttribute class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaAnnotationTypeAttribute >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaAnnotationTypeAttribute: self -] - { #category : 'accessing' } FamixJavaAnnotationTypeAttribute >> parentAnnotationType [ diff --git a/src/Famix-Java-Entities/FamixJavaAttribute.class.st b/src/Famix-Java-Entities/FamixJavaAttribute.class.st index fc2e03d98..9e5637b6c 100644 --- a/src/Famix-Java-Entities/FamixJavaAttribute.class.st +++ b/src/Famix-Java-Entities/FamixJavaAttribute.class.st @@ -59,10 +59,3 @@ FamixJavaAttribute class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaAttribute >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaAttribute: self -] diff --git a/src/Famix-Java-Entities/FamixJavaClass.class.st b/src/Famix-Java-Entities/FamixJavaClass.class.st index d2306fd6f..affbfd859 100644 --- a/src/Famix-Java-Entities/FamixJavaClass.class.st +++ b/src/Famix-Java-Entities/FamixJavaClass.class.st @@ -69,13 +69,6 @@ FamixJavaClass class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaClass >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaClass: self -] - { #category : 'enumerating' } FamixJavaClass >> allImplementedInterfacesHierarchy [ diff --git a/src/Famix-Java-Entities/FamixJavaComment.class.st b/src/Famix-Java-Entities/FamixJavaComment.class.st index f86ae2001..f4c4fbb4f 100644 --- a/src/Famix-Java-Entities/FamixJavaComment.class.st +++ b/src/Famix-Java-Entities/FamixJavaComment.class.st @@ -33,13 +33,6 @@ FamixJavaComment class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaComment >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaComment: self -] - { #category : 'converting' } FamixJavaComment >> asFamixJavaComment [ ^ self diff --git a/src/Famix-Java-Entities/FamixJavaConcretization.class.st b/src/Famix-Java-Entities/FamixJavaConcretization.class.st index 16e4e231f..a214db85f 100644 --- a/src/Famix-Java-Entities/FamixJavaConcretization.class.st +++ b/src/Famix-Java-Entities/FamixJavaConcretization.class.st @@ -40,10 +40,3 @@ FamixJavaConcretization class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaConcretization >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaConcretization: self -] diff --git a/src/Famix-Java-Entities/FamixJavaContainerEntity.class.st b/src/Famix-Java-Entities/FamixJavaContainerEntity.class.st index 88b51557a..0a7f0fba6 100644 --- a/src/Famix-Java-Entities/FamixJavaContainerEntity.class.st +++ b/src/Famix-Java-Entities/FamixJavaContainerEntity.class.st @@ -37,13 +37,6 @@ FamixJavaContainerEntity class >> isAbstract [ ^ self == FamixJavaContainerEntity ] -{ #category : 'visitor' } -FamixJavaContainerEntity >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaContainerEntity: self -] - { #category : 'adding' } FamixJavaContainerEntity >> addClass: aClass [ diff --git a/src/Famix-Java-Entities/FamixJavaEntity.class.st b/src/Famix-Java-Entities/FamixJavaEntity.class.st index ee0771168..530a698aa 100644 --- a/src/Famix-Java-Entities/FamixJavaEntity.class.st +++ b/src/Famix-Java-Entities/FamixJavaEntity.class.st @@ -29,13 +29,6 @@ FamixJavaEntity class >> metamodel [ ^ FamixJavaModel metamodel ] -{ #category : 'visitor' } -FamixJavaEntity >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaEntity: self -] - { #category : 'testing' } FamixJavaEntity >> canBeStub [ diff --git a/src/Famix-Java-Entities/FamixJavaEntityTyping.class.st b/src/Famix-Java-Entities/FamixJavaEntityTyping.class.st index a7159279c..6c79c27cc 100644 --- a/src/Famix-Java-Entities/FamixJavaEntityTyping.class.st +++ b/src/Famix-Java-Entities/FamixJavaEntityTyping.class.st @@ -39,10 +39,3 @@ FamixJavaEntityTyping class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaEntityTyping >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaEntityTyping: self -] diff --git a/src/Famix-Java-Entities/FamixJavaEnum.class.st b/src/Famix-Java-Entities/FamixJavaEnum.class.st index 67704ef89..7e33ed7d0 100644 --- a/src/Famix-Java-Entities/FamixJavaEnum.class.st +++ b/src/Famix-Java-Entities/FamixJavaEnum.class.st @@ -65,13 +65,6 @@ FamixJavaEnum class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaEnum >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaEnum: self -] - { #category : 'private' } FamixJavaEnum >> addMethodOverriding: aMethod in: aCollection [ diff --git a/src/Famix-Java-Entities/FamixJavaEnumValue.class.st b/src/Famix-Java-Entities/FamixJavaEnumValue.class.st index d5ff93412..aad226802 100644 --- a/src/Famix-Java-Entities/FamixJavaEnumValue.class.st +++ b/src/Famix-Java-Entities/FamixJavaEnumValue.class.st @@ -54,10 +54,3 @@ FamixJavaEnumValue class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaEnumValue >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaEnumValue: self -] diff --git a/src/Famix-Java-Entities/FamixJavaException.class.st b/src/Famix-Java-Entities/FamixJavaException.class.st index 62cc32afa..1b72b0d79 100644 --- a/src/Famix-Java-Entities/FamixJavaException.class.st +++ b/src/Famix-Java-Entities/FamixJavaException.class.st @@ -62,10 +62,3 @@ FamixJavaException class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaException >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaException: self -] diff --git a/src/Famix-Java-Entities/FamixJavaImplementation.class.st b/src/Famix-Java-Entities/FamixJavaImplementation.class.st index adbbd45a6..856b23dae 100644 --- a/src/Famix-Java-Entities/FamixJavaImplementation.class.st +++ b/src/Famix-Java-Entities/FamixJavaImplementation.class.st @@ -39,10 +39,3 @@ FamixJavaImplementation class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaImplementation >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaImplementation: self -] diff --git a/src/Famix-Java-Entities/FamixJavaImplicitVariable.class.st b/src/Famix-Java-Entities/FamixJavaImplicitVariable.class.st index 62b7ce040..83d9deeb6 100644 --- a/src/Famix-Java-Entities/FamixJavaImplicitVariable.class.st +++ b/src/Famix-Java-Entities/FamixJavaImplicitVariable.class.st @@ -50,13 +50,6 @@ FamixJavaImplicitVariable class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaImplicitVariable >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaImplicitVariable: self -] - { #category : 'testing' } FamixJavaImplicitVariable >> isSelf [ diff --git a/src/Famix-Java-Entities/FamixJavaImport.class.st b/src/Famix-Java-Entities/FamixJavaImport.class.st index 31f07aaaf..5d500c2b3 100644 --- a/src/Famix-Java-Entities/FamixJavaImport.class.st +++ b/src/Famix-Java-Entities/FamixJavaImport.class.st @@ -39,10 +39,3 @@ FamixJavaImport class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaImport >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaImport: self -] diff --git a/src/Famix-Java-Entities/FamixJavaIndexedFileAnchor.class.st b/src/Famix-Java-Entities/FamixJavaIndexedFileAnchor.class.st index 8d1a1f193..9a3d4cc17 100644 --- a/src/Famix-Java-Entities/FamixJavaIndexedFileAnchor.class.st +++ b/src/Famix-Java-Entities/FamixJavaIndexedFileAnchor.class.st @@ -28,10 +28,3 @@ FamixJavaIndexedFileAnchor class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaIndexedFileAnchor >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaIndexedFileAnchor: self -] diff --git a/src/Famix-Java-Entities/FamixJavaInheritance.class.st b/src/Famix-Java-Entities/FamixJavaInheritance.class.st index a4514bf54..0207c3273 100644 --- a/src/Famix-Java-Entities/FamixJavaInheritance.class.st +++ b/src/Famix-Java-Entities/FamixJavaInheritance.class.st @@ -40,13 +40,6 @@ FamixJavaInheritance class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaInheritance >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaInheritance: self -] - { #category : 'Moose-Hismo' } FamixJavaInheritance >> historicalUniqueName [ diff --git a/src/Famix-Java-Entities/FamixJavaInitializer.class.st b/src/Famix-Java-Entities/FamixJavaInitializer.class.st index 17ba54fd1..bbf730bd3 100644 --- a/src/Famix-Java-Entities/FamixJavaInitializer.class.st +++ b/src/Famix-Java-Entities/FamixJavaInitializer.class.st @@ -26,13 +26,6 @@ FamixJavaInitializer class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaInitializer >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaInitializer: self -] - { #category : 'trait protocol conflict' } FamixJavaInitializer >> isConstructor [ diff --git a/src/Famix-Java-Entities/FamixJavaInterface.class.st b/src/Famix-Java-Entities/FamixJavaInterface.class.st index d1d4d6836..7e1e71bb1 100644 --- a/src/Famix-Java-Entities/FamixJavaInterface.class.st +++ b/src/Famix-Java-Entities/FamixJavaInterface.class.st @@ -62,13 +62,6 @@ FamixJavaInterface class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaInterface >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaInterface: self -] - { #category : 'private' } FamixJavaInterface >> addMethodOverriding: aMethod in: aCollection [ diff --git a/src/Famix-Java-Entities/FamixJavaInvocation.class.st b/src/Famix-Java-Entities/FamixJavaInvocation.class.st index 3567f2902..733adeac3 100644 --- a/src/Famix-Java-Entities/FamixJavaInvocation.class.st +++ b/src/Famix-Java-Entities/FamixJavaInvocation.class.st @@ -47,13 +47,6 @@ FamixJavaInvocation class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaInvocation >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaInvocation: self -] - { #category : 'initialization' } FamixJavaInvocation >> initialize [ diff --git a/src/Famix-Java-Entities/FamixJavaLocalVariable.class.st b/src/Famix-Java-Entities/FamixJavaLocalVariable.class.st index 56f3c5590..24090d428 100644 --- a/src/Famix-Java-Entities/FamixJavaLocalVariable.class.st +++ b/src/Famix-Java-Entities/FamixJavaLocalVariable.class.st @@ -56,13 +56,6 @@ FamixJavaLocalVariable class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaLocalVariable >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaLocalVariable: self -] - { #category : 'printing' } FamixJavaLocalVariable >> mooseNameOn: stream [ | parent | diff --git a/src/Famix-Java-Entities/FamixJavaMethod.class.st b/src/Famix-Java-Entities/FamixJavaMethod.class.st index 72207f856..b7dd2af39 100644 --- a/src/Famix-Java-Entities/FamixJavaMethod.class.st +++ b/src/Famix-Java-Entities/FamixJavaMethod.class.st @@ -72,13 +72,6 @@ FamixJavaMethod class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaMethod >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaMethod: self -] - { #category : 'Famix-Extensions' } FamixJavaMethod >> clientBehaviours [ diff --git a/src/Famix-Java-Entities/FamixJavaNamedEntity.class.st b/src/Famix-Java-Entities/FamixJavaNamedEntity.class.st index a61125fd3..3e337a063 100644 --- a/src/Famix-Java-Entities/FamixJavaNamedEntity.class.st +++ b/src/Famix-Java-Entities/FamixJavaNamedEntity.class.st @@ -42,13 +42,6 @@ FamixJavaNamedEntity class >> isAbstract [ ^ self == FamixJavaNamedEntity ] -{ #category : 'visitor' } -FamixJavaNamedEntity >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaNamedEntity: self -] - { #category : 'testing' } FamixJavaNamedEntity >> isNamedEntity [ diff --git a/src/Famix-Java-Entities/FamixJavaPackage.class.st b/src/Famix-Java-Entities/FamixJavaPackage.class.st index 901bbb5bc..90251b010 100644 --- a/src/Famix-Java-Entities/FamixJavaPackage.class.st +++ b/src/Famix-Java-Entities/FamixJavaPackage.class.st @@ -71,13 +71,6 @@ FamixJavaPackage >> abstractness [ ^ (nsClasses select: [ :c | c isAbstract ]) size / nsClasses size ] -{ #category : 'visitor' } -FamixJavaPackage >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaPackage: self -] - { #category : 'adding' } FamixJavaPackage >> addChildNamedEntity: aNamedEntity [ childEntities add: aNamedEntity diff --git a/src/Famix-Java-Entities/FamixJavaParameter.class.st b/src/Famix-Java-Entities/FamixJavaParameter.class.st index 17fcbc438..d8520deed 100644 --- a/src/Famix-Java-Entities/FamixJavaParameter.class.st +++ b/src/Famix-Java-Entities/FamixJavaParameter.class.st @@ -56,13 +56,6 @@ FamixJavaParameter class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaParameter >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaParameter: self -] - { #category : 'printing' } FamixJavaParameter >> mooseNameOn: stream [ | parent | diff --git a/src/Famix-Java-Entities/FamixJavaParametricClass.class.st b/src/Famix-Java-Entities/FamixJavaParametricClass.class.st index 0fd0f3165..47888665b 100644 --- a/src/Famix-Java-Entities/FamixJavaParametricClass.class.st +++ b/src/Famix-Java-Entities/FamixJavaParametricClass.class.st @@ -27,10 +27,3 @@ FamixJavaParametricClass class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaParametricClass >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaParametricClass: self -] diff --git a/src/Famix-Java-Entities/FamixJavaParametricEntityTyping.class.st b/src/Famix-Java-Entities/FamixJavaParametricEntityTyping.class.st index cdf87ce85..650d104de 100644 --- a/src/Famix-Java-Entities/FamixJavaParametricEntityTyping.class.st +++ b/src/Famix-Java-Entities/FamixJavaParametricEntityTyping.class.st @@ -27,10 +27,3 @@ FamixJavaParametricEntityTyping class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaParametricEntityTyping >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaParametricEntityTyping: self -] diff --git a/src/Famix-Java-Entities/FamixJavaParametricImplementation.class.st b/src/Famix-Java-Entities/FamixJavaParametricImplementation.class.st index 042ae980e..dbbb63e91 100644 --- a/src/Famix-Java-Entities/FamixJavaParametricImplementation.class.st +++ b/src/Famix-Java-Entities/FamixJavaParametricImplementation.class.st @@ -27,10 +27,3 @@ FamixJavaParametricImplementation class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaParametricImplementation >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaParametricImplementation: self -] diff --git a/src/Famix-Java-Entities/FamixJavaParametricInheritance.class.st b/src/Famix-Java-Entities/FamixJavaParametricInheritance.class.st index e680bbd35..bccfdf462 100644 --- a/src/Famix-Java-Entities/FamixJavaParametricInheritance.class.st +++ b/src/Famix-Java-Entities/FamixJavaParametricInheritance.class.st @@ -27,10 +27,3 @@ FamixJavaParametricInheritance class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaParametricInheritance >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaParametricInheritance: self -] diff --git a/src/Famix-Java-Entities/FamixJavaParametricInterface.class.st b/src/Famix-Java-Entities/FamixJavaParametricInterface.class.st index b385a6ee5..8f6f4db96 100644 --- a/src/Famix-Java-Entities/FamixJavaParametricInterface.class.st +++ b/src/Famix-Java-Entities/FamixJavaParametricInterface.class.st @@ -27,10 +27,3 @@ FamixJavaParametricInterface class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaParametricInterface >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaParametricInterface: self -] diff --git a/src/Famix-Java-Entities/FamixJavaParametricInvocation.class.st b/src/Famix-Java-Entities/FamixJavaParametricInvocation.class.st index ca5ebabad..1844d457a 100644 --- a/src/Famix-Java-Entities/FamixJavaParametricInvocation.class.st +++ b/src/Famix-Java-Entities/FamixJavaParametricInvocation.class.st @@ -27,10 +27,3 @@ FamixJavaParametricInvocation class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaParametricInvocation >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaParametricInvocation: self -] diff --git a/src/Famix-Java-Entities/FamixJavaParametricMethod.class.st b/src/Famix-Java-Entities/FamixJavaParametricMethod.class.st index cea697700..2a2f4e28e 100644 --- a/src/Famix-Java-Entities/FamixJavaParametricMethod.class.st +++ b/src/Famix-Java-Entities/FamixJavaParametricMethod.class.st @@ -27,10 +27,3 @@ FamixJavaParametricMethod class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaParametricMethod >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaParametricMethod: self -] diff --git a/src/Famix-Java-Entities/FamixJavaParametricReference.class.st b/src/Famix-Java-Entities/FamixJavaParametricReference.class.st index 7385d48f0..e35376ab6 100644 --- a/src/Famix-Java-Entities/FamixJavaParametricReference.class.st +++ b/src/Famix-Java-Entities/FamixJavaParametricReference.class.st @@ -27,10 +27,3 @@ FamixJavaParametricReference class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaParametricReference >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaParametricReference: self -] diff --git a/src/Famix-Java-Entities/FamixJavaPrimitiveType.class.st b/src/Famix-Java-Entities/FamixJavaPrimitiveType.class.st index d77d70037..7e1dd33b3 100644 --- a/src/Famix-Java-Entities/FamixJavaPrimitiveType.class.st +++ b/src/Famix-Java-Entities/FamixJavaPrimitiveType.class.st @@ -51,13 +51,6 @@ FamixJavaPrimitiveType class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaPrimitiveType >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaPrimitiveType: self -] - { #category : 'testing' } FamixJavaPrimitiveType >> isPrimitiveType [ diff --git a/src/Famix-Java-Entities/FamixJavaReference.class.st b/src/Famix-Java-Entities/FamixJavaReference.class.st index bea5616e1..afb797c8a 100644 --- a/src/Famix-Java-Entities/FamixJavaReference.class.st +++ b/src/Famix-Java-Entities/FamixJavaReference.class.st @@ -40,13 +40,6 @@ FamixJavaReference class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaReference >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaReference: self -] - { #category : 'printing' } FamixJavaReference >> mooseNameOn: aStream [ "aStream nextPutAll: 'Reference'." diff --git a/src/Famix-Java-Entities/FamixJavaSourceAnchor.class.st b/src/Famix-Java-Entities/FamixJavaSourceAnchor.class.st index 88e39f4b3..c06067a5a 100644 --- a/src/Famix-Java-Entities/FamixJavaSourceAnchor.class.st +++ b/src/Famix-Java-Entities/FamixJavaSourceAnchor.class.st @@ -35,10 +35,3 @@ FamixJavaSourceAnchor class >> isAbstract [ ^ self == FamixJavaSourceAnchor ] - -{ #category : 'visitor' } -FamixJavaSourceAnchor >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaSourceAnchor: self -] diff --git a/src/Famix-Java-Entities/FamixJavaSourceLanguage.class.st b/src/Famix-Java-Entities/FamixJavaSourceLanguage.class.st index 71be81944..f698de90c 100644 --- a/src/Famix-Java-Entities/FamixJavaSourceLanguage.class.st +++ b/src/Famix-Java-Entities/FamixJavaSourceLanguage.class.st @@ -28,13 +28,6 @@ FamixJavaSourceLanguage class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaSourceLanguage >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaSourceLanguage: self -] - { #category : 'testing' } FamixJavaSourceLanguage >> isC [ ^ false diff --git a/src/Famix-Java-Entities/FamixJavaSourceTextAnchor.class.st b/src/Famix-Java-Entities/FamixJavaSourceTextAnchor.class.st index e45446734..b17333e65 100644 --- a/src/Famix-Java-Entities/FamixJavaSourceTextAnchor.class.st +++ b/src/Famix-Java-Entities/FamixJavaSourceTextAnchor.class.st @@ -33,10 +33,3 @@ FamixJavaSourceTextAnchor class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaSourceTextAnchor >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaSourceTextAnchor: self -] diff --git a/src/Famix-Java-Entities/FamixJavaSourcedEntity.class.st b/src/Famix-Java-Entities/FamixJavaSourcedEntity.class.st index ebf9da843..487027255 100644 --- a/src/Famix-Java-Entities/FamixJavaSourcedEntity.class.st +++ b/src/Famix-Java-Entities/FamixJavaSourcedEntity.class.st @@ -36,13 +36,6 @@ FamixJavaSourcedEntity class >> isAbstract [ ^ self == FamixJavaSourcedEntity ] -{ #category : 'visitor' } -FamixJavaSourcedEntity >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaSourcedEntity: self -] - { #category : 'Famix-SourceAnchor' } FamixJavaSourcedEntity >> fileAnchorPath: aString startLine: anInteger startColumn: anInteger2 endLine: anInteger3 endColumn: anInteger4 [ "I need to be called after the mooseModel is set." diff --git a/src/Famix-Java-Entities/FamixJavaTBound.trait.st b/src/Famix-Java-Entities/FamixJavaTBound.trait.st index b310dc294..ca6cc295f 100644 --- a/src/Famix-Java-Entities/FamixJavaTBound.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTBound.trait.st @@ -32,13 +32,6 @@ FamixJavaTBound classSide >> annotation [ ] -{ #category : 'visitor' } -FamixJavaTBound >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaTBound: self -] - { #category : 'adding' } FamixJavaTBound >> addLowerBoundedWildcard: anObject [ diff --git a/src/Famix-Java-Entities/FamixJavaTBounded.trait.st b/src/Famix-Java-Entities/FamixJavaTBounded.trait.st index 03755879a..36abc04f5 100644 --- a/src/Famix-Java-Entities/FamixJavaTBounded.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTBounded.trait.st @@ -32,13 +32,6 @@ FamixJavaTBounded classSide >> annotation [ ] -{ #category : 'visitor' } -FamixJavaTBounded >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaTBounded: self -] - { #category : 'accessing' } FamixJavaTBounded >> lowerBound [ "Relation named: #lowerBound type: #FamixJavaTBound opposite: #lowerBoundedWildcards" diff --git a/src/Famix-Java-Entities/FamixJavaTCanBeSynchronized.trait.st b/src/Famix-Java-Entities/FamixJavaTCanBeSynchronized.trait.st index 31ab3634f..421740d16 100644 --- a/src/Famix-Java-Entities/FamixJavaTCanBeSynchronized.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTCanBeSynchronized.trait.st @@ -38,13 +38,6 @@ FamixJavaTCanBeSynchronized classSide >> annotation [ ] -{ #category : 'visitor' } -FamixJavaTCanBeSynchronized >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaTCanBeSynchronized: self -] - { #category : 'accessing' } FamixJavaTCanBeSynchronized >> isSynchronized [ diff --git a/src/Famix-Java-Entities/FamixJavaTCanBeTransient.trait.st b/src/Famix-Java-Entities/FamixJavaTCanBeTransient.trait.st index feb23b79a..05db0baab 100644 --- a/src/Famix-Java-Entities/FamixJavaTCanBeTransient.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTCanBeTransient.trait.st @@ -34,13 +34,6 @@ FamixJavaTCanBeTransient classSide >> annotation [ ] -{ #category : 'visitor' } -FamixJavaTCanBeTransient >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaTCanBeTransient: self -] - { #category : 'accessing' } FamixJavaTCanBeTransient >> isTransient [ diff --git a/src/Famix-Java-Entities/FamixJavaTCanBeVolatile.trait.st b/src/Famix-Java-Entities/FamixJavaTCanBeVolatile.trait.st index 7dab60a75..d57b0e3f4 100644 --- a/src/Famix-Java-Entities/FamixJavaTCanBeVolatile.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTCanBeVolatile.trait.st @@ -34,13 +34,6 @@ FamixJavaTCanBeVolatile classSide >> annotation [ ] -{ #category : 'visitor' } -FamixJavaTCanBeVolatile >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaTCanBeVolatile: self -] - { #category : 'accessing' } FamixJavaTCanBeVolatile >> isVolatile [ diff --git a/src/Famix-Java-Entities/FamixJavaTClassMetrics.trait.st b/src/Famix-Java-Entities/FamixJavaTClassMetrics.trait.st index f4b5f987f..5b83cfab9 100644 --- a/src/Famix-Java-Entities/FamixJavaTClassMetrics.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTClassMetrics.trait.st @@ -13,13 +13,6 @@ FamixJavaTClassMetrics classSide >> annotation [ ] -{ #category : 'visitor' } -FamixJavaTClassMetrics >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaTClassMetrics: self -] - { #category : 'metrics' } FamixJavaTClassMetrics >> numberOfConstructorMethods [ diff --git a/src/Famix-Java-Entities/FamixJavaTWithInterfaces.trait.st b/src/Famix-Java-Entities/FamixJavaTWithInterfaces.trait.st index 21f2c56bd..ae3dc21ef 100644 --- a/src/Famix-Java-Entities/FamixJavaTWithInterfaces.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTWithInterfaces.trait.st @@ -29,13 +29,6 @@ FamixJavaTWithInterfaces classSide >> annotation [ ] -{ #category : 'visitor' } -FamixJavaTWithInterfaces >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaTWithInterfaces: self -] - { #category : 'accessing' } FamixJavaTWithInterfaces >> containedInterfaces [ "Classes are usually seen as types from the point of view of a Container. However, there may other types (e.g. aspects) which we dont want to see as classes and are rejected by this method." diff --git a/src/Famix-Java-Entities/FamixJavaType.class.st b/src/Famix-Java-Entities/FamixJavaType.class.st index 7a1c03e2f..c3d82459c 100644 --- a/src/Famix-Java-Entities/FamixJavaType.class.st +++ b/src/Famix-Java-Entities/FamixJavaType.class.st @@ -53,13 +53,6 @@ FamixJavaType class >> annotation [ ] -{ #category : 'visitor' } -FamixJavaType >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaType: self -] - { #category : 'Famix-Extensions' } FamixJavaType >> allAnnotationTypes [ ^ self allAnnotationInstances collectAsSet: #annotationType diff --git a/src/Famix-Java-Entities/FamixJavaTypeParameter.class.st b/src/Famix-Java-Entities/FamixJavaTypeParameter.class.st index a7678fa47..c74f9e8a8 100644 --- a/src/Famix-Java-Entities/FamixJavaTypeParameter.class.st +++ b/src/Famix-Java-Entities/FamixJavaTypeParameter.class.st @@ -42,10 +42,3 @@ FamixJavaTypeParameter class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaTypeParameter >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaTypeParameter: self -] diff --git a/src/Famix-Java-Entities/FamixJavaUnknownVariable.class.st b/src/Famix-Java-Entities/FamixJavaUnknownVariable.class.st index 4a1e124b6..281791326 100644 --- a/src/Famix-Java-Entities/FamixJavaUnknownVariable.class.st +++ b/src/Famix-Java-Entities/FamixJavaUnknownVariable.class.st @@ -44,10 +44,3 @@ FamixJavaUnknownVariable class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaUnknownVariable >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaUnknownVariable: self -] diff --git a/src/Famix-Java-Entities/FamixJavaVariable.class.st b/src/Famix-Java-Entities/FamixJavaVariable.class.st index ecd44f1b5..1d4907c36 100644 --- a/src/Famix-Java-Entities/FamixJavaVariable.class.st +++ b/src/Famix-Java-Entities/FamixJavaVariable.class.st @@ -35,10 +35,3 @@ FamixJavaVariable class >> isAbstract [ ^ self == FamixJavaVariable ] - -{ #category : 'visitor' } -FamixJavaVariable >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaVariable: self -] diff --git a/src/Famix-Java-Entities/FamixJavaWildcard.class.st b/src/Famix-Java-Entities/FamixJavaWildcard.class.st index 9a35c9d32..6d09af2b2 100644 --- a/src/Famix-Java-Entities/FamixJavaWildcard.class.st +++ b/src/Famix-Java-Entities/FamixJavaWildcard.class.st @@ -33,10 +33,3 @@ FamixJavaWildcard class >> annotation [ ] - -{ #category : 'visitor' } -FamixJavaWildcard >> accept: aVisitor [ - - - ^ aVisitor visitFamixJavaWildcard: self -] diff --git a/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st b/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st index f5466d6ae..1e659ded3 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxBehavioralAddition.class.st @@ -139,7 +139,7 @@ FmxBehavioralAddition >> traitComposition [ ^ traitComposition ifNil: [ traitComposition := (OpalCompiler new source: self traits; - failBlock: [ nil ]; "This might happen if a trait is not yet in the system. In that case we return #nil to make #isRequired return true. Then during the application of the change I'll be recomputed." + failBlock: [ ^ nil ]; "This might happen if a trait is not yet in the system. In that case we return #nil to make #isRequired return true. Then during the application of the change I'll be recomputed." evaluate) asTraitComposition ] ] diff --git a/src/Famix-Traits/FamixTAccess.trait.st b/src/Famix-Traits/FamixTAccess.trait.st index fa94e89ce..fedc0b6c1 100644 --- a/src/Famix-Traits/FamixTAccess.trait.st +++ b/src/Famix-Traits/FamixTAccess.trait.st @@ -63,13 +63,6 @@ FamixTAccess classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTAccess >> accept: aVisitor [ - - - ^ aVisitor visitFamixTAccess: self -] - { #category : 'accessing' } FamixTAccess >> accessor [ "Relation named: #accessor type: #FamixTWithAccesses opposite: #accesses" diff --git a/src/Famix-Traits/FamixTAccessible.trait.st b/src/Famix-Traits/FamixTAccessible.trait.st index 0dbd63883..6c4931792 100644 --- a/src/Famix-Traits/FamixTAccessible.trait.st +++ b/src/Famix-Traits/FamixTAccessible.trait.st @@ -28,13 +28,6 @@ FamixTAccessible classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTAccessible >> accept: aVisitor [ - - - ^ aVisitor visitFamixTAccessible: self -] - { #category : 'accessing' } FamixTAccessible >> accessingClasses [ diff --git a/src/Famix-Traits/FamixTAnnotationInstance.trait.st b/src/Famix-Traits/FamixTAnnotationInstance.trait.st index dc335578e..d9735cb05 100644 --- a/src/Famix-Traits/FamixTAnnotationInstance.trait.st +++ b/src/Famix-Traits/FamixTAnnotationInstance.trait.st @@ -57,13 +57,6 @@ FamixTAnnotationInstance classSide >> annotationFamixAnnotationInstanceGroup [ ^ FamixAnnotationInstanceGroup ] -{ #category : 'visitor' } -FamixTAnnotationInstance >> accept: aVisitor [ - - - ^ aVisitor visitFamixTAnnotationInstance: self -] - { #category : 'adding' } FamixTAnnotationInstance >> addAttribute: anObject [ diff --git a/src/Famix-Traits/FamixTAnnotationInstanceAttribute.trait.st b/src/Famix-Traits/FamixTAnnotationInstanceAttribute.trait.st index decc57adf..42b7308a5 100644 --- a/src/Famix-Traits/FamixTAnnotationInstanceAttribute.trait.st +++ b/src/Famix-Traits/FamixTAnnotationInstanceAttribute.trait.st @@ -53,13 +53,6 @@ FamixTAnnotationInstanceAttribute classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTAnnotationInstanceAttribute >> accept: aVisitor [ - - - ^ aVisitor visitFamixTAnnotationInstanceAttribute: self -] - { #category : 'accessing' } FamixTAnnotationInstanceAttribute >> annotationTypeAttribute [ "Relation named: #annotationTypeAttribute type: #FamixTAnnotationTypeAttribute opposite: #annotationAttributeInstances" diff --git a/src/Famix-Traits/FamixTAnnotationType.trait.st b/src/Famix-Traits/FamixTAnnotationType.trait.st index 980814404..8baacc34f 100644 --- a/src/Famix-Traits/FamixTAnnotationType.trait.st +++ b/src/Famix-Traits/FamixTAnnotationType.trait.st @@ -47,13 +47,6 @@ FamixTAnnotationType classSide >> annotationFamixAnnotationTypeGroup [ ^ FamixAnnotationTypeGroup ] -{ #category : 'visitor' } -FamixTAnnotationType >> accept: aVisitor [ - - - ^ aVisitor visitFamixTAnnotationType: self -] - { #category : 'accessing' } FamixTAnnotationType >> addInstance: anObject [ diff --git a/src/Famix-Traits/FamixTAnnotationTypeAttribute.trait.st b/src/Famix-Traits/FamixTAnnotationTypeAttribute.trait.st index a08a938b2..47b047946 100644 --- a/src/Famix-Traits/FamixTAnnotationTypeAttribute.trait.st +++ b/src/Famix-Traits/FamixTAnnotationTypeAttribute.trait.st @@ -70,13 +70,6 @@ FamixTAnnotationTypeAttribute classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTAnnotationTypeAttribute >> accept: aVisitor [ - - - ^ aVisitor visitFamixTAnnotationTypeAttribute: self -] - { #category : 'accessing' } FamixTAnnotationTypeAttribute >> addAnnotationAttributeInstance: anObject [ annotationAttributeInstances add: anObject diff --git a/src/Famix-Traits/FamixTAssociation.trait.st b/src/Famix-Traits/FamixTAssociation.trait.st index a41e4da34..0c0746133 100644 --- a/src/Famix-Traits/FamixTAssociation.trait.st +++ b/src/Famix-Traits/FamixTAssociation.trait.st @@ -66,13 +66,6 @@ FamixTAssociation classSide >> source: anEntity target: anotherEntity model: aMo yourself ] -{ #category : 'visitor' } -FamixTAssociation >> accept: aVisitor [ - - - ^ aVisitor visitFamixTAssociation: self -] - { #category : 'accessing' } FamixTAssociation >> allTargets [ "Since #target can return an entity or a collection, I ensure we always get a collection." diff --git a/src/Famix-Traits/FamixTAttribute.trait.st b/src/Famix-Traits/FamixTAttribute.trait.st index 6826acf4d..2b974f4f7 100644 --- a/src/Famix-Traits/FamixTAttribute.trait.st +++ b/src/Famix-Traits/FamixTAttribute.trait.st @@ -55,13 +55,6 @@ FamixTAttribute classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTAttribute >> accept: aVisitor [ - - - ^ aVisitor visitFamixTAttribute: self -] - { #category : 'private' } FamixTAttribute >> accessorMethods [ diff --git a/src/Famix-Traits/FamixTBytesFileAnchor.trait.st b/src/Famix-Traits/FamixTBytesFileAnchor.trait.st index b882819c8..44d376c31 100644 --- a/src/Famix-Traits/FamixTBytesFileAnchor.trait.st +++ b/src/Famix-Traits/FamixTBytesFileAnchor.trait.st @@ -34,13 +34,6 @@ FamixTBytesFileAnchor classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTBytesFileAnchor >> accept: aVisitor [ - - - ^ aVisitor visitFamixTBytesFileAnchor: self -] - { #category : 'accessing' } FamixTBytesFileAnchor >> endByte [ diff --git a/src/Famix-Traits/FamixTCanBeAbstract.trait.st b/src/Famix-Traits/FamixTCanBeAbstract.trait.st index 21ab556ad..9adab11a1 100644 --- a/src/Famix-Traits/FamixTCanBeAbstract.trait.st +++ b/src/Famix-Traits/FamixTCanBeAbstract.trait.st @@ -25,13 +25,6 @@ FamixTCanBeAbstract classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTCanBeAbstract >> accept: aVisitor [ - - - ^ aVisitor visitFamixTCanBeAbstract: self -] - { #category : 'accessing' } FamixTCanBeAbstract >> isAbstract [ diff --git a/src/Famix-Traits/FamixTCanBeClassSide.trait.st b/src/Famix-Traits/FamixTCanBeClassSide.trait.st index 586f914c4..4659ea915 100644 --- a/src/Famix-Traits/FamixTCanBeClassSide.trait.st +++ b/src/Famix-Traits/FamixTCanBeClassSide.trait.st @@ -25,13 +25,6 @@ FamixTCanBeClassSide classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTCanBeClassSide >> accept: aVisitor [ - - - ^ aVisitor visitFamixTCanBeClassSide: self -] - { #category : 'accessing' } FamixTCanBeClassSide >> isClassSide [ diff --git a/src/Famix-Traits/FamixTCanBeFinal.trait.st b/src/Famix-Traits/FamixTCanBeFinal.trait.st index 2219d7eb8..04f6b826a 100644 --- a/src/Famix-Traits/FamixTCanBeFinal.trait.st +++ b/src/Famix-Traits/FamixTCanBeFinal.trait.st @@ -25,13 +25,6 @@ FamixTCanBeFinal classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTCanBeFinal >> accept: aVisitor [ - - - ^ aVisitor visitFamixTCanBeFinal: self -] - { #category : 'accessing' } FamixTCanBeFinal >> isFinal [ diff --git a/src/Famix-Traits/FamixTCanBeStub.trait.st b/src/Famix-Traits/FamixTCanBeStub.trait.st index 89d6a76c3..00d02e489 100644 --- a/src/Famix-Traits/FamixTCanBeStub.trait.st +++ b/src/Famix-Traits/FamixTCanBeStub.trait.st @@ -36,13 +36,6 @@ FamixTCanBeStub classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTCanBeStub >> accept: aVisitor [ - - - ^ aVisitor visitFamixTCanBeStub: self -] - { #category : 'testing' } FamixTCanBeStub >> canBeStub [ diff --git a/src/Famix-Traits/FamixTCanImplement.trait.st b/src/Famix-Traits/FamixTCanImplement.trait.st index 15a618f5e..80944abf2 100644 --- a/src/Famix-Traits/FamixTCanImplement.trait.st +++ b/src/Famix-Traits/FamixTCanImplement.trait.st @@ -30,13 +30,6 @@ FamixTCanImplement classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTCanImplement >> accept: aVisitor [ - - - ^ aVisitor visitFamixTCanImplement: self -] - { #category : 'adding' } FamixTCanImplement >> addInterfaceImplementation: anObject [ diff --git a/src/Famix-Traits/FamixTClass.trait.st b/src/Famix-Traits/FamixTClass.trait.st index 2d3b84746..ed534dfd5 100644 --- a/src/Famix-Traits/FamixTClass.trait.st +++ b/src/Famix-Traits/FamixTClass.trait.st @@ -72,13 +72,6 @@ FamixTClass classSide >> annotationFamixClassGroup [ ^ FamixClassGroup ] -{ #category : 'visitor' } -FamixTClass >> accept: aVisitor [ - - - ^ aVisitor visitFamixTClass: self -] - { #category : 'Famix-Extensions-metrics-support' } FamixTClass >> accessedAttributes [ diff --git a/src/Famix-Traits/FamixTClassMetrics.trait.st b/src/Famix-Traits/FamixTClassMetrics.trait.st index a34a79829..61543e2f9 100644 --- a/src/Famix-Traits/FamixTClassMetrics.trait.st +++ b/src/Famix-Traits/FamixTClassMetrics.trait.st @@ -13,13 +13,6 @@ FamixTClassMetrics classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTClassMetrics >> accept: aVisitor [ - - - ^ aVisitor visitFamixTClassMetrics: self -] - { #category : 'metrics' } FamixTClassMetrics >> numberOfAttributesInherited [ diff --git a/src/Famix-Traits/FamixTCohesionCouplingMetrics.trait.st b/src/Famix-Traits/FamixTCohesionCouplingMetrics.trait.st index 6415e8cf3..83657b1d5 100644 --- a/src/Famix-Traits/FamixTCohesionCouplingMetrics.trait.st +++ b/src/Famix-Traits/FamixTCohesionCouplingMetrics.trait.st @@ -53,13 +53,6 @@ FamixTCohesionCouplingMetrics >> abstractness [ ^ (nsClasses select: [:c | c isAbstract]) size / (nsClasses size) ] -{ #category : 'visitor' } -FamixTCohesionCouplingMetrics >> accept: aVisitor [ - - - ^ aVisitor visitFamixTCohesionCouplingMetrics: self -] - { #category : 'metrics' } FamixTCohesionCouplingMetrics >> afferentCoupling [ diff --git a/src/Famix-Traits/FamixTComment.trait.st b/src/Famix-Traits/FamixTComment.trait.st index 83f1dccdd..9d542d2a2 100644 --- a/src/Famix-Traits/FamixTComment.trait.st +++ b/src/Famix-Traits/FamixTComment.trait.st @@ -37,13 +37,6 @@ FamixTComment classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTComment >> accept: aVisitor [ - - - ^ aVisitor visitFamixTComment: self -] - { #category : 'accessing' } FamixTComment >> commentedEntity [ "Relation named: #commentedEntity type: #FamixTWithComments opposite: #comments" diff --git a/src/Famix-Traits/FamixTCompilationUnit.trait.st b/src/Famix-Traits/FamixTCompilationUnit.trait.st index ccb4bd45f..63fabbcd0 100644 --- a/src/Famix-Traits/FamixTCompilationUnit.trait.st +++ b/src/Famix-Traits/FamixTCompilationUnit.trait.st @@ -44,13 +44,6 @@ FamixTCompilationUnit classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTCompilationUnit >> accept: aVisitor [ - - - ^ aVisitor visitFamixTCompilationUnit: self -] - { #category : 'accessing' } FamixTCompilationUnit >> compilationUnitOwner [ "Relation named: #compilationUnitOwner type: #FamixTWithCompilationUnits opposite: #compilationUnit" diff --git a/src/Famix-Traits/FamixTConcretization.trait.st b/src/Famix-Traits/FamixTConcretization.trait.st index 099264568..0675829ee 100644 --- a/src/Famix-Traits/FamixTConcretization.trait.st +++ b/src/Famix-Traits/FamixTConcretization.trait.st @@ -48,13 +48,6 @@ FamixTConcretization classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTConcretization >> accept: aVisitor [ - - - ^ aVisitor visitFamixTConcretization: self -] - { #category : 'accessing' } FamixTConcretization >> triggeringAssociation [ "Relation named: #triggeringAssociation type: #FamixTParametricAssociation opposite: #concretizations" diff --git a/src/Famix-Traits/FamixTDefinedInModule.trait.st b/src/Famix-Traits/FamixTDefinedInModule.trait.st index b3cd913ec..d64cfe7ed 100644 --- a/src/Famix-Traits/FamixTDefinedInModule.trait.st +++ b/src/Famix-Traits/FamixTDefinedInModule.trait.st @@ -28,13 +28,6 @@ FamixTDefinedInModule classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTDefinedInModule >> accept: aVisitor [ - - - ^ aVisitor visitFamixTDefinedInModule: self -] - { #category : 'accessing' } FamixTDefinedInModule >> parentModule [ "Relation named: #parentModule type: #FamixTModule opposite: #moduleEntities" diff --git a/src/Famix-Traits/FamixTDereferencedInvocation.trait.st b/src/Famix-Traits/FamixTDereferencedInvocation.trait.st index 67e2e5334..249220dc1 100644 --- a/src/Famix-Traits/FamixTDereferencedInvocation.trait.st +++ b/src/Famix-Traits/FamixTDereferencedInvocation.trait.st @@ -56,13 +56,6 @@ FamixTDereferencedInvocation classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTDereferencedInvocation >> accept: aVisitor [ - - - ^ aVisitor visitFamixTDereferencedInvocation: self -] - { #category : 'accessing' } FamixTDereferencedInvocation >> referencer [ "Relation named: #referencer type: #FamixTWithDereferencedInvocations opposite: #dereferencedInvocations" diff --git a/src/Famix-Traits/FamixTEntityTyping.trait.st b/src/Famix-Traits/FamixTEntityTyping.trait.st index 946d26830..31e04073a 100644 --- a/src/Famix-Traits/FamixTEntityTyping.trait.st +++ b/src/Famix-Traits/FamixTEntityTyping.trait.st @@ -43,13 +43,6 @@ FamixTEntityTyping classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTEntityTyping >> accept: aVisitor [ - - - ^ aVisitor visitFamixTEntityTyping: self -] - { #category : 'accessing' } FamixTEntityTyping >> declaredType [ "Relation named: #declaredType type: #FamixTType opposite: #incomingTypings" diff --git a/src/Famix-Traits/FamixTEnum.trait.st b/src/Famix-Traits/FamixTEnum.trait.st index 248133f82..d07697637 100644 --- a/src/Famix-Traits/FamixTEnum.trait.st +++ b/src/Famix-Traits/FamixTEnum.trait.st @@ -61,10 +61,3 @@ FamixTEnum classSide >> annotation [ ] - -{ #category : 'visitor' } -FamixTEnum >> accept: aVisitor [ - - - ^ aVisitor visitFamixTEnum: self -] diff --git a/src/Famix-Traits/FamixTEnumValue.trait.st b/src/Famix-Traits/FamixTEnumValue.trait.st index cbf433718..f4e572f29 100644 --- a/src/Famix-Traits/FamixTEnumValue.trait.st +++ b/src/Famix-Traits/FamixTEnumValue.trait.st @@ -64,13 +64,6 @@ FamixTEnumValue classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTEnumValue >> accept: aVisitor [ - - - ^ aVisitor visitFamixTEnumValue: self -] - { #category : 'testing' } FamixTEnumValue >> isEnumValue [ diff --git a/src/Famix-Traits/FamixTException.trait.st b/src/Famix-Traits/FamixTException.trait.st index d992b2927..6a71280f2 100644 --- a/src/Famix-Traits/FamixTException.trait.st +++ b/src/Famix-Traits/FamixTException.trait.st @@ -64,13 +64,6 @@ FamixTException classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTException >> accept: aVisitor [ - - - ^ aVisitor visitFamixTException: self -] - { #category : 'testing' } FamixTException >> isException [ diff --git a/src/Famix-Traits/FamixTFile.trait.st b/src/Famix-Traits/FamixTFile.trait.st index 148a1b36b..8efd5ba6d 100644 --- a/src/Famix-Traits/FamixTFile.trait.st +++ b/src/Famix-Traits/FamixTFile.trait.st @@ -50,13 +50,6 @@ FamixTFile classSide >> annotationFamixFileGroup [ ^ FamixFileGroup ] -{ #category : 'visitor' } -FamixTFile >> accept: aVisitor [ - - - ^ aVisitor visitFamixTFile: self -] - { #category : 'accessing' } FamixTFile >> addEntity: famixEntity [ self entities add: famixEntity diff --git a/src/Famix-Traits/FamixTFileAnchor.trait.st b/src/Famix-Traits/FamixTFileAnchor.trait.st index ce294a26a..3f6ab1054 100644 --- a/src/Famix-Traits/FamixTFileAnchor.trait.st +++ b/src/Famix-Traits/FamixTFileAnchor.trait.st @@ -31,13 +31,6 @@ FamixTFileAnchor classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTFileAnchor >> accept: aVisitor [ - - - ^ aVisitor visitFamixTFileAnchor: self -] - { #category : 'adding' } FamixTFileAnchor >> addToFile: entity [ ^ self correspondingFile addEntity: entity diff --git a/src/Famix-Traits/FamixTFileInclude.trait.st b/src/Famix-Traits/FamixTFileInclude.trait.st index 192f22ad4..99418ee17 100644 --- a/src/Famix-Traits/FamixTFileInclude.trait.st +++ b/src/Famix-Traits/FamixTFileInclude.trait.st @@ -35,13 +35,6 @@ FamixTFileInclude classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTFileInclude >> accept: aVisitor [ - - - ^ aVisitor visitFamixTFileInclude: self -] - { #category : 'accessing' } FamixTFileInclude >> source [ "Relation named: #source type: #FamixTWithFileIncludes opposite: #outgoingIncludeRelations" diff --git a/src/Famix-Traits/FamixTFileNavigation.trait.st b/src/Famix-Traits/FamixTFileNavigation.trait.st index c00fcdea0..70e290078 100644 --- a/src/Famix-Traits/FamixTFileNavigation.trait.st +++ b/src/Famix-Traits/FamixTFileNavigation.trait.st @@ -59,13 +59,6 @@ FamixTFileNavigation classSide >> fileName: aString startLine: anInteger startCo yourself ] -{ #category : 'visitor' } -FamixTFileNavigation >> accept: aVisitor [ - - - ^ aVisitor visitFamixTFileNavigation: self -] - { #category : 'accessing' } FamixTFileNavigation >> endColumn [ diff --git a/src/Famix-Traits/FamixTFileSystemEntity.trait.st b/src/Famix-Traits/FamixTFileSystemEntity.trait.st index 5656e79bc..f78417a6a 100644 --- a/src/Famix-Traits/FamixTFileSystemEntity.trait.st +++ b/src/Famix-Traits/FamixTFileSystemEntity.trait.st @@ -54,13 +54,6 @@ FamixTFileSystemEntity classSide >> systemFolderSeparatorString [ ^ DiskStore delimiter asString ] -{ #category : 'visitor' } -FamixTFileSystemEntity >> accept: aVisitor [ - - - ^ aVisitor visitFamixTFileSystemEntity: self -] - { #category : 'accessing' } FamixTFileSystemEntity >> fileReference [ ^ FileSystem disk referenceTo: (self mooseName copyReplaceAll: self class famixFolderSeparatorString with: FileSystem disk delimiter asString) diff --git a/src/Famix-Traits/FamixTFolder.trait.st b/src/Famix-Traits/FamixTFolder.trait.st index 37590da57..29f6567fb 100644 --- a/src/Famix-Traits/FamixTFolder.trait.st +++ b/src/Famix-Traits/FamixTFolder.trait.st @@ -50,13 +50,6 @@ FamixTFolder classSide >> annotationFamixFolderGroup [ ^ FamixFolderGroup ] -{ #category : 'visitor' } -FamixTFolder >> accept: aVisitor [ - - - ^ aVisitor visitFamixTFolder: self -] - { #category : 'adding' } FamixTFolder >> addChildFileSystemEntity: aFileOrFolder [ self childrenFileSystemEntities add: aFileOrFolder diff --git a/src/Famix-Traits/FamixTFunction.trait.st b/src/Famix-Traits/FamixTFunction.trait.st index 249224849..d9ae88b6a 100644 --- a/src/Famix-Traits/FamixTFunction.trait.st +++ b/src/Famix-Traits/FamixTFunction.trait.st @@ -64,13 +64,6 @@ FamixTFunction classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTFunction >> accept: aVisitor [ - - - ^ aVisitor visitFamixTFunction: self -] - { #category : 'accessing' } FamixTFunction >> functionOwner [ "Relation named: #functionOwner type: #FamixTWithFunctions opposite: #functions" diff --git a/src/Famix-Traits/FamixTGlobalVariable.trait.st b/src/Famix-Traits/FamixTGlobalVariable.trait.st index 55ec50bdb..93bc2bacf 100644 --- a/src/Famix-Traits/FamixTGlobalVariable.trait.st +++ b/src/Famix-Traits/FamixTGlobalVariable.trait.st @@ -62,13 +62,6 @@ FamixTGlobalVariable classSide >> annotationFamixGlobalVariableGroup [ ^ FamixGlobalVariableGroup ] -{ #category : 'visitor' } -FamixTGlobalVariable >> accept: aVisitor [ - - - ^ aVisitor visitFamixTGlobalVariable: self -] - { #category : 'testing' } FamixTGlobalVariable >> isGlobalVariable [ diff --git a/src/Famix-Traits/FamixTHasImmediateSource.trait.st b/src/Famix-Traits/FamixTHasImmediateSource.trait.st index 1a08ee1ab..115802cfb 100644 --- a/src/Famix-Traits/FamixTHasImmediateSource.trait.st +++ b/src/Famix-Traits/FamixTHasImmediateSource.trait.st @@ -52,13 +52,6 @@ FamixTHasImmediateSource classSide >> source: aString model: aMooseModel [ yourself ] -{ #category : 'visitor' } -FamixTHasImmediateSource >> accept: aVisitor [ - - - ^ aVisitor visitFamixTHasImmediateSource: self -] - { #category : 'testing' } FamixTHasImmediateSource >> hasImmediateSource [ diff --git a/src/Famix-Traits/FamixTHasKind.trait.st b/src/Famix-Traits/FamixTHasKind.trait.st index 6350de8b4..e9f849715 100644 --- a/src/Famix-Traits/FamixTHasKind.trait.st +++ b/src/Famix-Traits/FamixTHasKind.trait.st @@ -27,13 +27,6 @@ FamixTHasKind classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTHasKind >> accept: aVisitor [ - - - ^ aVisitor visitFamixTHasKind: self -] - { #category : 'accessing' } FamixTHasKind >> beConstant [ diff --git a/src/Famix-Traits/FamixTHasSignature.trait.st b/src/Famix-Traits/FamixTHasSignature.trait.st index 19b5c5ed6..b3ddd1bec 100644 --- a/src/Famix-Traits/FamixTHasSignature.trait.st +++ b/src/Famix-Traits/FamixTHasSignature.trait.st @@ -27,13 +27,6 @@ FamixTHasSignature classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTHasSignature >> accept: aVisitor [ - - - ^ aVisitor visitFamixTHasSignature: self -] - { #category : 'accessing' } FamixTHasSignature >> signature [ diff --git a/src/Famix-Traits/FamixTHasVisibility.trait.st b/src/Famix-Traits/FamixTHasVisibility.trait.st index a68ca1371..23f29af94 100644 --- a/src/Famix-Traits/FamixTHasVisibility.trait.st +++ b/src/Famix-Traits/FamixTHasVisibility.trait.st @@ -25,13 +25,6 @@ FamixTHasVisibility classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTHasVisibility >> accept: aVisitor [ - - - ^ aVisitor visitFamixTHasVisibility: self -] - { #category : 'accessing' } FamixTHasVisibility >> bePackageVisibility [ diff --git a/src/Famix-Traits/FamixTImplementable.trait.st b/src/Famix-Traits/FamixTImplementable.trait.st index 58518db41..4bb75f1c3 100644 --- a/src/Famix-Traits/FamixTImplementable.trait.st +++ b/src/Famix-Traits/FamixTImplementable.trait.st @@ -30,13 +30,6 @@ FamixTImplementable classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTImplementable >> accept: aVisitor [ - - - ^ aVisitor visitFamixTImplementable: self -] - { #category : 'adding' } FamixTImplementable >> addImplementation: anObject [ diff --git a/src/Famix-Traits/FamixTImplementation.trait.st b/src/Famix-Traits/FamixTImplementation.trait.st index 48960dfd3..2da541dd6 100644 --- a/src/Famix-Traits/FamixTImplementation.trait.st +++ b/src/Famix-Traits/FamixTImplementation.trait.st @@ -43,13 +43,6 @@ FamixTImplementation classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTImplementation >> accept: aVisitor [ - - - ^ aVisitor visitFamixTImplementation: self -] - { #category : 'accessing' } FamixTImplementation >> implementingClass [ "Relation named: #implementingClass type: #FamixTCanImplement opposite: #interfaceImplementations" diff --git a/src/Famix-Traits/FamixTImplicitVariable.trait.st b/src/Famix-Traits/FamixTImplicitVariable.trait.st index 2a92f0bfe..ec77c5dcc 100644 --- a/src/Famix-Traits/FamixTImplicitVariable.trait.st +++ b/src/Famix-Traits/FamixTImplicitVariable.trait.st @@ -54,13 +54,6 @@ FamixTImplicitVariable classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTImplicitVariable >> accept: aVisitor [ - - - ^ aVisitor visitFamixTImplicitVariable: self -] - { #category : 'accessing' } FamixTImplicitVariable >> declaredType [ "If we have a declared type, we return it. Else, we check if the implicit variable is self or super to determine the declared type." diff --git a/src/Famix-Traits/FamixTImport.trait.st b/src/Famix-Traits/FamixTImport.trait.st index 97297572d..4be6954de 100644 --- a/src/Famix-Traits/FamixTImport.trait.st +++ b/src/Famix-Traits/FamixTImport.trait.st @@ -43,13 +43,6 @@ FamixTImport classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTImport >> accept: aVisitor [ - - - ^ aVisitor visitFamixTImport: self -] - { #category : 'accessing' } FamixTImport >> importedEntity [ "Relation named: #importedEntity type: #FamixTImportable opposite: #incomingImports" diff --git a/src/Famix-Traits/FamixTImportable.trait.st b/src/Famix-Traits/FamixTImportable.trait.st index 789abe2c7..2ba6b8703 100644 --- a/src/Famix-Traits/FamixTImportable.trait.st +++ b/src/Famix-Traits/FamixTImportable.trait.st @@ -28,13 +28,6 @@ FamixTImportable classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTImportable >> accept: aVisitor [ - - - ^ aVisitor visitFamixTImportable: self -] - { #category : 'adding' } FamixTImportable >> addIncomingImport: anObject [ diff --git a/src/Famix-Traits/FamixTIndexedFileNavigation.trait.st b/src/Famix-Traits/FamixTIndexedFileNavigation.trait.st index 855732ea2..0112cf37d 100644 --- a/src/Famix-Traits/FamixTIndexedFileNavigation.trait.st +++ b/src/Famix-Traits/FamixTIndexedFileNavigation.trait.st @@ -51,13 +51,6 @@ FamixTIndexedFileNavigation classSide >> fileName: aString startPos: anInteger e yourself ] -{ #category : 'visitor' } -FamixTIndexedFileNavigation >> accept: aVisitor [ - - - ^ aVisitor visitFamixTIndexedFileNavigation: self -] - { #category : 'matching' } FamixTIndexedFileNavigation >> beginsWith: aString [ "I return true if the source text I represent begins with the string as parameter.\ diff --git a/src/Famix-Traits/FamixTInheritance.trait.st b/src/Famix-Traits/FamixTInheritance.trait.st index 7958601cc..aa46f601f 100644 --- a/src/Famix-Traits/FamixTInheritance.trait.st +++ b/src/Famix-Traits/FamixTInheritance.trait.st @@ -43,13 +43,6 @@ FamixTInheritance classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTInheritance >> accept: aVisitor [ - - - ^ aVisitor visitFamixTInheritance: self -] - { #category : 'printing' } FamixTInheritance >> displayStringOn: aStream [ diff --git a/src/Famix-Traits/FamixTInvocable.trait.st b/src/Famix-Traits/FamixTInvocable.trait.st index 0d9755a41..58f38fcf4 100644 --- a/src/Famix-Traits/FamixTInvocable.trait.st +++ b/src/Famix-Traits/FamixTInvocable.trait.st @@ -28,13 +28,6 @@ FamixTInvocable classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTInvocable >> accept: aVisitor [ - - - ^ aVisitor visitFamixTInvocable: self -] - { #category : 'adding' } FamixTInvocable >> addIncomingInvocation: anInvocation [ incomingInvocations add: anInvocation diff --git a/src/Famix-Traits/FamixTInvocation.trait.st b/src/Famix-Traits/FamixTInvocation.trait.st index b9eb06bf9..38f751a13 100644 --- a/src/Famix-Traits/FamixTInvocation.trait.st +++ b/src/Famix-Traits/FamixTInvocation.trait.st @@ -69,13 +69,6 @@ FamixTInvocation classSide >> annotationFamixInvocationGroup [ ^ FamixInvocationGroup ] -{ #category : 'visitor' } -FamixTInvocation >> accept: aVisitor [ - - - ^ aVisitor visitFamixTInvocation: self -] - { #category : 'adding' } FamixTInvocation >> addCandidate: aBehaviouralEntity [ candidates add: aBehaviouralEntity diff --git a/src/Famix-Traits/FamixTInvocationsReceiver.trait.st b/src/Famix-Traits/FamixTInvocationsReceiver.trait.st index 3b7259c09..84c2437d7 100644 --- a/src/Famix-Traits/FamixTInvocationsReceiver.trait.st +++ b/src/Famix-Traits/FamixTInvocationsReceiver.trait.st @@ -28,13 +28,6 @@ FamixTInvocationsReceiver classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTInvocationsReceiver >> accept: aVisitor [ - - - ^ aVisitor visitFamixTInvocationsReceiver: self -] - { #category : 'adding' } FamixTInvocationsReceiver >> addReceivingInvocation: anInvocation [ receivingInvocations add: anInvocation diff --git a/src/Famix-Traits/FamixTLCOMMetrics.trait.st b/src/Famix-Traits/FamixTLCOMMetrics.trait.st index 7a15177dc..8115e1633 100644 --- a/src/Famix-Traits/FamixTLCOMMetrics.trait.st +++ b/src/Famix-Traits/FamixTLCOMMetrics.trait.st @@ -13,13 +13,6 @@ FamixTLCOMMetrics classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTLCOMMetrics >> accept: aVisitor [ - - - ^ aVisitor visitFamixTLCOMMetrics: self -] - { #category : 'Famix-Extensions-metrics-support' } FamixTLCOMMetrics >> calculateLCOM2 [ diff --git a/src/Famix-Traits/FamixTLambda.trait.st b/src/Famix-Traits/FamixTLambda.trait.st index 8f6b55a92..182e3a1a8 100644 --- a/src/Famix-Traits/FamixTLambda.trait.st +++ b/src/Famix-Traits/FamixTLambda.trait.st @@ -62,13 +62,6 @@ FamixTLambda classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTLambda >> accept: aVisitor [ - - - ^ aVisitor visitFamixTLambda: self -] - { #category : 'accessing' } FamixTLambda >> lambdaContainer [ "Relation named: #lambdaContainer type: #FamixTWithLambdas opposite: #lambdas" diff --git a/src/Famix-Traits/FamixTLocalVariable.trait.st b/src/Famix-Traits/FamixTLocalVariable.trait.st index a206cb53e..a2d334d2c 100644 --- a/src/Famix-Traits/FamixTLocalVariable.trait.st +++ b/src/Famix-Traits/FamixTLocalVariable.trait.st @@ -54,13 +54,6 @@ FamixTLocalVariable classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTLocalVariable >> accept: aVisitor [ - - - ^ aVisitor visitFamixTLocalVariable: self -] - { #category : 'printing' } FamixTLocalVariable >> displayStringOn: aStream [ diff --git a/src/Famix-Traits/FamixTMethod.trait.st b/src/Famix-Traits/FamixTMethod.trait.st index f0cacb039..cf18f6abe 100644 --- a/src/Famix-Traits/FamixTMethod.trait.st +++ b/src/Famix-Traits/FamixTMethod.trait.st @@ -74,13 +74,6 @@ FamixTMethod classSide >> annotationFamixMethodGroup [ ^ FamixMethodGroup ] -{ #category : 'visitor' } -FamixTMethod >> accept: aVisitor [ - - - ^ aVisitor visitFamixTMethod: self -] - { #category : 'Famix-Extensions-metrics-support' } FamixTMethod >> accessedAttributes [ "Returns the set of attributes of my class accessed by me (method). diff --git a/src/Famix-Traits/FamixTMethodMetrics.trait.st b/src/Famix-Traits/FamixTMethodMetrics.trait.st index 81a319e0f..769227922 100644 --- a/src/Famix-Traits/FamixTMethodMetrics.trait.st +++ b/src/Famix-Traits/FamixTMethodMetrics.trait.st @@ -13,13 +13,6 @@ FamixTMethodMetrics classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTMethodMetrics >> accept: aVisitor [ - - - ^ aVisitor visitFamixTMethodMetrics: self -] - { #category : 'metrics' } FamixTMethodMetrics >> cyclomaticComplexity [ diff --git a/src/Famix-Traits/FamixTModule.trait.st b/src/Famix-Traits/FamixTModule.trait.st index 3169c7b72..140164b59 100644 --- a/src/Famix-Traits/FamixTModule.trait.st +++ b/src/Famix-Traits/FamixTModule.trait.st @@ -31,13 +31,6 @@ FamixTModule classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTModule >> accept: aVisitor [ - - - ^ aVisitor visitFamixTModule: self -] - { #category : 'accessing' } FamixTModule >> addModuleEntity: anObject [ diff --git a/src/Famix-Traits/FamixTMultipleFileAnchor.trait.st b/src/Famix-Traits/FamixTMultipleFileAnchor.trait.st index 4f254c2cf..8e0938b69 100644 --- a/src/Famix-Traits/FamixTMultipleFileAnchor.trait.st +++ b/src/Famix-Traits/FamixTMultipleFileAnchor.trait.st @@ -36,13 +36,6 @@ FamixTMultipleFileAnchor classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTMultipleFileAnchor >> accept: aVisitor [ - - - ^ aVisitor visitFamixTMultipleFileAnchor: self -] - { #category : 'adding' } FamixTMultipleFileAnchor >> addFileAnchorWithPath: aPath [ self fileAnchors diff --git a/src/Famix-Traits/FamixTNamedEntity.trait.st b/src/Famix-Traits/FamixTNamedEntity.trait.st index 39fc276d0..3a9e07178 100644 --- a/src/Famix-Traits/FamixTNamedEntity.trait.st +++ b/src/Famix-Traits/FamixTNamedEntity.trait.st @@ -40,13 +40,6 @@ FamixTNamedEntity classSide >> named: aString model: aMooseModel [ yourself ] -{ #category : 'visitor' } -FamixTNamedEntity >> accept: aVisitor [ - - - ^ aVisitor visitFamixTNamedEntity: self -] - { #category : 'printing' } FamixTNamedEntity >> displayStringOn: aStream [ diff --git a/src/Famix-Traits/FamixTNamespace.trait.st b/src/Famix-Traits/FamixTNamespace.trait.st index ba6120bbc..449f85039 100644 --- a/src/Famix-Traits/FamixTNamespace.trait.st +++ b/src/Famix-Traits/FamixTNamespace.trait.st @@ -47,13 +47,6 @@ FamixTNamespace classSide >> annotationFamixNamespaceGroup [ ^ FamixNamespaceGroup ] -{ #category : 'visitor' } -FamixTNamespace >> accept: aVisitor [ - - - ^ aVisitor visitFamixTNamespace: self -] - { #category : 'testing' } FamixTNamespace >> isNamespace [ diff --git a/src/Famix-Traits/FamixTPackage.trait.st b/src/Famix-Traits/FamixTPackage.trait.st index 783ee5b52..4736d76bc 100644 --- a/src/Famix-Traits/FamixTPackage.trait.st +++ b/src/Famix-Traits/FamixTPackage.trait.st @@ -53,13 +53,6 @@ FamixTPackage classSide >> annotationFamixPackageGroup [ ^ FamixPackageGroup ] -{ #category : 'visitor' } -FamixTPackage >> accept: aVisitor [ - - - ^ aVisitor visitFamixTPackage: self -] - { #category : 'accessing' } FamixTPackage >> addChildEntity: anObject [ childEntities add: anObject diff --git a/src/Famix-Traits/FamixTPackageable.trait.st b/src/Famix-Traits/FamixTPackageable.trait.st index 0b9299d92..19fa21ac0 100644 --- a/src/Famix-Traits/FamixTPackageable.trait.st +++ b/src/Famix-Traits/FamixTPackageable.trait.st @@ -28,13 +28,6 @@ FamixTPackageable classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTPackageable >> accept: aVisitor [ - - - ^ aVisitor visitFamixTPackageable: self -] - { #category : 'accessing' } FamixTPackageable >> isExtension [ diff --git a/src/Famix-Traits/FamixTParameter.trait.st b/src/Famix-Traits/FamixTParameter.trait.st index db76b03f1..5947a32e6 100644 --- a/src/Famix-Traits/FamixTParameter.trait.st +++ b/src/Famix-Traits/FamixTParameter.trait.st @@ -64,13 +64,6 @@ FamixTParameter classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTParameter >> accept: aVisitor [ - - - ^ aVisitor visitFamixTParameter: self -] - { #category : 'printing' } FamixTParameter >> displayStringOn: aStream [ diff --git a/src/Famix-Traits/FamixTParametricAssociation.trait.st b/src/Famix-Traits/FamixTParametricAssociation.trait.st index 68f5f7f24..031c9d2be 100644 --- a/src/Famix-Traits/FamixTParametricAssociation.trait.st +++ b/src/Famix-Traits/FamixTParametricAssociation.trait.st @@ -30,13 +30,6 @@ FamixTParametricAssociation classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTParametricAssociation >> accept: aVisitor [ - - - ^ aVisitor visitFamixTParametricAssociation: self -] - { #category : 'adding' } FamixTParametricAssociation >> addConcretization: anObject [ diff --git a/src/Famix-Traits/FamixTParametricEntity.trait.st b/src/Famix-Traits/FamixTParametricEntity.trait.st index a0355bf18..bbac7d188 100644 --- a/src/Famix-Traits/FamixTParametricEntity.trait.st +++ b/src/Famix-Traits/FamixTParametricEntity.trait.st @@ -37,13 +37,6 @@ FamixTParametricEntity classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTParametricEntity >> accept: aVisitor [ - - - ^ aVisitor visitFamixTParametricEntity: self -] - { #category : 'adding' } FamixTParametricEntity >> addTypeParameter: anObject [ diff --git a/src/Famix-Traits/FamixTPrimitiveType.trait.st b/src/Famix-Traits/FamixTPrimitiveType.trait.st index 55ad8229b..103efd7e7 100644 --- a/src/Famix-Traits/FamixTPrimitiveType.trait.st +++ b/src/Famix-Traits/FamixTPrimitiveType.trait.st @@ -45,13 +45,6 @@ FamixTPrimitiveType classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTPrimitiveType >> accept: aVisitor [ - - - ^ aVisitor visitFamixTPrimitiveType: self -] - { #category : 'testing' } FamixTPrimitiveType >> isPrimitiveType [ diff --git a/src/Famix-Traits/FamixTReference.trait.st b/src/Famix-Traits/FamixTReference.trait.st index 3185f2cbc..befa8bfe4 100644 --- a/src/Famix-Traits/FamixTReference.trait.st +++ b/src/Famix-Traits/FamixTReference.trait.st @@ -61,13 +61,6 @@ FamixTReference classSide >> source: source target: target [ ^ self new source: source; target: target ] -{ #category : 'visitor' } -FamixTReference >> accept: aVisitor [ - - - ^ aVisitor visitFamixTReference: self -] - { #category : 'testing' } FamixTReference >> isReference [ diff --git a/src/Famix-Traits/FamixTReferenceable.trait.st b/src/Famix-Traits/FamixTReferenceable.trait.st index 463c88ee8..e667895d5 100644 --- a/src/Famix-Traits/FamixTReferenceable.trait.st +++ b/src/Famix-Traits/FamixTReferenceable.trait.st @@ -40,13 +40,6 @@ FamixTReferenceable classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTReferenceable >> accept: aVisitor [ - - - ^ aVisitor visitFamixTReferenceable: self -] - { #category : 'accessing' } FamixTReferenceable >> addIncomingReference: aReference [ incomingReferences add: aReference diff --git a/src/Famix-Traits/FamixTRelativeSourceAnchor.trait.st b/src/Famix-Traits/FamixTRelativeSourceAnchor.trait.st index 91a6c7a63..c5be778df 100644 --- a/src/Famix-Traits/FamixTRelativeSourceAnchor.trait.st +++ b/src/Famix-Traits/FamixTRelativeSourceAnchor.trait.st @@ -56,13 +56,6 @@ FamixTRelativeSourceAnchor classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTRelativeSourceAnchor >> accept: aVisitor [ - - - ^ aVisitor visitFamixTRelativeSourceAnchor: self -] - { #category : 'accessing' } FamixTRelativeSourceAnchor >> completeText [ ^ self relatedAnchor sourceText diff --git a/src/Famix-Traits/FamixTShadowable.trait.st b/src/Famix-Traits/FamixTShadowable.trait.st index f94a0cca0..b0da5eac5 100644 --- a/src/Famix-Traits/FamixTShadowable.trait.st +++ b/src/Famix-Traits/FamixTShadowable.trait.st @@ -53,13 +53,6 @@ FamixTShadowable classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTShadowable >> accept: aVisitor [ - - - ^ aVisitor visitFamixTShadowable: self -] - { #category : 'adding' } FamixTShadowable >> addShadowingEntity: anObject [ diff --git a/src/Famix-Traits/FamixTShadower.trait.st b/src/Famix-Traits/FamixTShadower.trait.st index a917ab99f..83f4e2ac2 100644 --- a/src/Famix-Traits/FamixTShadower.trait.st +++ b/src/Famix-Traits/FamixTShadower.trait.st @@ -53,13 +53,6 @@ FamixTShadower classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTShadower >> accept: aVisitor [ - - - ^ aVisitor visitFamixTShadower: self -] - { #category : 'accessing' } FamixTShadower >> shadowedEntity [ "Relation named: #shadowedEntity type: #FamixTShadowable opposite: #shadowingEntities" diff --git a/src/Famix-Traits/FamixTSourceAnchor.trait.st b/src/Famix-Traits/FamixTSourceAnchor.trait.st index 4035407bf..cc6e9e136 100644 --- a/src/Famix-Traits/FamixTSourceAnchor.trait.st +++ b/src/Famix-Traits/FamixTSourceAnchor.trait.st @@ -30,13 +30,6 @@ FamixTSourceAnchor classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTSourceAnchor >> accept: aVisitor [ - - - ^ aVisitor visitFamixTSourceAnchor: self -] - { #category : 'accessing' } FamixTSourceAnchor >> allSourceAnchors [ ^ { self } diff --git a/src/Famix-Traits/FamixTSourceEntity.trait.st b/src/Famix-Traits/FamixTSourceEntity.trait.st index d7c8566ce..ac8ce8fe7 100644 --- a/src/Famix-Traits/FamixTSourceEntity.trait.st +++ b/src/Famix-Traits/FamixTSourceEntity.trait.st @@ -30,13 +30,6 @@ FamixTSourceEntity classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTSourceEntity >> accept: aVisitor [ - - - ^ aVisitor visitFamixTSourceEntity: self -] - { #category : 'accessing' } FamixTSourceEntity >> allSourceAnchors [ ^ self sourceAnchor @@ -81,17 +74,6 @@ FamixTSourceEntity >> hasSourceAnchor [ ^ self sourceAnchor isNotNil ] -{ #category : 'inspector' } -FamixTSourceEntity >> inspectionSource: aBuilder [ - - - ^ aBuilder newCode - withoutSyntaxHighlight; - withLineNumbers; - text: self sourceText; - beNotEditable -] - { #category : 'inspector' } FamixTSourceEntity >> inspectionSourceContext: aContext [ diff --git a/src/Famix-Traits/FamixTSourceLanguage.trait.st b/src/Famix-Traits/FamixTSourceLanguage.trait.st index e8d6d6297..a3bc1696f 100644 --- a/src/Famix-Traits/FamixTSourceLanguage.trait.st +++ b/src/Famix-Traits/FamixTSourceLanguage.trait.st @@ -33,13 +33,6 @@ FamixTSourceLanguage classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTSourceLanguage >> accept: aVisitor [ - - - ^ aVisitor visitFamixTSourceLanguage: self -] - { #category : 'adding' } FamixTSourceLanguage >> addSourcedEntity: aSourcedEntity [ ^ self sourcedEntities add: aSourcedEntity diff --git a/src/Famix-Traits/FamixTStructuralEntity.trait.st b/src/Famix-Traits/FamixTStructuralEntity.trait.st index ac7775d20..04b6c7e1a 100644 --- a/src/Famix-Traits/FamixTStructuralEntity.trait.st +++ b/src/Famix-Traits/FamixTStructuralEntity.trait.st @@ -46,13 +46,6 @@ FamixTStructuralEntity classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTStructuralEntity >> accept: aVisitor [ - - - ^ aVisitor visitFamixTStructuralEntity: self -] - { #category : 'testing' } FamixTStructuralEntity >> isStructuralEntity [ diff --git a/src/Famix-Traits/FamixTTemplate.trait.st b/src/Famix-Traits/FamixTTemplate.trait.st index eb112c1e7..54f77bc1a 100644 --- a/src/Famix-Traits/FamixTTemplate.trait.st +++ b/src/Famix-Traits/FamixTTemplate.trait.st @@ -34,13 +34,6 @@ FamixTTemplate classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTTemplate >> accept: aVisitor [ - - - ^ aVisitor visitFamixTTemplate: self -] - { #category : 'accessing' } FamixTTemplate >> addTemplateUser: anObject [ diff --git a/src/Famix-Traits/FamixTTemplateUser.trait.st b/src/Famix-Traits/FamixTTemplateUser.trait.st index 32a986968..21b2c47ab 100644 --- a/src/Famix-Traits/FamixTTemplateUser.trait.st +++ b/src/Famix-Traits/FamixTTemplateUser.trait.st @@ -28,13 +28,6 @@ FamixTTemplateUser classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTTemplateUser >> accept: aVisitor [ - - - ^ aVisitor visitFamixTTemplateUser: self -] - { #category : 'accessing' } FamixTTemplateUser >> template [ "Relation named: #template type: #FamixTTemplate opposite: #templateUsers" diff --git a/src/Famix-Traits/FamixTThrowable.trait.st b/src/Famix-Traits/FamixTThrowable.trait.st index 19db3b192..7224b7735 100644 --- a/src/Famix-Traits/FamixTThrowable.trait.st +++ b/src/Famix-Traits/FamixTThrowable.trait.st @@ -34,13 +34,6 @@ FamixTThrowable classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTThrowable >> accept: aVisitor [ - - - ^ aVisitor visitFamixTThrowable: self -] - { #category : 'adding' } FamixTThrowable >> addCatchingEntity: anObject [ diff --git a/src/Famix-Traits/FamixTTrait.trait.st b/src/Famix-Traits/FamixTTrait.trait.st index a1996dbe1..a11e0dbb5 100644 --- a/src/Famix-Traits/FamixTTrait.trait.st +++ b/src/Famix-Traits/FamixTTrait.trait.st @@ -36,13 +36,6 @@ FamixTTrait classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTTrait >> accept: aVisitor [ - - - ^ aVisitor visitFamixTTrait: self -] - { #category : 'accessing' } FamixTTrait >> addIncomingTraitUsage: anObject [ diff --git a/src/Famix-Traits/FamixTTraitUsage.trait.st b/src/Famix-Traits/FamixTTraitUsage.trait.st index 2792c3d23..179f22dc1 100644 --- a/src/Famix-Traits/FamixTTraitUsage.trait.st +++ b/src/Famix-Traits/FamixTTraitUsage.trait.st @@ -43,13 +43,6 @@ FamixTTraitUsage classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTTraitUsage >> accept: aVisitor [ - - - ^ aVisitor visitFamixTTraitUsage: self -] - { #category : 'accessing' } FamixTTraitUsage >> trait [ "Relation named: #trait type: #FamixTTrait opposite: #incomingTraitUsages" diff --git a/src/Famix-Traits/FamixTTraitUser.trait.st b/src/Famix-Traits/FamixTTraitUser.trait.st index a4cc5a6c6..45e87d806 100644 --- a/src/Famix-Traits/FamixTTraitUser.trait.st +++ b/src/Famix-Traits/FamixTTraitUser.trait.st @@ -28,13 +28,6 @@ FamixTTraitUser classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTTraitUser >> accept: aVisitor [ - - - ^ aVisitor visitFamixTTraitUser: self -] - { #category : 'adding' } FamixTTraitUser >> addTraitUsage: anObject [ diff --git a/src/Famix-Traits/FamixTType.trait.st b/src/Famix-Traits/FamixTType.trait.st index 4acfef2b2..c7d988633 100644 --- a/src/Famix-Traits/FamixTType.trait.st +++ b/src/Famix-Traits/FamixTType.trait.st @@ -62,13 +62,6 @@ FamixTType classSide >> annotationFamixTypeGroup [ ^ FamixTypeGroup ] -{ #category : 'visitor' } -FamixTType >> accept: aVisitor [ - - - ^ aVisitor visitFamixTType: self -] - { #category : 'adding' } FamixTType >> addIncomingTyping: anObject [ diff --git a/src/Famix-Traits/FamixTTypeAlias.trait.st b/src/Famix-Traits/FamixTTypeAlias.trait.st index d5d5a208f..2ae2d5820 100644 --- a/src/Famix-Traits/FamixTTypeAlias.trait.st +++ b/src/Famix-Traits/FamixTTypeAlias.trait.st @@ -33,13 +33,6 @@ FamixTTypeAlias classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTTypeAlias >> accept: aVisitor [ - - - ^ aVisitor visitFamixTTypeAlias: self -] - { #category : 'accessing' } FamixTTypeAlias >> aliasedType [ "Relation named: #aliasedType type: #FamixTWithTypeAliases opposite: #typeAliases" diff --git a/src/Famix-Traits/FamixTTypeArgument.trait.st b/src/Famix-Traits/FamixTTypeArgument.trait.st index cea0fcbf1..f05f7107c 100644 --- a/src/Famix-Traits/FamixTTypeArgument.trait.st +++ b/src/Famix-Traits/FamixTTypeArgument.trait.st @@ -30,13 +30,6 @@ FamixTTypeArgument classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTTypeArgument >> accept: aVisitor [ - - - ^ aVisitor visitFamixTTypeArgument: self -] - { #category : 'adding' } FamixTTypeArgument >> addOutgoingConcretization: anObject [ diff --git a/src/Famix-Traits/FamixTTypeParameter.trait.st b/src/Famix-Traits/FamixTTypeParameter.trait.st index 19c243749..6d5c5eeb8 100644 --- a/src/Famix-Traits/FamixTTypeParameter.trait.st +++ b/src/Famix-Traits/FamixTTypeParameter.trait.st @@ -36,13 +36,6 @@ FamixTTypeParameter classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTTypeParameter >> accept: aVisitor [ - - - ^ aVisitor visitFamixTTypeParameter: self -] - { #category : 'adding' } FamixTTypeParameter >> addConcretization: anObject [ diff --git a/src/Famix-Traits/FamixTTypedEntity.trait.st b/src/Famix-Traits/FamixTTypedEntity.trait.st index aeb41e798..352103c17 100644 --- a/src/Famix-Traits/FamixTTypedEntity.trait.st +++ b/src/Famix-Traits/FamixTTypedEntity.trait.st @@ -28,13 +28,6 @@ FamixTTypedEntity classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTTypedEntity >> accept: aVisitor [ - - - ^ aVisitor visitFamixTTypedEntity: self -] - { #category : 'accessing' } FamixTTypedEntity >> declaredType [ diff --git a/src/Famix-Traits/FamixTUnknownVariable.trait.st b/src/Famix-Traits/FamixTUnknownVariable.trait.st index 82d5630e1..bff6bfa52 100644 --- a/src/Famix-Traits/FamixTUnknownVariable.trait.st +++ b/src/Famix-Traits/FamixTUnknownVariable.trait.st @@ -43,10 +43,3 @@ FamixTUnknownVariable classSide >> annotation [ ] - -{ #category : 'visitor' } -FamixTUnknownVariable >> accept: aVisitor [ - - - ^ aVisitor visitFamixTUnknownVariable: self -] diff --git a/src/Famix-Traits/FamixTWithAccesses.trait.st b/src/Famix-Traits/FamixTWithAccesses.trait.st index 49d61f05f..be48be28f 100644 --- a/src/Famix-Traits/FamixTWithAccesses.trait.st +++ b/src/Famix-Traits/FamixTWithAccesses.trait.st @@ -28,13 +28,6 @@ FamixTWithAccesses classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithAccesses >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithAccesses: self -] - { #category : 'accessing' } FamixTWithAccesses >> accesses [ "Relation named: #accesses type: #FamixTAccess opposite: #accessor" diff --git a/src/Famix-Traits/FamixTWithAnnotationInstances.trait.st b/src/Famix-Traits/FamixTWithAnnotationInstances.trait.st index c6ab3cd50..0dde1c84f 100644 --- a/src/Famix-Traits/FamixTWithAnnotationInstances.trait.st +++ b/src/Famix-Traits/FamixTWithAnnotationInstances.trait.st @@ -28,13 +28,6 @@ FamixTWithAnnotationInstances classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithAnnotationInstances >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithAnnotationInstances: self -] - { #category : 'accessing' } FamixTWithAnnotationInstances >> addAnnotationInstance: anAnnotationInstance [ annotationInstances add: anAnnotationInstance diff --git a/src/Famix-Traits/FamixTWithAnnotationTypes.trait.st b/src/Famix-Traits/FamixTWithAnnotationTypes.trait.st index 76c052ac4..232e67f51 100644 --- a/src/Famix-Traits/FamixTWithAnnotationTypes.trait.st +++ b/src/Famix-Traits/FamixTWithAnnotationTypes.trait.st @@ -28,13 +28,6 @@ FamixTWithAnnotationTypes classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithAnnotationTypes >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithAnnotationTypes: self -] - { #category : 'accessing' } FamixTWithAnnotationTypes >> addDefinedAnnotationType: aDefinedAnnotationType [ definedAnnotationTypes add: aDefinedAnnotationType diff --git a/src/Famix-Traits/FamixTWithAttributes.trait.st b/src/Famix-Traits/FamixTWithAttributes.trait.st index 850d40f07..e93dd1568 100644 --- a/src/Famix-Traits/FamixTWithAttributes.trait.st +++ b/src/Famix-Traits/FamixTWithAttributes.trait.st @@ -28,13 +28,6 @@ FamixTWithAttributes classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithAttributes >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithAttributes: self -] - { #category : 'adding' } FamixTWithAttributes >> addAttribute: anAttribute [ attributes add: anAttribute diff --git a/src/Famix-Traits/FamixTWithClasses.trait.st b/src/Famix-Traits/FamixTWithClasses.trait.st index eb7fd03a8..2bc544a81 100644 --- a/src/Famix-Traits/FamixTWithClasses.trait.st +++ b/src/Famix-Traits/FamixTWithClasses.trait.st @@ -27,13 +27,6 @@ FamixTWithClasses classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithClasses >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithClasses: self -] - { #category : 'accessing' } FamixTWithClasses >> classes [ "Classes are usually seen as types from the point of view of a Container. However, there may other types (e.g. aspects) which we dont want to see as classes and are rejected by this method." diff --git a/src/Famix-Traits/FamixTWithComments.trait.st b/src/Famix-Traits/FamixTWithComments.trait.st index 7019bd46b..8ef6e1cb1 100644 --- a/src/Famix-Traits/FamixTWithComments.trait.st +++ b/src/Famix-Traits/FamixTWithComments.trait.st @@ -28,13 +28,6 @@ FamixTWithComments classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithComments >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithComments: self -] - { #category : 'removing' } FamixTWithComments >> addComment: aComment [ self flag: #todo. "Cyril: Remove next check after some time. This is for a transition. 10 august 2019." diff --git a/src/Famix-Traits/FamixTWithCompilationUnits.trait.st b/src/Famix-Traits/FamixTWithCompilationUnits.trait.st index 77285faaf..f3b496f12 100644 --- a/src/Famix-Traits/FamixTWithCompilationUnits.trait.st +++ b/src/Famix-Traits/FamixTWithCompilationUnits.trait.st @@ -28,13 +28,6 @@ FamixTWithCompilationUnits classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithCompilationUnits >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithCompilationUnits: self -] - { #category : 'accessing' } FamixTWithCompilationUnits >> compilationUnit [ "Relation named: #compilationUnit type: #FamixTCompilationUnit opposite: #compilationUnitOwner" diff --git a/src/Famix-Traits/FamixTWithDereferencedInvocations.trait.st b/src/Famix-Traits/FamixTWithDereferencedInvocations.trait.st index 5ef21d830..8f2df994d 100644 --- a/src/Famix-Traits/FamixTWithDereferencedInvocations.trait.st +++ b/src/Famix-Traits/FamixTWithDereferencedInvocations.trait.st @@ -28,13 +28,6 @@ FamixTWithDereferencedInvocations classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithDereferencedInvocations >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithDereferencedInvocations: self -] - { #category : 'accessing' } FamixTWithDereferencedInvocations >> addDereferencedInvocation: aDeferencedInvocation [ dereferencedInvocations add: aDeferencedInvocation diff --git a/src/Famix-Traits/FamixTWithEnumValues.trait.st b/src/Famix-Traits/FamixTWithEnumValues.trait.st index b005112be..4698991af 100644 --- a/src/Famix-Traits/FamixTWithEnumValues.trait.st +++ b/src/Famix-Traits/FamixTWithEnumValues.trait.st @@ -28,13 +28,6 @@ FamixTWithEnumValues classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithEnumValues >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithEnumValues: self -] - { #category : 'accessing' } FamixTWithEnumValues >> addEnumValue: anObject [ enumValues add: anObject diff --git a/src/Famix-Traits/FamixTWithExceptions.trait.st b/src/Famix-Traits/FamixTWithExceptions.trait.st index 660f55f0c..6b6235508 100644 --- a/src/Famix-Traits/FamixTWithExceptions.trait.st +++ b/src/Famix-Traits/FamixTWithExceptions.trait.st @@ -32,13 +32,6 @@ FamixTWithExceptions classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithExceptions >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithExceptions: self -] - { #category : 'adding' } FamixTWithExceptions >> addCaughtException: anObject [ diff --git a/src/Famix-Traits/FamixTWithFileIncludes.trait.st b/src/Famix-Traits/FamixTWithFileIncludes.trait.st index a0d803e25..36f7d1fca 100644 --- a/src/Famix-Traits/FamixTWithFileIncludes.trait.st +++ b/src/Famix-Traits/FamixTWithFileIncludes.trait.st @@ -30,13 +30,6 @@ FamixTWithFileIncludes classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithFileIncludes >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithFileIncludes: self -] - { #category : 'accessing' } FamixTWithFileIncludes >> addIncomingIncludeRelation: anObject [ incomingIncludeRelations add: anObject diff --git a/src/Famix-Traits/FamixTWithFiles.trait.st b/src/Famix-Traits/FamixTWithFiles.trait.st index ab5d5f285..9d462182a 100644 --- a/src/Famix-Traits/FamixTWithFiles.trait.st +++ b/src/Famix-Traits/FamixTWithFiles.trait.st @@ -28,13 +28,6 @@ FamixTWithFiles classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithFiles >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithFiles: self -] - { #category : 'accessing' } FamixTWithFiles >> addContainerFile: anObject [ containerFiles add: anObject diff --git a/src/Famix-Traits/FamixTWithFunctions.trait.st b/src/Famix-Traits/FamixTWithFunctions.trait.st index 86f78c4a3..c458877bc 100644 --- a/src/Famix-Traits/FamixTWithFunctions.trait.st +++ b/src/Famix-Traits/FamixTWithFunctions.trait.st @@ -28,13 +28,6 @@ FamixTWithFunctions classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithFunctions >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithFunctions: self -] - { #category : 'accessing' } FamixTWithFunctions >> addFunction: anObject [ functions add: anObject diff --git a/src/Famix-Traits/FamixTWithGlobalVariables.trait.st b/src/Famix-Traits/FamixTWithGlobalVariables.trait.st index 239bb0cb5..a0199aac5 100644 --- a/src/Famix-Traits/FamixTWithGlobalVariables.trait.st +++ b/src/Famix-Traits/FamixTWithGlobalVariables.trait.st @@ -30,13 +30,6 @@ FamixTWithGlobalVariables classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithGlobalVariables >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithGlobalVariables: self -] - { #category : 'adding' } FamixTWithGlobalVariables >> addGlobalVariable: anObject [ diff --git a/src/Famix-Traits/FamixTWithImplicitVariables.trait.st b/src/Famix-Traits/FamixTWithImplicitVariables.trait.st index a41a66dee..80a9b470a 100644 --- a/src/Famix-Traits/FamixTWithImplicitVariables.trait.st +++ b/src/Famix-Traits/FamixTWithImplicitVariables.trait.st @@ -28,13 +28,6 @@ FamixTWithImplicitVariables classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithImplicitVariables >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithImplicitVariables: self -] - { #category : 'adding' } FamixTWithImplicitVariables >> addImplicitVariable: anImplicitVariable [ implicitVariables add: anImplicitVariable diff --git a/src/Famix-Traits/FamixTWithImports.trait.st b/src/Famix-Traits/FamixTWithImports.trait.st index 29898aff1..7e0178c5c 100644 --- a/src/Famix-Traits/FamixTWithImports.trait.st +++ b/src/Famix-Traits/FamixTWithImports.trait.st @@ -28,13 +28,6 @@ FamixTWithImports classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithImports >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithImports: self -] - { #category : 'adding' } FamixTWithImports >> addImport: anObject [ diff --git a/src/Famix-Traits/FamixTWithInheritances.trait.st b/src/Famix-Traits/FamixTWithInheritances.trait.st index b49f8c664..dbd33f5bb 100644 --- a/src/Famix-Traits/FamixTWithInheritances.trait.st +++ b/src/Famix-Traits/FamixTWithInheritances.trait.st @@ -34,13 +34,6 @@ FamixTWithInheritances classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithInheritances >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithInheritances: self -] - { #category : 'accessing' } FamixTWithInheritances >> addSubInheritance: anInheritance [ subInheritances add: anInheritance diff --git a/src/Famix-Traits/FamixTWithInvocations.trait.st b/src/Famix-Traits/FamixTWithInvocations.trait.st index 9b11adf0b..637e56b1e 100644 --- a/src/Famix-Traits/FamixTWithInvocations.trait.st +++ b/src/Famix-Traits/FamixTWithInvocations.trait.st @@ -28,13 +28,6 @@ FamixTWithInvocations classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithInvocations >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithInvocations: self -] - { #category : 'adding' } FamixTWithInvocations >> addOutgoingInvocation: anInvocation [ outgoingInvocations add: anInvocation diff --git a/src/Famix-Traits/FamixTWithLambdas.trait.st b/src/Famix-Traits/FamixTWithLambdas.trait.st index e0e6bf677..3cc4aeff7 100644 --- a/src/Famix-Traits/FamixTWithLambdas.trait.st +++ b/src/Famix-Traits/FamixTWithLambdas.trait.st @@ -30,13 +30,6 @@ FamixTWithLambdas classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithLambdas >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithLambdas: self -] - { #category : 'adding' } FamixTWithLambdas >> addLambda: anObject [ diff --git a/src/Famix-Traits/FamixTWithLocalVariables.trait.st b/src/Famix-Traits/FamixTWithLocalVariables.trait.st index 2b172c54f..c97e22611 100644 --- a/src/Famix-Traits/FamixTWithLocalVariables.trait.st +++ b/src/Famix-Traits/FamixTWithLocalVariables.trait.st @@ -28,13 +28,6 @@ FamixTWithLocalVariables classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithLocalVariables >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithLocalVariables: self -] - { #category : 'accessing' } FamixTWithLocalVariables >> addLocalVariable: aLocalVariable [ localVariables add: aLocalVariable diff --git a/src/Famix-Traits/FamixTWithMethods.trait.st b/src/Famix-Traits/FamixTWithMethods.trait.st index 5eaeb40bf..b8f0d26a6 100644 --- a/src/Famix-Traits/FamixTWithMethods.trait.st +++ b/src/Famix-Traits/FamixTWithMethods.trait.st @@ -28,13 +28,6 @@ FamixTWithMethods classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithMethods >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithMethods: self -] - { #category : 'accessing' } FamixTWithMethods >> addMethod: aMethod [ methods add: aMethod diff --git a/src/Famix-Traits/FamixTWithParameters.trait.st b/src/Famix-Traits/FamixTWithParameters.trait.st index 6b8b0e4f1..23b5e7aa9 100644 --- a/src/Famix-Traits/FamixTWithParameters.trait.st +++ b/src/Famix-Traits/FamixTWithParameters.trait.st @@ -28,13 +28,6 @@ FamixTWithParameters classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithParameters >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithParameters: self -] - { #category : 'adding' } FamixTWithParameters >> addParameter: aParameter [ parameters add: aParameter diff --git a/src/Famix-Traits/FamixTWithReferences.trait.st b/src/Famix-Traits/FamixTWithReferences.trait.st index b9dd33dfc..96579ff67 100644 --- a/src/Famix-Traits/FamixTWithReferences.trait.st +++ b/src/Famix-Traits/FamixTWithReferences.trait.st @@ -28,13 +28,6 @@ FamixTWithReferences classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithReferences >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithReferences: self -] - { #category : 'accessing' } FamixTWithReferences >> addOutgoingReference: aReference [ outgoingReferences add: aReference diff --git a/src/Famix-Traits/FamixTWithSourceLanguages.trait.st b/src/Famix-Traits/FamixTWithSourceLanguages.trait.st index 5bbe53c99..28b8ee1d7 100644 --- a/src/Famix-Traits/FamixTWithSourceLanguages.trait.st +++ b/src/Famix-Traits/FamixTWithSourceLanguages.trait.st @@ -28,13 +28,6 @@ FamixTWithSourceLanguages classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithSourceLanguages >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithSourceLanguages: self -] - { #category : 'accessing' } FamixTWithSourceLanguages >> declaredSourceLanguage [ "Relation named: #declaredSourceLanguage type: #FamixTSourceLanguage opposite: #sourcedEntities" diff --git a/src/Famix-Traits/FamixTWithStatements.trait.st b/src/Famix-Traits/FamixTWithStatements.trait.st index c8de93d9b..aacd6b05e 100644 --- a/src/Famix-Traits/FamixTWithStatements.trait.st +++ b/src/Famix-Traits/FamixTWithStatements.trait.st @@ -40,13 +40,6 @@ FamixTWithStatements classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithStatements >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithStatements: self -] - { #category : 'metrics' } FamixTWithStatements >> computeCyclomaticComplexity [ ^ self notExistentMetricValue diff --git a/src/Famix-Traits/FamixTWithTemplates.trait.st b/src/Famix-Traits/FamixTWithTemplates.trait.st index 8894bc397..dd7aa3383 100644 --- a/src/Famix-Traits/FamixTWithTemplates.trait.st +++ b/src/Famix-Traits/FamixTWithTemplates.trait.st @@ -28,13 +28,6 @@ FamixTWithTemplates classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithTemplates >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithTemplates: self -] - { #category : 'accessing' } FamixTWithTemplates >> addTemplate: anObject [ templates add: anObject diff --git a/src/Famix-Traits/FamixTWithTraits.trait.st b/src/Famix-Traits/FamixTWithTraits.trait.st index dc5dc7020..11448ea21 100644 --- a/src/Famix-Traits/FamixTWithTraits.trait.st +++ b/src/Famix-Traits/FamixTWithTraits.trait.st @@ -28,13 +28,6 @@ FamixTWithTraits classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithTraits >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithTraits: self -] - { #category : 'accessing' } FamixTWithTraits >> addTrait: anObject [ traits add: anObject diff --git a/src/Famix-Traits/FamixTWithTypeAliases.trait.st b/src/Famix-Traits/FamixTWithTypeAliases.trait.st index 37c31d8d5..c6f81ad3f 100644 --- a/src/Famix-Traits/FamixTWithTypeAliases.trait.st +++ b/src/Famix-Traits/FamixTWithTypeAliases.trait.st @@ -28,13 +28,6 @@ FamixTWithTypeAliases classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithTypeAliases >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithTypeAliases: self -] - { #category : 'adding' } FamixTWithTypeAliases >> addTypeAlias: anObject [ diff --git a/src/Famix-Traits/FamixTWithTypes.trait.st b/src/Famix-Traits/FamixTWithTypes.trait.st index 2f7300f2e..a2d521d90 100644 --- a/src/Famix-Traits/FamixTWithTypes.trait.st +++ b/src/Famix-Traits/FamixTWithTypes.trait.st @@ -28,13 +28,6 @@ FamixTWithTypes classSide >> annotation [ ] -{ #category : 'visitor' } -FamixTWithTypes >> accept: aVisitor [ - - - ^ aVisitor visitFamixTWithTypes: self -] - { #category : 'adding' } FamixTWithTypes >> addType: aType [ types add: aType diff --git a/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st b/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st index a5894bc21..2a14ceab6 100644 --- a/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st +++ b/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st @@ -6,17 +6,9 @@ FmxMBChangesBuilderVisitor >> generateVisitMethodsIn: aTrait [ | localBehaviorsToVisit remoteTraits | localBehaviorsToVisit := (builder classes select: #isClassEntity) , (builder traits select: #isTraitEntity). - localBehaviorsToVisit do: [ :fmxMBBehavior | - | protocol | - self addMethod: (self methodFactory visitBehavioral: fmxMBBehavior) protocol: #visiting. - - protocol := aTrait packageName == builder configuration packageName - ifTrue: [ #visitor ] - ifFalse: [ '*' , aTrait packageName ]. - - self addMethod: (self methodFactory acceptFor: fmxMBBehavior fullName) in: fmxMBBehavior fullName protocol: protocol ]. + localBehaviorsToVisit do: [ :fmxMBBehavior | self addMethod: (self methodFactory visitBehavioral: fmxMBBehavior) protocol: #visiting ]. - remoteTraits := localBehaviorsToVisit flatCollect: [ :class | class allTransitiveTraits select: #isRemote ] as: Set. + remoteTraits := localBehaviorsToVisit flatCollect: [ :class | class allTransitiveTraits select: #isRemote ] as: Set "remoteTraits do: [ :fmxMBBehavior | | protocol | diff --git a/src/Famix-Visitor-Generation/MooseObject.extension.st b/src/Famix-Visitor-Generation/MooseObject.extension.st new file mode 100644 index 000000000..674d5061d --- /dev/null +++ b/src/Famix-Visitor-Generation/MooseObject.extension.st @@ -0,0 +1,7 @@ +Extension { #name : 'MooseObject' } + +{ #category : '*Famix-Visitor-Generation' } +MooseObject >> accept: aVisitor [ + + ^ aVisitor perform: ('visit' , self class name , ':') asSymbol with: self +] From 947eb79da4c2a2b732011b8a525b1718b23e6fad Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Thu, 21 May 2026 02:09:58 +0200 Subject: [PATCH 117/121] Review visitor generation to not depend on visitors of the submetamodels and to avoid double visit of some traits --- .../FamixJavaTVisitor.trait.st | 536 +++++++++- .../FmxMBBehavior.class.st | 2 +- .../FamixGenerator.class.st | 13 - src/Famix-Traits/FamixTVisitor.trait.st | 962 ------------------ .../FamixVisitorGenerator.class.st | 11 +- .../FmxMBChangesBuilderVisitor.extension.st | 14 +- .../FmxMBMethodsFactory.extension.st | 56 +- 7 files changed, 588 insertions(+), 1006 deletions(-) delete mode 100644 src/Famix-Traits/FamixTVisitor.trait.st diff --git a/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st b/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st index dcb920e4a..22b8dfeed 100644 --- a/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st @@ -6,8 +6,6 @@ I am generated with the metamodel. " Trait { #name : 'FamixJavaTVisitor', - #traits : 'FamixTVisitor', - #classTraits : 'FamixTVisitor classTrait', #category : 'Famix-Java-Entities-Visitor', #package : 'Famix-Java-Entities', #tag : 'Visitor' @@ -21,6 +19,20 @@ FamixJavaTVisitor classSide >> annotation [ ] +{ #category : 'visiting' } +FamixJavaTVisitor >> visitCollection: aCollection [ + + + ^ aCollection collect: [ :each | each accept: self ] +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitEntity: aFamixEntity [ + + + ^ aFamixEntity ifNotNil: [ aFamixEntity accept: self ] +] + { #category : 'visiting' } FamixJavaTVisitor >> visitFamixJavaAccess: aFamixJavaAccess [ @@ -509,3 +521,523 @@ FamixJavaTVisitor >> visitFamixJavaWildcard: aFamixJavaWildcard [ self visitFamixTTypeArgument: aFamixJavaWildcard. self visitFamixJavaType: aFamixJavaWildcard ] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTAccess: aFamixTAccess [ + + + self visitFamixTAssociation: aFamixTAccess. + + self visitEntity: aFamixTAccess accessor. + self visitCollection: aFamixTAccess candidates +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTAnnotationInstance: aFamixTAnnotationInstance [ + + + self visitTEntityMetaLevelDependency: aFamixTAnnotationInstance. + + self visitEntity: aFamixTAnnotationInstance annotatedEntity. + self visitCollection: aFamixTAnnotationInstance attributes. + self visitEntity: aFamixTAnnotationInstance annotationType +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTAnnotationInstanceAttribute: aFamixTAnnotationInstanceAttribute [ + + + self visitTEntityMetaLevelDependency: aFamixTAnnotationInstanceAttribute. + + self visitEntity: aFamixTAnnotationInstanceAttribute annotationTypeAttribute +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTAnnotationType: aFamixTAnnotationType [ + + + self visitCollection: aFamixTAnnotationType instances +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTAnnotationTypeAttribute: aFamixTAnnotationTypeAttribute [ + + + self visitFamixTAttribute: aFamixTAnnotationTypeAttribute. + + self visitCollection: aFamixTAnnotationTypeAttribute annotationAttributeInstances +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTAttribute: aFamixTAttribute [ + + + self visitFamixTStructuralEntity: aFamixTAttribute. + + +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTCanBeAbstract: aFamixTCanBeAbstract [ + + + +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTCanBeClassSide: aFamixTCanBeClassSide [ + + + +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTCanBeFinal: aFamixTCanBeFinal [ + + + +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTCanImplement: aFamixTCanImplement [ + + + self visitCollection: aFamixTCanImplement interfaceImplementations +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTClass: aFamixTClass [ + + + "We do not visit all behaviorals because some classes already visit it in their superclasses in this language implementation. Visiting them here also would cause a double visit of this trait." + ({ FamixJavaException } includes: aFamixTClass class) + ifFalse: [ self visitFamixTInvocationsReceiver: aFamixTClass ]. + "We should visit FamixTType but all its users in this language already visit it in their superclasses so we skip the call here.". + "We do not visit all behaviorals because some classes already visit it in their superclasses in this language implementation. Visiting them here also would cause a double visit of this trait." + ({ FamixJavaException } includes: aFamixTClass class) + ifFalse: [ self visitFamixTWithAttributes: aFamixTClass ]. + "We do not visit all behaviorals because some classes already visit it in their superclasses in this language implementation. Visiting them here also would cause a double visit of this trait." + ({ FamixJavaException } includes: aFamixTClass class) + ifFalse: [ self visitFamixTWithComments: aFamixTClass ]. + "We do not visit all behaviorals because some classes already visit it in their superclasses in this language implementation. Visiting them here also would cause a double visit of this trait." + ({ FamixJavaException } includes: aFamixTClass class) + ifFalse: [ self visitFamixTWithInheritances: aFamixTClass ]. + "We should visit FamixTWithMethods but all its users in this language already visit it in their superclasses so we skip the call here." +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTClassMetrics: aFamixTClassMetrics [ + + + +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTComment: aFamixTComment [ + + + "We should visit FamixTSourceEntity but all its users in this language already visit it in their superclasses so we skip the call here.". + self visitTEntityMetaLevelDependency: aFamixTComment. + + +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTConcretization: aFamixTConcretization [ + + + self visitFamixTAssociation: aFamixTConcretization. + + self visitEntity: aFamixTConcretization triggeringAssociation. + self visitEntity: aFamixTConcretization typeArgument. + self visitEntity: aFamixTConcretization typeParameter +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTEntityTyping: aFamixTEntityTyping [ + + + self visitFamixTAssociation: aFamixTEntityTyping. + + self visitEntity: aFamixTEntityTyping typedEntity. + self visitEntity: aFamixTEntityTyping declaredType +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTEnum: aFamixTEnum [ + + + "We should visit FamixTType but all its users in this language already visit it in their superclasses so we skip the call here.". + self visitFamixTWithEnumValues: aFamixTEnum +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTEnumValue: aFamixTEnumValue [ + + + self visitFamixTStructuralEntity: aFamixTEnumValue. + + +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTException: aFamixTException [ + + + "We should visit FamixTClass but all its users in this language already visit it in their superclasses so we skip the call here.". + self visitFamixTThrowable: aFamixTException +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTHasImmediateSource: aFamixTHasImmediateSource [ + + + "We should visit FamixTSourceAnchor but all its users in this language already visit it in their superclasses so we skip the call here." +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTHasKind: aFamixTHasKind [ + + + +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTHasVisibility: aFamixTHasVisibility [ + + + +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTImplementable: aFamixTImplementable [ + + + self visitCollection: aFamixTImplementable implementations +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTImplementation: aFamixTImplementation [ + + + self visitFamixTAssociation: aFamixTImplementation. + + self visitEntity: aFamixTImplementation implementingClass. + self visitEntity: aFamixTImplementation interface +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTImplicitVariable: aFamixTImplicitVariable [ + + + self visitFamixTStructuralEntity: aFamixTImplicitVariable. + + +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTImport: aFamixTImport [ + + + self visitFamixTAssociation: aFamixTImport. + + self visitEntity: aFamixTImport importingEntity. + self visitEntity: aFamixTImport importedEntity +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTImportable: aFamixTImportable [ + + + self visitCollection: aFamixTImportable incomingImports +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTIndexedFileNavigation: aFamixTIndexedFileNavigation [ + + + self visitFamixTFileAnchor: aFamixTIndexedFileNavigation +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTInheritance: aFamixTInheritance [ + + + self visitFamixTAssociation: aFamixTInheritance. + + self visitEntity: aFamixTInheritance subclass. + self visitEntity: aFamixTInheritance superclass +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTInvocation: aFamixTInvocation [ + + + self visitFamixTAssociation: aFamixTInvocation. + self visitFamixTHasSignature: aFamixTInvocation. + + self visitCollection: aFamixTInvocation candidates. + self visitEntity: aFamixTInvocation sender. + self visitEntity: aFamixTInvocation receiver +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTInvocationsReceiver: aFamixTInvocationsReceiver [ + + + self visitCollection: aFamixTInvocationsReceiver receivingInvocations +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTLCOMMetrics: aFamixTLCOMMetrics [ + + + +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTLocalVariable: aFamixTLocalVariable [ + + + self visitFamixTStructuralEntity: aFamixTLocalVariable. + + +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTMethod: aFamixTMethod [ + + + self visitFamixTHasSignature: aFamixTMethod. + self visitFamixTInvocable: aFamixTMethod. + self visitFamixTMethodMetrics: aFamixTMethod. + "We should visit FamixTNamedEntity but all its users in this language already visit it in their superclasses so we skip the call here.". + self visitFamixTTypedEntity: aFamixTMethod. + self visitFamixTWithImplicitVariables: aFamixTMethod. + self visitFamixTWithLocalVariables: aFamixTMethod. + self visitFamixTWithParameters: aFamixTMethod. + self visitFamixTWithStatements: aFamixTMethod. + "We should visit TEntityMetaLevelDependency but all its users in this language already visit it in their superclasses so we skip the call here.". + + +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTNamedEntity: aFamixTNamedEntity [ + + + +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTPackage: aFamixTPackage [ + + + self visitFamixTCanBeStub: aFamixTPackage. + "We should visit FamixTNamedEntity but all its users in this language already visit it in their superclasses so we skip the call here.". + "We should visit TEntityMetaLevelDependency but all its users in this language already visit it in their superclasses so we skip the call here.". + + self visitCollection: aFamixTPackage childEntities +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTPackageable: aFamixTPackageable [ + + + +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTParameter: aFamixTParameter [ + + + self visitFamixTStructuralEntity: aFamixTParameter. + + +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTParametricAssociation: aFamixTParametricAssociation [ + + + self visitCollection: aFamixTParametricAssociation concretizations +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTParametricEntity: aFamixTParametricEntity [ + + + self visitCollection: aFamixTParametricEntity typeParameters +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTPrimitiveType: aFamixTPrimitiveType [ + + + "We should visit FamixTType but all its users in this language already visit it in their superclasses so we skip the call here." +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTReference: aFamixTReference [ + + + self visitFamixTAssociation: aFamixTReference. + + self visitEntity: aFamixTReference referencer. + self visitEntity: aFamixTReference referredEntity +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTSourceAnchor: aFamixTSourceAnchor [ + + + self visitEntity: aFamixTSourceAnchor element +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTSourceEntity: aFamixTSourceEntity [ + + + self visitEntity: aFamixTSourceEntity sourceAnchor +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTSourceLanguage: aFamixTSourceLanguage [ + + + self visitCollection: aFamixTSourceLanguage sourcedEntities +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTThrowable: aFamixTThrowable [ + + + self visitCollection: aFamixTThrowable catchingEntities. + self visitCollection: aFamixTThrowable declaringEntities. + self visitCollection: aFamixTThrowable throwingEntities +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTType: aFamixTType [ + + + "We do not visit all behaviorals because some classes already visit it in their superclasses in this language implementation. Visiting them here also would cause a double visit of this trait." + ({ FamixJavaClass . FamixJavaEnum . FamixJavaException . FamixJavaPrimitiveType } includes: aFamixTType class) + ifFalse: [ self visitFamixTCanBeStub: aFamixTType ]. + "We should visit FamixTNamedEntity but all its users in this language already visit it in their superclasses so we skip the call here.". + "We do not visit all behaviorals because some classes already visit it in their superclasses in this language implementation. Visiting them here also would cause a double visit of this trait." + ({ FamixJavaClass . FamixJavaEnum . FamixJavaException . FamixJavaPrimitiveType } includes: aFamixTType class) + ifFalse: [ self visitFamixTReferenceable: aFamixTType ]. + "We should visit TEntityMetaLevelDependency but all its users in this language already visit it in their superclasses so we skip the call here.". + + self visitCollection: aFamixTType incomingTypings +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTTypeArgument: aFamixTTypeArgument [ + + + self visitCollection: aFamixTTypeArgument outgoingConcretizations +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTTypeParameter: aFamixTTypeParameter [ + + + self visitCollection: aFamixTTypeParameter concretizations. + self visitEntity: aFamixTTypeParameter genericEntity +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTUnknownVariable: aFamixTUnknownVariable [ + + + self visitFamixTStructuralEntity: aFamixTUnknownVariable +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithAnnotationInstances: aFamixTWithAnnotationInstances [ + + + self visitCollection: aFamixTWithAnnotationInstances annotationInstances +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithAnnotationTypes: aFamixTWithAnnotationTypes [ + + + self visitCollection: aFamixTWithAnnotationTypes definedAnnotationTypes +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithAttributes: aFamixTWithAttributes [ + + + self visitCollection: aFamixTWithAttributes attributes +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithClasses: aFamixTWithClasses [ + + + self visitFamixTWithTypes: aFamixTWithClasses +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithComments: aFamixTWithComments [ + + + self visitCollection: aFamixTWithComments comments +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithExceptions: aFamixTWithExceptions [ + + + self visitCollection: aFamixTWithExceptions caughtExceptions. + self visitCollection: aFamixTWithExceptions declaredExceptions. + self visitCollection: aFamixTWithExceptions thrownExceptions +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithImports: aFamixTWithImports [ + + + self visitCollection: aFamixTWithImports imports +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithInheritances: aFamixTWithInheritances [ + + + self visitCollection: aFamixTWithInheritances superInheritances. + self visitCollection: aFamixTWithInheritances subInheritances +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithMethods: aFamixTWithMethods [ + + + self visitCollection: aFamixTWithMethods methods +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithTypes: aFamixTWithTypes [ + + + self visitCollection: aFamixTWithTypes types +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitTAssociationMetaLevelDependency: aTAssociationMetaLevelDependency [ + + + +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitTEntityMetaLevelDependency: aTEntityMetaLevelDependency [ + + + +] diff --git a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st index 54e69def4..391795e1b 100644 --- a/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st +++ b/src/Famix-MetamodelBuilder-Core/FmxMBBehavior.class.st @@ -44,7 +44,7 @@ FmxMBBehavior >> acceptVisitor: aVisitor [ { #category : 'accessing' } FmxMBBehavior >> addAllTransitiveTraitsIn: aCollection [ - aCollection add: self. + self isTraitEntity ifTrue: [ aCollection add: self ]. self allLocalTraits do: [ :trait | trait addAllTransitiveTraitsIn: aCollection ]. ^ aCollection ] diff --git a/src/Famix-MetamodelGeneration/FamixGenerator.class.st b/src/Famix-MetamodelGeneration/FamixGenerator.class.st index 12606c1d1..708799b01 100644 --- a/src/Famix-MetamodelGeneration/FamixGenerator.class.st +++ b/src/Famix-MetamodelGeneration/FamixGenerator.class.st @@ -132,25 +132,12 @@ Class { #package : 'Famix-MetamodelGeneration' } -{ #category : 'additional tools' } -FamixGenerator class >> metamodelToolGenerators [ - - ^ { FamixVisitorGenerator } -] - { #category : 'accessing' } FamixGenerator class >> packageName [ ^ #'Famix-Traits' ] -{ #category : 'accessing' } -FamixGenerator class >> packageNameForVisitor [ - "Generate visitor in the entities package. Discussed with N. Anquetil" - - ^ self packageName -] - { #category : 'accessing' } FamixGenerator class >> prefix [ diff --git a/src/Famix-Traits/FamixTVisitor.trait.st b/src/Famix-Traits/FamixTVisitor.trait.st deleted file mode 100644 index a24945136..000000000 --- a/src/Famix-Traits/FamixTVisitor.trait.st +++ /dev/null @@ -1,962 +0,0 @@ -" -I am a visitor for FamixEntities. -I am generated with the metamodel. - - -" -Trait { - #name : 'FamixTVisitor', - #category : 'Famix-Traits-Visitor', - #package : 'Famix-Traits', - #tag : 'Visitor' -} - -{ #category : 'meta' } -FamixTVisitor classSide >> annotation [ - - - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitCollection: aCollection [ - - - ^ aCollection collect: [ :each | each accept: self ] -] - -{ #category : 'visiting' } -FamixTVisitor >> visitEntity: aFamixEntity [ - - - ^ aFamixEntity ifNotNil: [ aFamixEntity accept: self ] -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTAccess: aFamixTAccess [ - - - self visitFamixTAssociation: aFamixTAccess. - - self visitEntity: aFamixTAccess accessor. - self visitCollection: aFamixTAccess candidates -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTAccessible: aFamixTAccessible [ - - - self visitCollection: aFamixTAccessible incomingAccesses -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTAnnotationInstance: aFamixTAnnotationInstance [ - - - self visitTEntityMetaLevelDependency: aFamixTAnnotationInstance. - - self visitEntity: aFamixTAnnotationInstance annotatedEntity. - self visitCollection: aFamixTAnnotationInstance attributes. - self visitEntity: aFamixTAnnotationInstance annotationType -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTAnnotationInstanceAttribute: aFamixTAnnotationInstanceAttribute [ - - - self visitTEntityMetaLevelDependency: aFamixTAnnotationInstanceAttribute. - - self visitEntity: aFamixTAnnotationInstanceAttribute annotationTypeAttribute -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTAnnotationType: aFamixTAnnotationType [ - - - self visitCollection: aFamixTAnnotationType instances -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTAnnotationTypeAttribute: aFamixTAnnotationTypeAttribute [ - - - self visitFamixTAttribute: aFamixTAnnotationTypeAttribute. - - self visitCollection: aFamixTAnnotationTypeAttribute annotationAttributeInstances -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTAssociation: aFamixTAssociation [ - - - self visitFamixTSourceEntity: aFamixTAssociation. - self visitTAssociationMetaLevelDependency: aFamixTAssociation. - - self visitEntity: aFamixTAssociation previous. - self visitEntity: aFamixTAssociation next -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTAttribute: aFamixTAttribute [ - - - self visitFamixTStructuralEntity: aFamixTAttribute. - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTBytesFileAnchor: aFamixTBytesFileAnchor [ - - - self visitFamixTFileAnchor: aFamixTBytesFileAnchor -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTCanBeAbstract: aFamixTCanBeAbstract [ - - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTCanBeClassSide: aFamixTCanBeClassSide [ - - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTCanBeFinal: aFamixTCanBeFinal [ - - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTCanBeStub: aFamixTCanBeStub [ - - - self visitFamixTSourceEntity: aFamixTCanBeStub -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTCanImplement: aFamixTCanImplement [ - - - self visitCollection: aFamixTCanImplement interfaceImplementations -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTClass: aFamixTClass [ - - - self visitFamixTInvocationsReceiver: aFamixTClass. - self visitFamixTType: aFamixTClass. - self visitFamixTWithAttributes: aFamixTClass. - self visitFamixTWithComments: aFamixTClass. - self visitFamixTWithInheritances: aFamixTClass. - self visitFamixTWithMethods: aFamixTClass -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTClassMetrics: aFamixTClassMetrics [ - - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTCohesionCouplingMetrics: aFamixTCohesionCouplingMetrics [ - - - self visitFamixTPackage: aFamixTCohesionCouplingMetrics -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTComment: aFamixTComment [ - - - self visitFamixTSourceEntity: aFamixTComment. - self visitTEntityMetaLevelDependency: aFamixTComment. - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTCompilationUnit: aFamixTCompilationUnit [ - - - self visitFamixTFile: aFamixTCompilationUnit. - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTConcretization: aFamixTConcretization [ - - - self visitFamixTAssociation: aFamixTConcretization. - - self visitEntity: aFamixTConcretization triggeringAssociation. - self visitEntity: aFamixTConcretization typeArgument. - self visitEntity: aFamixTConcretization typeParameter -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTDefinedInModule: aFamixTDefinedInModule [ - - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTDereferencedInvocation: aFamixTDereferencedInvocation [ - - - self visitFamixTInvocation: aFamixTDereferencedInvocation. - - self visitEntity: aFamixTDereferencedInvocation referencer -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTEntityTyping: aFamixTEntityTyping [ - - - self visitFamixTAssociation: aFamixTEntityTyping. - - self visitEntity: aFamixTEntityTyping typedEntity. - self visitEntity: aFamixTEntityTyping declaredType -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTEnum: aFamixTEnum [ - - - self visitFamixTType: aFamixTEnum. - self visitFamixTWithEnumValues: aFamixTEnum -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTEnumValue: aFamixTEnumValue [ - - - self visitFamixTStructuralEntity: aFamixTEnumValue. - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTException: aFamixTException [ - - - self visitFamixTClass: aFamixTException. - self visitFamixTThrowable: aFamixTException -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTFile: aFamixTFile [ - - - self visitFamixTFileSystemEntity: aFamixTFile. - - self visitCollection: aFamixTFile entities -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTFileAnchor: aFamixTFileAnchor [ - - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTFileInclude: aFamixTFileInclude [ - - - self visitFamixTAssociation: aFamixTFileInclude. - - self visitEntity: aFamixTFileInclude source. - self visitEntity: aFamixTFileInclude target -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTFileNavigation: aFamixTFileNavigation [ - - - self visitFamixTFileAnchor: aFamixTFileNavigation -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTFileSystemEntity: aFamixTFileSystemEntity [ - - - self visitFamixTNamedEntity: aFamixTFileSystemEntity. - self visitTEntityMetaLevelDependency: aFamixTFileSystemEntity. - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTFolder: aFamixTFolder [ - - - self visitFamixTFileSystemEntity: aFamixTFolder. - - self visitCollection: aFamixTFolder childrenFileSystemEntities -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTFunction: aFamixTFunction [ - - - self visitFamixTHasSignature: aFamixTFunction. - self visitFamixTInvocable: aFamixTFunction. - self visitFamixTNamedEntity: aFamixTFunction. - self visitFamixTTypedEntity: aFamixTFunction. - self visitFamixTWithLocalVariables: aFamixTFunction. - self visitFamixTWithParameters: aFamixTFunction. - self visitFamixTWithStatements: aFamixTFunction. - self visitTEntityMetaLevelDependency: aFamixTFunction. - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTGlobalVariable: aFamixTGlobalVariable [ - - - self visitFamixTStructuralEntity: aFamixTGlobalVariable. - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTHasImmediateSource: aFamixTHasImmediateSource [ - - - self visitFamixTSourceAnchor: aFamixTHasImmediateSource -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTHasKind: aFamixTHasKind [ - - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTHasSignature: aFamixTHasSignature [ - - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTHasVisibility: aFamixTHasVisibility [ - - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTImplementable: aFamixTImplementable [ - - - self visitCollection: aFamixTImplementable implementations -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTImplementation: aFamixTImplementation [ - - - self visitFamixTAssociation: aFamixTImplementation. - - self visitEntity: aFamixTImplementation implementingClass. - self visitEntity: aFamixTImplementation interface -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTImplicitVariable: aFamixTImplicitVariable [ - - - self visitFamixTStructuralEntity: aFamixTImplicitVariable. - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTImport: aFamixTImport [ - - - self visitFamixTAssociation: aFamixTImport. - - self visitEntity: aFamixTImport importingEntity. - self visitEntity: aFamixTImport importedEntity -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTImportable: aFamixTImportable [ - - - self visitCollection: aFamixTImportable incomingImports -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTIndexedFileNavigation: aFamixTIndexedFileNavigation [ - - - self visitFamixTFileAnchor: aFamixTIndexedFileNavigation -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTInheritance: aFamixTInheritance [ - - - self visitFamixTAssociation: aFamixTInheritance. - - self visitEntity: aFamixTInheritance subclass. - self visitEntity: aFamixTInheritance superclass -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTInvocable: aFamixTInvocable [ - - - self visitCollection: aFamixTInvocable incomingInvocations -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTInvocation: aFamixTInvocation [ - - - self visitFamixTAssociation: aFamixTInvocation. - self visitFamixTHasSignature: aFamixTInvocation. - - self visitCollection: aFamixTInvocation candidates. - self visitEntity: aFamixTInvocation sender. - self visitEntity: aFamixTInvocation receiver -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTInvocationsReceiver: aFamixTInvocationsReceiver [ - - - self visitCollection: aFamixTInvocationsReceiver receivingInvocations -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTLCOMMetrics: aFamixTLCOMMetrics [ - - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTLambda: aFamixTLambda [ - - - self visitFamixTHasSignature: aFamixTLambda. - self visitFamixTInvocable: aFamixTLambda. - self visitFamixTWithLocalVariables: aFamixTLambda. - self visitFamixTWithParameters: aFamixTLambda. - self visitFamixTWithStatements: aFamixTLambda. - self visitTEntityMetaLevelDependency: aFamixTLambda. - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTLocalVariable: aFamixTLocalVariable [ - - - self visitFamixTStructuralEntity: aFamixTLocalVariable. - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTMethod: aFamixTMethod [ - - - self visitFamixTHasSignature: aFamixTMethod. - self visitFamixTInvocable: aFamixTMethod. - self visitFamixTMethodMetrics: aFamixTMethod. - self visitFamixTNamedEntity: aFamixTMethod. - self visitFamixTTypedEntity: aFamixTMethod. - self visitFamixTWithImplicitVariables: aFamixTMethod. - self visitFamixTWithLocalVariables: aFamixTMethod. - self visitFamixTWithParameters: aFamixTMethod. - self visitFamixTWithStatements: aFamixTMethod. - self visitTEntityMetaLevelDependency: aFamixTMethod. - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTMethodMetrics: aFamixTMethodMetrics [ - - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTModule: aFamixTModule [ - - - self visitCollection: aFamixTModule moduleEntities -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTMultipleFileAnchor: aFamixTMultipleFileAnchor [ - - - self visitFamixTSourceAnchor: aFamixTMultipleFileAnchor -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTNamedEntity: aFamixTNamedEntity [ - - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTNamespace: aFamixTNamespace [ - - - self visitFamixTCanBeStub: aFamixTNamespace. - self visitFamixTNamedEntity: aFamixTNamespace. - self visitTEntityMetaLevelDependency: aFamixTNamespace -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTPackage: aFamixTPackage [ - - - self visitFamixTCanBeStub: aFamixTPackage. - self visitFamixTNamedEntity: aFamixTPackage. - self visitTEntityMetaLevelDependency: aFamixTPackage. - - self visitCollection: aFamixTPackage childEntities -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTPackageable: aFamixTPackageable [ - - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTParameter: aFamixTParameter [ - - - self visitFamixTStructuralEntity: aFamixTParameter. - - -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTParametricAssociation: aFamixTParametricAssociation [ - - - self visitCollection: aFamixTParametricAssociation concretizations -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTParametricEntity: aFamixTParametricEntity [ - - - self visitCollection: aFamixTParametricEntity typeParameters -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTPrimitiveType: aFamixTPrimitiveType [ - - - self visitFamixTType: aFamixTPrimitiveType -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTReference: aFamixTReference [ - - - self visitFamixTAssociation: aFamixTReference. - - self visitEntity: aFamixTReference referencer. - self visitEntity: aFamixTReference referredEntity -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTReferenceable: aFamixTReferenceable [ - - - self visitCollection: aFamixTReferenceable incomingReferences -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTRelativeSourceAnchor: aFamixTRelativeSourceAnchor [ - - - self visitFamixTSourceAnchor: aFamixTRelativeSourceAnchor -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTShadowable: aFamixTShadowable [ - - - self visitCollection: aFamixTShadowable shadowingEntities -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTShadower: aFamixTShadower [ - - - self visitEntity: aFamixTShadower shadowedEntity -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTSourceAnchor: aFamixTSourceAnchor [ - - - self visitEntity: aFamixTSourceAnchor element -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTSourceEntity: aFamixTSourceEntity [ - - - self visitEntity: aFamixTSourceEntity sourceAnchor -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTSourceLanguage: aFamixTSourceLanguage [ - - - self visitCollection: aFamixTSourceLanguage sourcedEntities -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTStructuralEntity: aFamixTStructuralEntity [ - - - self visitFamixTAccessible: aFamixTStructuralEntity. - self visitFamixTCanBeStub: aFamixTStructuralEntity. - self visitFamixTNamedEntity: aFamixTStructuralEntity. - self visitFamixTTypedEntity: aFamixTStructuralEntity. - self visitTEntityMetaLevelDependency: aFamixTStructuralEntity -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTTemplate: aFamixTTemplate [ - - - self visitCollection: aFamixTTemplate templateUsers -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTTemplateUser: aFamixTTemplateUser [ - - - self visitEntity: aFamixTTemplateUser template -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTThrowable: aFamixTThrowable [ - - - self visitCollection: aFamixTThrowable catchingEntities. - self visitCollection: aFamixTThrowable declaringEntities. - self visitCollection: aFamixTThrowable throwingEntities -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTTrait: aFamixTTrait [ - - - self visitCollection: aFamixTTrait incomingTraitUsages -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTTraitUsage: aFamixTTraitUsage [ - - - self visitFamixTAssociation: aFamixTTraitUsage. - - self visitEntity: aFamixTTraitUsage trait. - self visitEntity: aFamixTTraitUsage user -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTTraitUser: aFamixTTraitUser [ - - - self visitCollection: aFamixTTraitUser traitUsages -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTType: aFamixTType [ - - - self visitFamixTCanBeStub: aFamixTType. - self visitFamixTNamedEntity: aFamixTType. - self visitFamixTReferenceable: aFamixTType. - self visitTEntityMetaLevelDependency: aFamixTType. - - self visitCollection: aFamixTType incomingTypings -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTTypeAlias: aFamixTTypeAlias [ - - - self visitEntity: aFamixTTypeAlias aliasedType -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTTypeArgument: aFamixTTypeArgument [ - - - self visitCollection: aFamixTTypeArgument outgoingConcretizations -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTTypeParameter: aFamixTTypeParameter [ - - - self visitCollection: aFamixTTypeParameter concretizations. - self visitEntity: aFamixTTypeParameter genericEntity -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTTypedEntity: aFamixTTypedEntity [ - - - self visitEntity: aFamixTTypedEntity typing -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTUnknownVariable: aFamixTUnknownVariable [ - - - self visitFamixTStructuralEntity: aFamixTUnknownVariable -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithAccesses: aFamixTWithAccesses [ - - - self visitCollection: aFamixTWithAccesses accesses -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithAnnotationInstances: aFamixTWithAnnotationInstances [ - - - self visitCollection: aFamixTWithAnnotationInstances annotationInstances -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithAnnotationTypes: aFamixTWithAnnotationTypes [ - - - self visitCollection: aFamixTWithAnnotationTypes definedAnnotationTypes -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithAttributes: aFamixTWithAttributes [ - - - self visitCollection: aFamixTWithAttributes attributes -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithClasses: aFamixTWithClasses [ - - - self visitFamixTWithTypes: aFamixTWithClasses -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithComments: aFamixTWithComments [ - - - self visitCollection: aFamixTWithComments comments -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithCompilationUnits: aFamixTWithCompilationUnits [ - - - self visitEntity: aFamixTWithCompilationUnits compilationUnit -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithDereferencedInvocations: aFamixTWithDereferencedInvocations [ - - - self visitCollection: aFamixTWithDereferencedInvocations dereferencedInvocations -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithEnumValues: aFamixTWithEnumValues [ - - - self visitCollection: aFamixTWithEnumValues enumValues -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithExceptions: aFamixTWithExceptions [ - - - self visitCollection: aFamixTWithExceptions caughtExceptions. - self visitCollection: aFamixTWithExceptions declaredExceptions. - self visitCollection: aFamixTWithExceptions thrownExceptions -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithFileIncludes: aFamixTWithFileIncludes [ - - - self visitCollection: aFamixTWithFileIncludes outgoingIncludeRelations. - self visitCollection: aFamixTWithFileIncludes incomingIncludeRelations -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithFiles: aFamixTWithFiles [ - - - self visitCollection: aFamixTWithFiles containerFiles -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithFunctions: aFamixTWithFunctions [ - - - self visitCollection: aFamixTWithFunctions functions -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithGlobalVariables: aFamixTWithGlobalVariables [ - - - self visitCollection: aFamixTWithGlobalVariables globalVariables -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithImplicitVariables: aFamixTWithImplicitVariables [ - - - self visitCollection: aFamixTWithImplicitVariables implicitVariables -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithImports: aFamixTWithImports [ - - - self visitCollection: aFamixTWithImports imports -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithInheritances: aFamixTWithInheritances [ - - - self visitCollection: aFamixTWithInheritances superInheritances. - self visitCollection: aFamixTWithInheritances subInheritances -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithInvocations: aFamixTWithInvocations [ - - - self visitCollection: aFamixTWithInvocations outgoingInvocations -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithLambdas: aFamixTWithLambdas [ - - - self visitCollection: aFamixTWithLambdas lambdas -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithLocalVariables: aFamixTWithLocalVariables [ - - - self visitCollection: aFamixTWithLocalVariables localVariables -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithMethods: aFamixTWithMethods [ - - - self visitCollection: aFamixTWithMethods methods -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithParameters: aFamixTWithParameters [ - - - self visitCollection: aFamixTWithParameters parameters -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithReferences: aFamixTWithReferences [ - - - self visitCollection: aFamixTWithReferences outgoingReferences -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithSourceLanguages: aFamixTWithSourceLanguages [ - - - self visitEntity: aFamixTWithSourceLanguages declaredSourceLanguage -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithStatements: aFamixTWithStatements [ - - - self visitFamixTCanBeStub: aFamixTWithStatements. - self visitFamixTWithAccesses: aFamixTWithStatements. - self visitFamixTWithInvocations: aFamixTWithStatements. - self visitFamixTWithReferences: aFamixTWithStatements -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithTemplates: aFamixTWithTemplates [ - - - self visitCollection: aFamixTWithTemplates templates -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithTraits: aFamixTWithTraits [ - - - self visitCollection: aFamixTWithTraits traits -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithTypeAliases: aFamixTWithTypeAliases [ - - - self visitCollection: aFamixTWithTypeAliases typeAliases -] - -{ #category : 'visiting' } -FamixTVisitor >> visitFamixTWithTypes: aFamixTWithTypes [ - - - self visitCollection: aFamixTWithTypes types -] - -{ #category : 'visiting' } -FamixTVisitor >> visitTEntityMetaLevelDependency: aFamixEntity [ - "This method is not generated to avoid complexify the visitor generation" - - -] diff --git a/src/Famix-Visitor-Generation/FamixVisitorGenerator.class.st b/src/Famix-Visitor-Generation/FamixVisitorGenerator.class.st index e967a105b..c9d6ce87d 100644 --- a/src/Famix-Visitor-Generation/FamixVisitorGenerator.class.st +++ b/src/Famix-Visitor-Generation/FamixVisitorGenerator.class.st @@ -53,12 +53,7 @@ FamixVisitorGenerator >> configureForGenerator: aFamixMetamodelGenerator [ { #category : 'generating' } FamixVisitorGenerator >> define [ - | visitorTrait | - visitorTrait := builder newVisitorTrait. - visitorTrait packageName: packageName. - - builder allSubBuilders do: [ :subBuilder | - subBuilder traits - detect: [ :each | each isVisitorTrait ] - ifFound: [ :famixTVistior | visitorTrait --|> famixTVistior ] ] + builder newVisitorTrait + packageName: packageName; + yourself ] diff --git a/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st b/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st index 2a14ceab6..35fe18e51 100644 --- a/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st +++ b/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st @@ -6,19 +6,11 @@ FmxMBChangesBuilderVisitor >> generateVisitMethodsIn: aTrait [ | localBehaviorsToVisit remoteTraits | localBehaviorsToVisit := (builder classes select: #isClassEntity) , (builder traits select: #isTraitEntity). - localBehaviorsToVisit do: [ :fmxMBBehavior | self addMethod: (self methodFactory visitBehavioral: fmxMBBehavior) protocol: #visiting ]. + localBehaviorsToVisit do: [ :fmxMBBehavior | self addMethod: (self methodFactory visitBehavioral: fmxMBBehavior builder: builder) protocol: #visiting ]. - remoteTraits := localBehaviorsToVisit flatCollect: [ :class | class allTransitiveTraits select: #isRemote ] as: Set + remoteTraits := localBehaviorsToVisit flatCollect: [ :class | class allTransitiveTraits select: #isRemote ] as: Set. - "remoteTraits do: [ :fmxMBBehavior | - | protocol | - self addMethod: (self methodFactory visitBehavioral: fmxMBBehavior) protocol: #visiting. - - protocol := aTrait packageName == builder configuration packageName - ifTrue: [ #visitor ] - ifFalse: [ '*' , aTrait packageName ]. - - self addMethod: (self methodFactory acceptFor: fmxMBBehavior fullName) in: fmxMBBehavior fullName protocol: protocol ]" + remoteTraits do: [ :fmxMBBehavior | self addMethod: (self methodFactory visitBehavioral: fmxMBBehavior builder: builder) protocol: #visiting ] ] { #category : '*Famix-Visitor-Generation' } diff --git a/src/Famix-Visitor-Generation/FmxMBMethodsFactory.extension.st b/src/Famix-Visitor-Generation/FmxMBMethodsFactory.extension.st index 71a3e2110..4b831dfdf 100644 --- a/src/Famix-Visitor-Generation/FmxMBMethodsFactory.extension.st +++ b/src/Famix-Visitor-Generation/FmxMBMethodsFactory.extension.st @@ -10,19 +10,57 @@ FmxMBMethodsFactory class >> acceptFor: aName [ ] { #category : '*Famix-Visitor-Generation' } -FmxMBMethodsFactory class >> visitBehavioral: aBehavioral [ +FmxMBMethodsFactory class >> visitBehavioral: aBehavioral builder: aBuilder [ ^ String streamContents: [ :aStream | - aStream << ('visit{1}: a{1} + | parameter | + parameter := 'a' , aBehavioral fullName. + aStream << ('visit{1}: {2} -' format: { aBehavioral fullName }). +' format: { + aBehavioral fullName. + parameter }). aBehavioral behaviorsToVisit - do: [ :behavior | - aStream << (' self visit{1}: a{2}' format: { - behavior fullName. - aBehavioral fullName }) ] + do: [ :behavior | "In case we generate the behaviors to visit of a trait, we might reject the visit for some implementors because their superclasses might already visit those behaviors." + aBehavioral isTraitEntity + ifTrue: [ + | concreteUsers | + concreteUsers := aBuilder concreteClasses select: [ :class | class allTransitiveTraits includes: aBehavioral ]. + (concreteUsers select: [ :user | (user allSuperclasses flatCollectAsSet: #allTransitiveTraits) includes: behavior ]) + ifEmpty: [ + aStream << (' self visit{1}: {2}' format: { + behavior fullName. + parameter }) ] + ifNotEmpty: [ :usersToReject | + concreteUsers size = usersToReject size + ifTrue: [ + aStream + nextPutAll: ' "We should visit '; + nextPutAll: behavior fullName; + nextPutAll: ' but all its users in this language already visit it in their superclasses so we skip the call here."' ] + ifFalse: [ + aStream + tab; + nextPutAll: '"We do not visit all behaviorals because some classes already visit it in their superclasses in this language implementation. Visiting them here also would cause a double visit of this trait."'; + cr; + tab; + nextPutAll: '({ '. + usersToReject do: [ :user | aStream nextPutAll: user fullName ] separatedBy: [ aStream nextPutAll: ' . ' ]. + aStream + nextPutAll: ' } includes: '; + nextPutAll: parameter; + nextPutAll: ' class) + ifFalse: [ self visit'; + nextPutAll: behavior fullName; + nextPutAll: ': '; + nextPutAll: parameter; + nextPutAll: ' ]' ] ] ] + ifFalse: [ + aStream << (' self visit{1}: {2}' format: { + behavior fullName. + parameter }) ] ] separatedBy: [ aStream << '.'; @@ -35,11 +73,11 @@ FmxMBMethodsFactory class >> visitBehavioral: aBehavioral [ cr ] ]. (aBehavioral relations reject: #isContainer) do: [ :relation | - aStream << (' self visit{1}: a{2} {3}' format: { + aStream << (' self visit{1}: {2} {3}' format: { (relation isOne ifTrue: [ 'Entity' ] ifFalse: [ 'Collection' ]). - aBehavioral fullName. + parameter. relation name }) ] separatedBy: [ aStream From 991ab732781770fe3a98f44cbab9bf81e3a3f7ca Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Thu, 21 May 2026 02:26:51 +0200 Subject: [PATCH 118/121] Fix bug in selection of trait visit methods to generate --- .../FamixJavaTVisitor.trait.st | 137 ++++++++++++++++++ .../FmxMBChangesBuilderVisitor.extension.st | 2 +- 2 files changed, 138 insertions(+), 1 deletion(-) diff --git a/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st b/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st index 22b8dfeed..42b90323a 100644 --- a/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st @@ -532,6 +532,13 @@ FamixJavaTVisitor >> visitFamixTAccess: aFamixTAccess [ self visitCollection: aFamixTAccess candidates ] +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTAccessible: aFamixTAccessible [ + + + self visitCollection: aFamixTAccessible incomingAccesses +] + { #category : 'visiting' } FamixJavaTVisitor >> visitFamixTAnnotationInstance: aFamixTAnnotationInstance [ @@ -568,6 +575,17 @@ FamixJavaTVisitor >> visitFamixTAnnotationTypeAttribute: aFamixTAnnotationTypeAt self visitCollection: aFamixTAnnotationTypeAttribute annotationAttributeInstances ] +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTAssociation: aFamixTAssociation [ + + + self visitFamixTSourceEntity: aFamixTAssociation. + self visitTAssociationMetaLevelDependency: aFamixTAssociation. + + self visitEntity: aFamixTAssociation previous. + self visitEntity: aFamixTAssociation next +] + { #category : 'visiting' } FamixJavaTVisitor >> visitFamixTAttribute: aFamixTAttribute [ @@ -598,6 +616,13 @@ FamixJavaTVisitor >> visitFamixTCanBeFinal: aFamixTCanBeFinal [ ] +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTCanBeStub: aFamixTCanBeStub [ + + + "We should visit FamixTSourceEntity but all its users in this language already visit it in their superclasses so we skip the call here." +] + { #category : 'visiting' } FamixJavaTVisitor >> visitFamixTCanImplement: aFamixTCanImplement [ @@ -688,6 +713,13 @@ FamixJavaTVisitor >> visitFamixTException: aFamixTException [ self visitFamixTThrowable: aFamixTException ] +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTFileAnchor: aFamixTFileAnchor [ + + + +] + { #category : 'visiting' } FamixJavaTVisitor >> visitFamixTHasImmediateSource: aFamixTHasImmediateSource [ @@ -702,6 +734,13 @@ FamixJavaTVisitor >> visitFamixTHasKind: aFamixTHasKind [ ] +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTHasSignature: aFamixTHasSignature [ + + + +] + { #category : 'visiting' } FamixJavaTVisitor >> visitFamixTHasVisibility: aFamixTHasVisibility [ @@ -769,6 +808,13 @@ FamixJavaTVisitor >> visitFamixTInheritance: aFamixTInheritance [ self visitEntity: aFamixTInheritance superclass ] +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTInvocable: aFamixTInvocable [ + + + self visitCollection: aFamixTInvocable incomingInvocations +] + { #category : 'visiting' } FamixJavaTVisitor >> visitFamixTInvocation: aFamixTInvocation [ @@ -822,6 +868,13 @@ FamixJavaTVisitor >> visitFamixTMethod: aFamixTMethod [ ] +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTMethodMetrics: aFamixTMethodMetrics [ + + + +] + { #category : 'visiting' } FamixJavaTVisitor >> visitFamixTNamedEntity: aFamixTNamedEntity [ @@ -887,6 +940,13 @@ FamixJavaTVisitor >> visitFamixTReference: aFamixTReference [ self visitEntity: aFamixTReference referredEntity ] +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTReferenceable: aFamixTReferenceable [ + + + self visitCollection: aFamixTReferenceable incomingReferences +] + { #category : 'visiting' } FamixJavaTVisitor >> visitFamixTSourceAnchor: aFamixTSourceAnchor [ @@ -908,6 +968,17 @@ FamixJavaTVisitor >> visitFamixTSourceLanguage: aFamixTSourceLanguage [ self visitCollection: aFamixTSourceLanguage sourcedEntities ] +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTStructuralEntity: aFamixTStructuralEntity [ + + + self visitFamixTAccessible: aFamixTStructuralEntity. + self visitFamixTCanBeStub: aFamixTStructuralEntity. + "We should visit FamixTNamedEntity but all its users in this language already visit it in their superclasses so we skip the call here.". + self visitFamixTTypedEntity: aFamixTStructuralEntity. + "We should visit TEntityMetaLevelDependency but all its users in this language already visit it in their superclasses so we skip the call here." +] + { #category : 'visiting' } FamixJavaTVisitor >> visitFamixTThrowable: aFamixTThrowable [ @@ -948,6 +1019,13 @@ FamixJavaTVisitor >> visitFamixTTypeParameter: aFamixTTypeParameter [ self visitEntity: aFamixTTypeParameter genericEntity ] +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTTypedEntity: aFamixTTypedEntity [ + + + self visitEntity: aFamixTTypedEntity typing +] + { #category : 'visiting' } FamixJavaTVisitor >> visitFamixTUnknownVariable: aFamixTUnknownVariable [ @@ -955,6 +1033,13 @@ FamixJavaTVisitor >> visitFamixTUnknownVariable: aFamixTUnknownVariable [ self visitFamixTStructuralEntity: aFamixTUnknownVariable ] +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithAccesses: aFamixTWithAccesses [ + + + self visitCollection: aFamixTWithAccesses accesses +] + { #category : 'visiting' } FamixJavaTVisitor >> visitFamixTWithAnnotationInstances: aFamixTWithAnnotationInstances [ @@ -990,6 +1075,13 @@ FamixJavaTVisitor >> visitFamixTWithComments: aFamixTWithComments [ self visitCollection: aFamixTWithComments comments ] +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithEnumValues: aFamixTWithEnumValues [ + + + self visitCollection: aFamixTWithEnumValues enumValues +] + { #category : 'visiting' } FamixJavaTVisitor >> visitFamixTWithExceptions: aFamixTWithExceptions [ @@ -999,6 +1091,13 @@ FamixJavaTVisitor >> visitFamixTWithExceptions: aFamixTWithExceptions [ self visitCollection: aFamixTWithExceptions thrownExceptions ] +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithImplicitVariables: aFamixTWithImplicitVariables [ + + + self visitCollection: aFamixTWithImplicitVariables implicitVariables +] + { #category : 'visiting' } FamixJavaTVisitor >> visitFamixTWithImports: aFamixTWithImports [ @@ -1014,6 +1113,20 @@ FamixJavaTVisitor >> visitFamixTWithInheritances: aFamixTWithInheritances [ self visitCollection: aFamixTWithInheritances subInheritances ] +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithInvocations: aFamixTWithInvocations [ + + + self visitCollection: aFamixTWithInvocations outgoingInvocations +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithLocalVariables: aFamixTWithLocalVariables [ + + + self visitCollection: aFamixTWithLocalVariables localVariables +] + { #category : 'visiting' } FamixJavaTVisitor >> visitFamixTWithMethods: aFamixTWithMethods [ @@ -1021,6 +1134,30 @@ FamixJavaTVisitor >> visitFamixTWithMethods: aFamixTWithMethods [ self visitCollection: aFamixTWithMethods methods ] +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithParameters: aFamixTWithParameters [ + + + self visitCollection: aFamixTWithParameters parameters +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithReferences: aFamixTWithReferences [ + + + self visitCollection: aFamixTWithReferences outgoingReferences +] + +{ #category : 'visiting' } +FamixJavaTVisitor >> visitFamixTWithStatements: aFamixTWithStatements [ + + + self visitFamixTCanBeStub: aFamixTWithStatements. + self visitFamixTWithAccesses: aFamixTWithStatements. + self visitFamixTWithInvocations: aFamixTWithStatements. + self visitFamixTWithReferences: aFamixTWithStatements +] + { #category : 'visiting' } FamixJavaTVisitor >> visitFamixTWithTypes: aFamixTWithTypes [ diff --git a/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st b/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st index 35fe18e51..ca21b8fb7 100644 --- a/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st +++ b/src/Famix-Visitor-Generation/FmxMBChangesBuilderVisitor.extension.st @@ -8,7 +8,7 @@ FmxMBChangesBuilderVisitor >> generateVisitMethodsIn: aTrait [ localBehaviorsToVisit do: [ :fmxMBBehavior | self addMethod: (self methodFactory visitBehavioral: fmxMBBehavior builder: builder) protocol: #visiting ]. - remoteTraits := localBehaviorsToVisit flatCollect: [ :class | class allTransitiveTraits select: #isRemote ] as: Set. + remoteTraits := (localBehaviorsToVisit flatCollect: [ :class | class allTransitiveTraits ] as: Set) \ localBehaviorsToVisit. remoteTraits do: [ :fmxMBBehavior | self addMethod: (self methodFactory visitBehavioral: fmxMBBehavior builder: builder) protocol: #visiting ] ] From 47b04e398e462042b59d26aed5fe16b7102e4027 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Thu, 21 May 2026 02:34:49 +0200 Subject: [PATCH 119/121] Improve argument name --- .../FamixJavaTVisitor.trait.st | 820 +++++++++--------- .../FmxMBMethodsFactory.extension.st | 7 +- 2 files changed, 415 insertions(+), 412 deletions(-) diff --git a/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st b/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st index 42b90323a..f5985ac75 100644 --- a/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st +++ b/src/Famix-Java-Entities/FamixJavaTVisitor.trait.st @@ -34,1135 +34,1135 @@ FamixJavaTVisitor >> visitEntity: aFamixEntity [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaAccess: aFamixJavaAccess [ +FamixJavaTVisitor >> visitFamixJavaAccess: anAccess [ - self visitFamixTAccess: aFamixJavaAccess + self visitFamixTAccess: anAccess ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaAnnotationInstance: aFamixJavaAnnotationInstance [ +FamixJavaTVisitor >> visitFamixJavaAnnotationInstance: anAnnotationInstance [ - self visitFamixTAnnotationInstance: aFamixJavaAnnotationInstance. - self visitFamixJavaSourcedEntity: aFamixJavaAnnotationInstance + self visitFamixTAnnotationInstance: anAnnotationInstance. + self visitFamixJavaSourcedEntity: anAnnotationInstance ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaAnnotationInstanceAttribute: aFamixJavaAnnotationInstanceAttribute [ +FamixJavaTVisitor >> visitFamixJavaAnnotationInstanceAttribute: anAnnotationInstanceAttribute [ - self visitFamixTAnnotationInstanceAttribute: aFamixJavaAnnotationInstanceAttribute. - self visitFamixJavaSourcedEntity: aFamixJavaAnnotationInstanceAttribute + self visitFamixTAnnotationInstanceAttribute: anAnnotationInstanceAttribute. + self visitFamixJavaSourcedEntity: anAnnotationInstanceAttribute ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaAnnotationType: aFamixJavaAnnotationType [ +FamixJavaTVisitor >> visitFamixJavaAnnotationType: anAnnotationType [ - self visitFamixTAnnotationType: aFamixJavaAnnotationType. - self visitFamixTHasVisibility: aFamixJavaAnnotationType. - self visitFamixTImplementable: aFamixJavaAnnotationType. - self visitFamixTPackageable: aFamixJavaAnnotationType. - self visitFamixTTypeArgument: aFamixJavaAnnotationType. - self visitFamixTWithAttributes: aFamixJavaAnnotationType. - self visitFamixTWithComments: aFamixJavaAnnotationType. - self visitFamixTWithInheritances: aFamixJavaAnnotationType. - self visitFamixJavaType: aFamixJavaAnnotationType + self visitFamixTAnnotationType: anAnnotationType. + self visitFamixTHasVisibility: anAnnotationType. + self visitFamixTImplementable: anAnnotationType. + self visitFamixTPackageable: anAnnotationType. + self visitFamixTTypeArgument: anAnnotationType. + self visitFamixTWithAttributes: anAnnotationType. + self visitFamixTWithComments: anAnnotationType. + self visitFamixTWithInheritances: anAnnotationType. + self visitFamixJavaType: anAnnotationType ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaAnnotationTypeAttribute: aFamixJavaAnnotationTypeAttribute [ +FamixJavaTVisitor >> visitFamixJavaAnnotationTypeAttribute: anAnnotationTypeAttribute [ - self visitFamixTAnnotationTypeAttribute: aFamixJavaAnnotationTypeAttribute. - self visitFamixTWithComments: aFamixJavaAnnotationTypeAttribute. - self visitFamixJavaVariable: aFamixJavaAnnotationTypeAttribute + self visitFamixTAnnotationTypeAttribute: anAnnotationTypeAttribute. + self visitFamixTWithComments: anAnnotationTypeAttribute. + self visitFamixJavaVariable: anAnnotationTypeAttribute ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaAttribute: aFamixJavaAttribute [ +FamixJavaTVisitor >> visitFamixJavaAttribute: anAttribute [ - self visitFamixJavaTCanBeTransient: aFamixJavaAttribute. - self visitFamixJavaTCanBeVolatile: aFamixJavaAttribute. - self visitFamixTAttribute: aFamixJavaAttribute. - self visitFamixTCanBeClassSide: aFamixJavaAttribute. - self visitFamixTCanBeFinal: aFamixJavaAttribute. - self visitFamixTHasVisibility: aFamixJavaAttribute. - self visitFamixTWithComments: aFamixJavaAttribute. - self visitFamixJavaVariable: aFamixJavaAttribute + self visitFamixJavaTCanBeTransient: anAttribute. + self visitFamixJavaTCanBeVolatile: anAttribute. + self visitFamixTAttribute: anAttribute. + self visitFamixTCanBeClassSide: anAttribute. + self visitFamixTCanBeFinal: anAttribute. + self visitFamixTHasVisibility: anAttribute. + self visitFamixTWithComments: anAttribute. + self visitFamixJavaVariable: anAttribute ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaClass: aFamixJavaClass [ +FamixJavaTVisitor >> visitFamixJavaClass: aClass [ - self visitFamixJavaTClassMetrics: aFamixJavaClass. - self visitFamixTCanBeAbstract: aFamixJavaClass. - self visitFamixTCanBeClassSide: aFamixJavaClass. - self visitFamixTCanBeFinal: aFamixJavaClass. - self visitFamixTCanImplement: aFamixJavaClass. - self visitFamixTClass: aFamixJavaClass. - self visitFamixTClassMetrics: aFamixJavaClass. - self visitFamixTHasVisibility: aFamixJavaClass. - self visitFamixTImportable: aFamixJavaClass. - self visitFamixTLCOMMetrics: aFamixJavaClass. - self visitFamixTPackageable: aFamixJavaClass. - self visitFamixTTypeArgument: aFamixJavaClass. - self visitFamixTWithImports: aFamixJavaClass. - self visitFamixJavaType: aFamixJavaClass + self visitFamixJavaTClassMetrics: aClass. + self visitFamixTCanBeAbstract: aClass. + self visitFamixTCanBeClassSide: aClass. + self visitFamixTCanBeFinal: aClass. + self visitFamixTCanImplement: aClass. + self visitFamixTClass: aClass. + self visitFamixTClassMetrics: aClass. + self visitFamixTHasVisibility: aClass. + self visitFamixTImportable: aClass. + self visitFamixTLCOMMetrics: aClass. + self visitFamixTPackageable: aClass. + self visitFamixTTypeArgument: aClass. + self visitFamixTWithImports: aClass. + self visitFamixJavaType: aClass ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaComment: aFamixJavaComment [ +FamixJavaTVisitor >> visitFamixJavaComment: aComment [ - self visitFamixTComment: aFamixJavaComment. - self visitFamixJavaSourcedEntity: aFamixJavaComment + self visitFamixTComment: aComment. + self visitFamixJavaSourcedEntity: aComment ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaConcretization: aFamixJavaConcretization [ +FamixJavaTVisitor >> visitFamixJavaConcretization: aConcretization [ - self visitFamixTConcretization: aFamixJavaConcretization + self visitFamixTConcretization: aConcretization ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaContainerEntity: aFamixJavaContainerEntity [ +FamixJavaTVisitor >> visitFamixJavaContainerEntity: aContainerEntity [ - self visitFamixJavaTWithInterfaces: aFamixJavaContainerEntity. - self visitFamixTWithAnnotationTypes: aFamixJavaContainerEntity. - self visitFamixTWithClasses: aFamixJavaContainerEntity. - self visitFamixJavaNamedEntity: aFamixJavaContainerEntity + self visitFamixJavaTWithInterfaces: aContainerEntity. + self visitFamixTWithAnnotationTypes: aContainerEntity. + self visitFamixTWithClasses: aContainerEntity. + self visitFamixJavaNamedEntity: aContainerEntity ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaEntity: aFamixJavaEntity [ +FamixJavaTVisitor >> visitFamixJavaEntity: anEntity [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaEntityTyping: aFamixJavaEntityTyping [ +FamixJavaTVisitor >> visitFamixJavaEntityTyping: anEntityTyping [ - self visitFamixTEntityTyping: aFamixJavaEntityTyping + self visitFamixTEntityTyping: anEntityTyping ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaEnum: aFamixJavaEnum [ +FamixJavaTVisitor >> visitFamixJavaEnum: anEnum [ - self visitFamixTEnum: aFamixJavaEnum. - self visitFamixTHasVisibility: aFamixJavaEnum. - self visitFamixTImportable: aFamixJavaEnum. - self visitFamixTInvocationsReceiver: aFamixJavaEnum. - self visitFamixTTypeArgument: aFamixJavaEnum. - self visitFamixTWithAttributes: aFamixJavaEnum. - self visitFamixTWithComments: aFamixJavaEnum. - self visitFamixTWithImports: aFamixJavaEnum. - self visitFamixTWithInheritances: aFamixJavaEnum. - self visitFamixTWithMethods: aFamixJavaEnum. - self visitFamixJavaType: aFamixJavaEnum + self visitFamixTEnum: anEnum. + self visitFamixTHasVisibility: anEnum. + self visitFamixTImportable: anEnum. + self visitFamixTInvocationsReceiver: anEnum. + self visitFamixTTypeArgument: anEnum. + self visitFamixTWithAttributes: anEnum. + self visitFamixTWithComments: anEnum. + self visitFamixTWithImports: anEnum. + self visitFamixTWithInheritances: anEnum. + self visitFamixTWithMethods: anEnum. + self visitFamixJavaType: anEnum ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaEnumValue: aFamixJavaEnumValue [ +FamixJavaTVisitor >> visitFamixJavaEnumValue: anEnumValue [ - self visitFamixTEnumValue: aFamixJavaEnumValue. - self visitFamixTWithComments: aFamixJavaEnumValue. - self visitFamixJavaVariable: aFamixJavaEnumValue + self visitFamixTEnumValue: anEnumValue. + self visitFamixTWithComments: anEnumValue. + self visitFamixJavaVariable: anEnumValue ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaException: aFamixJavaException [ +FamixJavaTVisitor >> visitFamixJavaException: anException [ - self visitFamixTException: aFamixJavaException. - self visitFamixJavaClass: aFamixJavaException + self visitFamixTException: anException. + self visitFamixJavaClass: anException ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaImplementation: aFamixJavaImplementation [ +FamixJavaTVisitor >> visitFamixJavaImplementation: anImplementation [ - self visitFamixTImplementation: aFamixJavaImplementation + self visitFamixTImplementation: anImplementation ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaImplicitVariable: aFamixJavaImplicitVariable [ +FamixJavaTVisitor >> visitFamixJavaImplicitVariable: anImplicitVariable [ - self visitFamixTImplicitVariable: aFamixJavaImplicitVariable. - self visitFamixJavaVariable: aFamixJavaImplicitVariable + self visitFamixTImplicitVariable: anImplicitVariable. + self visitFamixJavaVariable: anImplicitVariable ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaImport: aFamixJavaImport [ +FamixJavaTVisitor >> visitFamixJavaImport: anImport [ - self visitFamixTImport: aFamixJavaImport + self visitFamixTImport: anImport ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaIndexedFileAnchor: aFamixJavaIndexedFileAnchor [ +FamixJavaTVisitor >> visitFamixJavaIndexedFileAnchor: anIndexedFileAnchor [ - self visitFamixTIndexedFileNavigation: aFamixJavaIndexedFileAnchor. - self visitFamixJavaSourceAnchor: aFamixJavaIndexedFileAnchor + self visitFamixTIndexedFileNavigation: anIndexedFileAnchor. + self visitFamixJavaSourceAnchor: anIndexedFileAnchor ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaInheritance: aFamixJavaInheritance [ +FamixJavaTVisitor >> visitFamixJavaInheritance: anInheritance [ - self visitFamixTInheritance: aFamixJavaInheritance + self visitFamixTInheritance: anInheritance ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaInitializer: aFamixJavaInitializer [ +FamixJavaTVisitor >> visitFamixJavaInitializer: anInitializer [ - self visitFamixJavaMethod: aFamixJavaInitializer + self visitFamixJavaMethod: anInitializer ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaInterface: aFamixJavaInterface [ +FamixJavaTVisitor >> visitFamixJavaInterface: anInterface [ - self visitFamixTCanBeClassSide: aFamixJavaInterface. - self visitFamixTCanBeFinal: aFamixJavaInterface. - self visitFamixTHasVisibility: aFamixJavaInterface. - self visitFamixTImplementable: aFamixJavaInterface. - self visitFamixTImportable: aFamixJavaInterface. - self visitFamixTInvocationsReceiver: aFamixJavaInterface. - self visitFamixTPackageable: aFamixJavaInterface. - self visitFamixTTypeArgument: aFamixJavaInterface. - self visitFamixTWithAttributes: aFamixJavaInterface. - self visitFamixTWithComments: aFamixJavaInterface. - self visitFamixTWithImports: aFamixJavaInterface. - self visitFamixTWithInheritances: aFamixJavaInterface. - self visitFamixTWithMethods: aFamixJavaInterface. - self visitFamixJavaType: aFamixJavaInterface + self visitFamixTCanBeClassSide: anInterface. + self visitFamixTCanBeFinal: anInterface. + self visitFamixTHasVisibility: anInterface. + self visitFamixTImplementable: anInterface. + self visitFamixTImportable: anInterface. + self visitFamixTInvocationsReceiver: anInterface. + self visitFamixTPackageable: anInterface. + self visitFamixTTypeArgument: anInterface. + self visitFamixTWithAttributes: anInterface. + self visitFamixTWithComments: anInterface. + self visitFamixTWithImports: anInterface. + self visitFamixTWithInheritances: anInterface. + self visitFamixTWithMethods: anInterface. + self visitFamixJavaType: anInterface ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaInvocation: aFamixJavaInvocation [ +FamixJavaTVisitor >> visitFamixJavaInvocation: anInvocation [ - self visitFamixTInvocation: aFamixJavaInvocation + self visitFamixTInvocation: anInvocation ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaLocalVariable: aFamixJavaLocalVariable [ +FamixJavaTVisitor >> visitFamixJavaLocalVariable: aLocalVariable [ - self visitFamixTCanBeFinal: aFamixJavaLocalVariable. - self visitFamixTLocalVariable: aFamixJavaLocalVariable. - self visitFamixTWithComments: aFamixJavaLocalVariable. - self visitFamixJavaVariable: aFamixJavaLocalVariable + self visitFamixTCanBeFinal: aLocalVariable. + self visitFamixTLocalVariable: aLocalVariable. + self visitFamixTWithComments: aLocalVariable. + self visitFamixJavaVariable: aLocalVariable ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaMethod: aFamixJavaMethod [ +FamixJavaTVisitor >> visitFamixJavaMethod: aMethod [ - self visitFamixJavaTCanBeSynchronized: aFamixJavaMethod. - self visitFamixTCanBeAbstract: aFamixJavaMethod. - self visitFamixTCanBeClassSide: aFamixJavaMethod. - self visitFamixTCanBeFinal: aFamixJavaMethod. - self visitFamixTHasKind: aFamixJavaMethod. - self visitFamixTHasVisibility: aFamixJavaMethod. - self visitFamixTImportable: aFamixJavaMethod. - self visitFamixTMethod: aFamixJavaMethod. - self visitFamixTWithComments: aFamixJavaMethod. - self visitFamixTWithExceptions: aFamixJavaMethod. - self visitFamixJavaContainerEntity: aFamixJavaMethod + self visitFamixJavaTCanBeSynchronized: aMethod. + self visitFamixTCanBeAbstract: aMethod. + self visitFamixTCanBeClassSide: aMethod. + self visitFamixTCanBeFinal: aMethod. + self visitFamixTHasKind: aMethod. + self visitFamixTHasVisibility: aMethod. + self visitFamixTImportable: aMethod. + self visitFamixTMethod: aMethod. + self visitFamixTWithComments: aMethod. + self visitFamixTWithExceptions: aMethod. + self visitFamixJavaContainerEntity: aMethod ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaNamedEntity: aFamixJavaNamedEntity [ +FamixJavaTVisitor >> visitFamixJavaNamedEntity: aNamedEntity [ - self visitFamixTNamedEntity: aFamixJavaNamedEntity. - self visitFamixTWithAnnotationInstances: aFamixJavaNamedEntity. - self visitTEntityMetaLevelDependency: aFamixJavaNamedEntity. - self visitFamixJavaSourcedEntity: aFamixJavaNamedEntity + self visitFamixTNamedEntity: aNamedEntity. + self visitFamixTWithAnnotationInstances: aNamedEntity. + self visitTEntityMetaLevelDependency: aNamedEntity. + self visitFamixJavaSourcedEntity: aNamedEntity ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaPackage: aFamixJavaPackage [ +FamixJavaTVisitor >> visitFamixJavaPackage: aPackage [ - self visitFamixTImportable: aFamixJavaPackage. - self visitFamixTPackage: aFamixJavaPackage. - self visitFamixTPackageable: aFamixJavaPackage. - self visitFamixTWithComments: aFamixJavaPackage. - self visitFamixJavaContainerEntity: aFamixJavaPackage + self visitFamixTImportable: aPackage. + self visitFamixTPackage: aPackage. + self visitFamixTPackageable: aPackage. + self visitFamixTWithComments: aPackage. + self visitFamixJavaContainerEntity: aPackage ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaParameter: aFamixJavaParameter [ +FamixJavaTVisitor >> visitFamixJavaParameter: aParameter [ - self visitFamixTCanBeFinal: aFamixJavaParameter. - self visitFamixTParameter: aFamixJavaParameter. - self visitFamixTWithComments: aFamixJavaParameter. - self visitFamixJavaVariable: aFamixJavaParameter + self visitFamixTCanBeFinal: aParameter. + self visitFamixTParameter: aParameter. + self visitFamixTWithComments: aParameter. + self visitFamixJavaVariable: aParameter ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaParametricClass: aFamixJavaParametricClass [ +FamixJavaTVisitor >> visitFamixJavaParametricClass: aParametricClass [ - self visitFamixTParametricEntity: aFamixJavaParametricClass. - self visitFamixJavaClass: aFamixJavaParametricClass + self visitFamixTParametricEntity: aParametricClass. + self visitFamixJavaClass: aParametricClass ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaParametricEntityTyping: aFamixJavaParametricEntityTyping [ +FamixJavaTVisitor >> visitFamixJavaParametricEntityTyping: aParametricEntityTyping [ - self visitFamixTParametricAssociation: aFamixJavaParametricEntityTyping. - self visitFamixJavaEntityTyping: aFamixJavaParametricEntityTyping + self visitFamixTParametricAssociation: aParametricEntityTyping. + self visitFamixJavaEntityTyping: aParametricEntityTyping ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaParametricImplementation: aFamixJavaParametricImplementation [ +FamixJavaTVisitor >> visitFamixJavaParametricImplementation: aParametricImplementation [ - self visitFamixTParametricAssociation: aFamixJavaParametricImplementation. - self visitFamixJavaImplementation: aFamixJavaParametricImplementation + self visitFamixTParametricAssociation: aParametricImplementation. + self visitFamixJavaImplementation: aParametricImplementation ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaParametricInheritance: aFamixJavaParametricInheritance [ +FamixJavaTVisitor >> visitFamixJavaParametricInheritance: aParametricInheritance [ - self visitFamixTParametricAssociation: aFamixJavaParametricInheritance. - self visitFamixJavaInheritance: aFamixJavaParametricInheritance + self visitFamixTParametricAssociation: aParametricInheritance. + self visitFamixJavaInheritance: aParametricInheritance ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaParametricInterface: aFamixJavaParametricInterface [ +FamixJavaTVisitor >> visitFamixJavaParametricInterface: aParametricInterface [ - self visitFamixTParametricEntity: aFamixJavaParametricInterface. - self visitFamixJavaInterface: aFamixJavaParametricInterface + self visitFamixTParametricEntity: aParametricInterface. + self visitFamixJavaInterface: aParametricInterface ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaParametricInvocation: aFamixJavaParametricInvocation [ +FamixJavaTVisitor >> visitFamixJavaParametricInvocation: aParametricInvocation [ - self visitFamixTParametricAssociation: aFamixJavaParametricInvocation. - self visitFamixJavaInvocation: aFamixJavaParametricInvocation + self visitFamixTParametricAssociation: aParametricInvocation. + self visitFamixJavaInvocation: aParametricInvocation ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaParametricMethod: aFamixJavaParametricMethod [ +FamixJavaTVisitor >> visitFamixJavaParametricMethod: aParametricMethod [ - self visitFamixTParametricEntity: aFamixJavaParametricMethod. - self visitFamixJavaMethod: aFamixJavaParametricMethod + self visitFamixTParametricEntity: aParametricMethod. + self visitFamixJavaMethod: aParametricMethod ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaParametricReference: aFamixJavaParametricReference [ +FamixJavaTVisitor >> visitFamixJavaParametricReference: aParametricReference [ - self visitFamixTParametricAssociation: aFamixJavaParametricReference. - self visitFamixJavaReference: aFamixJavaParametricReference + self visitFamixTParametricAssociation: aParametricReference. + self visitFamixJavaReference: aParametricReference ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaPrimitiveType: aFamixJavaPrimitiveType [ +FamixJavaTVisitor >> visitFamixJavaPrimitiveType: aPrimitiveType [ - self visitFamixTPrimitiveType: aFamixJavaPrimitiveType. - self visitFamixTTypeArgument: aFamixJavaPrimitiveType. - self visitFamixJavaType: aFamixJavaPrimitiveType + self visitFamixTPrimitiveType: aPrimitiveType. + self visitFamixTTypeArgument: aPrimitiveType. + self visitFamixJavaType: aPrimitiveType ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaReference: aFamixJavaReference [ +FamixJavaTVisitor >> visitFamixJavaReference: aReference [ - self visitFamixTReference: aFamixJavaReference + self visitFamixTReference: aReference ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaSourceAnchor: aFamixJavaSourceAnchor [ +FamixJavaTVisitor >> visitFamixJavaSourceAnchor: aSourceAnchor [ - self visitFamixTSourceAnchor: aFamixJavaSourceAnchor + self visitFamixTSourceAnchor: aSourceAnchor ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaSourceLanguage: aFamixJavaSourceLanguage [ +FamixJavaTVisitor >> visitFamixJavaSourceLanguage: aSourceLanguage [ - self visitFamixTSourceLanguage: aFamixJavaSourceLanguage + self visitFamixTSourceLanguage: aSourceLanguage ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaSourceTextAnchor: aFamixJavaSourceTextAnchor [ +FamixJavaTVisitor >> visitFamixJavaSourceTextAnchor: aSourceTextAnchor [ - self visitFamixTHasImmediateSource: aFamixJavaSourceTextAnchor. - self visitFamixJavaSourceAnchor: aFamixJavaSourceTextAnchor + self visitFamixTHasImmediateSource: aSourceTextAnchor. + self visitFamixJavaSourceAnchor: aSourceTextAnchor ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaSourcedEntity: aFamixJavaSourcedEntity [ +FamixJavaTVisitor >> visitFamixJavaSourcedEntity: aSourcedEntity [ - self visitFamixTSourceEntity: aFamixJavaSourcedEntity + self visitFamixTSourceEntity: aSourcedEntity ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaTBound: aFamixJavaTBound [ +FamixJavaTVisitor >> visitFamixJavaTBound: aTBound [ - self visitCollection: aFamixJavaTBound lowerBoundedWildcards. - self visitCollection: aFamixJavaTBound upperBoundedWildcards + self visitCollection: aTBound lowerBoundedWildcards. + self visitCollection: aTBound upperBoundedWildcards ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaTBounded: aFamixJavaTBounded [ +FamixJavaTVisitor >> visitFamixJavaTBounded: aTBounded [ - self visitEntity: aFamixJavaTBounded lowerBound. - self visitEntity: aFamixJavaTBounded upperBound + self visitEntity: aTBounded lowerBound. + self visitEntity: aTBounded upperBound ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaTCanBeSynchronized: aFamixJavaTCanBeSynchronized [ +FamixJavaTVisitor >> visitFamixJavaTCanBeSynchronized: aTCanBeSynchronized [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaTCanBeTransient: aFamixJavaTCanBeTransient [ +FamixJavaTVisitor >> visitFamixJavaTCanBeTransient: aTCanBeTransient [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaTCanBeVolatile: aFamixJavaTCanBeVolatile [ +FamixJavaTVisitor >> visitFamixJavaTCanBeVolatile: aTCanBeVolatile [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaTClassMetrics: aFamixJavaTClassMetrics [ +FamixJavaTVisitor >> visitFamixJavaTClassMetrics: aTClassMetrics [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaTWithInterfaces: aFamixJavaTWithInterfaces [ +FamixJavaTVisitor >> visitFamixJavaTWithInterfaces: aTWithInterfaces [ - self visitFamixTWithTypes: aFamixJavaTWithInterfaces + self visitFamixTWithTypes: aTWithInterfaces ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaType: aFamixJavaType [ +FamixJavaTVisitor >> visitFamixJavaType: aType [ - self visitFamixJavaTBound: aFamixJavaType. - self visitFamixTType: aFamixJavaType. - self visitFamixTWithMethods: aFamixJavaType. - self visitFamixJavaContainerEntity: aFamixJavaType + self visitFamixJavaTBound: aType. + self visitFamixTType: aType. + self visitFamixTWithMethods: aType. + self visitFamixJavaContainerEntity: aType ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaTypeParameter: aFamixJavaTypeParameter [ +FamixJavaTVisitor >> visitFamixJavaTypeParameter: aTypeParameter [ - self visitFamixJavaTBounded: aFamixJavaTypeParameter. - self visitFamixTThrowable: aFamixJavaTypeParameter. - self visitFamixTTypeArgument: aFamixJavaTypeParameter. - self visitFamixTTypeParameter: aFamixJavaTypeParameter. - self visitFamixJavaType: aFamixJavaTypeParameter + self visitFamixJavaTBounded: aTypeParameter. + self visitFamixTThrowable: aTypeParameter. + self visitFamixTTypeArgument: aTypeParameter. + self visitFamixTTypeParameter: aTypeParameter. + self visitFamixJavaType: aTypeParameter ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaUnknownVariable: aFamixJavaUnknownVariable [ +FamixJavaTVisitor >> visitFamixJavaUnknownVariable: anUnknownVariable [ - self visitFamixTUnknownVariable: aFamixJavaUnknownVariable. - self visitFamixJavaVariable: aFamixJavaUnknownVariable + self visitFamixTUnknownVariable: anUnknownVariable. + self visitFamixJavaVariable: anUnknownVariable ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaVariable: aFamixJavaVariable [ +FamixJavaTVisitor >> visitFamixJavaVariable: aVariable [ - self visitFamixTInvocationsReceiver: aFamixJavaVariable. - self visitFamixJavaNamedEntity: aFamixJavaVariable + self visitFamixTInvocationsReceiver: aVariable. + self visitFamixJavaNamedEntity: aVariable ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixJavaWildcard: aFamixJavaWildcard [ +FamixJavaTVisitor >> visitFamixJavaWildcard: aWildcard [ - self visitFamixJavaTBounded: aFamixJavaWildcard. - self visitFamixTTypeArgument: aFamixJavaWildcard. - self visitFamixJavaType: aFamixJavaWildcard + self visitFamixJavaTBounded: aWildcard. + self visitFamixTTypeArgument: aWildcard. + self visitFamixJavaType: aWildcard ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTAccess: aFamixTAccess [ +FamixJavaTVisitor >> visitFamixTAccess: aTAccess [ - self visitFamixTAssociation: aFamixTAccess. + self visitFamixTAssociation: aTAccess. - self visitEntity: aFamixTAccess accessor. - self visitCollection: aFamixTAccess candidates + self visitEntity: aTAccess accessor. + self visitCollection: aTAccess candidates ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTAccessible: aFamixTAccessible [ +FamixJavaTVisitor >> visitFamixTAccessible: aTAccessible [ - self visitCollection: aFamixTAccessible incomingAccesses + self visitCollection: aTAccessible incomingAccesses ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTAnnotationInstance: aFamixTAnnotationInstance [ +FamixJavaTVisitor >> visitFamixTAnnotationInstance: aTAnnotationInstance [ - self visitTEntityMetaLevelDependency: aFamixTAnnotationInstance. + self visitTEntityMetaLevelDependency: aTAnnotationInstance. - self visitEntity: aFamixTAnnotationInstance annotatedEntity. - self visitCollection: aFamixTAnnotationInstance attributes. - self visitEntity: aFamixTAnnotationInstance annotationType + self visitEntity: aTAnnotationInstance annotatedEntity. + self visitCollection: aTAnnotationInstance attributes. + self visitEntity: aTAnnotationInstance annotationType ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTAnnotationInstanceAttribute: aFamixTAnnotationInstanceAttribute [ +FamixJavaTVisitor >> visitFamixTAnnotationInstanceAttribute: aTAnnotationInstanceAttribute [ - self visitTEntityMetaLevelDependency: aFamixTAnnotationInstanceAttribute. + self visitTEntityMetaLevelDependency: aTAnnotationInstanceAttribute. - self visitEntity: aFamixTAnnotationInstanceAttribute annotationTypeAttribute + self visitEntity: aTAnnotationInstanceAttribute annotationTypeAttribute ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTAnnotationType: aFamixTAnnotationType [ +FamixJavaTVisitor >> visitFamixTAnnotationType: aTAnnotationType [ - self visitCollection: aFamixTAnnotationType instances + self visitCollection: aTAnnotationType instances ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTAnnotationTypeAttribute: aFamixTAnnotationTypeAttribute [ +FamixJavaTVisitor >> visitFamixTAnnotationTypeAttribute: aTAnnotationTypeAttribute [ - self visitFamixTAttribute: aFamixTAnnotationTypeAttribute. + self visitFamixTAttribute: aTAnnotationTypeAttribute. - self visitCollection: aFamixTAnnotationTypeAttribute annotationAttributeInstances + self visitCollection: aTAnnotationTypeAttribute annotationAttributeInstances ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTAssociation: aFamixTAssociation [ +FamixJavaTVisitor >> visitFamixTAssociation: aTAssociation [ - self visitFamixTSourceEntity: aFamixTAssociation. - self visitTAssociationMetaLevelDependency: aFamixTAssociation. + self visitFamixTSourceEntity: aTAssociation. + self visitTAssociationMetaLevelDependency: aTAssociation. - self visitEntity: aFamixTAssociation previous. - self visitEntity: aFamixTAssociation next + self visitEntity: aTAssociation previous. + self visitEntity: aTAssociation next ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTAttribute: aFamixTAttribute [ +FamixJavaTVisitor >> visitFamixTAttribute: aTAttribute [ - self visitFamixTStructuralEntity: aFamixTAttribute. + self visitFamixTStructuralEntity: aTAttribute. ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTCanBeAbstract: aFamixTCanBeAbstract [ +FamixJavaTVisitor >> visitFamixTCanBeAbstract: aTCanBeAbstract [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTCanBeClassSide: aFamixTCanBeClassSide [ +FamixJavaTVisitor >> visitFamixTCanBeClassSide: aTCanBeClassSide [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTCanBeFinal: aFamixTCanBeFinal [ +FamixJavaTVisitor >> visitFamixTCanBeFinal: aTCanBeFinal [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTCanBeStub: aFamixTCanBeStub [ +FamixJavaTVisitor >> visitFamixTCanBeStub: aTCanBeStub [ "We should visit FamixTSourceEntity but all its users in this language already visit it in their superclasses so we skip the call here." ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTCanImplement: aFamixTCanImplement [ +FamixJavaTVisitor >> visitFamixTCanImplement: aTCanImplement [ - self visitCollection: aFamixTCanImplement interfaceImplementations + self visitCollection: aTCanImplement interfaceImplementations ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTClass: aFamixTClass [ +FamixJavaTVisitor >> visitFamixTClass: aTClass [ "We do not visit all behaviorals because some classes already visit it in their superclasses in this language implementation. Visiting them here also would cause a double visit of this trait." - ({ FamixJavaException } includes: aFamixTClass class) - ifFalse: [ self visitFamixTInvocationsReceiver: aFamixTClass ]. + ({ FamixJavaException } includes: aTClass class) + ifFalse: [ self visitFamixTInvocationsReceiver: aTClass ]. "We should visit FamixTType but all its users in this language already visit it in their superclasses so we skip the call here.". "We do not visit all behaviorals because some classes already visit it in their superclasses in this language implementation. Visiting them here also would cause a double visit of this trait." - ({ FamixJavaException } includes: aFamixTClass class) - ifFalse: [ self visitFamixTWithAttributes: aFamixTClass ]. + ({ FamixJavaException } includes: aTClass class) + ifFalse: [ self visitFamixTWithAttributes: aTClass ]. "We do not visit all behaviorals because some classes already visit it in their superclasses in this language implementation. Visiting them here also would cause a double visit of this trait." - ({ FamixJavaException } includes: aFamixTClass class) - ifFalse: [ self visitFamixTWithComments: aFamixTClass ]. + ({ FamixJavaException } includes: aTClass class) + ifFalse: [ self visitFamixTWithComments: aTClass ]. "We do not visit all behaviorals because some classes already visit it in their superclasses in this language implementation. Visiting them here also would cause a double visit of this trait." - ({ FamixJavaException } includes: aFamixTClass class) - ifFalse: [ self visitFamixTWithInheritances: aFamixTClass ]. + ({ FamixJavaException } includes: aTClass class) + ifFalse: [ self visitFamixTWithInheritances: aTClass ]. "We should visit FamixTWithMethods but all its users in this language already visit it in their superclasses so we skip the call here." ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTClassMetrics: aFamixTClassMetrics [ +FamixJavaTVisitor >> visitFamixTClassMetrics: aTClassMetrics [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTComment: aFamixTComment [ +FamixJavaTVisitor >> visitFamixTComment: aTComment [ "We should visit FamixTSourceEntity but all its users in this language already visit it in their superclasses so we skip the call here.". - self visitTEntityMetaLevelDependency: aFamixTComment. + self visitTEntityMetaLevelDependency: aTComment. ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTConcretization: aFamixTConcretization [ +FamixJavaTVisitor >> visitFamixTConcretization: aTConcretization [ - self visitFamixTAssociation: aFamixTConcretization. + self visitFamixTAssociation: aTConcretization. - self visitEntity: aFamixTConcretization triggeringAssociation. - self visitEntity: aFamixTConcretization typeArgument. - self visitEntity: aFamixTConcretization typeParameter + self visitEntity: aTConcretization triggeringAssociation. + self visitEntity: aTConcretization typeArgument. + self visitEntity: aTConcretization typeParameter ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTEntityTyping: aFamixTEntityTyping [ +FamixJavaTVisitor >> visitFamixTEntityTyping: aTEntityTyping [ - self visitFamixTAssociation: aFamixTEntityTyping. + self visitFamixTAssociation: aTEntityTyping. - self visitEntity: aFamixTEntityTyping typedEntity. - self visitEntity: aFamixTEntityTyping declaredType + self visitEntity: aTEntityTyping typedEntity. + self visitEntity: aTEntityTyping declaredType ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTEnum: aFamixTEnum [ +FamixJavaTVisitor >> visitFamixTEnum: aTEnum [ "We should visit FamixTType but all its users in this language already visit it in their superclasses so we skip the call here.". - self visitFamixTWithEnumValues: aFamixTEnum + self visitFamixTWithEnumValues: aTEnum ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTEnumValue: aFamixTEnumValue [ +FamixJavaTVisitor >> visitFamixTEnumValue: aTEnumValue [ - self visitFamixTStructuralEntity: aFamixTEnumValue. + self visitFamixTStructuralEntity: aTEnumValue. ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTException: aFamixTException [ +FamixJavaTVisitor >> visitFamixTException: aTException [ "We should visit FamixTClass but all its users in this language already visit it in their superclasses so we skip the call here.". - self visitFamixTThrowable: aFamixTException + self visitFamixTThrowable: aTException ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTFileAnchor: aFamixTFileAnchor [ +FamixJavaTVisitor >> visitFamixTFileAnchor: aTFileAnchor [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTHasImmediateSource: aFamixTHasImmediateSource [ +FamixJavaTVisitor >> visitFamixTHasImmediateSource: aTHasImmediateSource [ "We should visit FamixTSourceAnchor but all its users in this language already visit it in their superclasses so we skip the call here." ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTHasKind: aFamixTHasKind [ +FamixJavaTVisitor >> visitFamixTHasKind: aTHasKind [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTHasSignature: aFamixTHasSignature [ +FamixJavaTVisitor >> visitFamixTHasSignature: aTHasSignature [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTHasVisibility: aFamixTHasVisibility [ +FamixJavaTVisitor >> visitFamixTHasVisibility: aTHasVisibility [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTImplementable: aFamixTImplementable [ +FamixJavaTVisitor >> visitFamixTImplementable: aTImplementable [ - self visitCollection: aFamixTImplementable implementations + self visitCollection: aTImplementable implementations ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTImplementation: aFamixTImplementation [ +FamixJavaTVisitor >> visitFamixTImplementation: aTImplementation [ - self visitFamixTAssociation: aFamixTImplementation. + self visitFamixTAssociation: aTImplementation. - self visitEntity: aFamixTImplementation implementingClass. - self visitEntity: aFamixTImplementation interface + self visitEntity: aTImplementation implementingClass. + self visitEntity: aTImplementation interface ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTImplicitVariable: aFamixTImplicitVariable [ +FamixJavaTVisitor >> visitFamixTImplicitVariable: aTImplicitVariable [ - self visitFamixTStructuralEntity: aFamixTImplicitVariable. + self visitFamixTStructuralEntity: aTImplicitVariable. ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTImport: aFamixTImport [ +FamixJavaTVisitor >> visitFamixTImport: aTImport [ - self visitFamixTAssociation: aFamixTImport. + self visitFamixTAssociation: aTImport. - self visitEntity: aFamixTImport importingEntity. - self visitEntity: aFamixTImport importedEntity + self visitEntity: aTImport importingEntity. + self visitEntity: aTImport importedEntity ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTImportable: aFamixTImportable [ +FamixJavaTVisitor >> visitFamixTImportable: aTImportable [ - self visitCollection: aFamixTImportable incomingImports + self visitCollection: aTImportable incomingImports ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTIndexedFileNavigation: aFamixTIndexedFileNavigation [ +FamixJavaTVisitor >> visitFamixTIndexedFileNavigation: aTIndexedFileNavigation [ - self visitFamixTFileAnchor: aFamixTIndexedFileNavigation + self visitFamixTFileAnchor: aTIndexedFileNavigation ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTInheritance: aFamixTInheritance [ +FamixJavaTVisitor >> visitFamixTInheritance: aTInheritance [ - self visitFamixTAssociation: aFamixTInheritance. + self visitFamixTAssociation: aTInheritance. - self visitEntity: aFamixTInheritance subclass. - self visitEntity: aFamixTInheritance superclass + self visitEntity: aTInheritance subclass. + self visitEntity: aTInheritance superclass ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTInvocable: aFamixTInvocable [ +FamixJavaTVisitor >> visitFamixTInvocable: aTInvocable [ - self visitCollection: aFamixTInvocable incomingInvocations + self visitCollection: aTInvocable incomingInvocations ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTInvocation: aFamixTInvocation [ +FamixJavaTVisitor >> visitFamixTInvocation: aTInvocation [ - self visitFamixTAssociation: aFamixTInvocation. - self visitFamixTHasSignature: aFamixTInvocation. + self visitFamixTAssociation: aTInvocation. + self visitFamixTHasSignature: aTInvocation. - self visitCollection: aFamixTInvocation candidates. - self visitEntity: aFamixTInvocation sender. - self visitEntity: aFamixTInvocation receiver + self visitCollection: aTInvocation candidates. + self visitEntity: aTInvocation sender. + self visitEntity: aTInvocation receiver ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTInvocationsReceiver: aFamixTInvocationsReceiver [ +FamixJavaTVisitor >> visitFamixTInvocationsReceiver: aTInvocationsReceiver [ - self visitCollection: aFamixTInvocationsReceiver receivingInvocations + self visitCollection: aTInvocationsReceiver receivingInvocations ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTLCOMMetrics: aFamixTLCOMMetrics [ +FamixJavaTVisitor >> visitFamixTLCOMMetrics: aTLCOMMetrics [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTLocalVariable: aFamixTLocalVariable [ +FamixJavaTVisitor >> visitFamixTLocalVariable: aTLocalVariable [ - self visitFamixTStructuralEntity: aFamixTLocalVariable. + self visitFamixTStructuralEntity: aTLocalVariable. ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTMethod: aFamixTMethod [ +FamixJavaTVisitor >> visitFamixTMethod: aTMethod [ - self visitFamixTHasSignature: aFamixTMethod. - self visitFamixTInvocable: aFamixTMethod. - self visitFamixTMethodMetrics: aFamixTMethod. + self visitFamixTHasSignature: aTMethod. + self visitFamixTInvocable: aTMethod. + self visitFamixTMethodMetrics: aTMethod. "We should visit FamixTNamedEntity but all its users in this language already visit it in their superclasses so we skip the call here.". - self visitFamixTTypedEntity: aFamixTMethod. - self visitFamixTWithImplicitVariables: aFamixTMethod. - self visitFamixTWithLocalVariables: aFamixTMethod. - self visitFamixTWithParameters: aFamixTMethod. - self visitFamixTWithStatements: aFamixTMethod. + self visitFamixTTypedEntity: aTMethod. + self visitFamixTWithImplicitVariables: aTMethod. + self visitFamixTWithLocalVariables: aTMethod. + self visitFamixTWithParameters: aTMethod. + self visitFamixTWithStatements: aTMethod. "We should visit TEntityMetaLevelDependency but all its users in this language already visit it in their superclasses so we skip the call here.". ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTMethodMetrics: aFamixTMethodMetrics [ +FamixJavaTVisitor >> visitFamixTMethodMetrics: aTMethodMetrics [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTNamedEntity: aFamixTNamedEntity [ +FamixJavaTVisitor >> visitFamixTNamedEntity: aTNamedEntity [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTPackage: aFamixTPackage [ +FamixJavaTVisitor >> visitFamixTPackage: aTPackage [ - self visitFamixTCanBeStub: aFamixTPackage. + self visitFamixTCanBeStub: aTPackage. "We should visit FamixTNamedEntity but all its users in this language already visit it in their superclasses so we skip the call here.". "We should visit TEntityMetaLevelDependency but all its users in this language already visit it in their superclasses so we skip the call here.". - self visitCollection: aFamixTPackage childEntities + self visitCollection: aTPackage childEntities ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTPackageable: aFamixTPackageable [ +FamixJavaTVisitor >> visitFamixTPackageable: aTPackageable [ ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTParameter: aFamixTParameter [ +FamixJavaTVisitor >> visitFamixTParameter: aTParameter [ - self visitFamixTStructuralEntity: aFamixTParameter. + self visitFamixTStructuralEntity: aTParameter. ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTParametricAssociation: aFamixTParametricAssociation [ +FamixJavaTVisitor >> visitFamixTParametricAssociation: aTParametricAssociation [ - self visitCollection: aFamixTParametricAssociation concretizations + self visitCollection: aTParametricAssociation concretizations ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTParametricEntity: aFamixTParametricEntity [ +FamixJavaTVisitor >> visitFamixTParametricEntity: aTParametricEntity [ - self visitCollection: aFamixTParametricEntity typeParameters + self visitCollection: aTParametricEntity typeParameters ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTPrimitiveType: aFamixTPrimitiveType [ +FamixJavaTVisitor >> visitFamixTPrimitiveType: aTPrimitiveType [ "We should visit FamixTType but all its users in this language already visit it in their superclasses so we skip the call here." ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTReference: aFamixTReference [ +FamixJavaTVisitor >> visitFamixTReference: aTReference [ - self visitFamixTAssociation: aFamixTReference. + self visitFamixTAssociation: aTReference. - self visitEntity: aFamixTReference referencer. - self visitEntity: aFamixTReference referredEntity + self visitEntity: aTReference referencer. + self visitEntity: aTReference referredEntity ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTReferenceable: aFamixTReferenceable [ +FamixJavaTVisitor >> visitFamixTReferenceable: aTReferenceable [ - self visitCollection: aFamixTReferenceable incomingReferences + self visitCollection: aTReferenceable incomingReferences ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTSourceAnchor: aFamixTSourceAnchor [ +FamixJavaTVisitor >> visitFamixTSourceAnchor: aTSourceAnchor [ - self visitEntity: aFamixTSourceAnchor element + self visitEntity: aTSourceAnchor element ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTSourceEntity: aFamixTSourceEntity [ +FamixJavaTVisitor >> visitFamixTSourceEntity: aTSourceEntity [ - self visitEntity: aFamixTSourceEntity sourceAnchor + self visitEntity: aTSourceEntity sourceAnchor ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTSourceLanguage: aFamixTSourceLanguage [ +FamixJavaTVisitor >> visitFamixTSourceLanguage: aTSourceLanguage [ - self visitCollection: aFamixTSourceLanguage sourcedEntities + self visitCollection: aTSourceLanguage sourcedEntities ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTStructuralEntity: aFamixTStructuralEntity [ +FamixJavaTVisitor >> visitFamixTStructuralEntity: aTStructuralEntity [ - self visitFamixTAccessible: aFamixTStructuralEntity. - self visitFamixTCanBeStub: aFamixTStructuralEntity. + self visitFamixTAccessible: aTStructuralEntity. + self visitFamixTCanBeStub: aTStructuralEntity. "We should visit FamixTNamedEntity but all its users in this language already visit it in their superclasses so we skip the call here.". - self visitFamixTTypedEntity: aFamixTStructuralEntity. + self visitFamixTTypedEntity: aTStructuralEntity. "We should visit TEntityMetaLevelDependency but all its users in this language already visit it in their superclasses so we skip the call here." ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTThrowable: aFamixTThrowable [ +FamixJavaTVisitor >> visitFamixTThrowable: aTThrowable [ - self visitCollection: aFamixTThrowable catchingEntities. - self visitCollection: aFamixTThrowable declaringEntities. - self visitCollection: aFamixTThrowable throwingEntities + self visitCollection: aTThrowable catchingEntities. + self visitCollection: aTThrowable declaringEntities. + self visitCollection: aTThrowable throwingEntities ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTType: aFamixTType [ +FamixJavaTVisitor >> visitFamixTType: aTType [ "We do not visit all behaviorals because some classes already visit it in their superclasses in this language implementation. Visiting them here also would cause a double visit of this trait." - ({ FamixJavaClass . FamixJavaEnum . FamixJavaException . FamixJavaPrimitiveType } includes: aFamixTType class) - ifFalse: [ self visitFamixTCanBeStub: aFamixTType ]. + ({ FamixJavaClass . FamixJavaEnum . FamixJavaException . FamixJavaPrimitiveType } includes: aTType class) + ifFalse: [ self visitFamixTCanBeStub: aTType ]. "We should visit FamixTNamedEntity but all its users in this language already visit it in their superclasses so we skip the call here.". "We do not visit all behaviorals because some classes already visit it in their superclasses in this language implementation. Visiting them here also would cause a double visit of this trait." - ({ FamixJavaClass . FamixJavaEnum . FamixJavaException . FamixJavaPrimitiveType } includes: aFamixTType class) - ifFalse: [ self visitFamixTReferenceable: aFamixTType ]. + ({ FamixJavaClass . FamixJavaEnum . FamixJavaException . FamixJavaPrimitiveType } includes: aTType class) + ifFalse: [ self visitFamixTReferenceable: aTType ]. "We should visit TEntityMetaLevelDependency but all its users in this language already visit it in their superclasses so we skip the call here.". - self visitCollection: aFamixTType incomingTypings + self visitCollection: aTType incomingTypings ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTTypeArgument: aFamixTTypeArgument [ +FamixJavaTVisitor >> visitFamixTTypeArgument: aTTypeArgument [ - self visitCollection: aFamixTTypeArgument outgoingConcretizations + self visitCollection: aTTypeArgument outgoingConcretizations ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTTypeParameter: aFamixTTypeParameter [ +FamixJavaTVisitor >> visitFamixTTypeParameter: aTTypeParameter [ - self visitCollection: aFamixTTypeParameter concretizations. - self visitEntity: aFamixTTypeParameter genericEntity + self visitCollection: aTTypeParameter concretizations. + self visitEntity: aTTypeParameter genericEntity ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTTypedEntity: aFamixTTypedEntity [ +FamixJavaTVisitor >> visitFamixTTypedEntity: aTTypedEntity [ - self visitEntity: aFamixTTypedEntity typing + self visitEntity: aTTypedEntity typing ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTUnknownVariable: aFamixTUnknownVariable [ +FamixJavaTVisitor >> visitFamixTUnknownVariable: aTUnknownVariable [ - self visitFamixTStructuralEntity: aFamixTUnknownVariable + self visitFamixTStructuralEntity: aTUnknownVariable ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithAccesses: aFamixTWithAccesses [ +FamixJavaTVisitor >> visitFamixTWithAccesses: aTWithAccesses [ - self visitCollection: aFamixTWithAccesses accesses + self visitCollection: aTWithAccesses accesses ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithAnnotationInstances: aFamixTWithAnnotationInstances [ +FamixJavaTVisitor >> visitFamixTWithAnnotationInstances: aTWithAnnotationInstances [ - self visitCollection: aFamixTWithAnnotationInstances annotationInstances + self visitCollection: aTWithAnnotationInstances annotationInstances ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithAnnotationTypes: aFamixTWithAnnotationTypes [ +FamixJavaTVisitor >> visitFamixTWithAnnotationTypes: aTWithAnnotationTypes [ - self visitCollection: aFamixTWithAnnotationTypes definedAnnotationTypes + self visitCollection: aTWithAnnotationTypes definedAnnotationTypes ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithAttributes: aFamixTWithAttributes [ +FamixJavaTVisitor >> visitFamixTWithAttributes: aTWithAttributes [ - self visitCollection: aFamixTWithAttributes attributes + self visitCollection: aTWithAttributes attributes ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithClasses: aFamixTWithClasses [ +FamixJavaTVisitor >> visitFamixTWithClasses: aTWithClasses [ - self visitFamixTWithTypes: aFamixTWithClasses + self visitFamixTWithTypes: aTWithClasses ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithComments: aFamixTWithComments [ +FamixJavaTVisitor >> visitFamixTWithComments: aTWithComments [ - self visitCollection: aFamixTWithComments comments + self visitCollection: aTWithComments comments ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithEnumValues: aFamixTWithEnumValues [ +FamixJavaTVisitor >> visitFamixTWithEnumValues: aTWithEnumValues [ - self visitCollection: aFamixTWithEnumValues enumValues + self visitCollection: aTWithEnumValues enumValues ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithExceptions: aFamixTWithExceptions [ +FamixJavaTVisitor >> visitFamixTWithExceptions: aTWithExceptions [ - self visitCollection: aFamixTWithExceptions caughtExceptions. - self visitCollection: aFamixTWithExceptions declaredExceptions. - self visitCollection: aFamixTWithExceptions thrownExceptions + self visitCollection: aTWithExceptions caughtExceptions. + self visitCollection: aTWithExceptions declaredExceptions. + self visitCollection: aTWithExceptions thrownExceptions ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithImplicitVariables: aFamixTWithImplicitVariables [ +FamixJavaTVisitor >> visitFamixTWithImplicitVariables: aTWithImplicitVariables [ - self visitCollection: aFamixTWithImplicitVariables implicitVariables + self visitCollection: aTWithImplicitVariables implicitVariables ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithImports: aFamixTWithImports [ +FamixJavaTVisitor >> visitFamixTWithImports: aTWithImports [ - self visitCollection: aFamixTWithImports imports + self visitCollection: aTWithImports imports ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithInheritances: aFamixTWithInheritances [ +FamixJavaTVisitor >> visitFamixTWithInheritances: aTWithInheritances [ - self visitCollection: aFamixTWithInheritances superInheritances. - self visitCollection: aFamixTWithInheritances subInheritances + self visitCollection: aTWithInheritances superInheritances. + self visitCollection: aTWithInheritances subInheritances ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithInvocations: aFamixTWithInvocations [ +FamixJavaTVisitor >> visitFamixTWithInvocations: aTWithInvocations [ - self visitCollection: aFamixTWithInvocations outgoingInvocations + self visitCollection: aTWithInvocations outgoingInvocations ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithLocalVariables: aFamixTWithLocalVariables [ +FamixJavaTVisitor >> visitFamixTWithLocalVariables: aTWithLocalVariables [ - self visitCollection: aFamixTWithLocalVariables localVariables + self visitCollection: aTWithLocalVariables localVariables ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithMethods: aFamixTWithMethods [ +FamixJavaTVisitor >> visitFamixTWithMethods: aTWithMethods [ - self visitCollection: aFamixTWithMethods methods + self visitCollection: aTWithMethods methods ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithParameters: aFamixTWithParameters [ +FamixJavaTVisitor >> visitFamixTWithParameters: aTWithParameters [ - self visitCollection: aFamixTWithParameters parameters + self visitCollection: aTWithParameters parameters ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithReferences: aFamixTWithReferences [ +FamixJavaTVisitor >> visitFamixTWithReferences: aTWithReferences [ - self visitCollection: aFamixTWithReferences outgoingReferences + self visitCollection: aTWithReferences outgoingReferences ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithStatements: aFamixTWithStatements [ +FamixJavaTVisitor >> visitFamixTWithStatements: aTWithStatements [ - self visitFamixTCanBeStub: aFamixTWithStatements. - self visitFamixTWithAccesses: aFamixTWithStatements. - self visitFamixTWithInvocations: aFamixTWithStatements. - self visitFamixTWithReferences: aFamixTWithStatements + self visitFamixTCanBeStub: aTWithStatements. + self visitFamixTWithAccesses: aTWithStatements. + self visitFamixTWithInvocations: aTWithStatements. + self visitFamixTWithReferences: aTWithStatements ] { #category : 'visiting' } -FamixJavaTVisitor >> visitFamixTWithTypes: aFamixTWithTypes [ +FamixJavaTVisitor >> visitFamixTWithTypes: aTWithTypes [ - self visitCollection: aFamixTWithTypes types + self visitCollection: aTWithTypes types ] { #category : 'visiting' } diff --git a/src/Famix-Visitor-Generation/FmxMBMethodsFactory.extension.st b/src/Famix-Visitor-Generation/FmxMBMethodsFactory.extension.st index 4b831dfdf..5b1dd1a75 100644 --- a/src/Famix-Visitor-Generation/FmxMBMethodsFactory.extension.st +++ b/src/Famix-Visitor-Generation/FmxMBMethodsFactory.extension.st @@ -14,7 +14,9 @@ FmxMBMethodsFactory class >> visitBehavioral: aBehavioral builder: aBuilder [ ^ String streamContents: [ :aStream | | parameter | - parameter := 'a' , aBehavioral fullName. + parameter := (aBehavioral name first isVowel + ifTrue: [ 'an' ] + ifFalse: [ 'a' ]) , aBehavioral name capitalized. aStream << ('visit{1}: {2} @@ -43,7 +45,8 @@ FmxMBMethodsFactory class >> visitBehavioral: aBehavioral builder: aBuilder [ ifFalse: [ aStream tab; - nextPutAll: '"We do not visit all behaviorals because some classes already visit it in their superclasses in this language implementation. Visiting them here also would cause a double visit of this trait."'; + nextPutAll: + '"We do not visit all behaviorals because some classes already visit it in their superclasses in this language implementation. Visiting them here also would cause a double visit of this trait."'; cr; tab; nextPutAll: '({ '. From 725915a94dc9421830425c7e322d48745cde3a9d Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Thu, 21 May 2026 15:33:46 +0200 Subject: [PATCH 120/121] Fix remaining failing test :) --- src/Famix-Java-Fusionner/FamixFusionnerJava.class.st | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Famix-Java-Fusionner/FamixFusionnerJava.class.st b/src/Famix-Java-Fusionner/FamixFusionnerJava.class.st index e4f49d0df..a1b45d831 100644 --- a/src/Famix-Java-Fusionner/FamixFusionnerJava.class.st +++ b/src/Famix-Java-Fusionner/FamixFusionnerJava.class.st @@ -138,6 +138,18 @@ FamixFusionnerJava >> visitFamixTAssociation: aFamixTAssociation [ ifFalse: [ aFamixTAssociation target: resourceEntity ] ] +{ #category : 'visiting' } +FamixFusionnerJava >> visitFamixTClass: aTClass [ + "We override because with the current implementation we have a problem if we do not visit two times some relations in exceptions." + + self visitFamixTInvocationsReceiver: aTClass. + self visitFamixTType: aTClass. + self visitFamixTWithAttributes: aTClass. + self visitFamixTWithComments: aTClass. + self visitFamixTWithInheritances: aTClass. + self visitFamixTWithMethods: aTClass +] + { #category : 'visiting - traits' } FamixFusionnerJava >> visitFamixTInvocable: aFamixTInvocable [ "similar to #visitFamixTAssociation: From b25a4cdfb61c143643af4c12f2fb10ce0ef52d74 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Thu, 21 May 2026 17:42:04 +0200 Subject: [PATCH 121/121] By default generate the visitor with other entities --- .../FamixMetamodelGenerator.extension.st | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Famix-Visitor-Generation/FamixMetamodelGenerator.extension.st b/src/Famix-Visitor-Generation/FamixMetamodelGenerator.extension.st index 08cda3e96..f840705cb 100644 --- a/src/Famix-Visitor-Generation/FamixMetamodelGenerator.extension.st +++ b/src/Famix-Visitor-Generation/FamixMetamodelGenerator.extension.st @@ -6,7 +6,7 @@ FamixMetamodelGenerator class >> packageNameForVisitor [ Examples: see overriding methods " - self shouldBeImplemented + ^ self packageName ] { #category : '*Famix-Visitor-Generation' }