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