MCTraitDefinition.st
author Claus Gittinger <cg@exept.de>
Mon, 14 May 2018 02:21:18 +0200
changeset 1048 582b3a028cbc
parent 776 5f0bc7ac5ff9
child 1095 87f223484bc3
permissions -rw-r--r--
#FEATURE by cg class: MCMethodDefinition changed: #postloadOver:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/monticello' }"
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
MCClassDefinition subclass:#MCTraitDefinition
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:''
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
693
82fee375af8e category change
Claus Gittinger <cg@exept.de>
parents: 290
diff changeset
     7
	category:'SCM-Monticello-Modeling'
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!MCTraitDefinition class methodsFor:'as yet unclassified'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
name: classNameString traitComposition:  traitCompositionString category:  categoryString comment:  commentString commentStamp:   commentStamp
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	^ self instanceLike:
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
		(self new initializeWithName: classNameString 
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
			traitComposition:  traitCompositionString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
			category:  categoryString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
			comment:  commentString  
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
			commentStamp:   commentStamp)
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!MCTraitDefinition methodsFor:'accessing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
classTraitCompositionString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	^self traitComposition ifNil: ['{}'].
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
!MCTraitDefinition methodsFor:'comparing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
hash
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
	| hash |
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
	hash := String stringHash: name initialHash: 0.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
	hash := String stringHash: self traitCompositionString initialHash: hash.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
	hash := String stringHash: (category ifNil: ['']) initialHash: hash.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
	^ hash
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
requirements
725
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
    41
        "Assuming that traits in a composition can be identified by
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
    42
        testing for the first character beeing an uppercase character
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
    43
        (and thus not a special character such as {, # etc.)"
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
725
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
    45
        | tokens traitNames |
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
    46
        self hasTraitComposition ifFalse: [ ^Array new ].
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
    47
        tokens := Scanner new scanTokens: self traitComposition.
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
    48
        traitNames := tokens select: [:each | each isString and:[each first isUppercase]].
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
    49
        ^traitNames asArray
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
774
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    52
!MCTraitDefinition methodsFor:'converting'!
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    53
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    54
asChange
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    55
    ^TraitDefinitionChange new
776
5f0bc7ac5ff9 class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
    56
        mcDefinition: self;
774
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    57
        baseTrait: superclassName;
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    58
        traitComposition: traitComposition;
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    59
        className: name;
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    60
        category: category;
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    61
        yourself
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    62
! !
70f1f17a59ca class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 725
diff changeset
    63
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
!MCTraitDefinition methodsFor:'initializing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
initializeWithName: classNameString 
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
        traitComposition:  traitCompositionString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
        category:  categoryString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
        comment:  commentString  
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
        commentStamp:   commentStampString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
                                        
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
                name := classNameString asSymbol.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
                traitComposition := traitCompositionString.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
             category := categoryString.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
                comment := commentString asStringWithSqueakLineEndings.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
                commentStamp :=  commentStampString ifNil: [self defaultCommentStamp]
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    "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
    79
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
!MCTraitDefinition methodsFor:'installing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
load
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
	| trait |
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
	(trait := self createClass) ifNotNil: [
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
		self hasComment ifTrue: [trait classComment: comment stamp: commentStamp]]
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
!MCTraitDefinition methodsFor:'printing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
printDefinitionOn: stream
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
	stream nextPutAll: 'Trait named: #', self className;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
		 cr;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
		 tab;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
		 nextPutAll: 'uses: ';
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
		 nextPutAll: self traitCompositionString;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
		 cr;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
		 tab;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
		 nextPutAll: 'category: ';
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
		 store: self category asString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
!MCTraitDefinition methodsFor:'testing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
hasClassInstanceVariables
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
	^ false
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
!MCTraitDefinition methodsFor:'visiting'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
= aDefinition
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
        "/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
   116
        
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
        ^ (self isRevisionOf: aDefinition)
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
                and: [self traitCompositionString = aDefinition traitCompositionString]
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
                and: [category = aDefinition category]
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
                and: [comment = aDefinition comment]
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
    "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
   123
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
accept: aVisitor
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
	^ aVisitor visitTraitDefinition: self
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
createClass
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
	^Trait
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
		named: name
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
		uses: (Compiler evaluate: self traitCompositionString)
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
		category: category
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
		
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
!MCTraitDefinition class methodsFor:'documentation'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
version
776
5f0bc7ac5ff9 class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   142
    ^ '$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
   143
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
version_CVS
776
5f0bc7ac5ff9 class: MCTraitDefinition
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   146
    ^ '$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
   147
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
version_SVN
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
    ^ '§Id: MCTraitDefinition.st 17 2010-10-13 12:07:52Z vranyj1 §'
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
! !
725
334a2a696b89 category changes
Claus Gittinger <cg@exept.de>
parents: 693
diff changeset
   152