Merged 15a7d59cae11 and 55fd620bb475 (branch default - CVS HEAD) jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Tue, 16 Apr 2013 09:44:57 +0200
branchjv
changeset 3219 92e64a42ab4e
parent 3209 15a7d59cae11 (current diff)
parent 3218 55fd620bb475 (diff)
child 3224 c42523c55cad
Merged 15a7d59cae11 and 55fd620bb475 (branch default - CVS HEAD)
Change.st
ChangeDeltaInformation.st
ChangeSet.st
ClassChange.st
ClassCommentChange.st
ClassDefinitionChange.st
ClassRemoveChange.st
ClassRenameChange.st
InfoChange.st
Make.proto
Make.spec
MethodChange.st
ProjectProblem.st
SourceCodeManagerUtilities.st
SourceCodeManagerUtilitiesForContainerBasedManagers.st
abbrev.stc
bc.mak
libInit.cc
libbasic3.rc
mingwmake.bat
stx_libbasic3.st
vcmake.bat
--- a/Change.st	Thu Apr 11 14:36:03 2013 +0200
+++ b/Change.st	Tue Apr 16 09:44:57 2013 +0200
@@ -50,7 +50,7 @@
 !Change class methodsFor:'others'!
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/Change.st,v 1.64 2013-03-30 14:12:02 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/Change.st,v 1.65 2013-04-14 06:57:58 cg Exp $'
 ! !
 
 
@@ -177,14 +177,6 @@
     "Modified (format): / 25-07-2012 / 17:37:23 / cg"
 !
 
-mcDefinition
-    ^ mcDefinition
-!
-
-mcDefinition:something
-    mcDefinition := something.
-!
-
 nameSpaceOverride:ns
 
     "Created: / 20-03-2012 / 17:18:17 / cg"
@@ -367,6 +359,7 @@
 
 ! !
 
+
 !Change methodsFor:'queries'!
 
 isForGeneratedSubject
@@ -446,6 +439,13 @@
     "Created: / 7.2.1998 / 19:26:50 / cg"
 !
 
+isConflict
+    "true if this change is different than what is already in the image
+     (i.e. it overwrites some existing code)"
+
+    ^ true
+!
+
 isDoIt
     ^ false
 
@@ -565,7 +565,7 @@
 !Change class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/Change.st,v 1.64 2013-03-30 14:12:02 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/Change.st,v 1.65 2013-04-14 06:57:58 cg Exp $'
 !
 
 version_HG
--- a/ChangeDeltaInformation.st	Thu Apr 11 14:36:03 2013 +0200
+++ b/ChangeDeltaInformation.st	Tue Apr 16 09:44:57 2013 +0200
@@ -14,7 +14,7 @@
 Object subclass:#ChangeDeltaInformation
 	instanceVariableNames:'shortDeltaSymbol'
 	classVariableNames:'Unknown Identical Different Added Removed IdenticalButWhiteSpace
-		IdenticalButFormat IdenticalSemantically'
+		IdenticalButFormat IdenticalSemantically Conflict'
 	poolDictionaries:''
 	category:'System-Changes'
 !
@@ -50,6 +50,7 @@
 "
 ! !
 
+
 !ChangeDeltaInformation class methodsFor:'initialization'!
 
 initialize
@@ -62,10 +63,12 @@
     Different               := self new shortDeltaSymbol:#'~'.    "/ code is different
     Added                   := self new shortDeltaSymbol:#'+'.    "/ method/class is added by change
     Removed                 := self new shortDeltaSymbol:#'-'.    "/ method/class is removed by change
+    Conflict                := self new shortDeltaSymbol:#'!!'.    "/ package conflict - overwrites existing method
 
     "Created: / 31-08-2011 / 10:09:24 / cg"
 ! !
 
+
 !ChangeDeltaInformation class methodsFor:'accessing'!
 
 added
@@ -76,6 +79,12 @@
     "Modified (comment): / 31-08-2011 / 10:20:51 / cg"
 !
 
+conflict
+    "method overwrites existing method from another package"
+
+    ^ Conflict
+!
+
 different
     "code is different"
 
@@ -133,6 +142,7 @@
     "Created: / 31-08-2011 / 10:20:13 / cg"
 ! !
 
+
 !ChangeDeltaInformation methodsFor:'accessing'!
 
 shortDeltaSymbol
@@ -147,14 +157,15 @@
     "Created: / 31-08-2011 / 10:39:05 / cg"
 ! !
 
+
 !ChangeDeltaInformation class methodsFor:'documentation'!
 
 version
-    ^ '$Header: ChangeDeltaInformation.st 1909 2012-03-31 00:14:49Z vranyj1 $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ChangeDeltaInformation.st,v 1.2 2013-04-14 18:24:14 cg Exp $'
 !
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic3/ChangeDeltaInformation.st,v 1.1 2011/08/31 09:45:27 cg Exp §'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ChangeDeltaInformation.st,v 1.2 2013-04-14 18:24:14 cg Exp $'
 !
 
 version_HG
--- a/ChangeSet.st	Thu Apr 11 14:36:03 2013 +0200
+++ b/ChangeSet.st	Tue Apr 16 09:44:57 2013 +0200
@@ -20,8 +20,8 @@
 
 Object subclass:#ChangeFileReader
 	instanceVariableNames:'inputStream parseTree changeAction changeSet selector receiver
-		arguments receiverSelector receiverReceiver lineNumber position
-		className methodSelector chunk timestamp classIsJava'
+                arguments receiverSelector receiverReceiver lineNumber position
+                className methodSelector nameSpaceOverride chunk timestamp classIsJava'
 	classVariableNames:''
 	poolDictionaries:''
 	privateIn:ChangeSet
@@ -1492,8 +1492,8 @@
 includesChangeForClassOrMetaclassOrPrivateClassOfAny:aCollectionOfClasses
     |namesOfClasses namesOfMetaclasses|
 
-    namesOfClasses := aCollectionOfClasses collect:[:eachClass | eachClass theNonMetaclass name] as:Array.
-    namesOfMetaclasses := aCollectionOfClasses collect:[:eachClass | eachClass theMetaclass name] as:Array.
+    namesOfClasses := (aCollectionOfClasses collect:[:eachClass | eachClass theNonMetaclass name]) asArray.
+    namesOfMetaclasses := (aCollectionOfClasses collect:[:eachClass | eachClass theMetaclass name]) asArray.
 
     self do:[:aChange | 
         |changeClassName changeClass|
@@ -1532,7 +1532,7 @@
 
     |selected alreadyProcessed classes prev|
 
-    classes := aCollectionOfClasses collect:[:eachClass | eachClass theNonMetaclass] as:Array.
+    classes := (aCollectionOfClasses collect:[:eachClass | eachClass theNonMetaclass]) asArray.
 
     selected := Set new.
     alreadyProcessed := Set new.
@@ -1568,7 +1568,7 @@
 
     |selected  classes |
 
-    classes := aCollectionOfClasses collect:[:eachClass | eachClass theNonMetaclass] as:Array.
+    classes := (aCollectionOfClasses collect:[:eachClass | eachClass theNonMetaclass]) asArray.
 
     selected := ChangeSet new.
 
@@ -2248,6 +2248,7 @@
 !
 
 classNameOf:aReceiver
+    "old"
 
     | nameSpace isMeta clsNode clsName |
     nameSpace := Class nameSpaceQuerySignal query.
@@ -2278,13 +2279,53 @@
         clsName := clsName , ' class'.
     ].
 
-    ^(nameSpace ~~ Smalltalk and:[(clsName startsWith: nameSpace name) not])
-        ifTrue:[nameSpace name , '::' , clsName]
-        ifFalse:[clsName].
+    (nameSpace ~~ Smalltalk and:[(clsName startsWith: nameSpace name) not])
+        ifTrue:[
+            ^ nameSpace name , '::' , clsName
+        ] ifFalse:[     
+            ^ clsName
+        ].
 
     "Modified: / 30-01-2013 / 10:02:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+classNameOfRememberingNamespace:aReceiver
