Merge jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Mon, 03 Oct 2016 15:15:56 +0100
branchjv
changeset 17132 17d361c666c2
parent 16869 2ecababdd4c0 (current diff)
parent 16886 ac4a7157be95 (diff)
child 17133 f9f20407fbf9
Merge
AbstractLauncherApplication.st
BrowserView.st
ChangesBrowser.st
Diff.st
InspectorView.st
MemoryUsageView.st
PerforceSourceCodeManagerUtilities.st
SmalltalkCodeGeneratorTool.st
Tools__ChangeList.st
Tools__ClassList.st
Tools__LintRuleList.st
Tools__NewSystemBrowser.st
--- a/AbstractLauncherApplication.st	Wed Sep 28 07:09:57 2016 +0200
+++ b/AbstractLauncherApplication.st	Mon Oct 03 15:15:56 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1997 by eXept Software AG
               All Rights Reserved
@@ -5679,8 +5681,8 @@
 
             list2 list:nil.
 
-            l := Array new.
-            handles := Array new.
+            l := #().
+            handles := #().
 
             (showModules value or:[showBuiltIn value]) ifTrue:[
                 allModules := ObjectMemory binaryModuleInfo asOrderedCollection.
--- a/BrowserView.st	Wed Sep 28 07:09:57 2016 +0200
+++ b/BrowserView.st	Mon Oct 03 15:15:56 2016 +0100
@@ -3897,7 +3897,7 @@
     self doClassMenu:[:currentClass |
         |s|
 
-        s := WriteStream on:(String new).
+        s := WriteStream on:''.
         currentClass class fileOutClassInstVarDefinitionOn:s withNameSpace:true.
         codeView contents:(s contents); modified:false.
         codeModified := false.
--- a/ChangesBrowser.st	Wed Sep 28 07:09:57 2016 +0200
+++ b/ChangesBrowser.st	Mon Oct 03 15:15:56 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1990 by Claus Gittinger
 	      All Rights Reserved
@@ -5181,7 +5183,7 @@
          get a prototype snapshot record (to be independent of
          the actual format ..
         "
-        str := WriteStream on:String new.
+        str := WriteStream on:''.
         Class addChangeRecordForSnapshot:'foo' to:str.
         snapshotProto := str contents.
         snapshotPrefix := snapshotProto copyTo:10.
--- a/Diff.st	Wed Sep 28 07:09:57 2016 +0200
+++ b/Diff.st	Mon Oct 03 15:15:56 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  Copyright (c) 2007-2010 Jan Vrany, SWING Research Group, Czech Technical University in Prague
  Copyright (c) 2009-2010 eXept Software AG
@@ -25,6 +27,8 @@
 "
 "{ Package: 'stx:libtool' }"
 
+"{ NameSpace: Smalltalk }"
+
 Object subclass:#Diff
 	instanceVariableNames:'equivMax heuristic nodiscards xvec yvec fdiag bdiag fdiagoff
 		bdiagoff filevec cost snakeLimit inhibit'
@@ -120,23 +124,23 @@
 
 documentation_czech
     "
-první fáze:
+prvnĂ­ fĂĄze:
 #############################################################################################################################
 first := #('prvni' 'druhy' 'treti' 'treti' 'paty' 'zeleny' 'ruzovy' ).
 second := #('prvni' 'treti' 'zeleny' 'ruzovy' 'treti' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
 ############################################################################################################################
-First a second představujou dvě pole, které chceme porovnávat. Jednotlivé položky v poli si lze představit jako řádky, případně jako slova v řádku.
-Podle toho, co je potřeba porovnávat.
+First a second pøedstavujou dvì pole, které chceme porovnávat. Jednotlivé položky v poli si lze pøedstavit jako øádky, pøípadnì jako slova v øádku.
+Podle toho, co je potøeba porovnåvat.
 
 *****************************************************************************************************************************
 diff := FelDiff new felDiff.
 *****************************************************************************************************************************
-Zde probíhá inicializace defaultníh proměnných. Funguje to jako konstruktor.
+Zde probíhå inicializace defaultníh promÏnných. Funguje to jako konstruktor.
 
 ############################################################################################################################
 diff diff: first b: second
 ############################################################################################################################
-První fáze nutná pro porovnávání polí.  Vzniknou dvě instance tříde filedata uložené do pole. Tyto instance budou obsahovat následující údaje:
+První fáze nutná pro porovnávání polí.  Vzniknou dvì instance tøíde filedata uložené do pole. Tyto instance budou obsahovat následující údaje:
 
 filevec[1].equivs=#(1 2 3 3 4 5 6)
 filevec[1].bufferedLines=7
@@ -146,17 +150,17 @@
 filevec[2].bufferedLines=16
 filevec[2].changedFlag=#()
 
-V zásadě se vytvořila structura Dictionary, která jednotlivé řádky(slova) převedla na čísla. Pole equvs pak představuje číselně slova(řádky).
-čísla, která se nalézají v obou dbou polí equivs značí, že soubory sdílí alespoň nějaké slovo(řádek).
+V zåsadÏ se vytvoøila structura Dictionary, kterå jednotlivÊ øådky(slova) pøevedla na èísla. Pole equvs pak pøedstavuje èíselnÏ slova(øådky).
+èísla, která se nalézají v obou dbou polí equivs znaèí, že soubory sdílí alespoò nìjaké slovo(øádek).
 
 *****************************************************************************************************************************
 change:= diff diff2: true.
 *****************************************************************************************************************************
 
-Zde již dochází k porovnání obou dvou polí s řádky(slovy). Lze si vybrat mezi forwardscriptem a reversescriptem. 
+Zde již dochází k porovnání obou dvou polí s øádky(slovy). Lze si vybrat mezi forwardscriptem a reversescriptem. 
 
 1) metoda discardconfusinglines
-výsledek:
+výsledek:
 filevec[1].undiscardeded=#(1 3 3 5 6 0 0)
 filevec[1].realIndexes=  #(0 2 3 5 6 0 0)
 filevec[1].nondiscardedLines=5
@@ -166,15 +170,15 @@
 filevec[2].realIndexes=  #(0 1 2 3 4 0 0 0 0 0 0 0 0 0 0 0)
 filevec[2].nondiscardedLines=5
 
-Undiscarded- Řádky soubory, které jsou shodné.
-RealIndexes     - indexy řádků v poli(je potřeba přičíst jedna)
-                        - to znamená že index prvního 3->3 pozice v prvním vstupním poli
-                        - index druhého 3->2 pozice v druhém vstupním poli a 3->5 pozice v druhém vstupním poli 
-NondiscardedLines- značí kolik čádků(slov) je shodných v obou polích.
+Undiscarded- Øådky soubory, kterÊ jsou shodnÊ.
+RealIndexes     - indexy øådkÚ v poli(je potøeba pøièíst jedna)
+                        - to znamená že index prvního 3->3 pozice v prvním vstupním poli
+                        - index druhĂŠho 3->2 pozice v druhĂŠm vstupnĂ­m poli a 3->5 pozice v druhĂŠm vstupnĂ­m poli 
+NondiscardedLines- znaèí kolik èådkÚ(slov) je shodných v obou polích.
 
-2)Následuje porovnávání jednotlivých polí a vytvoření výsledku
+2)Nåsleduje porovnåvåní jednotlivých polí a vytvoøení výsledku
 
