MCStReader.st
author Claus Gittinger <cg@exept.de>
Sun, 08 Feb 2015 04:40:34 +0100
changeset 968 70b2a6241dd2
parent 960 f7640c71d77a
child 1035 fb88d1d65df6
child 1098 620da38786b6
permissions -rw-r--r--
class: MCClassDefinition changed: #asChange (send #classVariableString: instead of #classVariableNames:, send #instanceVariableString: instead of #instanceVariableNames:) oops - wrong setters
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/monticello' }"
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
MCSnapshotReader subclass:#MCStReader
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:''
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
684
cb9dc3c18a9e category change
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
     7
	category:'SCM-Monticello-Chunk Format'
41
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
796
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    10
!MCStReader class methodsFor:'documentation'!
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    11
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    12
documentation
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    13
"
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    14
    I read Category/Classes/Methodes/.... definitions from Monticello source.st file format.
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    15
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    16
    See also MCStWriter.
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    17
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    18
    Example:
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    19
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    20
    |source|
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    21
    source := String streamContents: [:aStream| |writer|
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    22
        writer := MCStWriter on: aStream.
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    23
        writer writeDefinitions: {True asClassDefinition. False asClassDefinition}.
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    24
    ].
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    25
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    26
    (MCStReader on: source readStream) definitions explore.
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    27
"
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
    28
! !
41
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
!MCStReader class methodsFor:'as yet unclassified'!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
extension
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
	^ 'st'
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
! !
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
!MCStReader methodsFor:'as yet unclassified'!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
addDefinitionsFromDoit: aString
209
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    39
	| parser |
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    40
	(parser := MCDoItParser forDoit: aString) ifNotNil:
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    41
		[
41
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
		parser addDefinitionsTo: definitions]
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
categoryFromDoIt: aString
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
	| tokens  |
209
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    47
	tokens := Scanner new scanTokens: aString.
41
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
	tokens size = 3 ifFalse: [self error: 'Unrecognized category definition'].
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
	^ tokens at: 3
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
classDefinitionFrom: aPseudoClass
209
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    53
	| tokens traitCompositionString lastIndex classTraitCompositionString |
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    54
	tokens := Scanner new scanTokens: aPseudoClass definition.
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    55
	traitCompositionString := ((ReadStream on: aPseudoClass definition)
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    56
		match: 'uses:';
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    57
		upToAll: 'instanceVariableNames:') withBlanksTrimmed.
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    58
	classTraitCompositionString := ((ReadStream on: aPseudoClass metaClass definition asString)
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    59
		match: 'uses:';
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    60
		upToAll: 'instanceVariableNames:') withBlanksTrimmed.
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    61
	traitCompositionString isEmpty ifTrue: [traitCompositionString := '{}'].
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    62
	classTraitCompositionString isEmpty ifTrue: [classTraitCompositionString := '{}'].
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    63
	lastIndex := tokens size.
41
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
	^ MCClassDefinition
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
		name: (tokens at: 3)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
		superclassName: (tokens at: 1)
209
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    67
		traitComposition: traitCompositionString
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    68
		classTraitComposition: classTraitCompositionString
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    69
		category: (tokens at: lastIndex)
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    70
		instVarNames: ((tokens at: lastIndex - 6) findTokens: ' ')
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    71
		classVarNames: ((tokens at: lastIndex - 4) findTokens: ' ')
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    72
		poolDictionaryNames: ((tokens at: lastIndex - 2) findTokens: ' ')
41
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
		classInstVarNames: (self classInstVarNamesFor: aPseudoClass)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
		type: (self typeOfSubclass: (tokens at: 2))
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
		comment: (self commentFor: aPseudoClass)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
		commentStamp: (self commentStampFor: aPseudoClass)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
classInstVarNamesFor: aPseudoClass
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
	| tokens |
209
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    81
	
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    82
	self flag: #traits.