+    "new"
+
+    | nameSpace clsName rr|
+
+    nameSpace := Class nameSpaceQuerySignal query.
+
+    (aReceiver isUnaryMessage) ifTrue:[
+        rr := aReceiver receiver.
+        (aReceiver selector == #classSide) ifTrue:[
+            clsName := (rr name) , ' classSide'
+        ] ifFalse:[
+            (aReceiver selector == #class) ifTrue:[
+                clsName := (rr name) , ' class'
+            ] ifFalse:[
+                self error:'unhandled receiver message'.
+            ].
+        ]
+    ] ifFalse:[
+        clsName := aReceiver name.
+    ].
+
+    (nameSpace ~~ Smalltalk and:[(clsName startsWith: nameSpace name) not])
+        ifTrue:[
+            "/ old: remember namespace in name
+            "/ ^ nameSpace name , '::' , clsName
+            "/ new: remember in override
+            nameSpaceOverride := nameSpace.
+            ^ clsName
+        ] ifFalse:[
+            nameSpaceOverride := nil.
+            ^ clsName
+        ].
+
+    "Modified: / 24-01-2012 / 17:07:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 extractMethodsClassAndSelectorFromReceiver
     "helper for all changes which are of the form:
         (className compiledMethodAt:#methodSelector) something: ...
@@ -2295,12 +2336,11 @@
         self error:'unexpected change' mayProceed:true.
         ^ false.
     ].
-    className := self classNameOf:receiverReceiver.
+
+    "/ className := self classNameOf:receiverReceiver.
+    className := self classNameOfRememberingNamespace:receiverReceiver.
     self assert:className notNil.
 
-"/  nameSpace ~~ Smalltalk ifTrue:[
-"/      className := nameSpace name , '::' , className
-"/  ].
     methodSelector := (receiver arguments at:1) evaluate.
     self assert:methodSelector notNil.
     ^ true.
@@ -2312,6 +2352,10 @@
     ^ self classNameOf:receiver
 !
 
+receiversClassNameRememberingNamespace
+    ^ self classNameOfRememberingNamespace:receiver
+!
+
 variableNameOfReceiver
 
     receiver isVariable ifFalse:[ ^ nil ].
@@ -2366,7 +2410,7 @@
     |selector category categories attributes change|
 
     selector := arguments first value.
-    className := self receiversClassName.
+    className := self receiversClassNameRememberingNamespace.
 
     categories := OrderedCollection new.
     attributes := OrderedCollection new.
@@ -2389,6 +2433,7 @@
                         selector:selector
                         source:(parseTree printString)
                         category:(categories first).
+        change nameSpaceOverride:nameSpaceOverride.
         self addChange:change.
     ] ifFalse:[
         self halt:'multiple/missing categories not supported'.
@@ -2403,6 +2448,7 @@
                         className:className
                         selector:selector
                         privacy:(attributes first asSymbol).
+            change nameSpaceOverride:nameSpaceOverride.
             change source:(parseTree printString).
             self addChange:change.
         ].
@@ -2415,13 +2461,11 @@
 handleClassCommentChange
     |change|
 
-    className := self receiversClassName.
-"/        nameSpace ~~ Smalltalk ifTrue:[
-"/            className := nameSpace name , '::' , className
-"/        ].
+    className := self receiversClassNameRememberingNamespace.
 
     change := ClassCommentChange new.
     change className:className comment:(arguments at:1) evaluate.
+    change nameSpaceOverride:nameSpaceOverride.
     change source:(parseTree printString).
     self addChange:change.
     ^ true
@@ -2431,16 +2475,19 @@
     |nameSpace change|
 
     className := (arguments at:1) evaluate.
-"/        nameSpace ~~ Smalltalk ifTrue:[
-"/            className := nameSpace name , '::' , className
-"/        ].
+
     nameSpace := Class nameSpaceQuerySignal query.
-    nameSpace ~~ Smalltalk ifTrue:[
-        className := nameSpace name , '::' , className
-    ].
+    (nameSpace == Smalltalk) ifTrue:[ nameSpace := nil ].
+
+    "/ old: remember namespace in className
+"/    nameSpace ~~ Smalltalk ifTrue:[
+"/        className := nameSpace name , '::' , className
+"/    ].
 
     change := ClassDefinitionChange new.
     change className:className; source:(parseTree printString).
+    "/ new: remember in override
+    change nameSpaceOverride:nameSpace.
     receiver isVariable ifTrue:[
         change superClassName:receiver name.
     ].
@@ -2475,16 +2522,22 @@
     "Modified: / 30-08-2010 / 13:56:32 / cg"
 !
 
+handleClassInitializeChange 
+    |change|
+
+    change := DoItChange new source: chunk.
+    self addChange: change.
+    ^ true
+!
+
 handleClassInstanceVariableDefinitionChange
     |change|
 
-    className := self receiversClassName.
-
-"/        nameSpace ~~ Smalltalk ifTrue:[
-"/            className := nameSpace name , '::' , className
-"/        ].
+    className := self receiversClassNameRememberingNamespace.
+
     change := ClassInstVarDefinitionChange new.
     change className:className.
+    change nameSpaceOverride:nameSpaceOverride.
     change source:(parseTree printString).
     change classInstVarNames:(parseTree arguments first value asCollectionOfWords asArray).
     self addChange:change.
@@ -2506,6 +2559,7 @@
         selector:methodSelector
         category:(arguments at:1) evaluate.
 
+    change nameSpaceOverride:nameSpaceOverride.
     self addChange:change.
     ^ true
 
@@ -2515,10 +2569,7 @@
 handleMethodCategoryRenameChange
     |change|
 
-    className := self receiversClassName.
-"/        nameSpace ~~ Smalltalk ifTrue:[
-"/            className := nameSpace name , '::' , className
-"/        ].
+    className := self receiversClassNameRememberingNamespace.
 
     change := MethodCategoryRenameChange new.
     change 
@@ -2526,6 +2577,7 @@
         oldCategoryName:(arguments at:1) evaluate
         newCategoryName:(arguments at:2) evaluate.
 
+    change nameSpaceOverride:nameSpaceOverride.
     self addChange:change.
     ^ true
 !
@@ -2555,16 +2607,14 @@
 handleMethodChangeUnsafe
     |priv categoryName methodSource changes change parser |
 
+    className := self receiversClassNameRememberingNamespace.
+
     (selector == #'ignoredMethodsFor:') ifTrue:[
         priv := #ignored.
     ] ifFalse:[
         priv := nil
     ].
     classIsJava := false.