-3)Výsledek Reverse skript
+3)Výsledek Reverse skript
 
 inserted=12('treti' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa')
 deleted=0
@@ -182,43 +186,43 @@
 line1=4('ruzovy')
 link=next
 
-inserted- kolik znaků bylo vloženo
-deleted - kolik znaků bylo smazáno
-line0 - pořadí znaku za kterým bylo něco vloženo(smazáno) v prvním poli(poslední znak který je shodný v obou polích)
-line1 - pořadí znaku za kterým bylo něco smazáno(vloženo) v prvním poli(poslední znak který je shodný v obou polích)
+inserted- kolik znakù bylo vloženo
+deleted - kolik znakĂš bylo smazĂĄno
+line0 - poøadí znaku za kterým bylo nìco vloženo(smazáno) v prvním poli(poslední znak který je shodný v obou polích)
+line1 - poøadí znaku za kterým bylo nìco smazáno(vloženo) v prvním poli(poslední znak který je shodný v obou polích)
 
-Takže po znaku na pozici 4, je 12 vložených znaků oproti prvnímu 
+Takže po znaku na pozici 4, je 12 vložených znakù oproti prvnímu 
 
-Zbytek pole vypadá takto:
+Zbytek pole vypadĂĄ takto:
 
 first := #('prvni' 'druhy' 'treti' 'treti' 'paty' 'zeleny' 'ruzovy' ).
 second := #('prvni' 'treti' 'zeleny' 'ruzovy').
 
-link není null a tudíž odkazuje na další informace o změnách.
+link není null a tudíž odkazuje na další informace o zmìnách.
 inserted=0
 deleted=2('treti' 'paty')
 line0=3('treti')
 line1=2('treti')
 link=next
 
-zbytek pole vypadá takto:
+zbytek pole vypadĂĄ takto:
 first := #('prvni' 'druhy' 'treti' 'zeleny' 'ruzovy' ).
 second := #('prvni' 'treti' 'zeleny' 'ruzovy').
 
-link není null a tudíž odkazuje na další informace o změnách.
+link není null a tudíž odkazuje na další informace o zmìnách.
 inserted=0
 deleted=1('druhy')
 line0=1('prvni')
 line1=1('prvni')
 link=nil
 
-zbytek pole vypadá takto:
+zbytek pole vypadĂĄ takto:
 first :=  #('prvni' 'treti' 'zeleny' 'ruzovy' ).
 second := #('prvni' 'treti' 'zeleny' 'ruzovy').
 
-link je nil. Neexistuje žádná změna a tato pole jsou shodná.
+link je nil. Neexistuje žádná zmìna a tato pole jsou shodná.
 
-4)Výsledek Forward skript
+4)Výsledek Forward skript
 
 inserted=0
 deleted=1('druhy')
@@ -226,22 +230,22 @@
 line1=1('prvni')
 link=next
 
-zbytek pole vypadá takto:
+zbytek pole vypadĂĄ takto:
 first :=  #('prvni' 'treti' 'treti' 'paty' 'zeleny' 'ruzovy' ).
 second := #('prvni' 'treti' 'zeleny' 'ruzovy' 'treti' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
 
-link není nil jdeme na odkaz:
+link nenĂ­ nil jdeme na odkaz:
 inserted=0
 deleted=2('treti' 'paty')
 line0=3('treti')
 line1=2('treti')
 link=next
 
-zbytek pole vypadá takto:
+zbytek pole vypadĂĄ takto:
 first :=  #('prvni' 'treti' 'zeleny' 'ruzovy' ).
 second := #('prvni' 'treti' 'zeleny' 'ruzovy' 'treti' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
 
