changeset reading
authorClaus Gittinger <cg@exept.de>
Fri, 25 Nov 2011 17:46:01 +0100
changeset 519 e37a78e3a3da
parent 518 25286b5b0829
child 520 3eed472bc1ad
changeset reading
MCStReader.st
--- a/MCStReader.st	Fri Nov 25 15:47:38 2011 +0100
+++ b/MCStReader.st	Fri Nov 25 17:46:01 2011 +0100
@@ -14,6 +14,22 @@
 	^ 'st'
 ! !
 
+!MCStReader methodsFor:'* As yet uncategorized *'!
+
+visitClassInstVarDefinitionChange:aChange
+    "there must be already a definition change for that class"
+
+    |nonMetaName defn|
+
+    self assert:(aChange className endsWith:' class').
+    nonMetaName := aChange className copyWithoutLast:' class' size.
+
+    defn := definitions detectLast:[:def | def isClassDefinition and:[def className = nonMetaName]].
+    defn classInstVarNames: (aChange classInstVarNames).
+
+    "Created: / 25-11-2011 / 17:32:12 / cg"
+! !
+
 !MCStReader methodsFor:'as yet unclassified'!
 
 addDefinitionsFromDoit: aString
@@ -115,23 +131,36 @@
 !MCStReader methodsFor:'evaluating'!
 
 loadDefinitions
-	| filePackage |
-	filePackage :=
-		FilePackage new
-			fullName: 'ReadStream';
-			fileInFrom: self readStream.
-	definitions := OrderedCollection new.
-	filePackage classes do:
-		[:pseudoClass |
-		pseudoClass hasDefinition
-			ifTrue: [definitions add:
-					(self classDefinitionFrom: pseudoClass)].
-		definitions addAll: (self methodDefinitionsFor: pseudoClass).
-		definitions addAll: (self methodDefinitionsFor: pseudoClass metaClass)].
-	filePackage doIts do:
-		[:ea |
-		self addDefinitionsFromDoit: ea string].
-	
+    |changeList|
+
+    definitions := OrderedCollection new.
+
+    Smalltalk isSmalltalkX ifTrue:[
+        changeList := ChangeSet fromStream:self readStream.
+        changeList do:[:eachChange |
+            |dfn|
+
+            self addDefinitionFromChange:eachChange.
+        ].
+    ] ifFalse:[
+        | filePackage |
+        filePackage :=
+                FilePackage new
+                        fullName: 'ReadStream';
+                        fileInFrom: self readStream.
+        filePackage classes do:
+                [:pseudoClass |
+                pseudoClass hasDefinition
+                        ifTrue: [definitions add:
+                                        (self classDefinitionFrom: pseudoClass)].
+                definitions addAll: (self methodDefinitionsFor: pseudoClass).
+                definitions addAll: (self methodDefinitionsFor: pseudoClass metaClass)].
+        filePackage doIts do:
+                [:ea |
+                self addDefinitionsFromDoit: ea string].
+    ]
+
+    "Modified: / 25-11-2011 / 17:23:48 / cg"
 !
 
 readStream
@@ -140,14 +169,73 @@
 ', stream contents) readStream
 ! !
 
+!MCStReader methodsFor:'stx change conversion'!
+
+addDefinitionFromChange:aChange
+    aChange acceptChangeVisitor:self.
+
+    "Created: / 25-11-2011 / 17:24:08 / cg"
+!
+
+visitClassDefinitionChange:aChange
+        | tokens traitCompositionString lastIndex classTraitCompositionString |
+
+        tokens := Scanner new scanTokens: aChange source.
+
+"/        traitCompositionString := ((ReadStream on: aChange source)
+"/                match: 'uses:';
+"/                upToAll: 'instanceVariableNames:') withBlanksTrimmed.
+"/        classTraitCompositionString := ((ReadStream on: aPseudoClass metaClass definition asString)
+"/                match: 'uses:';
+"/                upToAll: 'instanceVariableNames:') withBlanksTrimmed.
+        traitCompositionString isEmptyOrNil ifTrue: [traitCompositionString := '{}'].
+        classTraitCompositionString isEmptyOrNil ifTrue: [classTraitCompositionString := '{}'].
+        lastIndex := tokens size.
+        definitions add:( MCClassDefinition
+                name: aChange className "/ (tokens at: 3)
+                superclassName: aChange superClassName "/ (tokens at: 1)
+                traitComposition: traitCompositionString
+                classTraitComposition: classTraitCompositionString
+                category: aChange category "/ (tokens at: lastIndex)
+                instVarNames: aChange instanceVariableNames asCollectionOfWords "/ ((tokens at: lastIndex - 6) findTokens: ' ')
+                classVarNames: aChange classVariableNames asCollectionOfWords "/ ((tokens at: lastIndex - 4) findTokens: ' ')
+                poolDictionaryNames: aChange poolDictionaries asCollectionOfWords "/ ((tokens at: lastIndex - 2) findTokens: ' ')
+                classInstVarNames: (aChange classInstanceVariableNames ? '') asCollectionOfWords "/ (self classInstVarNamesFor: aPseudoClass)
+                type: (self typeOfSubclass: (tokens at: 2))
+                comment: nil "/ (self commentFor: aPseudoClass)
+                commentStamp: nil "/ (self commentStampFor: aPseudoClass)
+            )
+
+    "Created: / 25-11-2011 / 17:20:41 / cg"
+!
+
+visitDoItChange:aChange
+    self addDefinitionsFromDoit: aChange source
+
+    "Created: / 25-11-2011 / 17:15:21 / cg"
+!
+
+visitMethodChange:aChange
+    definitions add:(MCMethodDefinition
+                        className: aChange className
+                        classIsMeta: aChange isForMeta
+                        selector: aChange changeSelector
+                        category: aChange category "/ (aPseudoClass organization categoryOfElement: ea)
+                        timeStamp: nil "aChange timeStamp" "/ (aPseudoClass stampAt: ea)
+                        source: aChange source "/ (aPseudoClass sourceCodeAt: ea)
+                    )
+
+    "Created: / 25-11-2011 / 17:15:36 / cg"
+! !
+
 !MCStReader class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCStReader.st,v 1.3 2011-08-20 12:21:23 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCStReader.st,v 1.4 2011-11-25 16:46:01 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCStReader.st,v 1.3 2011-08-20 12:21:23 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCStReader.st,v 1.4 2011-11-25 16:46:01 cg Exp $'
 !
 
 version_SVN