-    className := self receiversClassName.
-"/        nameSpace ~~ Smalltalk ifTrue:[
-"/            className := nameSpace name , '::' , className
-"/        ].
     ((selector == #'methods') 
     or:[(selector == #'publicMethods')
     or:[(selector == #'methodsFor')]]) ifTrue:[
@@ -2607,6 +2657,7 @@
             privacy:priv.
         change classIsJava: classIsJava.
 
+        change nameSpaceOverride:nameSpaceOverride.
         self addChange:change.
 
         inputStream skipSeparators.
@@ -2633,6 +2684,7 @@
         selector:methodSelector
         package:(arguments at:1) evaluate.
 
+    change nameSpaceOverride:nameSpaceOverride.
     self addChange:change.
     ^ true
 
@@ -2652,6 +2704,7 @@
         selector:methodSelector
         privacy:(arguments at:1) evaluate.
 
+    change nameSpaceOverride:nameSpaceOverride.
     self addChange:change.
     ^ true
 
@@ -2677,28 +2730,7 @@
 !
 
 handlePrimitiveChange 
-    |change primSource|
-
-    className := self receiversClassName.
-"/        nameSpace ~~ Smalltalk ifTrue:[
-"/            className := nameSpace name , '::' , className
-"/        ].
-
-    inputStream skipSeparators.
-    primSource := inputStream nextChunk.
-
-    selector == #'primitiveDefinitions' ifTrue:[
-        change := ClassPrimitiveDefinitionsChange new
-    ] ifFalse:[
-        selector == #'primitiveFunctions' ifTrue:[
-            change := ClassPrimitiveFunctionsChange new
-        ] ifFalse:[
-            change := ClassPrimitiveVariablesChange new
-        ]
-    ].
-    change className:className source:primSource.
-    self addChange:change.
-    ^ true
+    self handlePrimitiveChange:nil
 !
 
 handlePrimitiveChange: sourceOrNil
@@ -2707,10 +2739,8 @@
 
     |change primSource|
 
-    className := self receiversClassName.
-"/        nameSpace ~~ Smalltalk ifTrue:[
-"/            className := nameSpace name , '::' , className
-"/        ].
+    className := self receiversClassNameRememberingNamespace.
+
     sourceOrNil notNil ifTrue:[
         primSource := sourceOrNil
     ] ifFalse:[
@@ -2728,6 +2758,7 @@
         ]
     ].
     change className:className source:primSource.
+    change nameSpaceOverride:nameSpaceOverride.
     self addChange:change.
     ^ true
 
@@ -2757,9 +2788,7 @@
     |change|
 
     className := self receiversClassName.
-"/        nameSpace ~~ Smalltalk ifTrue:[
-"/            className := nameSpace name , '::' , className
-"/        ].
+
     methodSelector := (arguments at:1) evaluate.
     change := MethodRemoveChange new.
     change className:className selector:methodSelector.
@@ -2790,7 +2819,8 @@
 
     comment := inputStream nextChunk.
 
-    className := self receiversClassName.
+    className := self receiversClassNameRememberingNamespace.
+
     change := ClassCommentChange new.
     change className:className comment:comment.
     change source:(parseTree printString).
@@ -2829,7 +2859,7 @@
     ] on: Error do:[:ex|
         | change |
 
-        change := InvalidChange new source: chunk.
+        change := DoItChange new source: chunk.
         self addChange: change.
     ].
 
@@ -2859,6 +2889,7 @@
         ^ self handleClassDefinitionChange.
     ].
 
+    self error:'unhandled change selector: ',selector.
     ^ false
 
     "Created: / 24-01-2012 / 17:33:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -2880,13 +2911,18 @@
     | kind sel |
     inputStream skip: 5.
     kind := inputStream upTo: Character space.
+    (kind endsWith:$:) ifTrue:[
+        kind := kind copyWithoutLast:1
+    ].
     sel := ('process_', kind) asSymbolIfInterned.
     sel notNil ifTrue:[
-        MessageNotUnderstood handle:[
-            "/Unknown info record, do nothing"
+        MessageNotUnderstood handle:[   
+            self process_otherInfo:kind    
         ] do:[
             self perform: sel.
         ]
+    ] ifFalse:[   
+        self process_otherInfo:kind    
     ]
 
     "Created: / 30-03-2012 / 16:44:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -2916,12 +2952,22 @@
     ^ self handleClassCommentChange.
 !
 
+process_encoding
+    "St/X encoding info record. Ignored"
+!
+
 process_ignoredMethodsFor_
     "'ignoredMethodsFor:' chunk (ST/X)"
 
     ^ self handleMethodChange.
 !
 
+process_initialize
+    "'class initialize' chunk"
+
+    ^ self handleClassInitializeChange
+!
+
 process_instanceVariableNames_
     "'instanceVariableNames:' chunk (ST/X)"
 
@@ -2964,6 +3010,18 @@
     ^ self handleNameSpaceCreationChange.
 !
 
+process_otherInfo:what
+    "'---- <what> 12-03-2012 10:49:40 ----'
+
+    '<what>' is already read from inputStream.
+    "
+
+    "/ inputStream skipSeparators.
+    self addChange: (InfoChange type: what data: (inputStream upToEnd) timestamp: nil)
+
+    "Created: / 18-05-2012 / 17:03:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 process_package_
     "'package:' chunk (ST/X)"
 
@@ -3502,8 +3560,7 @@
         ].
     ].
 
-    aStream nextPutAll: (nonMetaInfo definition definitionStringInNamespace: namespaceName).
-    aStream nextPutChunkSeparator. 
+    aStream nextChunkPut: (nonMetaInfo definition definitionStringInNamespace: namespaceName).
     aStream cr; cr.
 
     "/
@@ -4450,11 +4507,11 @@
 !ChangeSet class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/ChangeSet.st,v 1.217 2013-03-31 20:08:50 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ChangeSet.st,v 1.222 2013-04-15 13:39:06 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/ChangeSet.st,v 1.217 2013-03-31 20:08:50 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ChangeSet.st,v 1.222 2013-04-15 13:39:06 cg Exp $'
 !
 
 version_HG
--- a/ClassChange.st	Thu Apr 11 14:36:03 2013 +0200
+++ b/ClassChange.st	Tue Apr 16 09:44:57 2013 +0200
@@ -208,6 +208,7 @@
 className:aString 
     "set the className of the change"
 
+    self assert:aString notNil.
     className := aString
 
     "Modified: / 15.7.1996 / 09:28:35 / cg"
@@ -382,7 +383,7 @@
      The format is suitable for a human - not meant to be read back."
 
     source isNil ifTrue:[
-        aStream nextPutAll:'an empty change'.
+        aStream nextPutAll:self class nameWithArticle,'-change (no source)'.
         ^ self
     ].
     aStream nextPutAll:(self class name , ' - ' , source string firstLine , '...').
@@ -394,7 +395,7 @@
 cutMyNameSpaceOf:aString
     |ns|
 
-    aString isNil ifTrue:[ ^ aString ].
+    aString isNil ifTrue:[ ^ nil ].
     (ns := self nameSpaceOverride) isNil ifTrue:[ ^ aString ].
     (aString startsWith:(ns , '.')) ifTrue:[ ^ self cutNameSpaceOf:aString ].
     (aString startsWith:(ns , '::')) ifTrue:[ ^ self cutNameSpaceOf:aString ].
@@ -450,11 +451,11 @@
 !ClassChange class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/ClassChange.st,v 1.69 2013-03-27 18:18:35 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ClassChange.st,v 1.71 2013-04-15 08:42:41 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/ClassChange.st,v 1.69 2013-03-27 18:18:35 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ClassChange.st,v 1.71 2013-04-15 08:42:41 stefan Exp $'
 !
 
 version_HG
--- a/ClassCommentChange.st	Thu Apr 11 14:36:03 2013 +0200
+++ b/ClassCommentChange.st	Tue Apr 16 09:44:57 2013 +0200
@@ -44,12 +44,14 @@
 "
 ! !
 
+
 !ClassCommentChange class methodsFor:'others'!
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic3/ClassCommentChange.st,v 1.34 2011/11/25 16:45:02 cg Exp §'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ClassCommentChange.st,v 1.35 2013-04-14 06:57:10 cg Exp $'
 ! !
 
+
 !ClassCommentChange methodsFor:'accessing'!
 
 className:clsName comment:aCommentString
@@ -69,8 +71,19 @@
     "Created: / 16.2.1998 / 14:16:45 / cg"
 ! !
 
+
 !ClassCommentChange methodsFor:'comparing'!
 
+isConflict
+    "true if this change is different than what is already in the image
+     (i.e. it overwrites some existing code)"
+
+    |cls|
+
+    ^ (cls := self changeClass) notNil
+    and:[ cls comment ~= self comment ]
+!
+
 isForSameAs:changeB
     "return true, if the given change represents a change for the same
      thingy as the receiver (i.e. same method, same definition etc.)."
@@ -93,14 +106,13 @@
 source
     "synthesize the changes source"
 
-    ^ String
-        streamContents:
-            [:s |
-                self printOn:s.
-                comment storeOn:s.
-            ]
+    ^ String streamContents: [:s |
+            self printOn:s.
+            comment storeOn:s.
+        ]
 ! !
 
+
 !ClassCommentChange methodsFor:'converting'!
 
 asAntiChange
@@ -110,6 +122,7 @@
     "Created: / 26-11-2009 / 16:09:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+
 !ClassCommentChange methodsFor:'printing & storing'!
 
 printOn:aStream
@@ -122,7 +135,9 @@
 "/    ns notNil ifTrue:[
 "/        aStream nextPutAll:ns; nextPutAll:'::'
 "/    ].
-    aStream nextPutAll:self className; nextPutAll:' comment:'
+    aStream 
+        nextPutAll:self className; 
+        nextPutAll:' comment:'
 !
 
 printWithoutClassNameOn:aStream
@@ -132,6 +147,7 @@
     aStream nextPutAll:'comment:'
 ! !
 
+
 !ClassCommentChange methodsFor:'queries'!
 
 isClassCommentChange