41
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
	aPseudoClass metaClass hasDefinition ifFalse: [^ #()].
209
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    84
	tokens := Scanner new scanTokens: aPseudoClass metaClass definition.
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    85
	"tokens size = 4 ifFalse: [self error: 'Unrecognized metaclass definition']."
41
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
	^ tokens last findTokens: ' '
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
commentFor: aPseudoClass
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
	| comment |
209
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    91
	comment := aPseudoClass organization classComment.
41
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
	^ comment asString = ''
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
		ifTrue: [comment]
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
		ifFalse: [comment string]
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
commentStampFor: aPseudoClass
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
	| comment |
209
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
    99
	comment := aPseudoClass organization classComment.
41
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
	^  [comment stamp] on: MessageNotUnderstood do: [nil]
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
methodDefinitionsFor: aPseudoClass
880
c3bd562c4050 class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 796
diff changeset
   104
        ^ aPseudoClass selectors collect: 
c3bd562c4050 class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 796
diff changeset
   105
                [:ea |
c3bd562c4050 class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 796
diff changeset
   106
                 MCMethodDefinition
c3bd562c4050 class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 796
diff changeset
   107
                        className: aPseudoClass name
c3bd562c4050 class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 796
diff changeset
   108
                        classIsMeta: aPseudoClass isMeta
c3bd562c4050 class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 796
diff changeset
   109
                        selector: ea
c3bd562c4050 class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 796
diff changeset
   110
                        category: (aPseudoClass organization categoryOfElement: ea)
c3bd562c4050 class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 796
diff changeset
   111
                        timeStamp: (aPseudoClass stampAt: ea)
c3bd562c4050 class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 796
diff changeset
   112
                        source: (aPseudoClass sourceCodeAt: ea) string]
41
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
systemOrganizationFromRecords: changeRecords
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
	| categories |
209
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
   117
	categories := changeRecords
41
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
					select: [:ea | 'SystemOrganization*' match: ea string]
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
					thenCollect: [:ea | (self categoryFromDoIt: ea string)].
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
	^ categories isEmpty ifFalse: [MCOrganizationDefinition categories: categories asArray]
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
typeOfSubclass: aSymbol
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
	#(
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
		(subclass: normal)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
		(variableSubclass: variable)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
		(variableByteSubclass: bytes)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
		(variableWordSubclass: words)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
		(weakSubclass: weak)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
		) do: [:ea | ea first = aSymbol ifTrue: [^ ea second]].
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
	self error: 'Unrecognized class definition'
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
! !
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
!MCStReader methodsFor:'evaluating'!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
loadDefinitions
519
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   137
    |changeList|
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   138
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   139
    definitions := OrderedCollection new.
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   140
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   141
    Smalltalk isSmalltalkX ifTrue:[
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   142
        changeList := ChangeSet fromStream:self readStream.
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   143
        changeList do:[:eachChange |
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   144
            |dfn|
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   145
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   146
            self addDefinitionFromChange:eachChange.
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   147
        ].
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   148
    ] ifFalse:[
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   149
        | filePackage |
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   150
        filePackage :=
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   151
                FilePackage new
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   152
                        fullName: 'ReadStream';
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   153
                        fileInFrom: self readStream.
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   154
        filePackage classes do:
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   155
                [:pseudoClass |
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   156
                pseudoClass hasDefinition
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   157
                        ifTrue: [definitions add:
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   158
                                        (self classDefinitionFrom: pseudoClass)].
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   159
                definitions addAll: (self methodDefinitionsFor: pseudoClass).
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   160
                definitions addAll: (self methodDefinitionsFor: pseudoClass metaClass)].
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   161
        filePackage doIts do:
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   162
                [:ea |
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   163
                self addDefinitionsFromDoit: ea string].
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   164
    ]
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   165
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   166
    "Modified: / 25-11-2011 / 17:23:48 / cg"
