--- 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