@@ -140,6 +156,7 @@
 
 ! !
 
+
 !ClassCommentChange methodsFor:'visiting'!
 
 acceptChangeVisitor:aVisitor
@@ -148,10 +165,11 @@
     "Created: / 25-11-2011 / 17:13:02 / cg"
 ! !
 
+
 !ClassCommentChange class methodsFor:'documentation'!
 
 version
-    ^ '$Header: ClassCommentChange.st 1909 2012-03-31 00:14:49Z vranyj1 $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ClassCommentChange.st,v 1.35 2013-04-14 06:57:10 cg Exp $'
 !
 
 version_HG
--- a/ClassDefinitionChange.st	Thu Apr 11 14:36:03 2013 +0200
+++ b/ClassDefinitionChange.st	Tue Apr 16 09:44:57 2013 +0200
@@ -51,7 +51,7 @@
 !ClassDefinitionChange class methodsFor:'others'!
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/ClassDefinitionChange.st,v 1.76 2013-03-30 01:54:34 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ClassDefinitionChange.st,v 1.79 2013-04-14 06:55:37 cg Exp $'
 ! !
 
 
@@ -351,12 +351,32 @@
 
 !ClassDefinitionChange methodsFor:'comparing'!
 
+isConflict
+    "true if this change is different than what is already in the image
+     (i.e. it overwrites some existing code)"
+
+    |cls|
+
+    (cls := self changeClass) isNil ifTrue:[^ false].
+    cls superclass name ~= superClassName ifTrue:[ ^ true ].
+    cls instanceVariableString ~= instanceVariableNames ifTrue:[ ^ true ].
+    cls classVariableString ~= classVariableNames ifTrue:[ ^ true ].
+    cls class instanceVariableString ~= classInstanceVariableNames ifTrue:[ ^ true ].
+    cls sharedPoolNames ~= poolDictionaries ifTrue:[ ^ true ].
+    cls category ~= category ifTrue:[ ^ true ].
+    cls isPrivate ifTrue:[
+        cls owningClass name ~= owningClassName ifTrue:[ ^ true ].
+    ].
+    cls definitionSelector ~= self definitionSelector ifTrue:[ ^ true ].
+    ^  false
+!
+
 isForSameAs:changeB
     "return true, if the given change represents a change for the same
      thingy as the receiver (i.e. same method, same definition etc.)."
 
     changeB isClassDefinitionChange ifFalse:[^ false].   
-    ^ className = changeB className
+    ^ self className = changeB className.
 !
 
 sameAs:changeB
@@ -383,14 +403,16 @@
 !ClassDefinitionChange methodsFor:'printing & storing'!
 
 definitionString
-    |ns classNameUsed superClassNameUsed selPart|
+    ^ self definitionStringInNamespace: (self nameSpaceOverride)
+!
 