-link není nil jdeme na odkaz:
+link nenĂ­ nil jdeme na odkaz:
 
 inserted=12('treti' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa')
 deleted=0
@@ -249,7 +253,7 @@
 line1=4('ruzovy')
 link=nil
 
-zbytek pole vypadá takto:
+zbytek pole vypadĂĄ takto:
 first :=  #('prvni' 'treti' 'zeleny' 'ruzovy' ).
 second := #('prvni' 'treti' 'zeleny' 'ruzovy').
 
@@ -384,10 +388,10 @@
     equivMax := 1.
     heuristic := false.
     nodiscards := false.
-    xvec := Array new.
-    yvec := Array new.
-    fdiag := Array new.
-    bdiag := Array new.
+    xvec := #().
+    yvec := #().
+    fdiag := #().
+    bdiag := #().
     filevec := Array new:2.
     snakeLimit := 20.
     inhibit := false.
@@ -914,11 +918,11 @@
 
 fileData
 "konstruktor"
-    equivs := Array new.
-    undiscarded := Array new.
-    realindexes := Array new.
+    equivs := #().
+    undiscarded := #().
+    realindexes := #().
     nondiscardedLines := 0.
-    changedFlag := Array new.
+    changedFlag := #().
 !
 
 fileData: data hashTable: h felDiff:fellDiffClass
@@ -1242,7 +1246,7 @@
 !Diff class methodsFor:'documentation'!
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Diff.st,v 1.4 2013-04-19 09:39:05 cg Exp $'
+    ^ '$Header$'
 !
 
 version_HG
@@ -1251,6 +1255,6 @@
 !
 
 version_SVN
-    ^ '§Id: Diff.st 7567 2010-04-17 10:59:53Z vranyj1 §'
+    ^ '$Id$'
 ! !
 
--- a/InspectorView.st	Wed Sep 28 07:09:57 2016 +0200
+++ b/InspectorView.st	Mon Oct 03 15:15:56 2016 +0100
@@ -23,7 +23,7 @@
 		holderChangeInterest sortOrderHolder'
 	classVariableNames:'DefaultIcon DefaultIntegerDisplayRadix ExpandArraysInAllLists
 		IdDictionary LastExtent NextSequentialID SortOrderAlphabetical
-		SortOrderInstvarOrder'
+		SortOrderInstvarOrder DefaultHideMessages DefaultHideHashes'
 	poolDictionaries:''
 	category:'Interface-Inspector'
 !
@@ -310,6 +310,22 @@
     "Modified: / 7.9.1998 / 14:15:38 / cg"
 !
 
+defaultHideHashes
+    ^ DefaultHideHashes? true
+!
+
+defaultHideHashes:aBoolean
+    DefaultHideHashes := aBoolean
+!
+
+defaultHideMessages
+    ^ DefaultHideMessages ? true
+!
+
+defaultHideMessages:aBoolean
+    DefaultHideMessages := aBoolean
+!
+
 defaultIcon
     "return the browsers default window icon"
 
@@ -1702,7 +1718,9 @@
     super initialize.
 
     displayStringMessage := #displayString.
-    hideReceiver := hideMessages := hideHashes := false.
+    hideReceiver := false.
+    hideHashes := self class defaultHideHashes.
+    hideMessages := self class defaultHideMessages.
     integerDisplayRadix := (DefaultIntegerDisplayRadix ? 10).
     sortOrder := SortOrderInstvarOrder.
     sortOrderHolder := sortOrder asValue.
--- a/MemoryUsageView.st	Wed Sep 28 07:09:57 2016 +0200
+++ b/MemoryUsageView.st	Mon Oct 03 15:15:56 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1992 by Claus Gittinger
 	      All Rights Reserved
@@ -422,7 +424,7 @@
                 "
                  put a describing string into the dictionary
                 "
-                s := WriteStream on:String new.    
+                s := WriteStream on:''.    
                 s nextPutAll:'references in: '.
                 set do:[:name | 
                      name isString ifTrue:[
--- a/PerforceSourceCodeManagerUtilities.st	Wed Sep 28 07:09:57 2016 +0200
+++ b/PerforceSourceCodeManagerUtilities.st	Mon Oct 03 15:15:56 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 2006 by eXept Software AG
               All Rights Reserved
@@ -2481,111 +2483,111 @@
       localRevision resultSource definitionClass descriptionInfo resolveFiles depotPath localPath checkInDefinition fileStatDict|
 
     self temporaryWorkSpace isNil ifTrue:[
-	self perforceError raiseErrorString:('Error getting temporary workspace when try to merge or resolve conflicts for ', aNumber printString, '.').
-	^false.
+        self perforceError raiseErrorString:('Error getting temporary workspace when try to merge or resolve conflicts for ', aNumber printString, '.').
+        ^false.
     ].
     descriptionInfo := (self getChangeDespriptionInfoFor:aNumber printString).
     descriptionInfo isNil ifTrue:[
-	^false.
+        ^false.
     ].
     resolveFiles := descriptionInfo at:#Files ifAbsent:nil.
     resolveFiles isNil ifTrue:[
-	^false.
+        ^false.
     ].
     resolveFiles do:[:aFileLine|
-	depotPath := (aFileLine copyTo:((aFileLine lastIndexOf:$#) - 1 )) withoutTrailingSeparators.
-	localPath := self temporaryWorkSpace getLocalPathForDepotPath:depotPath.
-	fileStatDict := self temporaryWorkSpace getFileStatForPathname:localPath.
-	(fileStatDict includesKey:'unresolved') ifTrue:[
-	    definitionClass := Smalltalk at:(localPath asFilename withoutSuffix baseName asSymbol) ifAbsent:nil.
-	    checkInDefinition := PerforceSourceCodeManager getCheckInDefinitionForClass:definitionClass.
-	    localRevision := checkInDefinition getLocalRevisionNumber.
-	    tmpFilename := localPath asFilename.
-	    perforceCommand := ('resolve -af  "' , tmpFilename pathName, '"').
-	    outputStream := ReadWriteStream on:''.
-	    errorStream := ReadWriteStream on:''.
-	    result := self temporaryWorkSpace executePerforceCommand:perforceCommand inDirectory:self temporaryWorkSpace root
-		inputFrom:nil outputTo:outputStream
-		errorTo:errorStream
-		logHeader:('resolving ', tmpFilename pathName, '.').
-	    result ifFalse:[
-		^ false
-	    ].
-	    "check for conflicts"
-	    changesAsLogged := StringCollection new.
-	    inStream := ReadStream on:(outputStream contents).
-
-	    [inStream atEnd not] whileTrue:[
-		line:= inStream nextLine.
-		line notNil ifTrue:[
-		    (line startsWith:'Diff chunks:') ifTrue:[
-			changesAsLogged add:line.
-			changesDict := Dictionary new.
-			chunksPart := line copyFrom:('Diff chunks:' size + 1).
-			(chunksPart asCollectionOfSubstringsSeparatedBy:$+) do:[:eachElement|
-			    words := eachElement asCollectionOfWords.
-			    changesDict at:words second asSymbol put:words first asNumber.
-			].
-		    ].
-		].
-	    ].
-	    s := WriteStream on:String new.
-	    PerforceSourceCodeManager fileOutSourceCodeOf:definitionClass on:s.
-	    mergedSource := tmpFilename readStream contents asString.
-	    mySource := s contents asString.
-	    resultSource := self askForMergedSource:mergedSource
-		    localSource:mySource
-		    changesDict:changesDict
-		    haveRevision:(fileStatDict at:'haveRev' ifAbsent:nil)
-		    changesAsLogged:changesAsLogged
-		    pathName:tmpFilename pathName
-		    definitionClass:definitionClass.
-	    resultSource isNil ifTrue:[
-		^false.
-	    ].
-	    "now we have a merge - lets get latest revision and write on it "
-	    perforceCommand := ('revert "' , tmpFilename pathName, '"').
-	    outputStream := ReadWriteStream on:''.
-	    errorStream := ReadWriteStream on:''.
-	    result := self temporaryWorkSpace executePerforceCommand:perforceCommand inDirectory:self temporaryWorkSpace root
-		inputFrom:nil outputTo:outputStream
-		errorTo:errorStream
-		logHeader:('revert after resolving ', tmpFilename pathName, '.').
-	    result ifFalse:[
-		^ false
-	    ].
-
-	    tmpFilename remove.
-
-	    perforceCommand := ('sync -f "' , tmpFilename pathName, '"').
-	    outputStream := ReadWriteStream on:''.
-	    errorStream := ReadWriteStream on:''.
-	    result := self temporaryWorkSpace executePerforceCommand:perforceCommand inDirectory:self temporaryWorkSpace root
-		inputFrom:nil outputTo:outputStream
-		errorTo:errorStream
-		logHeader:('sync after resolving ', tmpFilename pathName, '.').
-	    result ifFalse:[
-		^ false
-	    ].
-
-	    perforceCommand := ('edit -c ', aNumber printString, ' "' , tmpFilename pathName, '"').
-	    outputStream := ReadWriteStream on:''.
-	    errorStream := ReadWriteStream on:''.
-	    result := self temporaryWorkSpace executePerforceCommand:perforceCommand inDirectory:self temporaryWorkSpace root
-		inputFrom:nil outputTo:outputStream
-		errorTo:errorStream
-		logHeader:('edit after resolving ', tmpFilename pathName, '.').
-	    result ifFalse:[
-		^ false
-	    ].
-
-	    "write my result"
-	    resultSource notNil ifTrue:[
-		s := tmpFilename writeStream.
-		s nextPutAll:resultSource.
-		s close.
-	    ].
-	].
+        depotPath := (aFileLine copyTo:((aFileLine lastIndexOf:$#) - 1 )) withoutTrailingSeparators.
+        localPath := self temporaryWorkSpace getLocalPathForDepotPath:depotPath.
+        fileStatDict := self temporaryWorkSpace getFileStatForPathname:localPath.
+        (fileStatDict includesKey:'unresolved') ifTrue:[
+            definitionClass := Smalltalk at:(localPath asFilename withoutSuffix baseName asSymbol) ifAbsent:nil.
+            checkInDefinition := PerforceSourceCodeManager getCheckInDefinitionForClass:definitionClass.
+            localRevision := checkInDefinition getLocalRevisionNumber.
+            tmpFilename := localPath asFilename.
+            perforceCommand := ('resolve -af  "' , tmpFilename pathName, '"').
+            outputStream := ReadWriteStream on:''.
+            errorStream := ReadWriteStream on:''.
+            result := self temporaryWorkSpace executePerforceCommand:perforceCommand inDirectory:self temporaryWorkSpace root
+                inputFrom:nil outputTo:outputStream
+                errorTo:errorStream
+                logHeader:('resolving ', tmpFilename pathName, '.').
+            result ifFalse:[
+                ^ false
+            ].
+            "check for conflicts"
+            changesAsLogged := StringCollection new.
+            inStream := ReadStream on:(outputStream contents).
+
+            [inStream atEnd not] whileTrue:[
+                line:= inStream nextLine.
+                line notNil ifTrue:[
+                    (line startsWith:'Diff chunks:') ifTrue:[
+                        changesAsLogged add:line.
+                        changesDict := Dictionary new.
+                        chunksPart := line copyFrom:('Diff chunks:' size + 1).
+                        (chunksPart asCollectionOfSubstringsSeparatedBy:$+) do:[:eachElement|
+                            words := eachElement asCollectionOfWords.
+                            changesDict at:words second asSymbol put:words first asNumber.
+                        ].
+                    ].
+                ].
+            ].
+            s := WriteStream on:''.
+            PerforceSourceCodeManager fileOutSourceCodeOf:definitionClass on:s.
+            mergedSource := tmpFilename readStream contents asString.
+            mySource := s contents asString.
+            resultSource := self askForMergedSource:mergedSource
+                    localSource:mySource
+                    changesDict:changesDict
+                    haveRevision:(fileStatDict at:'haveRev' ifAbsent:nil)
+                    changesAsLogged:changesAsLogged
+                    pathName:tmpFilename pathName
+                    definitionClass:definitionClass.
+            resultSource isNil ifTrue:[
+                ^false.
+            ].
+            "now we have a merge - lets get latest revision and write on it "
+            perforceCommand := ('revert "' , tmpFilename pathName, '"').
+            outputStream := ReadWriteStream on:''.
+            errorStream := ReadWriteStream on:''.
+            result := self temporaryWorkSpace executePerforceCommand:perforceCommand inDirectory:self temporaryWorkSpace root
+                inputFrom:nil outputTo:outputStream
+                errorTo:errorStream
+                logHeader:('revert after resolving ', tmpFilename pathName, '.').
+            result ifFalse:[
+                ^ false
+            ].
+
+            tmpFilename remove.
+
+            perforceCommand := ('sync -f "' , tmpFilename pathName, '"').
+            outputStream := ReadWriteStream on:''.
+            errorStream := ReadWriteStream on:''.
+            result := self temporaryWorkSpace executePerforceCommand:perforceCommand inDirectory:self temporaryWorkSpace root
+                inputFrom:nil outputTo:outputStream
+                errorTo:errorStream
+                logHeader:('sync after resolving ', tmpFilename pathName, '.').
+            result ifFalse:[
+                ^ false
+            ].
+
+            perforceCommand := ('edit -c ', aNumber printString, ' "' , tmpFilename pathName, '"').
+            outputStream := ReadWriteStream on:''.
+            errorStream := ReadWriteStream on:''.
+            result := self temporaryWorkSpace executePerforceCommand:perforceCommand inDirectory:self temporaryWorkSpace root
+                inputFrom:nil outputTo:outputStream
+                errorTo:errorStream
+                logHeader:('edit after resolving ', tmpFilename pathName, '.').
+            result ifFalse:[
+                ^ false
+            ].
+
+            "write my result"
+            resultSource notNil ifTrue:[
+                s := tmpFilename writeStream.
+                s nextPutAll:resultSource.
+                s close.
+            ].
+        ].
     ].
     ^true
 !
--- a/SmalltalkCodeGeneratorTool.st	Wed Sep 28 07:09:57 2016 +0200
+++ b/SmalltalkCodeGeneratorTool.st	Mon Oct 03 15:15:56 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 2002 by eXept Software AG
               All Rights Reserved
@@ -501,7 +503,7 @@
                             (val ? maxSoFar) max:maxSoFar
                          ].
 
-    initCode := WriteStream on: String new.
+    initCode := WriteStream on:''.
     initCode nextPutLine:'initialize'.
     runValue := maxValue + 1.
     enumValues keysAndValuesDo:[:idx :eachVariableName |
@@ -796,7 +798,7 @@
 
     poolVars := nonMetaClass classVarNames.
 
-    initCode := WriteStream on: String new.
+    initCode := WriteStream on:''.
     initCode nextPutLine:'initialize'.
 
     poolVars do:[:eachVariableName |
--- a/Tools__ChangeList.st	Wed Sep 28 07:09:57 2016 +0200
+++ b/Tools__ChangeList.st	Mon Oct 03 15:15:56 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 2010 by Jan Vrany, SWING Research Group. CTU in Prague
               All Rights Reserved
@@ -1573,37 +1575,7 @@
 !ChangeList::ListEntry methodsFor:'displaying'!
 
 displayLabel:aLabel h:lH on:aGC x:newX y:y h:h
-    | list cx icon |
-
-    list := self application.
-    cx := x := newX.
-    (list allowRemoveHolder value and:[list showRemovedHolder value]) ifTrue: [
-        (icon := self iconRemoved) notNil ifTrue:[
-            icon displayOn: aGC x: cx y: y + (h / 2) - (icon height / 2)
-        ].
-        cx := cx + 22."experimental value - this looks good"
-    ].
-    (icon := self iconDelta) notNil ifTrue:[
-        icon displayOn: aGC x: cx y: y + (h / 2) - (icon height / 2)
-    ].
-    cx := cx + 16."12 + 2px gap"
-
-    super displayLabel:aLabel h:lH on:aGC x:cx y:y h:h.
-
-"/    "Now, display additional columns..."
-"/    (list showColumn: #timestamp) ifTrue:[
-"/        cx := cx + (aLabel widthOn: aGC) + 5."px - padding"
-"/        colS := change timeOfChangeIfKnown notNil
-"/                    ifTrue:[change timeOfChangeIfKnown printString]
-"/                    ifFalse:['???'].
-"/        [ (colW := colS widthOn: aGC) > (aGC width - cx - 5) ] whileTrue:[
-"/            colS = '...' ifTrue:[ ^ self ].
-"/            colS := '...' , (colS copyFrom: 6).
-"/        ].
-"/        super displayLabel:colS h:lH on:aGC x: (aGC width - 5 - colW) y:y h:h.
-"/    ].
-
-    "Modified: / 27-07-2012 / 17:13:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    self displayLabel:aLabel h:lH on:aGC x:newX y:y h:h isHighlightedAsSelected:false
 !
 
 displayLabel:aLabel h:lH on:aGC x:newX y:y h:h isHighlightedAsSelected:isHighlightedAsSelected
--- a/Tools__ClassList.st	Wed Sep 28 07:09:57 2016 +0200
+++ b/Tools__ClassList.st	Mon Oct 03 15:15:56 2016 +0100
@@ -1329,7 +1329,7 @@
     privateClassesPerClass notEmpty ifTrue:[
         |stream action|
 
-        stream := WriteStream on:(Array new).
+        stream := WriteStream on:#().
 
         action := 
             [:eachClass |
@@ -1455,7 +1455,7 @@
     privateClassesPerClass notEmpty ifTrue:[
         |stream action|
 
-        stream := WriteStream on:(Array new).
+        stream := WriteStream on:#().
 
         action := [:eachClass |
                 |bucket|
@@ -1499,91 +1499,84 @@
 nameListForClasses:aClassList
     |orgMode namespaces showNamespaces fullNameList nameList
      filteredPackages filteredNameSpaces classesInRemoteChangeSet
-     classNamesInChangeSet classNamesInRemoteChangeSet javaClassCountsByBame  |
+     classNamesInChangeSet classNamesInRemoteChangeSet javaClassCountsByBname|
 
     showNamespaces := false.
+    filteredNameSpaces := nameSpaceFilter value.
+    orgMode := organizerMode value.
 
-    filteredNameSpaces := nameSpaceFilter value.
     (filteredNameSpaces isNil 
-    and:[self organizerMode value ~~ OrganizerCanvas organizerModeNamespace]) ifTrue:[
+     and:[orgMode ~~ OrganizerCanvas organizerModeNamespace]) ifTrue:[
         showNamespaces := true.       "/ if no filter, always show the namespace.
     ] ifFalse:[
-        (filteredNameSpaces size > 1 
-        or:[(filteredNameSpaces size > 0)
-            and:[filteredNameSpaces includes:(self class nameListEntryForALL)]]) ifTrue:[
+        (filteredNameSpaces size ~~ 0 
+         and:[(filteredNameSpaces size > 1)
+              or:[filteredNameSpaces includes:(self class nameListEntryForALL)]]) ifTrue:[
             showNamespaces := true
         ] ifFalse:[
             "/ if there are classes from multiple namespaces,
             "/ show the full name
-
             namespaces := IdentitySet new.
             fullNameList := OrderedCollection new.
 
-            aClassList
-                do:[:cls | |nm|
-                    nm := cls nameInBrowser.
-                    fullNameList add:nm.
-                    namespaces add:cls topNameSpace.
-                ].
-            showNamespaces := namespaces size > 1
+            aClassList do:[:eachClass | 
+                namespaces add:eachClass topNameSpace.
+                fullNameList add:eachClass nameInBrowser.
+            ].
+            showNamespaces := namespaces size > 1.
         ].
     ].
 
-    orgMode := organizerMode value.
     filteredPackages := packageFilter value value.
 
     classNamesInChangeSet := ChangeSet current changedClasses
                                 collect:[:each | each theNonMetaclass name].
-
     classesInRemoteChangeSet := SmallTeam isNil ifTrue:[#()] ifFalse:[ SmallTeam changedClasses ].
     classNamesInRemoteChangeSet := classesInRemoteChangeSet collect:[:each | each theNonMetaclass name].
 
-    javaClassCountsByBame := Dictionary new.
-    aClassList do:[:cls |
-        cls isJavaClass ifTrue:[
-            javaClassCountsByBame 
-                at: cls binaryName 
-                put: (javaClassCountsByBame at: cls ifAbsent:[0]) + 1
+    javaClassCountsByBname := Dictionary new.
+    aClassList do:[:eachClass |
+        eachClass isJavaClass ifTrue:[
+            javaClassCountsByBname
+                at:eachClass binaryName 
+                put:(javaClassCountsByBname at:eachClass ifAbsent:[0]) + 1
         ]
     ].
 
     nameList := aClassList 
-                    collect:[:cls | 
+                    collect:[:eachClass | 
+                            |className nm pkg emPkg hasExtensions 
+                             isInChangeSet isInRemoteChangeSet icon clr|
 
-                            |className nm pkg emPkg hasExtensions isInChangeSet isInRemoteChangeSet icon
-                             clr|
-
-                            className := cls theNonMetaclass name.
+                            className := eachClass theNonMetaclass name.
                             isInChangeSet := classNamesInChangeSet includes:className.
-                            "/ Java classes are never in changeset, so check their sourceString (if not nil, they has
-                            "/ been modified/edited. Kludgy...
-                            cls isJavaClass ifTrue:[ 
-                                isInChangeSet := cls sourceString notNil.
-                            ].
-
                             isInRemoteChangeSet := classNamesInRemoteChangeSet includes:className.
 
-                            nm := self nameListEntryFor:cls withNameSpace:showNamespaces.
-                            cls isJavaClass ifTrue:[
-                                (javaClassCountsByBame at: cls binaryName) > 1 ifTrue:[
+                            nm := self nameListEntryFor:eachClass withNameSpace:showNamespaces.
+
+                            eachClass isJavaClass ifTrue:[
+                                 "/ Java classes are never in changeset, so check their sourceString 
+                                 "/ (if not nil, they have been modified/edited. Kludgy...
+                                 isInChangeSet := eachClass sourceString notNil.
+                        
+                                 (javaClassCountsByBname at:eachClass binaryName) > 1 ifTrue:[
                                     | cl clstring |
 
-                                    cl := cls classLoader.
+                                    cl := eachClass classLoader.
                                     "/ Do not mark classes loaded by primordial, ext or system class loader...
                                     (cl notNil 
-                                        and:[JavaVM systemClassLoader isNil 
-                                                or:[cl ~~ JavaVM systemClassLoader 
-                                                        and:[cl ~~ (JavaVM systemClassLoader instVarNamed:#parent)]]]) 
-                                            ifTrue:[
-                                            clstring := ' [', cl displayString , ']'.
-                                            nm := nm , (clstring withColor: Color gray)
-                                    ]
-                                ]
+                                     and:[JavaVM systemClassLoader isNil 
+                                          or:[cl ~~ JavaVM systemClassLoader 
+                                              and:[cl ~~ (JavaVM systemClassLoader instVarNamed:#parent)]]]
+                                    ) ifTrue:[
+                                        clstring := ' [', cl displayString , ']'.
+                                        nm := nm , (clstring withColor:Color gray).
+                                    ].
+                                ].
                             ].
 
-
                             self showCoverageInformation value ifTrue:[
-                                clr := self colorForCoverageInformationOfClass:cls.
+                                clr := self colorForCoverageInformationOfClass:eachClass.
                                 clr notNil ifTrue:[
                                     nm := self colorize:nm with:#color -> clr
                                 ].
@@ -1596,16 +1589,21 @@
                                     nm := (self colorizeForChangedCodeInSmallTeam:'!! '),nm
                                 ].
                             ].
+                            nm isText ifTrue:[
+                                "in some fonts, bold spaces are larger than normal spaces.
+                                 remove emphasis from leading spaces"
+                                nm emphasisFrom:1 to:(nm leftIndent) remove:#bold.
+                            ].
 
-                            pkg := cls package ? '-'.
-                            hasExtensions := cls hasExtensions.
+                            pkg := eachClass package ? '-'.
+                            hasExtensions := eachClass hasExtensions.
                             hasExtensions ifTrue:[
                                 emPkg := self emphasizeForDifferentPackage:'+'. "/ self emphasizeForDifferentPackage:pkg.
                             ].
 
                             orgMode == OrganizerCanvas organizerModeProject ifTrue:[
                                 (filteredPackages notNil
-                                and:[(filteredPackages includes:cls package) not]) ifTrue:[
+                                and:[(filteredPackages includes:eachClass package) not]) ifTrue:[
                                     "/ class is in another packae;
                                     "/ however, class is listed due to methods
                                     "/ in the filtered package
@@ -1644,18 +1642,17 @@
                             isInChangeSet ifTrue:[
                                 nm := nm , self class markForBeingInChangeList
                             ].
-"/                                        cls isVisualStartable ifTrue:[
-"/                                            nm := LabelAndIcon icon:((SystemBrowser visualStartableClassIcon)
-"/                                                                    onDevice:self window device)
-"/                                                               string:nm
-"/                                        ].
-                            markApplicationsHolder value== true ifTrue:[
-                                icon := self iconForClass:cls theNonMetaclass.
+"/                          eachClass isVisualStartable ifTrue:[
+"/                              nm := LabelAndIcon icon:((SystemBrowser visualStartableClassIcon)
+"/                                                      onDevice:self window device)
+"/                                                 string:nm
+"/                          ].
+                            markApplicationsHolder value == true ifTrue:[
+                                icon := self iconForClass:eachClass theNonMetaclass.
                                 icon isNil ifTrue:[
                                     icon := SystemBrowser emptyIcon
                                 ].
                                 nm := LabelAndIcon icon:icon string:nm
-
                             ].
                             nm
                        ].   
@@ -1996,10 +1993,6 @@
         unloadedClassesColor notNil ifTrue:[
             nm := nm withColor:unloadedClassesColor
         ]
-    ].
-
-    aClass isLoaded ifFalse:[
-        "/ nm := nm,(' (?) ' colorizeAllWith:Color grey).
     ] ifTrue:[
         | instMethodCount classMethodCount |   
 
@@ -2008,7 +2001,7 @@
         classMethodCount := aClass class methodsCount.
 
         (instMethodCount notNil or:[ classMethodCount notNil ]) ifTrue:[ 
-            nm := nm,((' (%1+%2) ' bindWith:(instMethodCount ? '?') with:(classMethodCount ? '?')) 
+            nm := nm, ((' (%1+%2) ' bindWith:(instMethodCount ? '?') with:(classMethodCount ? '?')) 
                         withColor:self class pseudoEntryForegroundColor).
         ]
     ].
@@ -2054,8 +2047,7 @@
     "/ full name required if owner is not in the list
     owner := aClass owningClass.
     (owner isNil
-    or:[(self classList value includesIdentical:owner) not]) ifFalse:[
-
+     or:[(self classList value includesIdentical:owner) not]) ifFalse:[
         "/ namespace
         indent := (nm count:[:char | char == $:]) // 2.
         indent > 0 ifTrue:[
@@ -2076,33 +2068,30 @@
     "Modified: / 27-03-2015 / 16:23:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-nameListIndentStringFor:aClass withNameSpace:useFullName
-    | indent indentString cls |
+nameListIndentStringFor:aClass withNameSpace:useFullName 
+    |indent indentString cls|
 
     indent := 0.
     indentString := ''.
     cls := aClass superclass.
-    [self classList value includesIdentical:cls] 
-        whileTrue:
-            [indent := indent + 1.
-            cls := cls superclass].
-
+    [self classList value includesIdentical:cls] whileTrue:[
+        indent := indent + 1.
+        cls := cls superclass
+    ].
     indent == 0 ifFalse:[
         indent <= 5 ifTrue:[
-            indentString := #(
-                         ''
-                         '  '
-                         '    '
-                         '      '
-                         '        '
-                         '          '
-                       ) at:indent+1.
+            indentString := #( 
+                 ''
+                 '  '
+                 '    '
+                 '      '
+                 '        '
+                 '          ' ) at:indent + 1.
         ] ifFalse:[
-            indentString := String new:indent*2 withAll:Character space.
+            indentString := String new:indent * 2 withAll:Character space.
         ].
-
     ].
-    ^indentString
+    ^ indentString
 
     "Modified: / 24-02-2000 / 17:52:28 / cg"
     "Created: / 21-01-2008 / 19:02:07 / janfrog"
--- a/Tools__LintRuleList.st	Wed Sep 28 07:09:57 2016 +0200
+++ b/Tools__LintRuleList.st	Mon Oct 03 15:15:56 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  Copyright (c) 2007-2010 Jan Vrany, SWING Research Group, Czech Technical University in Prague
  Copyright (c) 2009-2010 eXept Software AG
@@ -472,7 +474,9 @@
         ^ Iterator 
             on: [:whatToDo|
                 self listSelection value ? #() do:[:each|
-                    each failedClasses do:whatToDo
+                    "/ classes removed (in the meanwhile), but still referenced by name in the lintResults
+                    "/ may lead to nil being enumerated here...
+                    each failedClasses nonNilElementsDo:whatToDo
                 ]
             ]
     ].
@@ -620,7 +624,16 @@
             ]
         ]
     ].
-    newList sort:[:a :b | a name < b name].
+    newList 
+        sort:[:a :b |
+            |sevA sevB|
+            
+            sevA := a rule severityAsInteger.
+            sevB := b rule severityAsInteger.
+            (sevA > sevB) 
+            or:[ (sevA == sevB) and:[a rule name < b rule name]].
+        ].
+    "/ newList sort:[:a :b | a name < b name].
     self listHolder value:newList.
     self setListValid:true.
 
@@ -784,8 +797,19 @@
 !
 
 label
-
-    ^rule displayString.
+    |s severity|
+    
+    s := rule displayString.
+    (severity := rule severity) == #warning ifTrue:[
+        ^ s withColor:Color orange.
+    ].    
+    severity == #error ifTrue:[
+        ^ s withColor:Color red.
+    ].    
+    severity == #information ifFalse:[
+        self halt.
+    ].    
+    ^ s
 
     "Modified: / 15-04-2010 / 18:44:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -829,29 +853,7 @@
 !LintRuleList::ListEntry methodsFor:'displaying'!
 
 displayLabel:aLabel h:lH on:aGC x:newX y:y h:h 
-    | cx icon app mode |
-
-    cx := x := newX.
-    app := self application.
-    mode := app mode.
-    mode ~~ #display ifTrue:[
-        mode == #select ifTrue:[        
-            icon := self checked 
-                        ifTrue:[app class checkedIcon] 
-                        ifFalse:[app class uncheckedIcon].
-        ] ifFalse:[ 
-            icon := self checked 
-                        ifTrue:[app class checkedIconDisabled] 
-                        ifFalse:[app class uncheckedIconDisabled].
-        ].
-        icon displayOn: aGC x: cx y: y + (h / 2) - (icon height / 2).
-        cx := cx + 22."experimental value - this looks good"
-    ].
-
-    super displayLabel:aLabel h:lH on:aGC x:cx y:y h:h
-
-    "Modified (format): / 07-03-2012 / 20:08:02 / cg"
-    "Modified: / 08-10-2014 / 22:56:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    self displayLabel:aLabel h:lH on:aGC x:newX y:y h:h isHighlightedAsSelected:false
 !
 
 displayLabel:aLabel h:lH on:aGC x:newX y:y h:h isHighlightedAsSelected:isHighlightedAsSelected
--- a/Tools__NewSystemBrowser.st	Wed Sep 28 07:09:57 2016 +0200
+++ b/Tools__NewSystemBrowser.st	Mon Oct 03 15:15:56 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 2000 by eXept Software AG
               All Rights Reserved
@@ -28628,13 +28630,13 @@
     "configure a just created smallLint browser"
     
     |selectedClassesHolder selectedMethodHolder methodGenerator 
-     ruleGenerator prevSelectedClasses prevMeta|
+     ruleGenerator "prevSelectedClasses" "prevMeta"|
 
     selectedClassesHolder := browser selectedClasses.
     selectedMethodHolder := browser selectedMethods.
     
     ruleGenerator :=
-        Iterator on:[:whatToDo|
+        Iterator on:[:whatToDo| 
             result failedRules do:whatToDo
         ].
 
@@ -31363,7 +31365,7 @@
 "/    Cyclomatic complexity.
 "/    Total cyclomatic complexity.
 
-    resultStream := WriteStream on:String new.
+    resultStream := WriteStream on:''.
 
     self
         selectedClassesDo:[:eachClass |
@@ -43179,7 +43181,7 @@
 "/    Cyclomatic complexity.
 "/    Total cyclomatic complexity.
 
-    resultStream := WriteStream on:String new.
+    resultStream := WriteStream on:''.
 
     self
         projectMenuWithAllClassesLoadedDo:[:module :package :classesInProject |
@@ -47113,7 +47115,7 @@
 
         self activityNotification:nil.
         browser := (UserPreferences current changeSetBrowserClass) openOn:previousMethods.
-        browser window label:(resources string:'Revisions of %1  %2' with:mclass name with:mselector).
+        browser window label:(resources string:'Revisions of %1 Âť %2' with:mclass name with:mselector).
         browser readOnly:true.
     ].
 
@@ -48209,7 +48211,8 @@
     (methodSelection contains:[:method | |sel|
                                 sel := method selector.
                                 ((sel startsWith:'has') and:[sel size > 3 and:[ (sel at:4) isUppercase ]])
-                                or:[ ((sel startsWith:'can') and:[sel size > 3 and:[ (sel at:4) isUppercase ]]) ]]) ifTrue:[
+                                or:[ ((sel startsWith:'can') and:[sel size > 3 and:[ (sel at:4) isUppercase ]]) 
+                                or:[ ((sel startsWith:'is') and:[sel size > 2 and:[ (sel at:3) isUppercase ]]) ]]]) ifTrue:[
         someCategories add:'queries'.
         goodCandidates add:'queries'.
     ].
@@ -48217,6 +48220,14 @@
         someCategories add:'enumeration'.
         goodCandidates add:'enumeration'.
     ].
+    (methodSelection contains:[:method | method selector startsWith:'init']) ifTrue:[
+        someCategories add:'initialization'.
+        goodCandidates add:'initialization'.
+    ].
+    (methodSelection contains:[:method | method selector startsWith:'new']) ifTrue:[
+        someCategories add:'instance creation'.
+        goodCandidates add:'instance creation'.
+    ].
 
     goodCandidates size == 1 ifTrue:[
         initialAnswer := goodCandidates anElement
@@ -48263,7 +48274,7 @@
     ].
 
     someCategories := someCategories asOrderedCollection sort.
-
+    
     newCategory := self
                         askForMethodCategory:'Move to which protocol ?'
                         title:'Change MethodCategory'
@@ -51691,7 +51702,7 @@
             label:[:chg | 
                 |lbl|
                 "/ lbl := chg printString
-                lbl := (chg className ? '???') , '  ' , (chg selector  ? '???') allBold.
+                lbl := (chg className ? '???') , ' Âť ' , (chg selector  ? '???') allBold.
                 (chg isMethodChange and:[chg changeMethod isNil]) ifTrue:[
                     lbl := lbl asText allStrikedOut,' ','(removed)' allItalic.
                 ].    
@@ -59053,7 +59064,6 @@
     ^ selectorCompletion
 ! !
 
-
 !NewSystemBrowser methodsFor:'private-semantic checks'!
 
 checkAcceptedMethod:aMethod inClass:aClass