MCTraitDefinition.st
author Jan Vrany <jan.vrany@labware.com>
Tue, 11 Jul 2023 12:59:07 +0100
branchjv
changeset 1174 f0a16c301971
parent 1099 df7f9c846b88
permissions -rw-r--r--
Make `ProjectDefinition >> #monticelloTimestamps_code` an extension in `stx:goodies/monticello` ...and convert it to use (not so) new annotation-based extension mechanism.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1099
df7f9c846b88 Fix source loading w.r.t. class comments
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1095
diff changeset
     1
"{ Package: 'stx:goodies/monticello' }"
1095
87f223484bc3 Issue #239: Fix all Smalltak/X source files to be in unicode (UTF8 without BOM) and prefixed by "{ Encoding: utf8 }" when any unicode character is present
Patrik Svestka <patrik.svestka@gmail.com>
parents: 776
diff changeset
     2
1099
df7f9c846b88 Fix source loading w.r.t. class comments
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1095
diff changeset
     3
"{ NameSpace: Smalltalk }"
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
MCClassDefinition subclass:#MCTraitDefinition
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	instanceVariableNames:''
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	classVariableNames:''
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
	poolDictionaries:''
693
82fee375af8e category change
Claus Gittinger <cg@exept.de>
parents: 290
diff changeset
     9
	category:'SCM-Monticello-Modeling'
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
!MCTraitDefinition class methodsFor:'as yet unclassified'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
name: classNameString traitComposition:  traitCompositionString category:  categoryString comment:  commentString commentStamp:   commentStamp
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	^ self instanceLike:
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
		(self new initializeWithName: classNameString 
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
			traitComposition:  traitCompositionString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
			category:  categoryString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
			comment:  commentString  
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
			commentStamp:   commentStamp)
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
1099
df7f9c846b88 Fix source loading w.r.t. class comments
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1095
diff changeset
    25
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
!MCTraitDefinition methodsFor:'accessing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
classTraitCompositionString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
	^self traitComposition ifNil: ['{}'].
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
!MCTraitDefinition methodsFor:'comparing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
hash
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
	| hash |
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
	hash := String stringHash: name initialHash: 0.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
	hash := String stringHash: self traitCompositionString initialHash: hash.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
	hash := String stringHash: (category ifNil: ['']) initialHash: hash.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
	^ hash
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
requirements
725
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
    44
        "Assuming that traits in a composition can be identified by
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
    45
        testing for the first character beeing an uppercase character
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
    46
        (and thus not a special character such as {, # etc.)"
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
725
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
    48
        | tokens traitNames |
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
    49
        self hasTraitComposition ifFalse: [ ^Array new ].
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
    50
        tokens := Scanner new scanTokens: self traitComposition.
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
    51
        traitNames := tokens select: [:each | each isString and:[each first isUppercase]].
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
    52
        ^traitNames asArray
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
774
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    55
!MCTraitDefinition methodsFor:'converting'!
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    56
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    57
asChange
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    58
    ^TraitDefinitionChange new
776
5f0bc7ac5ff9 class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
    59
        mcDefinition: self;
774
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    60
        baseTrait: superclassName;
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    61
        traitComposition: traitComposition;
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    62
        className: name;
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    63
        category: category;
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    64
        yourself
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    65
! !
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    66
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
!MCTraitDefinition methodsFor:'initializing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
initializeWithName: classNameString 
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
        traitComposition:  traitCompositionString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
        category:  categoryString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
        comment:  commentString  
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
        commentStamp:   commentStampString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
                                        
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
                name := classNameString asSymbol.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
                traitComposition := traitCompositionString.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
             category := categoryString.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
                comment := commentString asStringWithSqueakLineEndings.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
                commentStamp :=  commentStampString ifNil: [self defaultCommentStamp]
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
    "Modified: / 12-09-2010 / 16:06:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
!MCTraitDefinition methodsFor:'installing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
load
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
	| trait |
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
	(trait := self createClass) ifNotNil: [
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
		self hasComment ifTrue: [trait classComment: comment stamp: commentStamp]]
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
!MCTraitDefinition methodsFor:'printing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
printDefinitionOn: stream
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
	stream nextPutAll: 'Trait named: #', self className;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
		 cr;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
		 tab;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
		 nextPutAll: 'uses: ';
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
		 nextPutAll: self traitCompositionString;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
		 cr;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
		 tab;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
		 nextPutAll: 'category: ';
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
		 store: self category asString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
!MCTraitDefinition methodsFor:'testing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
hasClassInstanceVariables
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
	^ false
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
!MCTraitDefinition methodsFor:'visiting'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
= aDefinition
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
        "/self flag: #traits. "Ugly we harcoded the super superclass method.  We will have to refactor the definition hierarchy"
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
        
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
        ^ (self isRevisionOf: aDefinition)
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
                and: [self traitCompositionString = aDefinition traitCompositionString]
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
                and: [category = aDefinition category]
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
                and: [comment = aDefinition comment]
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
    "Modified: / 14-09-2010 / 20:48:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
accept: aVisitor
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
	^ aVisitor visitTraitDefinition: self
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
createClass
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
	^Trait
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
		named: name
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
		uses: (Compiler evaluate: self traitCompositionString)
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
		category: category
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
		
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
!MCTraitDefinition class methodsFor:'documentation'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
version
776
5f0bc7ac5ff9 class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   145
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCTraitDefinition.st,v 1.6 2013-04-02 19:24:41 cg Exp $'
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
version_CVS
776
5f0bc7ac5ff9 class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   149
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCTraitDefinition.st,v 1.6 2013-04-02 19:24:41 cg Exp $'
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
1099
df7f9c846b88 Fix source loading w.r.t. class comments
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1095
diff changeset
   152
version_HG
df7f9c846b88 Fix source loading w.r.t. class comments
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1095
diff changeset
   153
df7f9c846b88 Fix source loading w.r.t. class comments
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1095
diff changeset
   154
    ^ '$Changeset: <not expanded> $'
df7f9c846b88 Fix source loading w.r.t. class comments
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1095
diff changeset
   155
!
df7f9c846b88 Fix source loading w.r.t. class comments
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1095
diff changeset
   156
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
version_SVN
1099
df7f9c846b88 Fix source loading w.r.t. class comments
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1095
diff changeset
   158
    ^ '§Id: MCTraitDefinition.st 17 2010-10-13 12:07:52Z vranyj1 §'
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
! !
725
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
   160