-    ns := self nameSpaceOverride.
+definitionStringInNamespace: nsOrNil
+    |classNameUsed superClassNameUsed selPart|
 
     objectType == #variable ifTrue:[
         ^ String streamContents:[:stream |
-            ns notNil ifTrue:[
-                stream nextPutAll:((ns asCollectionOfSubstringsSeparatedBy:$.) asStringWith:'::')
+            nsOrNil notNil ifTrue:[
+                stream nextPutAll:((nsOrNil asCollectionOfSubstringsSeparatedBy:$.) asStringWith:'::')
             ] ifFalse:[
                 self halt:'can this happen ?'.
                 stream nextPutAll:'Smalltalk'
@@ -407,6 +429,7 @@
     "/ local name as argument, not the full name
     classNameUsed := self localClassName.
 
+    "/ selPart is the subclass:/variableSubclass/variableByteSubclass:/... - part
     selPart := (self definitionSelector ? #'subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:')
                     keywords first.         
 
@@ -414,117 +437,30 @@
         stream 
             nextPutAll:superClassNameUsed;
             nextPutAll:' ',selPart;
-            nextPutAll: classNameUsed asSymbol storeString;
-            cr;
-            spaces:4;
-            nextPutAll:'instanceVariableNames: ';
-            nextPutAll:(instanceVariableNames ? '') storeString;
-            cr;
-            spaces:4;
-            nextPutAll:'classVariableNames: ';
-            nextPutAll:(classVariableNames ? '') storeString;
-            cr;
-            spaces:4;
-            nextPutAll:'poolDictionaries: ';
-            nextPutAll:(poolDictionaries ? '') storeString;
-            cr.
+            nextPutLine: classNameUsed asSymbol storeString;
+            nextPutAll:'    instanceVariableNames: ';
+            nextPutLine:(instanceVariableNames ? '') storeString;
+            nextPutAll:'    classVariableNames: ';
+            nextPutLine:(classVariableNames ? '') storeString;
+            nextPutAll:'    poolDictionaries: ';
+            nextPutLine:(poolDictionaries ? '') storeString.
         private == true ifTrue:[
             stream 
-                spaces:4;
-                nextPutAll:'privateIn: ';
+                nextPutAll:'    privateIn: ';
                 nextPutAll:(self owningClassName)
         ] ifFalse:[
             stream 
-                spaces:4;
-                nextPutAll:'category: ';
-                nextPutAll:(category ? '') storeString
+                nextPutAll:'    category: ';
+                nextPutAll:(category ? '') asString storeString
         ].
       ]
 
     "Modified: / 13-06-2012 / 13:01:58 / cg"
 !
 
-definitionStringInNamespace: ns
-    | classNameUsed superClassNameUsed |
-
-    objectType == #variable ifTrue:[
-        ^ String streamContents:[:stream |
-            ns notNil ifTrue:[
-                stream 
-                    nextPutAll:((ns asCollectionOfSubstringsSeparatedBy:$.) asStringWith:'::')
-            ] ifFalse:[
-                self halt:'can this happen ?'.
-                stream 
-                    nextPutAll:'Smalltalk'
-            ].
-
-            stream 
-                nextPutAll:' addClassVarName:';
-                nextPutAll:className asString storeString
-          ].
-    ].
-
-    superClassNameUsed := self superClassName.
-    classNameUsed := self classNameWithoutNamespace.
+definitionStringWithoutNamespace
+    "cg - huh - who needs that? (the definitionString already does NOT include the classes namespace)"
 
-    ^ String streamContents:[:stream |
-        self isPrivateClassDefinitionChange ifFalse:[
-            stream 
-                nextPutAll:(superClassNameUsed ? 'nil');
-                nextPutAll:' subclass:';
-                nextPutAll: classNameUsed asSymbol storeString
-                ;
-                cr;
-                tab;
-                nextPutAll:'instanceVariableNames:';
-                nextPutAll:(instanceVariableNames ? '') storeString;
-                cr;
-                tab;
-                nextPutAll:'classVariableNames:';
-                nextPutAll:(classVariableNames ? '') storeString;
-                cr;
-                tab;
-                nextPutAll:'poolDictionaries:';
-                nextPutAll:(poolDictionaries ? '') storeString;
-                cr;
-                tab;
-                nextPutAll:'category:';
-                nextPutAll:(category ? '') storeString;
-                cr
-        ] ifTrue:[
-            stream 
-                nextPutAll:superClassNameUsed;
-                nextPutAll:' subclass:';
-                nextPutAll: (self className copyFrom: owningClassName size + 3) asSymbol storeString
-                ;
-                cr;
-                tab;
-                nextPutAll:'instanceVariableNames:';
-                nextPutAll:(instanceVariableNames ? '') storeString;
-                cr;
-                tab;
-                nextPutAll:'classVariableNames:';
-                nextPutAll:(classVariableNames ? '') storeString;
-                cr;
-                tab;
-                nextPutAll:'poolDictionaries:';
-                nextPutAll:(poolDictionaries ? '') storeString;
-                cr;
-                tab;
-                nextPutAll:'privateIn:';
-                nextPutAll:
-                    (ns isNil
-                        ifTrue:[owningClassName]
-                        ifFalse:[owningClassName copyFrom: ns size + 3]);
-                cr
-        ]
-    ]
-
-    "Modified: / 06-10-2011 / 17:02:05 / cg"
-    "Created: / 20-03-2012 / 19:40:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-definitionStringWithoutNamespace
     |ns classNameUsed superClassNameUsed|
 
     ns := self nameSpaceOverride.
@@ -815,7 +751,7 @@
 !ClassDefinitionChange class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/ClassDefinitionChange.st,v 1.76 2013-03-30 01:54:34 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ClassDefinitionChange.st,v 1.79 2013-04-14 06:55:37 cg Exp $'
 !
 
 version_HG
--- a/ClassRemoveChange.st	Thu Apr 11 14:36:03 2013 +0200
+++ b/ClassRemoveChange.st	Tue Apr 16 09:44:57 2013 +0200
@@ -56,7 +56,7 @@
 !ClassRemoveChange methodsFor:'printing'!
 
 printOn:aStream
-    aStream nextPutAll:'Smalltalk removeClass:';
+    aStream nextPutAll:'Smalltalk removeClass: ';
             nextPutAll:className asString
 
     "Created: / 16-02-1998 / 14:19:48 / cg"
@@ -82,7 +82,7 @@
 !ClassRemoveChange class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/ClassRemoveChange.st,v 1.6 2013-03-26 12:13:27 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ClassRemoveChange.st,v 1.7 2013-04-02 19:21:31 cg Exp $'
 !
 
 version_HG
--- a/ClassRenameChange.st	Thu Apr 11 14:36:03 2013 +0200
+++ b/ClassRenameChange.st	Tue Apr 16 09:44:57 2013 +0200
@@ -45,6 +45,7 @@
 "
 ! !
 
+
 !ClassRenameChange methodsFor:'accessing'!
 
 oldName
@@ -60,6 +61,7 @@
     "Created: / 16.2.1998 / 14:22:38 / cg"
 ! !
 
+
 !ClassRenameChange methodsFor:'applying'!
 
 apply
@@ -86,27 +88,30 @@
     "Created: / 31-07-2012 / 18:58:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+
 !ClassRenameChange methodsFor:'printing'!
 
 printOn:aStream
-    aStream nextPutAll:'Smalltalk renameClass:';
+    aStream nextPutAll:'Smalltalk renameClass: ';
             nextPutAll:oldName;
-            nextPutAll:' to:';
+            nextPutAll:' to: ';
             nextPutAll:className storeString
 
     "Created: / 16.2.1998 / 14:23:35 / cg"
 ! !
 
+
 !ClassRenameChange methodsFor:'queries'!
 
 isClassRenameChange
     ^ true
 ! !
 
+
 !ClassRenameChange class methodsFor:'documentation'!
 
 version
-    ^ '$Header: ClassRenameChange.st 1948 2012-07-31 18:04:54Z vranyj1 $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ClassRenameChange.st,v 1.6 2013-04-02 19:21:26 cg Exp $'
 !
 
 version_HG
--- a/InfoChange.st	Thu Apr 11 14:36:03 2013 +0200
+++ b/InfoChange.st	Tue Apr 16 09:44:57 2013 +0200
@@ -90,19 +90,24 @@
 
 printOn:aStream
 
-    type == #snapshot ifTrue:[
-        aStream nextPutAll:'Snapshot'; space; nextPutAll: data.
+    type = 'snapshot' ifTrue:[
+        aStream nextPutAll:'---- snapshot '; space; nextPutAll: data.
+        timeOfChangeIfKnown notNil ifTrue:[ timeOfChangeIfKnown printOn: aStream ].
+        aStream nextPutAll:' ---- '.
         ^self
     ].
-    type == #start ifTrue:[
+    type = 'start' ifTrue:[
         aStream nextPutAll:'System start'.
         ^self
     ].
-    type == #rake ifTrue:[
+    type = 'rake' ifTrue:[
         aStream nextPutAll:'rake'; space; nextPutAll: data.
         ^self
     ].
 
+    "/ default
+    aStream nextPutAll:'---- '; nextPutAll:type; space; nextPutAll: data.
+
     "Created: / 18-05-2012 / 17:02:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
@@ -110,11 +115,11 @@
 !InfoChange class methodsFor:'documentation'!
 
 version
-    ^ '$Header: InfoChange.st 1946 2012-07-31 14:00:47Z vranyj1 $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/InfoChange.st,v 1.2 2013-04-02 19:20:25 cg Exp $'
 !
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic3/InfoChange.st,v 1.1 2012-07-31 13:28:44 +0100 vrany Exp §'
+    ^ '$Header: /cvs/stx/stx/libbasic3/InfoChange.st,v 1.2 2013-04-02 19:20:25 cg Exp $'
 !
 
 version_HG
--- a/Make.proto	Thu Apr 11 14:36:03 2013 +0200
+++ b/Make.proto	Tue Apr 16 09:44:57 2013 +0200
@@ -1,4 +1,4 @@
-# $Header: /cvs/stx/stx/libbasic3/Make.proto,v 1.134 2013-01-18 13:02:55 cg Exp $
+# $Header: /cvs/stx/stx/libbasic3/Make.proto,v 1.135 2013-04-02 19:24:04 cg Exp $
 #
 # DO NOT EDIT
 # automagically generated from the projectDefinition: stx_libbasic3.
@@ -34,7 +34,7 @@
 # add the path(es) here:,
 # ********** OPTIONAL: MODIFY the next lines ***
 # LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic2
+LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/libbasic
 
 
 # if you need any additional defines for embedded C code,
@@ -127,6 +127,11 @@
 	cd ../libbasic2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 
 
+
+# build all packages containing referenced classes for this package
+# they are nor needed to compile the package
+references:
+
 # build all packages containing referenced classes for this package
 # they are nor needed to compile the package
 references:
--- a/Make.spec	Thu Apr 11 14:36:03 2013 +0200
+++ b/Make.spec	Tue Apr 16 09:44:57 2013 +0200
@@ -1,4 +1,4 @@
-# $Header: /cvs/stx/stx/libbasic3/Make.spec,v 1.84 2013-01-18 13:02:54 cg Exp $
+# $Header: /cvs/stx/stx/libbasic3/Make.spec,v 1.85 2013-04-02 19:24:02 cg Exp $
 #
 # DO NOT EDIT
 # automagically generated from the projectDefinition: stx_libbasic3.
--- a/MethodChange.st	Thu Apr 11 14:36:03 2013 +0200
+++ b/MethodChange.st	Tue Apr 16 09:44:57 2013 +0200
@@ -266,7 +266,7 @@
 apply
     "apply the change"
 
-    |class replacementClassName suggestion|
+    |class replacementClassName suggestion oldMethodOrNil oldPackage newPackage defClass|
 
     class := self changeClass.
     class isNil ifTrue:[
@@ -315,6 +315,21 @@
             ]
         ]
     ].
+
+    "/ if overwriting an existing method from another package,
+    "/ put the existing method into the packagessafe
+    oldMethodOrNil := class compiledMethodAt:selector.
+    oldMethodOrNil notNil ifTrue:[
+        oldPackage := oldMethodOrNil package.
+        newPackage := Class packageQuerySignal query.
+        (newPackage notNil and:[newPackage ~= oldPackage]) ifTrue:[
+            defClass := oldPackage asPackageId projectDefinitionClass.
+            defClass notNil ifTrue:[
+                defClass rememberOverwrittenMethod:oldMethodOrNil inClass:class.
+            ]
+        ].
+    ].
+
     class compile:source classified:methodCategory logged:true.
 
     "Modified: / 07-09-2011 / 21:09:19 / cg"
@@ -323,6 +338,18 @@
 
 !MethodChange methodsFor:'comparing'!
 
+isConflict
+    "true if this change is different than what is already in the image
+     (i.e. it overwrites some existing code)"
+
+    |cls mthd|
+
+    (cls := self changeClass) isNil ifTrue:[^ false].
+    (mthd := cls compiledMethodAt:selector) isNil ifTrue:[^ false].
+    ^ mthd category ~= methodCategory
+    or:[ mthd source ~= self source ]
+!
+
 isForSameAs:changeB
     "return true, if the given change represents a change for the same
      thingy as the receiver (i.e. same method, same definition etc.)."
@@ -404,12 +431,12 @@
      The format is suitable for a human - not meant to be read back."
 
     aStream