41
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
readStream
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
	^ ('!!!!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
', stream contents) readStream
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
! !
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
519
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   175
!MCStReader methodsFor:'stx change conversion'!
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   176
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   177
addDefinitionFromChange:aChange
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   178
    aChange acceptChangeVisitor:self.
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   179
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   180
    "Created: / 25-11-2011 / 17:24:08 / cg"
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   181
!
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   182
960
f7640c71d77a class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 880
diff changeset
   183
visitClassCommentChange:aChange
f7640c71d77a class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 880
diff changeset
   184
    definitions add:(MCClassComment new
f7640c71d77a class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 880
diff changeset
   185
                        className: aChange className
f7640c71d77a class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 880
diff changeset
   186
                        comment: aChange comment
f7640c71d77a class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 880
diff changeset
   187
                        source: aChange source string
f7640c71d77a class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 880
diff changeset
   188
                    )
f7640c71d77a class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 880
diff changeset
   189
!
f7640c71d77a class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 880
diff changeset
   190
519
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   191
visitClassDefinitionChange:aChange
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   192
        | tokens traitCompositionString lastIndex classTraitCompositionString |
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   193
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   194
        tokens := Scanner new scanTokens: aChange source.
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   195
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   196
"/        traitCompositionString := ((ReadStream on: aChange source)
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   197
"/                match: 'uses:';
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   198
"/                upToAll: 'instanceVariableNames:') withBlanksTrimmed.
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   199
"/        classTraitCompositionString := ((ReadStream on: aPseudoClass metaClass definition asString)
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   200
"/                match: 'uses:';
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   201
"/                upToAll: 'instanceVariableNames:') withBlanksTrimmed.
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   202
        traitCompositionString isEmptyOrNil ifTrue: [traitCompositionString := '{}'].
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   203
        classTraitCompositionString isEmptyOrNil ifTrue: [classTraitCompositionString := '{}'].
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   204
        lastIndex := tokens size.
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   205
        definitions add:( MCClassDefinition
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   206
                name: aChange className "/ (tokens at: 3)
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   207
                superclassName: aChange superClassName "/ (tokens at: 1)
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   208
                traitComposition: traitCompositionString
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   209
                classTraitComposition: classTraitCompositionString
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   210
                category: aChange category "/ (tokens at: lastIndex)
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   211
                instVarNames: aChange instanceVariableNames asCollectionOfWords "/ ((tokens at: lastIndex - 6) findTokens: ' ')
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   212
                classVarNames: aChange classVariableNames asCollectionOfWords "/ ((tokens at: lastIndex - 4) findTokens: ' ')
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   213
                poolDictionaryNames: aChange poolDictionaries asCollectionOfWords "/ ((tokens at: lastIndex - 2) findTokens: ' ')
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   214
                classInstVarNames: (aChange classInstanceVariableNames ? '') asCollectionOfWords "/ (self classInstVarNamesFor: aPseudoClass)
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   215
                type: (self typeOfSubclass: (tokens at: 2))
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   216
                comment: nil "/ (self commentFor: aPseudoClass)
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   217
                commentStamp: nil "/ (self commentStampFor: aPseudoClass)
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   218
            )
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   219
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   220
    "Created: / 25-11-2011 / 17:20:41 / cg"
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   221
!
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   222
520
3eed472bc1ad category of: #visitClassInstVarDefinitionChange:
Claus Gittinger <cg@exept.de>
parents: 519
diff changeset
   223
visitClassInstVarDefinitionChange:aChange
3eed472bc1ad category of: #visitClassInstVarDefinitionChange:
Claus Gittinger <cg@exept.de>
parents: 519
diff changeset
   224
    "there must be already a definition change for that class"
3eed472bc1ad category of: #visitClassInstVarDefinitionChange:
Claus Gittinger <cg@exept.de>
parents: 519
diff changeset
   225
3eed472bc1ad category of: #visitClassInstVarDefinitionChange:
Claus Gittinger <cg@exept.de>
parents: 519
diff changeset
   226
    |nonMetaName defn|
3eed472bc1ad category of: #visitClassInstVarDefinitionChange:
Claus Gittinger <cg@exept.de>
parents: 519
diff changeset
   227
3eed472bc1ad category of: #visitClassInstVarDefinitionChange:
Claus Gittinger <cg@exept.de>
parents: 519
diff changeset
   228
    self assert:(aChange className endsWith:' class').
3eed472bc1ad category of: #visitClassInstVarDefinitionChange:
Claus Gittinger <cg@exept.de>
parents: 519
diff changeset
   229
    nonMetaName := aChange className copyWithoutLast:' class' size.
3eed472bc1ad category of: #visitClassInstVarDefinitionChange:
Claus Gittinger <cg@exept.de>
parents: 519
diff changeset
   230
3eed472bc1ad category of: #visitClassInstVarDefinitionChange:
Claus Gittinger <cg@exept.de>
parents: 519
diff changeset
   231
    defn := definitions detectLast:[:def | def isClassDefinition and:[def className = nonMetaName]].
3eed472bc1ad category of: #visitClassInstVarDefinitionChange:
Claus Gittinger <cg@exept.de>
parents: 519
diff changeset
   232
    defn classInstVarNames: (aChange classInstVarNames).
3eed472bc1ad category of: #visitClassInstVarDefinitionChange:
Claus Gittinger <cg@exept.de>
parents: 519
diff changeset
   233
3eed472bc1ad category of: #visitClassInstVarDefinitionChange:
Claus Gittinger <cg@exept.de>
parents: 519
diff changeset
   234
    "Created: / 25-11-2011 / 17:32:12 / cg"
3eed472bc1ad category of: #visitClassInstVarDefinitionChange:
Claus Gittinger <cg@exept.de>
parents: 519
diff changeset
   235
!
3eed472bc1ad category of: #visitClassInstVarDefinitionChange:
Claus Gittinger <cg@exept.de>
parents: 519
diff changeset
   236
519
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   237
visitDoItChange:aChange
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   238
    self addDefinitionsFromDoit: aChange source
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   239
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   240
    "Created: / 25-11-2011 / 17:15:21 / cg"
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   241
!
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   242
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   243
visitMethodChange:aChange
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   244
    definitions add:(MCMethodDefinition
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   245
                        className: aChange className
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   246
                        classIsMeta: aChange isForMeta
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   247
                        selector: aChange changeSelector
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   248
                        category: aChange category "/ (aPseudoClass organization categoryOfElement: ea)
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   249
                        timeStamp: nil "aChange timeStamp" "/ (aPseudoClass stampAt: ea)
880
c3bd562c4050 class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 796
diff changeset
   250
                        source: aChange source string"/ (aPseudoClass sourceCodeAt: ea)
519
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   251
                    )
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   252
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   253
    "Created: / 25-11-2011 / 17:15:36 / cg"
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   254
! !
e37a78e3a3da changeset reading
Claus Gittinger <cg@exept.de>
parents: 308
diff changeset
   255
41
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
!MCStReader class methodsFor:'documentation'!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
version
960
f7640c71d77a class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 880
diff changeset
   259
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCStReader.st,v 1.9 2014-12-23 19:48:43 cg Exp $'
209
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
   260
!
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
   261
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
   262
version_CVS
960
f7640c71d77a class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 880
diff changeset
   263
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCStReader.st,v 1.9 2014-12-23 19:48:43 cg Exp $'
209
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
   264
!
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
   265
780f37190c97 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 41
diff changeset
   266
version_SVN
960
f7640c71d77a class: MCStReader
Claus Gittinger <cg@exept.de>
parents: 880
diff changeset
   267
    ^ '$Id: MCStReader.st,v 1.9 2014-12-23 19:48:43 cg Exp $'
41
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
! !
796
730e50b519a0 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 684
diff changeset
   269