-	nextPutAll:(self className ? 'unnamed');
-	nextPutAll:'>>';
-	nextPutAll:(selector ? '?');
-	nextPutAll:' {';
-	nextPutAll:(methodCategory ? '?');
-	nextPutAll:'}'
+        nextPutAll:(self className ? 'unnamed');
+        nextPutAll:' >> ';
+        nextPutAll:(selector ? '?');
+        nextPutAll:' {';
+        nextPutAll:(methodCategory ? '?');
+        nextPutAll:'}'
 
     "Modified: / 04-10-2006 / 16:46:01 / cg"
     "Modified: / 07-11-2008 / 08:29:03 / Jan Vrany <vranyj1@fel.cvut.cz>"
@@ -511,11 +538,11 @@
 !MethodChange class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/MethodChange.st,v 1.70 2013-03-28 12:23:42 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/MethodChange.st,v 1.73 2013-04-14 11:33:33 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/MethodChange.st,v 1.70 2013-03-28 12:23:42 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/MethodChange.st,v 1.73 2013-04-14 11:33:33 cg Exp $'
 !
 
 version_HG
--- a/ProjectProblem.st	Thu Apr 11 14:36:03 2013 +0200
+++ b/ProjectProblem.st	Tue Apr 16 09:44:57 2013 +0200
@@ -528,31 +528,31 @@
     "Created: / 26-07-2012 / 10:21:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!ProjectProblem::ClassProblem methodsFor:'fixing'!
+
+doUpdateAllProjectDefinitions
+    "full update the project definition class;
+     will do a rescan to add all missing items"
+
+    | def |
+
+    def := self packageDefinitionClass.
+    def isNil ifTrue:[ ^ false ].
+
+    def
+        updateMethodsCodeUsingCompiler:Compiler 
+        ignoreOldDefinition:false.
+
+    UserNotification notify: ('Project definitions updated. Do not forget to check in build support files!!').
+    ^true
+! !
+
 !ProjectProblem::InconsistentProjectDefinition methodsFor:'fixes'!
 
 fixes
 
     ^Array
-        with: (Array with: 'Regenerate specs in ProjectDefinitions' with: [ self regenerateProjectDefinition ])
-!
-
-regenerateProjectDefinition
-    |defClass|
-
-    defClass := self packageDefinitionClass.
-    Class packageQuerySignal
-        answer:defClass package
-        do:[
-            defClass theNonMetaclass
-                forEachContentsMethodsCodeToCompileDo:
-                    [:code :category |
-                        Compiler
-                            compile:code
-                            forClass:defClass theMetaclass
-                            inCategory:category.
-                    ]
-                ignoreOldDefinition:false
-        ].
+        with: (Array with: 'Full update of the project definitions (rescan)' with: [ self doUpdateAllProjectDefinitions ])
 ! !
 
 !ProjectProblem::ClassListedButDoesNotExist methodsFor:'accessing'!
@@ -674,8 +674,9 @@
 fixes
 
     ^Array
-	with: (Array with: 'Include in project' with: [ self doIncludeInProject ])
-	with: (Array with: 'Include in project as autoloaded' with: [ self doIncludeInProjectAsAutoloaded ])
+        with: (Array with: 'Add class to project' with: [ self doIncludeInProject ])
+        with: (Array with: 'Add class to project as autoloaded' with: [ self doIncludeInProjectAsAutoloaded ])
+        with: (Array with: 'Full update of the project definitions (rescan)' with: [ self doUpdateAllProjectDefinitions ])
 
     "Created: / 26-07-2012 / 10:41:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
@@ -833,6 +834,38 @@
     selector := something.
 ! !
 
+!ProjectProblem::MethodProblem methodsFor:'fixes'!
+
+doRemoveMethodFromExtensionsList
+    "update the extension method info in the project definition.
+     Return false if fix fails, true otherwise"
+
+    | def mthd |
+
+    def := self packageDefinitionClass.
+    def isNil ifTrue:[ ^ false ].
+    mthd := self method.
+    mthd isNil ifTrue:[ ^ false ].
+
+    def excludeMethods:(Array with:mthd) usingCompiler:nil.
+    UserNotification notify: ('ProjectDefinition updated. Do not forget to check it in!!').
+    ^true
+!
+
+doRemoveNamedMethodFromExtensionsList
+    "update the extension method info in the project definition.
+     Return false if fix fails, true otherwise"
+
+    | def |
+
+    def := self packageDefinitionClass.
+    def isNil ifTrue:[ ^ false ].
+
+    def excludeMethodFor:selector inClassNamed:className usingCompiler:nil.    
+    UserNotification notify: ('ProjectDefinition updated. Do not forget to check it in!!').
+    ^true
+! !
+
 !ProjectProblem::MethodProblem methodsFor:'utilities-HTML'!
 
 linkToMethod
@@ -907,22 +940,6 @@
     self method package:package
 !
 
-doRemoveMethodFromExtensionsList
-    "update the extension method info in the project definition.
-     Return false if fix fails, true otherwise"
-
-    | def mthd |
-
-    def := self packageDefinitionClass.
-    def isNil ifTrue:[ ^ false ].
-    mthd := self method.
-    mthd isNil ifTrue:[ ^ false ].
-
-    def excludeMethods:(Array with:mthd) usingCompiler:nil.
-    UserNotification notify: ('ProjectDefinition updated. Do not forget to check it in!!').
-    ^true
-!
-
 fixes
     |mthd|
 
@@ -999,8 +1016,9 @@
 
 fixes
     ^Array
-        with: (Array with: 'Update project definition' with: [ self doUpdateExtensionMethodsInProject ])
+        with: (Array with: 'Add method to project' with: [ self doUpdateExtensionMethodsInProject ])
         with: (Array with: 'Move to classes package' with: [ self doMoveToClassesPackage ])
+        with: (Array with: 'Full update of the project definitions (rescan)' with: [ self doUpdateAllProjectDefinitions ])
 ! !
 
 !ProjectProblem::ExtensionMethodsClassDoesNotExist methodsFor:'accessing-description'!
@@ -1027,6 +1045,15 @@
     "Modified: / 23-02-2012 / 14:22:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!ProjectProblem::ExtensionMethodsClassDoesNotExist methodsFor:'fixes'!
+
+fixes
+    ^Array
+        with: (Array with: 'Remove from the extensionMethodNames list' with: [ self doRemoveNamedMethodFromExtensionsList ])    
+
+    "Created: / 26-07-2012 / 10:41:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !ProjectProblem::ClassListedBeforeItsSuperclass methodsFor:'accessing'!
 
 superClassName
@@ -1323,6 +1350,10 @@
 
 !ProjectProblem::MethodInNoPackage methodsFor:'accessing-description'!
 
+alreadyFixed
+    ^ (self method package ~= PackageId noProjectID)        
+!
+
 description
     "Return a (HTML) describing the problem."
 
@@ -1368,6 +1399,15 @@
     "Modified: / 23-02-2012 / 14:22:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!ProjectProblem::ExtensionMethodListedButDoesNotExist methodsFor:'fixes'!
+
+fixes
+    ^Array
+        with: (Array with: 'Remove from the extensionMethodNames list' with: [ self doRemoveNamedMethodFromExtensionsList ])    
+
+    "Created: / 26-07-2012 / 10:41:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !ProjectProblem::MethodSourceCorrupted methodsFor:'accessing'!
 
 severity
@@ -1454,16 +1494,17 @@
     "Return a (HTML) describing the problem."
 
     package = 'stx' ifTrue:[
-	^
+        ^
 'Move your code to another package.
-<br>The package named "stx" is reserveed for exept''s ST/X development.'
+<br>The package name "stx" is reserveed for exept''s ST/X development.'
     ].
 
     ^
 'A project definition class for package "%1" does not exist.
 <br>Project definition classes keep the meta information of a package,
 such as contents and build parameters.
-You <b>must</b> create it, otherwise package management won''t work.'
+You <b>must</b> create it, otherwise package management won''t work,
+and the package cannot be compiled to a binary dll.'
     bindWith: package
 
     "Modified: / 23-02-2012 / 13:29:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -1478,10 +1519,16 @@
 !ProjectProblem::ProjectDefinitionDoesNotExist methodsFor:'fixing'!
 
 doCreateAs:whatType
-    ProjectDefinition
-	definitionClassForPackage:package
-	projectType: whatType
-	createIfAbsent:true.
+    |prjDef|
+
+    prjDef := ProjectDefinition
+        definitionClassForPackage:package
+        projectType: whatType
+        createIfAbsent:true.
+
+    prjDef
+        updateMethodsCodeUsingCompiler:Compiler 
+        ignoreOldDefinition:true
 !
 
 doCreateAsGUIApplication
@@ -1508,11 +1555,11 @@
 !ProjectProblem class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectProblem.st,v 1.17 2013-03-30 21:02:36 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectProblem.st,v 1.21 2013-04-15 13:38:37 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectProblem.st,v 1.17 2013-03-30 21:02:36 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectProblem.st,v 1.21 2013-04-15 13:38:37 cg Exp $'
 !
 
 version_SVN
--- a/SourceCodeManagerUtilities.st	Thu Apr 11 14:36:03 2013 +0200
+++ b/SourceCodeManagerUtilities.st	Tue Apr 16 09:44:57 2013 +0200
@@ -825,7 +825,7 @@
 sourceCodeForExtensions:aCollectionOfMethods package:aPackageID forManager:scmManagerOrNil
     |s methodsSortedByName defClass|
 
-    s := (String new:1000) writeStream.
+    s := CharacterWriteStream on:(String new:1000).
 
     s nextPutAll:'"{ Package: '''.
     s nextPutAll:aPackageID asString.
@@ -876,7 +876,6 @@
     ^ s contents.
 
     "Created: / 25-07-2012 / 18:38:05 / cg"
-    "Modified: / 29-03-2013 / 12:21:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 sourceCodeManagerFor:aClass
@@ -2714,7 +2713,7 @@
                                     with:aProject allBold) 
                 editViewClass:ListView
                 lines:10 columns:20 
-                initialAnswer:nil model:nil
+                initialAnswer:nil 
                 setupWith:
                    [:v :d | 
                             |removeButton|
@@ -3157,16 +3156,13 @@
     |box y component resources answer
      moduleHolder packageHolder fileNameHolder
      module package fileName 
-     knownContainers knownPackages packageUpdater
+     allPackageIDs knownContainers knownPackages packageUpdater
      packageBoxComponent fileNameBoxComponent fileNameUpdater|
 
-    knownContainers := Set new.
-    Smalltalk allClassesDo:[:cls | |pckg|
-        pckg := cls package.
-        pckg size > 0 ifTrue:[
-            knownContainers add:(pckg upTo:$:)
-        ]
-    ].
+    allPackageIDs := Smalltalk allProjectIDs.
+
+    knownContainers := allPackageIDs collect:[:package | (package upTo:$:)] as:Set.
+
     knownContainers := knownContainers asOrderedCollection.
     knownContainers := knownContainers select:[:module | module isBlank not].
     knownContainers sort.
@@ -3177,17 +3173,14 @@
         theModulePrefix := moduleHolder value , ':'.
 
         Cursor wait showWhile:[
-            knownPackages := Set new.
-            Smalltalk allClassesDo:[:cls | |pckg idx|
-                pckg := cls package.
-                pckg size > 0 ifTrue:[
-                    (pckg startsWith:theModulePrefix) ifTrue:[
-                        idx := pckg indexOf:$:.
-                        knownPackages add:(pckg copyFrom:idx + 1)
-                    ]
-                ]
-            ].
-            knownPackages := knownPackages asOrderedCollection.
+            knownPackages := 
+                allPackageIDs
+                    select:[:package | (package startsWith:theModulePrefix)]
+                    thenCollect:[:package | |idx|
+                        idx := package indexOf:$:.
+                        (package copyFrom:idx + 1)].
+
+            knownPackages := knownPackages asSet asOrderedCollection.
             knownPackages := knownPackages select:[:package | package isBlank not].
             knownPackages sort.
             packageBoxComponent list:knownPackages.
@@ -3912,11 +3905,11 @@
 !SourceCodeManagerUtilities class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilities.st,v 1.269 2013-03-28 10:48:26 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilities.st,v 1.272 2013-04-04 09:34:44 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilities.st,v 1.269 2013-03-28 10:48:26 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilities.st,v 1.272 2013-04-04 09:34:44 cg Exp $'
 !
 
 version_HG
--- a/SourceCodeManagerUtilitiesForContainerBasedManagers.st	Thu Apr 11 14:36:03 2013 +0200
+++ b/SourceCodeManagerUtilitiesForContainerBasedManagers.st	Tue Apr 16 09:44:57 2013 +0200
@@ -494,7 +494,7 @@
 !
 
 checkinPackage:packageToCheckIn classes:doClasses extensions:doExtensions buildSupport:doBuild askForMethodsInOtherPackages:askForMethodsInOtherPackages
-    |mgr classesToCheckIn methodsToCheckIn
+    |mgr classesToCheckIn methodsToCheckIn methodsInPrjDef
      methodsInOtherPackages looseMethods otherPackages
      msg classesInChangeSet newClasses checkinInfo originalCheckinInfo classesToTag|
 
@@ -568,8 +568,23 @@
 
             checkinInfo validateConsistency ifTrue:[
                 self validateConsistencyOfPackage:packageToCheckIn doClasses:doClasses doExtensions:doExtensions.
-                "/ could have changed/recompiled methods
-                methodsToCheckIn := packageToCheckIn asPackageId projectDefinitionClass extensionMethods
+                "/ could have changed/recompiled methods...
+                "/ mhmh - should we checkin what is specified in the prj-def,
+                "/ or what is actually present in the image (in case user did not repair)???
+                
+                methodsInPrjDef  := packageToCheckIn asPackageId projectDefinitionClass extensionMethods.
+                methodsInPrjDef := methodsInPrjDef reject:[:m | m isNil].
+                methodsInPrjDef asSet ~= methodsToCheckIn asSet ifTrue:[
+                    (Dialog 
+                        confirm:('Set of methods in image is different from what is specified in the project definition.\Check in image methods (%1) or definition methods (%2)?'
+                                        bindWith: methodsToCheckIn size
+                                        with: methodsInPrjDef size)
+                        yesLabel:'Image Methods' 
+                        noLabel:'Definition Methods'
+                    ) ifFalse:[
+                        methodsToCheckIn := methodsInPrjDef.
+                    ].
+                ].
             ].
 
             (self
@@ -735,11 +750,11 @@
 !SourceCodeManagerUtilitiesForContainerBasedManagers class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilitiesForContainerBasedManagers.st,v 1.8 2013-03-31 00:27:16 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilitiesForContainerBasedManagers.st,v 1.9 2013-04-02 20:48:44 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilitiesForContainerBasedManagers.st,v 1.8 2013-03-31 00:27:16 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilitiesForContainerBasedManagers.st,v 1.9 2013-04-02 20:48:44 cg Exp $'
 !
 
 version_HG
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TraitClassTraitDefinitionChange.st	Tue Apr 16 09:44:57 2013 +0200
@@ -0,0 +1,68 @@
+"{ Package: 'stx:libbasic3' }"
+
+ClassChange subclass:#TraitClassTraitDefinitionChange
+	instanceVariableNames:'baseTrait traitComposition'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'System-Changes'
+!
+
+!TraitClassTraitDefinitionChange class methodsFor:'documentation'!
+
+documentation
+"
+    instances represent trait changes.
+    These are not present or supported (currently) in st/x, but may be encountered
+    when reading a monticello package containing traits.
+    Mostly experimental.
+"
+! !
+
+!TraitClassTraitDefinitionChange methodsFor:'accessing'!
+
+baseTrait
+    ^ baseTrait
+!
+
+baseTrait:something
+    baseTrait := something.
+!
+
+source
+    ^ String streamContents:[:s |
+        s 
+            nextPutAll: baseTrait;
+            nextPutAll: ' classTrait '; cr;
+            nextPutAll: '    uses: '. 
+        traitComposition isEmptyOrNil ifTrue:[
+            s nextPutAll: '{}'. 
+        ] ifFalse:[
+            s nextPutAll: traitComposition. 
+        ].
+    ]
+!
+
+traitComposition
+    ^ traitComposition
+!
+
+traitComposition:something
+    traitComposition := something.
+! !
+
+!TraitClassTraitDefinitionChange methodsFor:'printing & storing'!
+
+printOn:aStream
+    aStream nextPutAll:baseTrait; nextPutAll:' {class trait definition}'
+! !
+
+!TraitClassTraitDefinitionChange class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libbasic3/TraitClassTraitDefinitionChange.st,v 1.1 2013-04-02 19:18:58 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libbasic3/TraitClassTraitDefinitionChange.st,v 1.1 2013-04-02 19:18:58 cg Exp $'
+! !
+
--- a/TraitDefinitionChange.st	Thu Apr 11 14:36:03 2013 +0200
+++ b/TraitDefinitionChange.st	Tue Apr 16 09:44:57 2013 +0200
@@ -1,6 +1,6 @@
 "{ Package: 'stx:libbasic3' }"
 
-Change subclass:#TraitDefinitionChange
+ClassChange subclass:#TraitDefinitionChange
 	instanceVariableNames:'baseTrait traitComposition category'
 	classVariableNames:''
 	poolDictionaries:''
@@ -36,6 +36,24 @@
     category := something.
 !
 
+source
+    ^ String streamContents:[:s |
+        s 
+            nextPutAll: 'Trait named: ';
+            nextPutAll: className; cr;
+            nextPutAll: '    uses: '. 
+        traitComposition isEmptyOrNil ifTrue:[
+            s nextPutAll: '{}'. 
+        ] ifFalse:[
+            s nextPutAll: traitComposition. 
+        ].
+        s 
+            cr; 
+            nextPutAll: '    category: '.
+        category asString storeOn:s.    
+    ]
+!
+
 traitComposition
     ^ traitComposition
 !
@@ -44,13 +62,21 @@
     traitComposition := something.
 ! !
 
+!TraitDefinitionChange methodsFor:'printing & storing'!
+
+printOn:aStream
+    aStream nextPutAll:className; nextPutAll:' {trait definition}'
+
+    "Modified: / 12-10-2006 / 17:48:28 / cg"
+! !
+
 !TraitDefinitionChange class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/TraitDefinitionChange.st,v 1.1 2013-01-18 12:55:48 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/TraitDefinitionChange.st,v 1.2 2013-04-02 19:18:40 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/TraitDefinitionChange.st,v 1.1 2013-01-18 12:55:48 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/TraitDefinitionChange.st,v 1.2 2013-04-02 19:18:40 cg Exp $'
 ! !
 
--- a/abbrev.stc	Thu Apr 11 14:36:03 2013 +0200
+++ b/abbrev.stc	Tue Apr 16 09:44:57 2013 +0200
@@ -73,3 +73,4 @@
 SourceCodeManagerUtilitiesForWorkspaceBasedManagers SourceCodeManagerUtilitiesForWorkspaceBasedManagers stx:libbasic3 'System-SourceCodeManagement' 0
 VisualAgeChunkFileSourceWriter VisualAgeChunkFileSourceWriter stx:libbasic3 'Kernel-Classes' 0
 TraitDefinitionChange TraitDefinitionChange stx:libbasic3 'System-Changes' 0
+TraitClassTraitDefinitionChange TraitClassTraitDefinitionChange stx:libbasic3 'System-Changes' 0
--- a/bc.mak	Thu Apr 11 14:36:03 2013 +0200
+++ b/bc.mak	Tue Apr 16 09:44:57 2013 +0200
@@ -1,4 +1,4 @@
-# $Header: /cvs/stx/stx/libbasic3/bc.mak,v 1.114 2013-01-18 13:02:58 cg Exp $
+# $Header: /cvs/stx/stx/libbasic3/bc.mak,v 1.115 2013-04-02 19:24:08 cg Exp $
 #
 # DO NOT EDIT
 # automagically generated from the projectDefinition: stx_libbasic3.
@@ -37,7 +37,7 @@
 
 
 
-LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic2
+LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\libbasic
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES) $(COMMONSYMBOLS) -varPrefix=$(LIBNAME)
@@ -61,6 +61,10 @@
 
 
 
+clean::
+	del *.$(CSUFFIX)
+
+
 test: $(TOP)\goodies\builder\reports\NUL
 	pushd $(TOP)\goodies\builder\reports & $(MAKE_BAT)
 	$(TOP)\goodies\builder\reports\report-runner.bat -D . -r Builder::TestReport -p $(PACKAGE)
--- a/libInit.cc	Thu Apr 11 14:36:03 2013 +0200
+++ b/libInit.cc	Tue Apr 16 09:44:57 2013 +0200
@@ -1,5 +1,5 @@
 /*
- * $Header$
+ * $Header: /cvs/stx/stx/libbasic3/libInit.cc,v 1.101 2013-04-02 19:24:20 cg Exp $
  *
  * DO NOT EDIT
  * automagically generated from the projectDefinition: stx_libbasic3.
--- a/libbasic3.rc	Thu Apr 11 14:36:03 2013 +0200
+++ b/libbasic3.rc	Tue Apr 16 09:44:57 2013 +0200
@@ -3,8 +3,8 @@
 // automagically generated from the projectDefinition: stx_libbasic3.
 //
 VS_VERSION_INFO VERSIONINFO
-  FILEVERSION     6,2,1,75
-  PRODUCTVERSION  6,2,2,0
+  FILEVERSION     6,2,1,78
+  PRODUCTVERSION  6,2,3,0
 #if (__BORLANDC__)
   FILEFLAGSMASK   VS_FF_DEBUG | VS_FF_PRERELEASE
   FILEFLAGS       VS_FF_PRERELEASE | VS_FF_SPECIALBUILD
@@ -20,12 +20,12 @@
     BEGIN
       VALUE "CompanyName", "eXept Software AG\0"
       VALUE "FileDescription", "Smalltalk/X Additional Developer Basic Classes (LIB)\0"
-      VALUE "FileVersion", "6.2.1.75\0"
+      VALUE "FileVersion", "6.2.1.78\0"
       VALUE "InternalName", "stx:libbasic3\0"
       VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2012\nCopyright eXept Software AG 1998-2012\0"
       VALUE "ProductName", "Smalltalk/X\0"
-      VALUE "ProductVersion", "6.2.2.0\0"
-      VALUE "ProductDate", "Fri, 18 Jan 2013 13:02:52 GMT\0"
+      VALUE "ProductVersion", "6.2.3.0\0"
+      VALUE "ProductDate", "Tue, 02 Apr 2013 19:24:00 GMT\0"
     END
 
   END
--- a/mingwmake.bat	Thu Apr 11 14:36:03 2013 +0200
+++ b/mingwmake.bat	Tue Apr 16 09:44:57 2013 +0200
@@ -8,3 +8,5 @@
 @call find_mingw.bat
 @popd
 make.exe -N -f bc.mak %USEMINGW_ARG% %*
+
+
--- a/stx_libbasic3.st	Thu Apr 11 14:36:03 2013 +0200
+++ b/stx_libbasic3.st	Tue Apr 16 09:44:57 2013 +0200
@@ -42,7 +42,7 @@
 !
 
 extensionsVersion_SVN
-    ^ '$Id: stx_libbasic3.st,v 1.78 2013-03-13 16:05:14 cg Exp $'
+    ^ '$Id: stx_libbasic3.st,v 1.79 2013-04-02 19:24:22 cg Exp $'
 ! !
 
 
@@ -192,6 +192,7 @@
         SourceCodeManagerUtilitiesForWorkspaceBasedManagers
         (VisualAgeChunkFileSourceWriter autoload)
         (TraitDefinitionChange autoload)
+        (TraitClassTraitDefinitionChange autoload)
     )
 !
 
@@ -275,14 +276,14 @@
 !stx_libbasic3 class methodsFor:'others'!
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/stx_libbasic3.st,v 1.78 2013-03-13 16:05:14 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/stx_libbasic3.st,v 1.79 2013-04-02 19:24:22 cg Exp $'
 ! !
 
 
 !stx_libbasic3 class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/stx_libbasic3.st,v 1.78 2013-03-13 16:05:14 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/stx_libbasic3.st,v 1.79 2013-04-02 19:24:22 cg Exp $'
 !
 
 version_HG