completed - rewriting code generators to replace CustomSourceCodeBuilder, but RBClass, RBMetaclass, RBNamespace and CodeGenerator
authorJakub Nesveda <jakubnesveda@seznam.cz>
Fri, 10 Oct 2014 16:28:37 +0200
changeset 688 6bd18ba5e56c
parent 687 2cd68852d81e
child 689 488503cd3baa
completed - rewriting code generators to replace CustomSourceCodeBuilder, but RBClass, RBMetaclass, RBNamespace and CodeGenerator rename codeBuilder to model ( like in Refactory-Model category ) rename CustomSourceCodeBuilder to CustomNamespace remove CustomSourceCodeBuilder private suclasses move package set to AddClassChange and AddMethodChange
CustomAccessMethodsCodeGenerator.st
CustomClassQueryTests.st
CustomCodeGenerator.st
CustomCodeGeneratorClassGenerator.st
CustomCodeGeneratorOrRefactoring.st
CustomCodeGeneratorOrRefactoringTestCase.st
CustomCodeGeneratorOrRefactoringTestCaseCodeGenerator.st
CustomCodeGeneratorTests.st
CustomCodeSelectionToResourceTranslationTests.st
CustomMockTests.st
CustomMultiSetterMethodsCodeGenerator.st
CustomNamespace.st
CustomNamespaceTests.st
CustomRBAbstractClassTests.st
CustomRBClassTests.st
CustomRBMethodTests.st
CustomReplaceIfNilWithIfTrueRefactoringTests.st
CustomSourceCodeBuilder.st
CustomSourceCodeBuilderTests.st
CustomSubclassResponsibilityCodeGenerator.st
CustomSubclassResponsibilityCodeGeneratorTests.st
CustomTestCaseCodeGenerator.st
CustomTestCaseMethodCodeGenerator.st
CustomTestCaseSetUpCodeGenerator.st
CustomTestCaseTearDownCodeGenerator.st
CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.st
CustomVisitorCodeGenerator.st
CustomVisitorCodeGeneratorTests.st
Make.proto
Make.spec
abbrev.stc
bc.mak
extensions.st
jn_refactoring_custom.st
libInit.cc
patches/Make.proto
patches/bc.mak
patches/extensions.st
patches/jn_refactoring_custom_patches.st
patches/patches.rc
refactoring_custom.rc
--- a/CustomAccessMethodsCodeGenerator.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomAccessMethodsCodeGenerator.st	Fri Oct 10 16:28:37 2014 +0200
@@ -93,7 +93,7 @@
 
             source := self sourceForClass: class variableName: variableName.
 
-            codeBuilder
+            model
                 compile: source 
                 in: (self methodClass: class) 
                 classified: self protocol
--- a/CustomClassQueryTests.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomClassQueryTests.st	Fri Oct 10 16:28:37 2014 +0200
@@ -1,7 +1,7 @@
 "{ Package: 'jn:refactoring_custom' }"
 
 TestCase subclass:#CustomClassQueryTests
-	instanceVariableNames:'classQuery builder mockSuperClass mockClass'
+	instanceVariableNames:'classQuery model mockSuperClass mockClass'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-Refactoring-Custom-Tests'
@@ -12,16 +12,16 @@
 setUp
 
     classQuery := CustomClassQuery new.
-    builder := CustomSourceCodeBuilder new.
-    mockSuperClass := builder createClassImmediate: 'MockSuperClassForTestCase' superClassName: 'Object'.
-    mockClass := builder createClassImmediate: 'MockClassForTestCase' superClassName: (mockSuperClass new className).
+    model := CustomNamespace new.
+    mockSuperClass := model createClassImmediate: 'MockSuperClassForTestCase' superClassName: 'Object'.
+    mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: (mockSuperClass new className).
 
-    "Modified: / 15-06-2014 / 16:15:49 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 09:33:36 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 tearDown
 
-    builder redoChanges
+    model redoChanges
 
     "Modified: / 15-06-2014 / 16:16:06 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
@@ -52,7 +52,7 @@
     self assert: (classQuery methodForSuperclassSelector: 'initialize' class: Object) isNil.
 
     "/ Instance method
-    builder createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
+    model createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
     self shouldImplement'.
 
     method := classQuery methodForSuperclassSelector: #instanceMethod: class: mockClass.
@@ -61,7 +61,7 @@
     self assert: 'instanceMethod:aParam' = method methodDefinitionTemplate.
 
     "/ Class method
-    builder createMethodImmediate: mockSuperClass class protocol: 'class-protocol' source: 'classMethod: aParam
+    model createMethodImmediate: mockSuperClass class protocol: 'class-protocol' source: 'classMethod: aParam
     self shouldImplement'.
 
     method := classQuery methodForSuperclassSelector: 'classMethod:' class: mockClass class.
--- a/CustomCodeGenerator.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomCodeGenerator.st	Fri Oct 10 16:28:37 2014 +0200
@@ -14,7 +14,7 @@
     | codeGenerator nestingCount |
 
     codeGenerator := self new.
-    codeGenerator codeBuilder: aCodeGenerator codeBuilder.
+    codeGenerator model:aCodeGenerator model.
     codeGenerator refactoryBuilder: aCodeGenerator refactoryBuilder.
     codeGenerator userPreferences: aCodeGenerator userPreferences.
     codeGenerator dialog: aCodeGenerator dialog.
--- a/CustomCodeGeneratorClassGenerator.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomCodeGeneratorClassGenerator.st	Fri Oct 10 16:28:37 2014 +0200
@@ -69,7 +69,7 @@
 
     | subContext generator class |
 
-    class := codeBuilder createClass.
+    class := model createClass.
     class
         superclassName: #CustomCodeGenerator;
         name: aClassName asSymbol;
--- a/CustomCodeGeneratorOrRefactoring.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomCodeGeneratorOrRefactoring.st	Fri Oct 10 16:28:37 2014 +0200
@@ -2,7 +2,7 @@
 
 Object subclass:#CustomCodeGeneratorOrRefactoring
 	instanceVariableNames:'compositeChangeCollector compositeChangeNesting userPreferences
-		confirmChanges generateComments dialog changeManager codeBuilder
+		confirmChanges generateComments dialog changeManager model
 		refactoryBuilder formatter'
 	classVariableNames:''
 	poolDictionaries:''
@@ -133,20 +133,6 @@
     "Created: / 31-05-2014 / 13:30:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
-codeBuilder
-
-    ^ codeBuilder
-
-    "Created: / 23-08-2014 / 00:13:43 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-codeBuilder: aBuilder
-
-    codeBuilder := aBuilder
-
-    "Created: / 23-08-2014 / 00:13:26 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
 compositeChangeCollector
 
     ^ compositeChangeCollector
@@ -203,6 +189,20 @@
     "Created: / 19-09-2014 / 22:18:50 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
+model
+    ^model
+
+    "Created: / 23-08-2014 / 00:13:43 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+model: aModel
+
+    model := aModel
+
+    "Created: / 23-08-2014 / 00:13:26 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified (format): / 09-10-2014 / 10:17:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
 refactoryBuilder
 
     ^ refactoryBuilder
@@ -219,7 +219,7 @@
 
 sourceCodeGenerator
 
-    ^ codeBuilder sourceCodeGenerator
+    ^ model sourceCodeGenerator
 
     "Created: / 19-09-2014 / 20:56:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
     "Modified: / 07-10-2014 / 22:47:34 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
@@ -275,15 +275,6 @@
 
 !CustomCodeGeneratorOrRefactoring methodsFor:'code generation'!
 
-addBuilderChanges
-
-    self addChange: codeBuilder changes.
-    self addChange: refactoryBuilder change
-
-    "Created: / 10-04-2014 / 23:26:12 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 21-09-2014 / 23:14:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
 addChange: aCodeChange
 
     aCodeChange notNil ifTrue: [
@@ -292,6 +283,14 @@
 
     "Created: / 23-08-2014 / 15:40:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
     "Modified: / 17-09-2014 / 22:53:48 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+addChanges
+    self addChange:model changes.
+    self addChange:refactoryBuilder change
+
+    "Created: / 10-04-2014 / 23:26:12 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 21-09-2014 / 23:14:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
 !CustomCodeGeneratorOrRefactoring methodsFor:'compilation'!
@@ -362,7 +361,7 @@
     self validateInContext: aCustomContext.
     self buildInContext: aCustomContext.
 
-    self addBuilderChanges.
+    self addChanges.
     self executeCollectedChangesNamed: self class description.
 
     "Created: / 19-03-2014 / 18:45:26 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
@@ -445,7 +444,7 @@
     generateComments := userPreferences generateComments.
 
     self setUpFormatter.
-    self setUpCodeBuilder.
+    self setUpModel.
     self setUpRefactoryBuilder.
     self setUpDialog.
     self setUpChangeManager
@@ -461,14 +460,6 @@
     "Created: / 09-06-2014 / 22:56:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
-setUpCodeBuilder
-
-    codeBuilder := CustomSourceCodeBuilder new.
-
-    "Created: / 09-06-2014 / 22:56:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified (format): / 23-08-2014 / 00:06:15 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
 setUpDialog
 
     dialog := CustomUserDialog new.
@@ -483,6 +474,13 @@
     "Created: / 18-09-2014 / 23:12:42 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
+setUpModel
+    model := CustomNamespace new.
+
+    "Created: / 09-06-2014 / 22:56:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 09:34:30 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
 setUpRefactoryBuilder
 
     refactoryBuilder := CustomRefactoryBuilder new.
--- a/CustomCodeGeneratorOrRefactoringTestCase.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomCodeGeneratorOrRefactoringTestCase.st	Fri Oct 10 16:28:37 2014 +0200
@@ -1,8 +1,8 @@
 "{ Package: 'jn:refactoring_custom' }"
 
 TestCase subclass:#CustomCodeGeneratorOrRefactoringTestCase
-	instanceVariableNames:'context codeBuilder refactoryBuilder generatorOrRefactoring
-		classes changeManager userPreferences mock testFormatterSettings
+	instanceVariableNames:'context model refactoryBuilder generatorOrRefactoring classes
+		changeManager userPreferences mock testFormatterSettings
 		originalFormatterSettings formatter'
 	classVariableNames:''
 	poolDictionaries:''
@@ -122,17 +122,17 @@
 
     | class |
 
-    class := codeBuilder createClass.
-    class
+    class := model createClass
         name: #DummyClassForGeneratorTestCase;
-        compile.
+        compile;
+        yourself.
 
     classes add: class.
 
     ^ class
 
     "Created: / 29-05-2014 / 23:22:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified (format): / 25-09-2014 / 23:39:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 10:34:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
 !CustomCodeGeneratorOrRefactoringTestCase methodsFor:'context templates'!
@@ -235,19 +235,20 @@
 
 setUpBuilders
 
-    codeBuilder := CustomSourceCodeBuilder new.
-    codeBuilder changeManager: changeManager.
+    model := CustomNamespace new.
+    model changeManager: changeManager.
 
     refactoryBuilder := CustomRefactoryBuilder new.
     refactoryBuilder changeManager: changeManager.
 
     "Created: / 23-08-2014 / 15:57:43 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 09:34:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 setUpGeneratorOrRefactoring: aGeneratorOrRefactoring
 
     aGeneratorOrRefactoring formatter: formatter.
-    aGeneratorOrRefactoring codeBuilder: codeBuilder.
+    aGeneratorOrRefactoring model:model.
     aGeneratorOrRefactoring refactoryBuilder: refactoryBuilder.
     aGeneratorOrRefactoring changeManager: changeManager.
     aGeneratorOrRefactoring userPreferences: userPreferences
@@ -277,7 +278,7 @@
     SpaceAroundLiteralArrayElements := true.
     STXStyleMethodComments := true.
     "
-    codeBuilder formatter: formatter.
+    model formatter: formatter.
     refactoryBuilder formatter: formatter
 
     "Created: / 28-08-2014 / 23:29:34 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
--- a/CustomCodeGeneratorOrRefactoringTestCaseCodeGenerator.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomCodeGeneratorOrRefactoringTestCaseCodeGenerator.st	Fri Oct 10 16:28:37 2014 +0200
@@ -74,7 +74,7 @@
     self executeGeneratorInContext: #classWithInstanceVariable.
     self assertMethodSource: expectedSource atSelector: #instanceVariable'.
 
-    codeBuilder
+    model
         class: aTestClass;
 
         protocol: 'tests';
--- a/CustomCodeGeneratorTests.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomCodeGeneratorTests.st	Fri Oct 10 16:28:37 2014 +0200
@@ -28,7 +28,7 @@
     subGeneratorClass_01 new compileMockMethod: 'buildInContext: aCustomContext
 
         aCustomContext selectedClasses do: [ :class | 
-            codeBuilder createMethod
+            model createMethod
                 class: class;
                 source: ''selector_01 ^ 1'';
                 compile.
@@ -38,7 +38,7 @@
     subGeneratorClass_02 new compileMockMethod: 'buildInContext: aCustomContext
 
         aCustomContext selectedClasses do: [ :class | 
-            codeBuilder createMethod
+            model createMethod
                 class: class;
                 source: ''selector_02 ^ 2'';
                 compile.
@@ -58,6 +58,6 @@
     self assertMethodSource: expectedSource_02 atSelector: #selector_02.
 
     "Created: / 10-07-2014 / 12:11:40 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 08-10-2014 / 18:55:55 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 10-10-2014 / 16:06:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
--- a/CustomCodeSelectionToResourceTranslationTests.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomCodeSelectionToResourceTranslationTests.st	Fri Oct 10 16:28:37 2014 +0200
@@ -22,8 +22,8 @@
     self information: ''Translate this''.
     ^ self.'.
 
-    class := codeBuilder createClassImmediate: 'DummyClassForTestCase01' instanceVariableNames: 'resources'.
-    codeBuilder createMethodImmediate: class source: originalSource.
+    class := model createClassImmediate: 'DummyClassForTestCase01' instanceVariableNames: 'resources'.
+    model createMethodImmediate: class source: originalSource.
 
     codeSelection := CustomSourceCodeSelection new.
     codeSelection
--- a/CustomMockTests.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomMockTests.st	Fri Oct 10 16:28:37 2014 +0200
@@ -1,7 +1,7 @@
 "{ Package: 'jn:refactoring_custom' }"
 
 TestCase subclass:#CustomMockTests
-	instanceVariableNames:'builder mock testCompleted'
+	instanceVariableNames:'model mock testCompleted'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-Refactoring-Custom-Tests'
@@ -12,16 +12,16 @@
 
 setUp
 
-    builder := CustomSourceCodeBuilder new.
+    model := CustomNamespace new.
     mock := CustomMock new.
     testCompleted := false.
 
-    "Modified: / 22-09-2014 / 22:33:30 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 09:34:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 tearDown
 
-    builder redoChanges.
+    model redoChanges.
     mock unmockAll
 
     "Modified: / 11-07-2014 / 13:20:42 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
@@ -43,10 +43,10 @@
     | class mockClass |
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
-        builder createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_01: aParam
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        model createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_01: aParam
         ^ 10'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
         ^ 15'.
 
         self assert: (class aSelector_01: nil) = 10.
@@ -76,10 +76,10 @@
     self skipIf: true description: 'unable to fix'. 
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
-        builder createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_01: aParam
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        model createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_01: aParam
         ^ 10'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
         ^ 15'.
 
         self assert: (class aSelector_01: nil) = 10.
@@ -108,10 +108,10 @@
     | class mockClass |
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
-        builder createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_01: aParam
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        model createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_01: aParam
         ^ 10'.
-        builder createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_02: aParam
+        model createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_02: aParam
 
         (self aSelector_01: aParam) = 10 ifTrue: [ ^ true ].
 
@@ -140,10 +140,10 @@
     | class mockClass |
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
-        builder createMethodImmediate: class theMetaclass protocol: 'p' source: 'aSelector_01: aParam
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        model createMethodImmediate: class theMetaclass protocol: 'p' source: 'aSelector_01: aParam
         ^ 10'.
-        builder createMethodImmediate: class theMetaclass protocol: 'p' source: 'aSelector_02: aParam
+        model createMethodImmediate: class theMetaclass protocol: 'p' source: 'aSelector_02: aParam
 
         (self aSelector_01: aParam) = 10 ifTrue: [ ^ true ].
 
@@ -175,10 +175,10 @@
     self skipIf: true description: 'unable to fix'. 
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
-        builder createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_01: aParam
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        model createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_01: aParam
         ^ 10'.
-        builder createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_02: aParam
+        model createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_02: aParam
 
         (self aSelector_01: aParam) = 10 ifTrue: [ ^ true ].
 
@@ -208,10 +208,10 @@
     | class mockClassInstance |
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
         ^ 10'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
 
         (self aSelector_01: aParam) = 10 ifTrue: [ ^ true ].
 
@@ -241,10 +241,10 @@
     | class mockClassInstance |
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
         ^ 10'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
 
         (self aSelector_01: aParam) = 10 ifTrue: [ ^ true ].
 
@@ -278,8 +278,8 @@
     | class mockClassInstance |
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: arg_01 param_02: arg_02
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: arg_01 param_02: arg_02
         ^ 10'.
 
         self assert: ((class new aSelector_01: 1 param_02: 2) = 10).
@@ -304,8 +304,8 @@
     | class mockClassInstance |
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_01
         ^ 10'.
 
         self assert: (class new aSelector_01 = 10).
@@ -330,8 +330,8 @@
     | class mockClassInstance |
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: arg_01 param_02: arg_02 param_03: arg_03
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: arg_01 param_02: arg_02 param_03: arg_03
         ^ 10'.
 
         self assert: ((class new aSelector_01: 1 param_02: 2 param_03: 3) = 10).
@@ -357,10 +357,10 @@
     | class mockClassInstance |
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
         ^ 10'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
 
         (self aSelector_01: aParam) = 10 ifTrue: [ ^ true ].
 
@@ -393,10 +393,10 @@
     self skipIf: true description: 'unable to fix'.
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
         ^ 10'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
 
         (self aSelector_01: aParam) = 10 ifTrue: [ ^ true ].
 
@@ -429,8 +429,8 @@
     self skipIf: true description: 'unable to fix'.
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_01
         ^ 10'.
 
         self assert: (class new aSelector_01 = 10).
@@ -458,10 +458,10 @@
     self skipIf: true description: 'unable to fix'.
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
         ^ 10'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
 
         (self aSelector_01: aParam) = 10 ifTrue: [ ^ true ].
 
@@ -499,8 +499,8 @@
     self skipIf: true description: 'unable to fix'.
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: arg_01 param_02: arg_02 param_03: arg_03
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: arg_01 param_02: arg_02 param_03: arg_03
         ^ 10'.
 
         self assert: ((class new aSelector_01: 1 param_02: 2 param_03: 3) = 10).
@@ -532,8 +532,8 @@
     self skipIf: true description: 'unable to fix'.
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
-        builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: arg_01 param_02: arg_02
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: arg_01 param_02: arg_02
         ^ 10'.
 
         self assert: ((class new aSelector_01: 1 param_02: 2) = 10).
@@ -559,7 +559,7 @@
     | class mockClassInstance mockCount |
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
 
         mockCount := mock mockCount.  
 
@@ -582,7 +582,7 @@
     | class mockClass mockClassName |
 
     [
-        class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+        class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
 
         mockClass := mock mockClassOf: class.
         mockClassName := mockClass name.
--- a/CustomMultiSetterMethodsCodeGenerator.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomMultiSetterMethodsCodeGenerator.st	Fri Oct 10 16:28:37 2014 +0200
@@ -77,7 +77,7 @@
         assignVariablesCode := assignVariablesCode, variableName asString, ' := ', argumentName, '. '.
     ].
 
-    codeBuilder createMethod
+    model createMethod
         class: aClass;
         protocol: 'accessing';
         source: '`@setterSelector
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CustomNamespace.st	Fri Oct 10 16:28:37 2014 +0200
@@ -0,0 +1,447 @@
+"{ Package: 'jn:refactoring_custom' }"
+
+RBNamespace subclass:#CustomNamespace
+	instanceVariableNames:'changeManager formatter defaultValues defaultReplacements package
+		classModelClass methodModelClass sourceCodeGeneratorClass'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Refactoring-Custom'
+!
+
+
+!CustomNamespace methodsFor:'accessing'!
+
+changeManager
+    ^ changeManager
+!
+
+changeManager:something
+    changeManager := something.
+!
+
+classModelClass
+    "Returns class which represents Class in model in which we make changes (add class, rename class ...)."
+
+    ^ classModelClass
+
+    "Modified (comment): / 09-10-2014 / 11:14:51 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+classModelClass: aClass
+    "see classModelClass"
+
+    classModelClass := aClass.
+
+    "Modified (comment): / 09-10-2014 / 11:15:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+formatter
+    ^ formatter
+
+    "Created: / 28-08-2014 / 23:19:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+formatter: aFormatter
+    formatter := aFormatter
+
+    "Created: / 28-08-2014 / 23:19:26 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+methodModelClass
+    "Returns class which represents Method in model in which we make changes (add method, change method source ...)."
+
+    ^ methodModelClass
+
+    "Modified (comment): / 09-10-2014 / 11:17:09 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+methodModelClass: aClass
+    "see methodModelClass"
+
+    methodModelClass := aClass.
+
+    "Modified (comment): / 09-10-2014 / 11:16:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+sourceCodeGenerator
+    "Returns initialized source code generator"
+    | sourceCodeGenerator |
+
+    sourceCodeGenerator := self sourceCodeGeneratorClass new.
+    sourceCodeGenerator formatter: formatter.
+    ^ sourceCodeGenerator.
+
+    "Created: / 19-09-2014 / 20:56:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 11:35:24 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+sourceCodeGeneratorClass
+    "Returns code generator class which supports search & replace in method source code and formatting"
+
+    ^ sourceCodeGeneratorClass
+
+    "Modified (comment): / 09-10-2014 / 11:34:34 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+sourceCodeGeneratorClass: aClass
+    "see sourceCodeGeneratorClass"
+
+    sourceCodeGeneratorClass := aClass.
+
+    "Modified (comment): / 09-10-2014 / 11:34:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomNamespace methodsFor:'code creation'!
+
+createClass
+    "Much like createMethod, but for class"
+    | class |
+
+    class := self classModelClass new
+        model: self;
+        superclass: (self classNamed: #Object);
+        instanceVariableNames: #();
+        classVariableNames: #();
+        poolDictionaryNames: #();
+        yourself.
+
+    self fillDefaultValuesTo: class.  
+    self storeDefaultClassWhenNoneStored: class.
+
+    ^ class
+
+    "Created: / 09-04-2014 / 21:38:20 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 11:18:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+createClassImmediate: aClassName
+    "Creates class immediately and returns the real class"
+
+    ^ self createClassImmediate: aClassName superClassName: 'Object'
+
+    "Created: / 27-07-2014 / 12:40:55 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+createClassImmediate: aClassName instanceVariableNames: instVarNames
+    "Creates class immediately and returns the real class"
+
+    ^ self 
+        createClassImmediate: aClassName 
+        superClassName: 'Object' 
+        instanceVariableNames: instVarNames 
+        classVariableNames: ''
+
+    "Created: / 23-08-2014 / 22:25:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+createClassImmediate: aClassName superClassName: aSuperClassName
+    "Creates class immediately and returns the real class"
+
+    ^ self 
+        createClassImmediate: aClassName 
+        superClassName: aSuperClassName 
+        instanceVariableNames: '' 
+        classVariableNames: ''
+
+    "Created: / 15-06-2014 / 15:59:21 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 23-08-2014 / 22:18:58 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+createClassImmediate: aClassName superClassName: aSuperClassName instanceVariableNames: instVarNames classVariableNames: classVarNames
+    "Creates class immediately and returns the real class"
+
+    changes addChange: (InteractiveAddClassChange definition:
+        aSuperClassName, ' subclass:#', aClassName, '
+            instanceVariableNames:''', instVarNames, '''
+            classVariableNames:''', classVarNames, '''
+            poolDictionaries:''''
+            category:''''
+    ').
+
+    self execute.
+
+    ^ Smalltalk classNamed: aClassName
+
+    "Created: / 23-08-2014 / 22:18:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 21-09-2014 / 22:39:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+createMethod
+    "
+    Creates, returns method representation
+    so code changes can be created withing this class as one undo change
+    "
+    | method |
+
+    method := self methodModelClass new
+        model: self;
+        sourceCodeGenerator: self sourceCodeGenerator;
+        yourself.
+
+    self fillDefaultValuesTo: method.
+
+    ^ method
+
+    "Created: / 09-04-2014 / 23:54:03 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 11:25:43 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+createMethodImmediate: aClass protocol: aProtocol source: aSource
+    "Much like createClassImmediate:superClassName:, but for method"
+
+    changes addChange: (InteractiveAddMethodChange compile: aSource in: aClass classified: aProtocol).
+
+    self execute
+
+    "Created: / 15-06-2014 / 16:06:00 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 21-09-2014 / 22:43:28 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+createMethodImmediate: aClass source: aSource
+    "Much like createClassImmediate:superClassName:, but for method"
+
+    ^ self createMethodImmediate: aClass protocol: 'protocol' source: aSource
+
+    "Created: / 23-08-2014 / 20:17:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomNamespace methodsFor:'compiling'!
+
+execute
+    "
+    Most likely as compile method, but without undo change
+    in global RefactoryChangeManager
+    (true for CustomLocalChangeManager changeManager implementation)
+    "
+
+    changeManager performChange: changes
+
+    "Created: / 27-04-2014 / 16:30:05 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 21-09-2014 / 22:34:58 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+redoChanges
+    "redo all changes made by execute method"
+
+    changeManager redoChanges
+
+    "Created: / 27-04-2014 / 17:07:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 31-05-2014 / 19:47:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomNamespace methodsFor:'default values'!
+
+category:aString
+
+    self storeDefaultValue: #category: value: aString
+
+    "Created: / 29-04-2014 / 19:51:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+class:aClass
+
+    self storeDefaultValue: #classes: value: (Array with: aClass)
+
+    "Created: / 29-04-2014 / 19:55:50 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 31-08-2014 / 17:01:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+className:something
+
+    self storeDefaultValue: #className: value: something
+
+    "Created: / 29-04-2014 / 19:42:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+classVariableNames:something
+
+    self storeDefaultValue: #classVariableNames: value: something
+
+    "Created: / 29-04-2014 / 19:43:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+classes: aClassCollection
+
+    self storeDefaultValue: #classes: value: aClassCollection
+
+    "Created: / 29-04-2014 / 19:50:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+fillDefaultValuesTo: aCodeElement
+    "Initializes new code element (class, method) and fills default values from this model"
+    | builderClass |
+
+    builderClass := aCodeElement class. 
+
+    defaultValues keysAndValuesDo: [ :selector :value |
+        ((builderClass includesSelector: selector) or: [self isSharedAttribute: selector]) ifTrue: [
+            aCodeElement perform: selector with: value.
+        ]
+    ].
+
+    defaultReplacements keysAndValuesDo: [ :placeholder :code |
+        aCodeElement replace: placeholder with: code 
+    ].
+
+    "Created: / 29-04-2014 / 20:21:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 10:47:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+forgetReplacements
+
+    defaultReplacements removeAll
+
+    "Created: / 29-04-2014 / 20:19:15 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+instanceVariableNames:something
+
+    self storeDefaultValue: #instanceVariableNames: value: something
+
+    "Created: / 29-04-2014 / 19:44:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+isDefaultValueStored: aSelector
+
+    ^ defaultValues includesKey: aSelector
+
+    "Created: / 31-08-2014 / 16:43:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+isMeta:aBoolean
+
+    self storeDefaultValue: #isMeta: value: aBoolean
+
+    "Created: / 29-04-2014 / 19:47:47 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+package:aPackage
+
+    ((self class) == CustomNamespace) ifTrue: [
+        self storeDefaultValue: #package: value: aPackage
+    ] ifFalse: [
+        package := aPackage
+    ]
+
+    "Created: / 30-08-2014 / 18:32:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 09:18:16 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+poolDictionaryNames:something
+
+    self storeDefaultValue: #poolDictionaryNames: value: something
+
+    "Created: / 29-04-2014 / 19:48:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+protocol:aString
+
+    self storeDefaultValue: #protocol: value: aString
+
+    "Created: / 29-04-2014 / 20:01:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+replace: placeholder with: code
+
+    ((self class) == CustomNamespace) ifTrue: [
+        defaultReplacements 
+            at: placeholder 
+            put: code
+    ]
+    ifFalse: [
+        "replacements 
+            at: placeholder
+            put: (self replacementFromCode: code)"
+    ]
+
+    "Created: / 29-04-2014 / 20:02:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 09:18:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+source:aString
+
+    self storeDefaultValue: #source: value: aString
+
+    "Created: / 29-04-2014 / 20:12:20 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+storeDefaultClassWhenNoneStored:aClass
+    "Save class as default class when none class is actually set as default class"
+
+    (self isDefaultValueStored: #classes:) ifFalse: [
+        self storeDefaultValue: #classes: value: (Array with: aClass)
+    ]
+
+    "Created: / 31-08-2014 / 16:23:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+storeDefaultValue: aSelector value: aValue
+
+    ((self class) == CustomNamespace) ifTrue: [
+        defaultValues 
+            at: aSelector 
+            put: aValue    
+    ]
+    ifFalse: [
+        self error: 'Selector ', aSelector, ' has to be overwritten by class: ', self className.
+        "
+        | superclass |
+
+        superclass := self class superclass.
+        superclass superclass isNil ifFalse: [
+            superclass := superclass superclass
+        ].
+
+        (superclass canUnderstand: aSelector) ifTrue: [
+            self assert: (superclass == CustomSourceCodeBuilder) not.
+            self perform: aSelector with: aValue   
+        ]
+        "
+    ]
+
+    "Created: / 28-04-2014 / 19:08:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 09:34:39 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+superclassName:something
+
+    self storeDefaultValue: #superclassName: value: something
+
+    "Created: / 29-04-2014 / 19:49:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomNamespace methodsFor:'initialization'!
+
+initialize
+    "Invoked when a new instance is created."
+
+    super initialize.
+    changeManager := CustomLocalChangeManager new.
+    defaultValues := Dictionary new.
+    defaultReplacements := Dictionary new.
+    formatter := CustomRBLocalSourceCodeFormatter new.
+    classModelClass := RBClass.
+    methodModelClass := RBMethod.
+    sourceCodeGeneratorClass := CustomSourceCodeGenerator.
+
+    "Created: / 09-04-2014 / 23:44:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 11:30:42 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomNamespace methodsFor:'private'!
+
+isSharedAttribute: aSelector
+    "Tells if given selector is shared attribute setter for subclasses"
+
+    ^ (aSelector = #package:)
+
+    "Created: / 30-08-2014 / 21:38:21 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomNamespace class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CustomNamespaceTests.st	Fri Oct 10 16:28:37 2014 +0200
@@ -0,0 +1,904 @@
+"{ Package: 'jn:refactoring_custom' }"
+
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomNamespaceTests
+	instanceVariableNames:'refactoryChangeManager'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Refactoring-Custom-Tests'
+!
+
+
+!CustomNamespaceTests methodsFor:'accessing'!
+
+generatorOrRefactoring
+    ^ nil
+
+    "Modified: / 31-05-2014 / 22:48:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomNamespaceTests methodsFor:'initialization & release'!
+
+setUp
+
+    super setUp.
+    refactoryChangeManager := RefactoryChangeManager instance.
+
+    "Created: / 16-04-2014 / 21:39:50 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 31-05-2014 / 22:45:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomNamespaceTests methodsFor:'private'!
+
+lastUndoChange
+
+    refactoryChangeManager undoableOperations isEmpty ifTrue: [ 
+        ^ nil 
+    ] ifFalse: [
+        ^ refactoryChangeManager undoChange
+    ].
+
+    "Created: / 16-04-2014 / 21:40:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 31-05-2014 / 19:53:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomNamespaceTests methodsFor:'tests'!
+
+test_all_class_var_names
+    | class actualClassVars expectedClassVars |
+
+    class := model createClass
+        name: #MockClassForTestCase;
+        classVariableNames: #('ClassVar1' 'ClassVar2');
+        yourself.
+
+    expectedClassVars := (Object allClassVarNames, (Array with: #ClassVar1 with: #ClassVar2)).
+    actualClassVars := class theNonMetaclass allClassVarNames.
+
+    self assert: expectedClassVars = actualClassVars
+
+    "Created: / 20-06-2014 / 22:35:27 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 10:47:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_chaining_api_create_class_and_method_with_default_class
+    | class |
+
+    self skipIf: true description: 'will be maybe fixed in future'. 
+
+    model
+        name: #MockClassForTestCase;
+        createClass;
+
+        protocol: 'a protocol';
+        source: '`@selector
+            self shouldImplement';
+        replace: '`@selector' with: 'aSelector';
+        createMethod;
+
+        replace: '`@selector' with: 'aSelector2';
+        createMethod.
+
+    model execute.
+
+    class := Smalltalk classNamed: 'MockClassForTestCase'.   
+
+    self assert: (class includesSelector: #aSelector).
+    self assert: (class includesSelector: #aSelector2).
+
+    self assert: (class sourceCodeAt: #aSelector) = 'aSelector
+    self shouldImplement'.
+
+    self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
+    self shouldImplement'.
+
+    "Created: / 30-08-2014 / 23:09:42 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 22:26:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_chaining_api_create_class_and_method_within_given_package
+    | class package method1 method2 |
+
+    self skipIf: true description: 'will be maybe fixed in future'. 
+
+    package := self class package.
+    self assert: package size > 3.
+
+    class := model
+        package: package;  
+        className: 'MockClassForTestCase';
+        createClass.
+
+    model
+        class: class;  
+        protocol: 'a protocol';
+        source: '`@selector
+            self shouldImplement';
+        replace: '`@selector' with: 'aSelector';
+        createMethod;
+
+        replace: '`@selector' with: 'aSelector2';
+        createMethod.
+
+    self assert: (class includesSelector: #aSelector) not.
+    self assert: (class includesSelector: #aSelector2) not.
+
+    model execute.
+
+    class := Smalltalk classNamed: 'MockClassForTestCase'.   
+
+    self assert: (class includesSelector: #aSelector).
+    self assert: (class includesSelector: #aSelector2).
+
+    self assert: (class sourceCodeAt: #aSelector) = 'aSelector
+    self shouldImplement'.
+
+    self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
+    self shouldImplement'.
+
+    self assert: class package equals: package.
+
+    method1 := class compiledMethodAt: #aSelector.
+
+    self assert: method1 package equals: package.
+
+    method2 := class compiledMethodAt: #aSelector2.
+
+    self assert: method2 package equals: package.
+
+    "Created: / 30-08-2014 / 22:21:31 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 22:26:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_chaining_api_create_class_and_method_without_given_package
+    | class package method1 method2 |
+
+    self skipIf: true description: 'will be maybe fixed in future'. 
+
+    package := self class package.
+    self assert: package size > 3.
+
+    class := model
+        className: 'MockClassForTestCase';
+        createClass.
+
+    model
+        class: class;  
+        protocol: 'a protocol';
+        source: '`@selector
+            self shouldImplement';
+        replace: '`@selector' with: 'aSelector';
+        createMethod;
+
+        replace: '`@selector' with: 'aSelector2';
+        createMethod.
+
+    self assert: (class includesSelector: #aSelector) not.
+    self assert: (class includesSelector: #aSelector2) not.
+
+    model execute.
+
+    class := Smalltalk classNamed: 'MockClassForTestCase'.   
+
+    self assert: (class includesSelector: #aSelector).
+    self assert: (class includesSelector: #aSelector2).
+
+    self assert: (class sourceCodeAt: #aSelector) = 'aSelector
+    self shouldImplement'.
+
+    self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
+    self shouldImplement'.
+
+    self deny: class package = package.
+
+    method1 := class compiledMethodAt: #aSelector.
+
+    self deny: method1 package = package.
+
+    method2 := class compiledMethodAt: #aSelector2.
+
+    self deny: method2 package = package.
+
+    "Created: / 30-08-2014 / 23:01:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 22:26:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_chaining_api_create_method
+    | class |
+
+    self skipIf: true description: 'will be maybe fixed in future'. 
+
+    class := self class.
+
+    model
+        class: class;
+        protocol: 'a protocol';
+        source: '`@selector
+    self shouldImplement';
+        replace: '`@selector' with: 'aSelector';
+        createMethod;
+
+        replace: '`@selector' with: 'aSelector2';
+        createMethod.
+
+    self assert: (class includesSelector: #aSelector) not.
+    self assert: (class includesSelector: #aSelector2) not.
+
+    model execute.
+
+    self assert: (class includesSelector: #aSelector).
+    self assert: (class includesSelector: #aSelector2).
+
+    self assert: (class sourceCodeAt: #aSelector) = 'aSelector
+    self shouldImplement'.
+
+    self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
+    self shouldImplement'.
+
+    "Created: / 27-04-2014 / 17:48:30 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 26-08-2014 / 23:39:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 22:26:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_chaining_api_create_method_with_class
+    | class className method |
+
+    self skipIf: true description: 'will be maybe fixed in future'. 
+
+    className := 'TestClassNameForTestCase'.
+
+    class := model
+        className: className;
+        classVariableNames: 'ClassVar1 ClassVar2';
+        instanceVariableNames: 'instVar1 instVar2';
+        poolDictionaryNames: 'dictName';
+        superclassName: 'TestCase';
+        category: 'Some-Category';
+        createClass.
+
+    model 
+        class: class;
+        protocol: 'a protocol';
+        source: '`@selector
+    self shouldImplement';
+        replace: '`@selector' with: 'aSelector';
+        createMethod.
+
+    self assertClassNotExists: className.
+    [ 
+    model execute.
+
+    class := Smalltalk classNamed: className.
+
+    self assert: class new className = className.
+    self assert: class superclass new className = 'TestCase'.
+    self assert: class instanceVariableString = 'instVar1 instVar2'.
+    self assert: class classVariableString = 'ClassVar1 ClassVar2'.
+    self assert: class poolDictionaries = 'dictName'.
+    self assert: class category = 'Some-Category'.
+
+    self assert: (class includesSelector: #aSelector).
+    self assert: (class sourceCodeAt: #aSelector) = 'aSelector
+    self shouldImplement'.
+    method := class compiledMethodAt: #aSelector.  
+    self assert: (method category) = 'a protocol'.
+    ] ensure:[
+        class notNil ifTrue:[ 
+            class removeFromSystem.
+        ].
+    ]
+
+    "Created: / 04-05-2014 / 13:00:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 26-08-2014 / 23:56:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 22:27:27 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_chaining_api_create_method_within_given_package
+    | class package method1 method2 |
+
+    self skipIf: true description: 'will be maybe fixed in future'. 
+
+    package := self class package.
+    self assert: package size > 3.
+
+    class := self class.
+
+    model
+        package: package;  
+        class: class;
+        protocol: 'a protocol';
+        source: '`@selector
+            self shouldImplement';
+        replace: '`@selector' with: 'aSelector';
+        createMethod;
+
+        replace: '`@selector' with: 'aSelector2';
+        createMethod.
+
+    self assert: (class includesSelector: #aSelector) not.
+    self assert: (class includesSelector: #aSelector2) not.
+
+    model execute.
+
+    self assert: (class includesSelector: #aSelector).
+    self assert: (class includesSelector: #aSelector2).
+
+    self assert: (class sourceCodeAt: #aSelector) = 'aSelector
+    self shouldImplement'.
+
+    self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
+    self shouldImplement'.
+
+    method1 := class compiledMethodAt: #aSelector.
+
+    self assert: method1 package equals: package.
+
+    method2 := class compiledMethodAt: #aSelector2.
+
+    self assert: method2 package equals: package.
+
+    "Created: / 30-08-2014 / 21:40:15 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 22:27:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_chaining_api_create_method_without_given_package
+    | class package method1 method2 |
+
+    self skipIf: true description: 'will be maybe fixed in future'. 
+
+    package := self class package.
+    self assert: package size > 3.
+
+    class := self class.
+
+    model
+        class: class;
+        protocol: 'a protocol';
+        source: '`@selector
+            self shouldImplement';
+        replace: '`@selector' with: 'aSelector';
+        createMethod;
+
+        replace: '`@selector' with: 'aSelector2';
+        createMethod.
+
+    self assert: (class includesSelector: #aSelector) not.
+    self assert: (class includesSelector: #aSelector2) not.
+
+    model execute.
+
+    self assert: (class includesSelector: #aSelector).
+    self assert: (class includesSelector: #aSelector2).
+
+    self assert: (class sourceCodeAt: #aSelector) = 'aSelector
+    self shouldImplement'.
+
+    self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
+    self shouldImplement'.
+
+    method1 := class compiledMethodAt: #aSelector.
+
+    self deny: method1 package = package.
+
+    method2 := class compiledMethodAt: #aSelector2.
+
+    self deny: method2 package = package.
+
+    "Created: / 30-08-2014 / 21:42:19 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 22:27:41 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_changes_empty_as_default
+    self assert:model changes size = 0.
+
+    "Created: / 22-07-2014 / 22:52:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 10:54:16 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_class_and_class_method_generated_as_one_undo_change
+    | className class lastUndoChange |
+
+    lastUndoChange := self lastUndoChange.
+
+    className := #MockClassForTestingOneUndoChange.
+
+    self assertClassNotExists: className.
+
+    model := CustomNamespace new.
+    model changeManager: refactoryChangeManager.
+
+    class := model createClass
+        name: className;
+        compile;
+        yourself.  
+
+    self assertClassNotExists: className.
+
+    model createMethod
+        class: class theMetaclass;
+        protocol: 'a protocol';
+        source: 'aSelector
+        ^ nil';
+        compile.
+
+    self assertClassNotExists: className.
+    self assert: lastUndoChange = (self lastUndoChange).
+
+    model execute.
+
+    self assertClassExists: className.
+    self assert: (lastUndoChange = (self lastUndoChange)) not.
+    self assert: ((Smalltalk classNamed: className) class includesSelector: #aSelector).
+    self assert: ((Smalltalk classNamed: className) includesSelector: #aSelector) not.
+
+    refactoryChangeManager undoOperation.
+
+    self assertClassNotExists: className.
+    self assert: lastUndoChange = (self lastUndoChange).
+
+    "Created: / 17-04-2014 / 23:54:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 23:02:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_class_and_instance_method_generated_as_one_undo_change
+    | className class lastUndoChange |
+
+    lastUndoChange := self lastUndoChange.
+
+    className := #MockClassForTestingOneUndoChange.
+
+    self assertClassNotExists: className.
+
+    model := CustomNamespace new.
+    model changeManager: refactoryChangeManager.  
+
+    class := model createClass
+        name: className;
+        compile;
+        yourself.  
+
+    self assertClassNotExists: className.
+
+    model createMethod
+        class: class;
+        protocol: 'a protocol';
+        source: 'aSelector
+        ^ nil';
+        compile.
+
+    self assertClassNotExists: className.
+    self assert: lastUndoChange = (self lastUndoChange).
+
+    model execute.
+
+    self assertClassExists: className.
+    self assert: (lastUndoChange = (self lastUndoChange)) not.
+    self assert: ((Smalltalk classNamed: className) includesSelector: #aSelector).
+
+    refactoryChangeManager undoOperation.
+
+    self assertClassNotExists: className.
+    self assert: lastUndoChange = (self lastUndoChange).
+
+    "Created: / 17-04-2014 / 23:54:05 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 23:04:06 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_comment_in_method_generated
+    | class generatedSource expectedSource |
+
+    class := self class.
+
+    model createMethod
+        class: self class;
+        protocol: 'a protocol';
+        source: 'aSelector
+            "a comment"
+            ^ nil';
+        compile.
+
+    self assert: (class includesSelector: #aSelector) not.
+
+    model execute.
+
+    generatedSource := (class sourceCodeAt: #aSelector).
+    expectedSource := 'aSelector
+    "a comment"
+
+    ^ nil'.
+
+    self assert: (class includesSelector: #aSelector).
+    self assert: (generatedSource includesSubString: '"a comment"').
+    self assertSource: expectedSource sameAs: generatedSource
+
+    "Created: / 27-04-2014 / 15:57:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 26-08-2014 / 23:42:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-10-2014 / 23:06:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_class_immediate
+    | mockClass |
+
+    mockClass := model createClassImmediate: 'MockClassForTestCase'.
+
+    self assert: mockClass new className = 'MockClassForTestCase'.
+    self assert: mockClass superclass new className = 'Object'.
+    self assert: mockClass instanceVariableString = ''.
+    self assert: mockClass classVariableString = ''.
+    self assert: mockClass poolDictionaries = ''.
+    self assert: mockClass category = ''.
+
+    "Created: / 15-06-2014 / 17:27:41 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 27-07-2014 / 12:42:53 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_class_immediate_with_given_super_class_name
+    | mockClass |
+
+    mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
+
+    self assert: mockClass new className = 'MockClassForTestCase'.
+    self assert: mockClass superclass new className = 'Object'.
+    self assert: mockClass instanceVariableString = ''.
+    self assert: mockClass classVariableString = ''.
+    self assert: mockClass poolDictionaries = ''.
+    self assert: mockClass category = ''.
+
+    "Created: / 27-07-2014 / 12:42:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_class_immediate_with_instance_and_class_variables
+    | mockClass |
+
+    mockClass := model
+        createClassImmediate: 'MockClassForTestCase' 
+        superClassName: 'Object'
+        instanceVariableNames: 'instVar'
+        classVariableNames: 'ClassVar'.
+
+    self assert: mockClass new className = 'MockClassForTestCase'.
+    self assert: mockClass superclass new className = 'Object'.
+    self assert: mockClass instanceVariableString = 'instVar'.
+    self assert: mockClass classVariableString = 'ClassVar'.
+    self assert: mockClass poolDictionaries = ''.
+    self assert: mockClass category = ''.
+
+    "Created: / 23-08-2014 / 22:24:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_class_immediate_with_instance_variables
+    | mockClass |
+
+    mockClass := model
+        createClassImmediate: 'MockClassForTestCase' 
+        instanceVariableNames: 'instVar'.
+
+    self assert: mockClass new className = 'MockClassForTestCase'.
+    self assert: mockClass superclass new className = 'Object'.
+    self assert: mockClass instanceVariableString = 'instVar'.
+    self assert: mockClass classVariableString = ''.
+    self assert: mockClass poolDictionaries = ''.
+    self assert: mockClass category = ''.
+
+    "Created: / 23-08-2014 / 22:26:24 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_class_within_given_package
+    | class package |
+
+    package := self class package.
+    self assert: package size > 3.
+
+    model createClass
+        name: #MockClassForTestCase;
+        package: package;
+        compile.
+
+    model execute.
+
+    class := Smalltalk classNamed: 'MockClassForTestCase'.
+
+    self assert: class new className = 'MockClassForTestCase'.
+    self assert: class superclass new className = 'Object'.
+    self assert: class instanceVariableString = ''.
+    self assert: class classVariableString = ''.
+    self assert: class poolDictionaries = ''.
+    self assert: class category = '** As yet undefined **'.
+    self assert: class package = package.
+
+    "Created: / 30-08-2014 / 20:35:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified (format): / 09-10-2014 / 23:23:06 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_class_without_given_package
+    | class package |
+
+    package := self class package.
+    self assert: package size > 3.
+
+    model createClass
+        name: #MockClassForTestCase;
+        compile.
+
+    model execute.
+
+    class := Smalltalk classNamed: 'MockClassForTestCase'.
+
+    self assert: class new className = 'MockClassForTestCase'.
+    self assert: class superclass new className = 'Object'.
+    self assert: class instanceVariableString = ''.
+    self assert: class classVariableString = ''.
+    self assert: class poolDictionaries = ''.
+    self assert: class category = '** As yet undefined **'.
+    self assert: (class package = package) not.
+
+    "Created: / 30-08-2014 / 20:57:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 10-10-2014 / 00:02:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_method_immediate
+    | mockClass expectedSource actualSource |
+
+    expectedSource := 'instanceMethod:aParam
+    ^ self'.
+
+    mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
+    model createMethodImmediate: mockClass protocol: 'a protocol' source: expectedSource.
+
+    actualSource := (mockClass sourceCodeAt: #instanceMethod:).
+
+    self assertSource: expectedSource sameAs: actualSource.
+    self assert: (mockClass compiledMethodAt: #instanceMethod:) category = 'a protocol'
+
+    "Created: / 15-06-2014 / 17:28:36 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 24-06-2014 / 21:59:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_method_immediate_with_preset_protocol
+    | mockClass expectedSource actualSource |
+
+    expectedSource := 'instanceMethod:aParam
+    ^ self'.
+
+    mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
+    model createMethodImmediate: mockClass source: expectedSource.
+
+    actualSource := (mockClass sourceCodeAt: #instanceMethod:).
+
+    self assertSource: expectedSource sameAs: actualSource.
+    self assert: (mockClass compiledMethodAt: #instanceMethod:) category = 'protocol'
+
+    "Created: / 23-08-2014 / 21:48:51 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_method_within_given_package
+    | mockClass package method |
+
+    package := self class package.
+    self assert: package size > 3.
+
+    mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
+    model createMethod
+        class: mockClass;
+        protocol: 'a protocol';
+        package: package;
+        source: 'selector ^ 123';
+        compile.
+
+    model execute.
+
+    method := (mockClass compiledMethodAt: #selector).
+
+    self assert: method package = package
+
+    "Created: / 30-08-2014 / 18:45:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 10-10-2014 / 00:02:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_method_without_given_package
+    | mockClass package method |
+
+    package := self class package.
+    self assert: package size > 3.
+
+    mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
+    model createMethod
+        class: mockClass;
+        protocol: 'a protocol';
+        source: 'selector ^ 123';
+        compile.
+
+    model execute.
+
+    method := (mockClass compiledMethodAt: #selector).
+
+    self assert: (method package = package) not
+
+    "Created: / 30-08-2014 / 18:46:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 10-10-2014 / 15:33:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_empty_class_definition_string
+    | expectedDefinition actualDefinition |
+
+    expectedDefinition := 'Object subclass: #''Unknown Class''
+        instanceVariableNames: ''''
+        classVariableNames: ''''
+        poolDictionaries: ''''
+        category: ''** As yet undefined **'''.
+
+    actualDefinition := model createClass definitionString.                                     
+
+    self assertSource: expectedDefinition sameAs: actualDefinition.
+
+    "Created: / 10-10-2014 / 15:41:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_empty_class_in_changes
+
+    model createClass compile.
+    self assert:(model changes changesSize) = 1.
+
+    "Created: / 22-07-2014 / 22:22:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 10-10-2014 / 15:48:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_method_source_builded
+    | method expectedSource actualSource |
+
+    method := model createMethod
+        source: '`@methodName
+    ^ `variableName';
+        replace: '`@methodName' with: #selector;
+        replace: '`variableName' with: 'aName';
+        yourself.
+
+    expectedSource := 'selector
+    ^ aName'.
+
+    actualSource := method newSource.
+
+    self assertSource: expectedSource sameAs: actualSource
+
+    "Created: / 18-05-2014 / 17:14:13 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 26-08-2014 / 23:40:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-10-2014 / 15:56:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_method_source_builded_with_comment
+    | method buildedSource expectedSource |
+
+    method := model createMethod
+        source: '`@methodName
+
+    `"comment
+
+    ^ `variableName';
+        replace: '`@methodName' with: #selector;
+        replace: '`variableName' with: 'aName';
+        replace: '`"comment' with: '"a comment"';
+        yourself.
+
+    buildedSource := method newSource.
+    expectedSource := 'selector
+    "a comment"
+
+    ^ aName'.
+
+    self assertSource: expectedSource sameAs: buildedSource
+
+    "Created: / 19-05-2014 / 18:57:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 26-08-2014 / 23:55:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-10-2014 / 15:56:32 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_method_source_with_original_formatting
+    | method originalSource actualSource expectedSource |
+
+    originalSource := 'methodName
+
+    `variableName do: [ each | each call ].'.
+
+    expectedSource := 'methodName
+
+    collection do: [ each | each call ].'.
+
+    model formatter: CustomNoneSourceCodeFormatter new.
+    method := model createMethod
+        source: originalSource;
+        replace: '`variableName' with: 'collection';
+        yourself.
+
+    actualSource := method newSource.
+
+    self assertSource: expectedSource sameAs: actualSource.
+
+    "Created: / 22-07-2014 / 23:04:43 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 10-10-2014 / 15:57:21 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_nil_changes_not_in_change_collector
+
+    self should: [ 
+        model createMethod compile.
+    ] raise: Error.
+
+    self assert: model changes changesSize = 0.
+
+    "Created: / 22-07-2014 / 22:16:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 10-10-2014 / 16:00:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_one_method_for_multiple_classes
+    | classCollection classNames |
+
+    self skipIf: true description: 'will be maybe fixed in future'. 
+
+    classCollection := OrderedCollection new.
+    classNames := Array with: 'DummyClassForTestCase1' with: 'DummyClassForTestCase2'.
+
+    classNames do: [ :className |
+        classCollection add: (model className: className; createClass).
+    ].
+
+    model
+        classes: classCollection;
+        protocol: 'a protocol';
+        source: '`@selector
+    self shouldImplement';
+        replace: '`@selector' with: 'aSelector';
+        createMethod.
+
+    model execute.
+
+    classNames do: [ :className |
+        | class method |
+
+        class := Smalltalk classNamed: className.
+        self assert: (class includesSelector: #aSelector).
+        self assert: (class sourceCodeAt: #aSelector) = 'aSelector
+    self shouldImplement'.
+        method := class compiledMethodAt: #aSelector.  
+        self assert: (method category) = 'a protocol'.
+    ].
+
+    "Created: / 02-05-2014 / 23:31:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 26-08-2014 / 23:41:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-10-2014 / 16:02:55 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_redo_changes_for_multiple_executes
+    "Note: Methods createClassImmediate and createMethodImmediate have execute call inside"
+    | mockSuperClassName mockClassName mockSuperClass |
+
+    mockSuperClassName := 'MockSuperClassForTestCase'.
+    mockClassName := 'MockClassForTestCase'.
+
+    mockSuperClass := model createClassImmediate: mockSuperClassName superClassName: 'Object'.
+    model createClassImmediate: mockClassName superClassName: mockSuperClassName.
+
+    "/ Instance method
+    model createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
+    self shouldImplement'.
+
+    "/ Class method
+    model createMethodImmediate: mockSuperClass class protocol: 'class-protocol' source: 'classMethod: aParam
+    self shouldImplement'.
+
+    self assertClassExists: mockSuperClassName.
+    self assertClassExists: mockClassName.
+
+    model redoChanges.
+
+    self assertClassNotExists: mockSuperClassName.
+    self assertClassNotExists: mockClassName.
+
+    "Created: / 15-06-2014 / 16:21:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomNamespaceTests class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/CustomRBAbstractClassTests.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomRBAbstractClassTests.st	Fri Oct 10 16:28:37 2014 +0200
@@ -154,6 +154,94 @@
     "Created: / 04-10-2014 / 23:38:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
+test_compile_method_with_all_filled
+    | method compiledMethod change |
+
+    rbClass compileMockMethod: 'isMeta ^ false'.
+
+    method := RBMethod new
+        source: 'selector_01 ^ `#literal';
+        protocol: 'a test protocol';
+        package: 'some_package';
+        model: model;
+        class: self class;
+        method: (self class compiledMethodAt: #test_compile_method_with_all_filled);
+        sourceCodeGenerator: (CustomSourceCodeGenerator new
+            formatter: CustomNoneSourceCodeFormatter new;
+            yourself);
+        replace: '`#literal' with: '1';
+        selector: #selector_01;
+        yourself.
+
+    change := rbClass compileMethod: method.
+
+    self assert: (rbClass includesSelector: #selector_01).
+
+    self assert: 'a test protocol' = (change protocol).
+    self assert: 'some_package' = (change package).
+    self assert: 'selector_01 ^ 1' = (change source).
+
+    compiledMethod := rbClass compiledMethodAt: #selector_01.
+
+    self assert: 'a test protocol' = (compiledMethod protocol).
+    self assert: 'some_package' = (compiledMethod package).
+    self assert: 'selector_01 ^ 1' = (compiledMethod source).
+
+    "Created: / 10-10-2014 / 12:17:15 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_compile_method_with_real_method
+    | method compiledMethod realMethod change class |
+
+    rbClass compileMockMethod: 'isMeta ^ false'.
+
+    class := mock mockClassOf: Object.
+    class new compileMockMethod: 'selector_01 ^ 1'.
+    realMethod := class compiledMethodAt: #selector_01.  
+
+    method := RBMethod 
+        for: rbClass 
+        fromMethod: realMethod
+        andSelector: #selector_01.
+
+    change := rbClass compileMethod: method.
+
+    self assert: (rbClass includesSelector: #selector_01).
+
+    self assert: (realMethod category) = (change protocol).
+    self assert: (realMethod package) = (change package).
+    self assert: 'selector_01 ^ 1' = (change source).
+
+    compiledMethod := rbClass compiledMethodAt: #selector_01.
+
+    self assert: (realMethod category) = (compiledMethod protocol).
+    self assert: (realMethod package) = (compiledMethod package).
+    self assert: 'selector_01 ^ 1' = (compiledMethod source).
+
+    "Created: / 10-10-2014 / 13:20:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_compile_method_with_source
+    | method change expectedSource actualSource |
+
+    rbClass compileMockMethod: 'isMeta ^ false'.
+
+    method := RBMethod new
+        source: 'selector_01 ^ 1';
+        yourself.
+
+    expectedSource := 'selector_01 ^ 1'.
+    change := rbClass compileMethod: method.
+
+    self assert: expectedSource = (change source).
+
+    actualSource := (rbClass compiledMethodAt: #selector_01) source.
+
+    self assert: expectedSource = actualSource
+
+    "Created: / 10-10-2014 / 11:56:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
 test_method_dictionary_add_and_remove_methods
     | expectedMethodDictionary actualMethodDictionary expectedMethodDictionaryKeys actualMethodDictionaryKeys |
 
@@ -245,6 +333,46 @@
     "Created: / 05-10-2014 / 00:13:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
+test_package_custom
+    | expectedPackage actualPackage |
+
+    expectedPackage := 'some_package'.
+    rbClass package: 'some_package'.
+
+    actualPackage := rbClass package.
+
+    self assert: expectedPackage = actualPackage
+
+    "Created: / 09-10-2014 / 23:40:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_package_empty
+    | expectedPackage actualPackage |
+
+    expectedPackage := nil.
+    actualPackage := rbClass package.
+
+    self assert: expectedPackage = actualPackage
+
+    "Created: / 09-10-2014 / 23:39:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_package_from_real_class
+    | expectedPackage actualPackage |
+
+    expectedPackage := self class package.
+
+    self assert: expectedPackage size > 3.
+
+    rbClass realClass: self class.
+
+    actualPackage := rbClass package.
+
+    self assert: expectedPackage = actualPackage
+
+    "Created: / 09-10-2014 / 23:37:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
 test_superclass_name
     | expectedClassName actualClassName |
 
--- a/CustomRBClassTests.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomRBClassTests.st	Fri Oct 10 16:28:37 2014 +0200
@@ -78,6 +78,91 @@
     "Modified: / 05-10-2014 / 12:09:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
+test_compile_for_class_with_set_package
+    | lastChange savedRbClass |
+
+    rbClass
+        name: #SomeClass;
+        superclassName: #Object;
+        instVarNames: #('inst1' 'inst2');
+        classVariableNames: #('Cls1');
+        poolDictionaryNames: (Array with: 'poolDict1');
+        category: 'Some-Test-Category';
+        package: 'some_package';
+        compile.  
+
+    model changes do: [ :change |
+        lastChange := change
+    ].
+    savedRbClass := model classNamed: #SomeClass.
+
+    self assert: (lastChange isKindOf: AddClassChange).  
+    self assert: (lastChange changeClassName) = #SomeClass.  
+    self assert: (lastChange category) = 'Some-Test-Category'.  
+    self assert: (lastChange classVariableNames) = (OrderedCollection newFrom: #('Cls1')).  
+    self assert: (lastChange instanceVariableNames) = (OrderedCollection newFrom: #('inst1' 'inst2')).  
+    self assert: (lastChange poolDictionaryNames) = (OrderedCollection newFrom: #('poolDict1')).  
+    self assert: (lastChange superclassName) = #Object.  
+    self assert: (lastChange package) = 'some_package'.  
+
+    self assert: (savedRbClass isKindOf: RBClass).  
+    self assert: (savedRbClass name) = #SomeClass.  
+    self assert: (savedRbClass category) = 'Some-Test-Category'.  
+    self assert: (savedRbClass classVariableNames) = (OrderedCollection newFrom: #('Cls1')).  
+    self assert: (savedRbClass instanceVariableNames) = (OrderedCollection newFrom: #('inst1' 'inst2')).  
+    self assert: (savedRbClass poolDictionaryNames) = (OrderedCollection newFrom: #('poolDict1')).  
+    self assert: (savedRbClass superclass name) = #Object.
+    self assert: (savedRbClass package) = 'some_package'.
+
+    "Created: / 09-10-2014 / 23:41:34 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_compile_for_real_class_with_set_package
+    | lastChange savedRbClass expectedPackage |
+
+    expectedPackage := self class package deepCopy.
+
+    self assert: expectedPackage size > 0.
+
+    rbClass := RBClass existingNamed: self class name.
+    rbClass
+        model: model;
+        compile.
+
+    model changes do: [ :change |
+        lastChange := change
+    ].
+    savedRbClass := model classNamed: self class name.
+
+    self assert: (lastChange isKindOf: AddClassChange).
+    self assert: (lastChange package) = expectedPackage.  
+
+    self assert: (savedRbClass isKindOf: RBClass).
+    self assert: (savedRbClass package) = expectedPackage.
+
+    "Created: / 09-10-2014 / 23:54:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_real_class_with_set_package
+    | lastChange savedRbClass expectedPackage |
+
+    expectedPackage := self class package deepCopy.
+
+    self assert: expectedPackage size > 0.
+
+    rbClass := RBClass existingNamed: self class name.
+
+    model changes do: [ :change |
+        lastChange := change
+    ].
+    savedRbClass := model classNamed: self class name.
+
+    self assert: (savedRbClass isKindOf: RBClass).
+    self assert: (savedRbClass package) = expectedPackage.
+
+    "Created: / 09-10-2014 / 23:58:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
 test_the_metaclass_for_new_class
     | expectedMetaName actualMetaName |
 
--- a/CustomRBMethodTests.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomRBMethodTests.st	Fri Oct 10 16:28:37 2014 +0200
@@ -143,7 +143,8 @@
     | actualMethod generator class source expectedSource actualSource |
 
     generator := CustomSourceCodeGenerator new
-        formatter: CustomNoneSourceCodeFormatter new.
+        formatter: CustomNoneSourceCodeFormatter new;
+        yourself.
 
     class := RBClass new
         name: #SomeTestClass;
@@ -181,6 +182,39 @@
     self assert: (actualMethod protocol) = (rbMethod protocol)
 
     "Created: / 06-10-2014 / 22:45:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 10-10-2014 / 15:14:51 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_compile_with_custom_package
+    | actualMethod class change |
+
+    class := RBClass new
+        name: #SomeTestClass;
+        model: model;
+        superclassName: #Object;
+        yourself.
+
+    actualMethod := class compiledMethodAt: #selector_01.
+    self assert: actualMethod isNil. 
+
+    change := rbMethod
+        class: class;
+        source: 'selector_01 ^ 12';
+        protocol: 'test protocol';
+        package: 'my_package';
+        compile.
+
+    actualMethod := class compiledMethodAt: #selector_01.
+
+    self assert: (actualMethod source) = (rbMethod source).
+    self assert: (actualMethod protocol) = (rbMethod protocol).
+    self assert: (actualMethod package) = (rbMethod package).
+
+    self assert: (change source) = (rbMethod source).
+    self assert: (change protocol) = (rbMethod protocol).
+    self assert: (change package) = (rbMethod package).
+
+    "Created: / 10-10-2014 / 11:25:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 test_compile_without_code_generator
@@ -210,6 +244,37 @@
     "Modified: / 06-10-2014 / 22:33:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
+test_compile_without_custom_package
+    | actualMethod class change |
+
+    class := RBClass new
+        name: #SomeTestClass;
+        model: model;
+        superclassName: #Object;
+        yourself.
+
+    actualMethod := class compiledMethodAt: #selector_01.
+    self assert: actualMethod isNil. 
+
+    change := rbMethod
+        class: class;
+        source: 'selector_01 ^ 12';
+        protocol: 'test protocol';
+        compile.
+
+    actualMethod := class compiledMethodAt: #selector_01.
+
+    self assert: (actualMethod source) = (rbMethod source).
+    self assert: (actualMethod protocol) = (rbMethod protocol).
+    self assert: (actualMethod package) = (rbMethod package).
+
+    self assert: (change source) = (rbMethod source).
+    self assert: (change protocol) = (rbMethod protocol).
+    self assert: (change package) = (rbMethod package).
+
+    "Created: / 10-10-2014 / 11:51:51 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
 test_compiled_method_empty
     | expectedMethod actualMethod |
 
@@ -335,6 +400,93 @@
     "Created: / 07-10-2014 / 22:24:29 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
+test_new_source_code_generator_with_replacements
+    | expectedSource actualSource |
+
+    expectedSource := 'selector_01 ^ 1'.
+    rbMethod
+        source: 'selector_01 ^ `#literal';
+        sourceCodeGenerator: ( CustomSourceCodeGenerator new
+            formatter: CustomNoneSourceCodeFormatter new;
+            yourself);
+        replace: '`#literal' with: '1'.
+
+    actualSource := rbMethod newSource.
+
+    self assert: expectedSource = actualSource
+
+    "Created: / 10-10-2014 / 15:12:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_new_source_none_code_generator
+    | expectedSource actualSource |
+
+    expectedSource := 'selector_01 ^ 1'.
+    rbMethod source: 'selector_01 ^ 1'.
+
+    actualSource := rbMethod newSource.
+
+    self assert: expectedSource = actualSource
+
+    "Created: / 10-10-2014 / 14:43:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_new_source_some_code_generator
+    | expectedSource actualSource |
+
+    expectedSource := 'selector_01 ^ 1'.
+    rbMethod
+        source: 'selector_01 ^ 1';
+        sourceCodeGenerator: ( CustomSourceCodeGenerator new
+            formatter: CustomNoneSourceCodeFormatter new;
+            yourself).
+
+    actualSource := rbMethod newSource.
+
+    self assert: expectedSource = actualSource
+
+    "Created: / 10-10-2014 / 15:10:16 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_package_custom
+    | expectedPackage actualPackage |
+
+    expectedPackage := 'some_package'.
+
+    rbMethod package: 'some_package'.    
+    actualPackage := rbMethod package. 
+
+    self assert: expectedPackage = actualPackage
+
+    "Created: / 10-10-2014 / 11:20:58 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_package_empty
+    | expectedPackage actualPackage |
+
+    expectedPackage := PackageId noProjectID.
+    actualPackage := rbMethod package. 
+
+    self assert: expectedPackage = actualPackage
+
+    "Created: / 10-10-2014 / 11:16:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_package_from_real_method
+    | expectedPackage actualPackage |
+
+    expectedPackage := self class package.
+
+    self assert: expectedPackage size > 3.
+
+    rbMethod method: (self class compiledMethodAt: #test_package_from_real_method).    
+    actualPackage := rbMethod package. 
+
+    self assert: expectedPackage = actualPackage
+
+    "Created: / 10-10-2014 / 11:16:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
 test_real_method_arg_names_none_arg
     "to check what Method >> methodArgNames returns"
 
--- a/CustomReplaceIfNilWithIfTrueRefactoringTests.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomReplaceIfNilWithIfTrueRefactoringTests.st	Fri Oct 10 16:28:37 2014 +0200
@@ -18,8 +18,8 @@
 test_if_nil_replaced_with_is_nil_if_true
     | expectedSource class method |
 
-    class := codeBuilder createClassImmediate: 'DummyClassForTestCase01'.
-    codeBuilder createMethod
+    class := model createClassImmediate: 'DummyClassForTestCase01'.
+    model createMethod
         class: class;
         protocol: 'protocol';
         source: 'selector: arg
@@ -31,7 +31,7 @@
         compile.
 
     context selectedClasses: (Array with: class).  
-    codeBuilder execute.
+    model execute.
 
     generatorOrRefactoring executeInContext: context.
 
--- a/CustomSourceCodeBuilder.st	Wed Oct 08 19:50:10 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,582 +0,0 @@
-"{ Package: 'jn:refactoring_custom' }"
-
-RBNamespace subclass:#CustomSourceCodeBuilder
-	instanceVariableNames:'codeBuilds changeManager formatter defaultValues
-		defaultReplacements package'
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Interface-Refactoring-Custom'
-!
-
-RBClass subclass:#Class
-	instanceVariableNames:'formatter changeManager'
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CustomSourceCodeBuilder
-!
-
-InteractiveAddClassChange subclass:#ClassChange
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CustomSourceCodeBuilder
-!
-
-RBMethod subclass:#Method
-	instanceVariableNames:'formatter changeManager'
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CustomSourceCodeBuilder
-!
-
-InteractiveAddMethodChange subclass:#MethodChange
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CustomSourceCodeBuilder
-!
-
-
-!CustomSourceCodeBuilder class methodsFor:'instance creation'!
-
-classBuilder
-
-    ^ CustomSourceCodeBuilder::Class new
-
-    "Created: / 31-03-2014 / 18:05:05 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-methodBuilder
-
-    ^ CustomSourceCodeBuilder::Method new
-
-    "Created: / 09-04-2014 / 23:47:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder methodsFor:'accessing'!
-
-changeManager
-    ^ changeManager
-!
-
-changeManager:something
-    changeManager := something.
-!
-
-formatter
-    ^ formatter
-
-    "Created: / 28-08-2014 / 23:19:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-formatter: aFormatter
-    formatter := aFormatter
-
-    "Created: / 28-08-2014 / 23:19:26 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-sourceCodeGenerator
-    "Returns initialized source code generator"
-    | sourceCodeGenerator |
-
-    sourceCodeGenerator := CustomSourceCodeGenerator new.
-    sourceCodeGenerator formatter: formatter.
-    ^ sourceCodeGenerator.
-
-    "Created: / 19-09-2014 / 20:56:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 19-09-2014 / 22:11:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder methodsFor:'code creation'!
-
-createClass
-    "Much like createMethod, but for class"
-    | classBuilder |
-
-    classBuilder := self class classBuilder.
-    classBuilder
-        model: self;
-        superclass: (self classNamed: #Object);
-        instanceVariableNames: #();
-        classVariableNames: #();
-        poolDictionaryNames: #().
-
-    self fillDefaultValuesTo: classBuilder.  
-    self storeDefaultClassWhenNoneStored: classBuilder.
-    ^ classBuilder
-
-    "Created: / 09-04-2014 / 21:38:20 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 25-09-2014 / 23:51:21 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-createClassImmediate: aClassName
-    "Creates class immediately and returns the real class"
-
-    ^ self createClassImmediate: aClassName superClassName: 'Object'
-
-    "Created: / 27-07-2014 / 12:40:55 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-createClassImmediate: aClassName instanceVariableNames: instVarNames
-    "Creates class immediately and returns the real class"
-
-    ^ self 
-        createClassImmediate: aClassName 
-        superClassName: 'Object' 
-        instanceVariableNames: instVarNames 
-        classVariableNames: ''
-
-    "Created: / 23-08-2014 / 22:25:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-createClassImmediate: aClassName superClassName: aSuperClassName
-    "Creates class immediately and returns the real class"
-
-    ^ self 
-        createClassImmediate: aClassName 
-        superClassName: aSuperClassName 
-        instanceVariableNames: '' 
-        classVariableNames: ''
-
-    "Created: / 15-06-2014 / 15:59:21 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 23-08-2014 / 22:18:58 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-createClassImmediate: aClassName superClassName: aSuperClassName instanceVariableNames: instVarNames classVariableNames: classVarNames
-    "Creates class immediately and returns the real class"
-
-    changes addChange: (InteractiveAddClassChange definition:
-        aSuperClassName, ' subclass:#', aClassName, '
-            instanceVariableNames:''', instVarNames, '''
-            classVariableNames:''', classVarNames, '''
-            poolDictionaries:''''
-            category:''''
-    ').
-
-    self execute.
-
-    ^ Smalltalk classNamed: aClassName
-
-    "Created: / 23-08-2014 / 22:18:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 21-09-2014 / 22:39:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-createMethod
-    "
-    Creates, returns method builder with adding it to codeBuils
-    so code changes can be created withing this class at once -
-    see method createChange.
-    "
-    | methodBuilder |
-
-    methodBuilder := self methodBuilder.
-    methodBuilder sourceCodeGenerator: self sourceCodeGenerator.  
-    ^ methodBuilder
-
-    "Created: / 09-04-2014 / 23:54:03 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 07-10-2014 / 22:48:32 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-createMethodImmediate: aClass protocol: aProtocol source: aSource
-    "Much like createClassImmediate:superClassName:, but for method"
-
-    changes addChange: (InteractiveAddMethodChange compile: aSource in: aClass classified: aProtocol).
-
-    self execute
-
-    "Created: / 15-06-2014 / 16:06:00 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 21-09-2014 / 22:43:28 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-createMethodImmediate: aClass source: aSource
-    "Much like createClassImmediate:superClassName:, but for method"
-
-    ^ self createMethodImmediate: aClass protocol: 'protocol' source: aSource
-
-    "Created: / 23-08-2014 / 20:17:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder methodsFor:'compiling'!
-
-execute
-    "
-    Most likely as compile method, but without undo change
-    in global RefactoryChangeManager
-    (true for CustomLocalChangeManager changeManager implementation)
-    "
-
-    changeManager performChange: changes
-
-    "Created: / 27-04-2014 / 16:30:05 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 21-09-2014 / 22:34:58 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-redoChanges
-    "redo all changes made by execute method"
-
-    changeManager redoChanges
-
-    "Created: / 27-04-2014 / 17:07:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 31-05-2014 / 19:47:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder methodsFor:'default values'!
-
-category:aString
-
-    self storeDefaultValue: #category: value: aString
-
-    "Created: / 29-04-2014 / 19:51:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-class:aClass
-
-    self storeDefaultValue: #classes: value: (Array with: aClass)
-
-    "Created: / 29-04-2014 / 19:55:50 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 31-08-2014 / 17:01:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-className:something
-
-    self storeDefaultValue: #className: value: something
-
-    "Created: / 29-04-2014 / 19:42:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-classVariableNames:something
-
-    self storeDefaultValue: #classVariableNames: value: something
-
-    "Created: / 29-04-2014 / 19:43:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-classes: aClassCollection
-
-    self storeDefaultValue: #classes: value: aClassCollection
-
-    "Created: / 29-04-2014 / 19:50:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-fillDefaultValuesTo: aCodeBuilder
-    "Initializes new code builder and fills default values from parent builder"
-    | builderClass |
-
-    aCodeBuilder formatter: formatter.
-    aCodeBuilder changeManager: changeManager.
-
-    builderClass := aCodeBuilder class. 
-
-    defaultValues keysAndValuesDo: [ :selector :value |
-        ((builderClass includesSelector: selector) or: [self isSharedAttribute: selector]) ifTrue: [
-            aCodeBuilder perform: selector with: value.
-        ]
-    ].
-
-    defaultReplacements keysAndValuesDo: [ :placeholder :code |
-        aCodeBuilder replace: placeholder with: code 
-    ].
-
-    "Created: / 29-04-2014 / 20:21:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 30-08-2014 / 23:04:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-forgetReplacements
-
-    defaultReplacements removeAll
-
-    "Created: / 29-04-2014 / 20:19:15 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-instanceVariableNames:something
-
-    self storeDefaultValue: #instanceVariableNames: value: something
-
-    "Created: / 29-04-2014 / 19:44:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-isDefaultValueStored: aSelector
-
-    ^ defaultValues includesKey: aSelector
-
-    "Created: / 31-08-2014 / 16:43:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-isMeta:aBoolean
-
-    self storeDefaultValue: #isMeta: value: aBoolean
-
-    "Created: / 29-04-2014 / 19:47:47 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-package:aPackage
-
-    ((self class) == CustomSourceCodeBuilder) ifTrue: [
-        self storeDefaultValue: #package: value: aPackage
-    ] ifFalse: [
-        package := aPackage
-    ]
-
-    "Created: / 30-08-2014 / 18:32:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 30-08-2014 / 23:04:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-poolDictionaryNames:something
-
-    self storeDefaultValue: #poolDictionaryNames: value: something
-
-    "Created: / 29-04-2014 / 19:48:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-protocol:aString
-
-    self storeDefaultValue: #protocol: value: aString
-
-    "Created: / 29-04-2014 / 20:01:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-replace: placeholder with: code
-
-    ((self class) == CustomSourceCodeBuilder) ifTrue: [
-        defaultReplacements 
-            at: placeholder 
-            put: code
-    ]
-    ifFalse: [
-        "replacements 
-            at: placeholder
-            put: (self replacementFromCode: code)"
-    ]
-
-    "Created: / 29-04-2014 / 20:02:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 29-09-2014 / 23:18:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-source:aString
-
-    self storeDefaultValue: #source: value: aString
-
-    "Created: / 29-04-2014 / 20:12:20 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-storeDefaultClassWhenNoneStored:aClass
-    "Save class as default class when none class is actually set as default class"
-
-    (self isDefaultValueStored: #classes:) ifFalse: [
-        self storeDefaultValue: #classes: value: (Array with: aClass)
-    ]
-
-    "Created: / 31-08-2014 / 16:23:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-storeDefaultValue: aSelector value: aValue
-
-    ((self class) == CustomSourceCodeBuilder) ifTrue: [
-        defaultValues 
-            at: aSelector 
-            put: aValue    
-    ]
-    ifFalse: [
-        self error: 'Selector ', aSelector, ' has to be overwritten by class: ', self className.
-        "
-        | superclass |
-
-        superclass := self class superclass.
-        superclass superclass isNil ifFalse: [
-            superclass := superclass superclass
-        ].
-
-        (superclass canUnderstand: aSelector) ifTrue: [
-            self assert: (superclass == CustomSourceCodeBuilder) not.
-            self perform: aSelector with: aValue   
-        ]
-        "
-    ]
-
-    "Created: / 28-04-2014 / 19:08:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 30-08-2014 / 23:04:50 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-superclassName:something
-
-    self storeDefaultValue: #superclassName: value: something
-
-    "Created: / 29-04-2014 / 19:49:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder methodsFor:'initialization'!
-
-initialize
-    "Invoked when a new instance is created."
-
-    super initialize.
-    changeManager := CustomLocalChangeManager new.
-    defaultValues := Dictionary new.
-    defaultReplacements := Dictionary new.
-    formatter := CustomRBLocalSourceCodeFormatter new.
-
-    "Created: / 09-04-2014 / 23:44:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 24-09-2014 / 20:41:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder methodsFor:'instance creation'!
-
-methodBuilder
-    "Creates and returns method source code builder with default values"
-
-    | methodBuilder |
-
-    methodBuilder := self class methodBuilder.
-    methodBuilder model: self.
-    self fillDefaultValuesTo: methodBuilder.   
-    ^ methodBuilder
-
-    "Created: / 18-05-2014 / 11:41:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 08-10-2014 / 19:14:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder methodsFor:'private'!
-
-createChange
-    "Creates refactory change from builder items - codeBuilds"
-
-    "change := nil.
-    codeBuilds do: [ :builder |
-        | codeChange |
-
-        codeChange := builder change.
-        codeChange notNil ifTrue: [
-            change isNil ifTrue: [ 
-                change := CompositeRefactoryChange new.
-            ].
-
-            change addChange: codeChange    
-        ]
-    ]"
-
-    "Created: / 10-04-2014 / 00:14:39 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 29-09-2014 / 23:19:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-isSharedAttribute: aSelector
-    "Tells if given selector is shared attribute setter for subclasses"
-
-    ^ (aSelector = #package:)
-
-    "Created: / 30-08-2014 / 21:38:21 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder methodsFor:'refactory-changes'!
-
-classChange
-
-    ^ CustomSourceCodeBuilder::ClassChange new
-
-    "Created: / 30-08-2014 / 20:11:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-methodChange
-
-    ^ CustomSourceCodeBuilder::MethodChange new
-
-    "Created: / 30-08-2014 / 18:27:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder::Class methodsFor:'accessing'!
-
-changeManager
-    ^ changeManager
-!
-
-changeManager:something
-    changeManager := something.
-!
-
-formatter
-    ^ formatter
-!
-
-formatter:something
-    formatter := something.
-! !
-
-!CustomSourceCodeBuilder::ClassChange class methodsFor:'documentation'!
-
-documentation
-"
-    Method change (refacotry browser) wrapper to support additional functionality. 
-    For now its just package accesor.
-
-    [author:]
-        Jakub Nesveda <nesvejak@fit.cvut.cz>
-"
-! !
-
-!CustomSourceCodeBuilder::ClassChange methodsFor:'accessing'!
-
-package: aPackage
-
-    package := aPackage
-
-    "Created: / 30-08-2014 / 20:10:41 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder::ClassChange methodsFor:'performing-changes'!
-
-executeNotifying: aBlock
-    "Wrapper for executeNotifying: to set desired package"
-
-    Class packageQuerySignal answer: package do: [
-        ^ super executeNotifying: aBlock
-    ]
-
-    "Created: / 30-08-2014 / 23:00:47 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder::Method methodsFor:'accessing'!
-
-changeManager
-    ^ changeManager
-!
-
-changeManager:something
-    changeManager := something.
-!
-
-formatter
-    ^ formatter
-!
-
-formatter:something
-    formatter := something.
-! !
-
-!CustomSourceCodeBuilder::MethodChange class methodsFor:'documentation'!
-
-documentation
-"
-    Method change (refacotry browser) wrapper to support additional functionality. 
-    For now its just package accesor.
-
-    [author:]
-        Jakub Nesveda <nesvejak@fit.cvut.cz>
-
-"
-! !
-
-!CustomSourceCodeBuilder::MethodChange methodsFor:'accessing'!
-
-package: aPackage
-
-    package := aPackage
-
-    "Created: / 30-08-2014 / 18:24:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder class methodsFor:'documentation'!
-
-version_HG
-
-    ^ '$Changeset: <not expanded> $'
-! !
-
--- a/CustomSourceCodeBuilderTests.st	Wed Oct 08 19:50:10 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,857 +0,0 @@
-"{ Package: 'jn:refactoring_custom' }"
-
-CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomSourceCodeBuilderTests
-	instanceVariableNames:'refactoryChangeManager'
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Interface-Refactoring-Custom-Tests'
-!
-
-
-!CustomSourceCodeBuilderTests methodsFor:'accessing'!
-
-generatorOrRefactoring
-    ^ nil
-
-    "Modified: / 31-05-2014 / 22:48:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilderTests methodsFor:'initialization & release'!
-
-setUp
-
-    super setUp.
-    refactoryChangeManager := RefactoryChangeManager instance.
-
-    "Created: / 16-04-2014 / 21:39:50 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 31-05-2014 / 22:45:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilderTests methodsFor:'private'!
-
-lastUndoChange
-
-    refactoryChangeManager undoableOperations isEmpty ifTrue: [ 
-        ^ nil 
-    ] ifFalse: [
-        ^ refactoryChangeManager undoChange
-    ].
-
-    "Created: / 16-04-2014 / 21:40:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 31-05-2014 / 19:53:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilderTests methodsFor:'tests'!
-
-test_all_class_var_names
-    | class actualClassVars expectedClassVars |
-
-    class := codeBuilder createClass.
-    class
-        className: 'MockClassForTestCase';
-        classVariableNames: 'ClassVar1 ClassVar2'.
-
-    expectedClassVars := (Object allClassVarNames, (Array with: #ClassVar1 with: #ClassVar2)).
-    actualClassVars := class theNonMetaclass allClassVarNames.
-
-    self assert: expectedClassVars = actualClassVars
-
-    "Created: / 20-06-2014 / 22:35:27 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 23-06-2014 / 19:09:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_builder_change_nil_as_default
-
-    self assert: codeBuilder change isNil.
-
-    "Created: / 22-07-2014 / 22:52:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_chaining_api_create_class_and_method_with_default_class
-    | class |
-
-    codeBuilder
-        className: 'MockClassForTestCase';
-        createClass;
-
-        protocol: 'a protocol';
-        source: '`@selector
-            self shouldImplement';
-        replace: '`@selector' with: 'aSelector';
-        createMethod;
-
-        replace: '`@selector' with: 'aSelector2';
-        createMethod.
-
-    codeBuilder execute.
-
-    class := Smalltalk classNamed: 'MockClassForTestCase'.   
-
-    self assert: (class includesSelector: #aSelector).
-    self assert: (class includesSelector: #aSelector2).
-
-    self assert: (class sourceCodeAt: #aSelector) = 'aSelector
-    self shouldImplement'.
-
-    self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
-    self shouldImplement'.
-
-    "Created: / 30-08-2014 / 23:09:42 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 31-08-2014 / 16:53:36 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_chaining_api_create_class_and_method_within_given_package
-    | class package method1 method2 |
-
-    package := self class package.
-    self assert: package size > 3.
-
-    class := codeBuilder
-        package: package;  
-        className: 'MockClassForTestCase';
-        createClass.
-
-    codeBuilder
-        class: class;  
-        protocol: 'a protocol';
-        source: '`@selector
-            self shouldImplement';
-        replace: '`@selector' with: 'aSelector';
-        createMethod;
-
-        replace: '`@selector' with: 'aSelector2';
-        createMethod.
-
-    self assert: (class includesSelector: #aSelector) not.
-    self assert: (class includesSelector: #aSelector2) not.
-
-    codeBuilder execute.
-
-    class := Smalltalk classNamed: 'MockClassForTestCase'.   
-
-    self assert: (class includesSelector: #aSelector).
-    self assert: (class includesSelector: #aSelector2).
-
-    self assert: (class sourceCodeAt: #aSelector) = 'aSelector
-    self shouldImplement'.
-
-    self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
-    self shouldImplement'.
-
-    self assert: class package equals: package.
-
-    method1 := class compiledMethodAt: #aSelector.
-
-    self assert: method1 package equals: package.
-
-    method2 := class compiledMethodAt: #aSelector2.
-
-    self assert: method2 package equals: package.
-
-    "Created: / 30-08-2014 / 22:21:31 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_chaining_api_create_class_and_method_without_given_package
-    | class package method1 method2 |
-
-    package := self class package.
-    self assert: package size > 3.
-
-    class := codeBuilder
-        className: 'MockClassForTestCase';
-        createClass.
-
-    codeBuilder
-        class: class;  
-        protocol: 'a protocol';
-        source: '`@selector
-            self shouldImplement';
-        replace: '`@selector' with: 'aSelector';
-        createMethod;
-
-        replace: '`@selector' with: 'aSelector2';
-        createMethod.
-
-    self assert: (class includesSelector: #aSelector) not.
-    self assert: (class includesSelector: #aSelector2) not.
-
-    codeBuilder execute.
-
-    class := Smalltalk classNamed: 'MockClassForTestCase'.   
-
-    self assert: (class includesSelector: #aSelector).
-    self assert: (class includesSelector: #aSelector2).
-
-    self assert: (class sourceCodeAt: #aSelector) = 'aSelector
-    self shouldImplement'.
-
-    self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
-    self shouldImplement'.
-
-    self deny: class package = package.
-
-    method1 := class compiledMethodAt: #aSelector.
-
-    self deny: method1 package = package.
-
-    method2 := class compiledMethodAt: #aSelector2.
-
-    self deny: method2 package = package.
-
-    "Created: / 30-08-2014 / 23:01:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_chaining_api_create_method
-    | class |
-
-    class := self class.
-
-    codeBuilder
-        class: class;
-        protocol: 'a protocol';
-        source: '`@selector
-    self shouldImplement';
-        replace: '`@selector' with: 'aSelector';
-        createMethod;
-
-        replace: '`@selector' with: 'aSelector2';
-        createMethod.
-
-    self assert: (class includesSelector: #aSelector) not.
-    self assert: (class includesSelector: #aSelector2) not.
-
-    codeBuilder execute.
-
-    self assert: (class includesSelector: #aSelector).
-    self assert: (class includesSelector: #aSelector2).
-
-    self assert: (class sourceCodeAt: #aSelector) = 'aSelector
-    self shouldImplement'.
-
-    self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
-    self shouldImplement'.
-
-    "Created: / 27-04-2014 / 17:48:30 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 28-04-2014 / 09:19:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 26-08-2014 / 23:39:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-test_chaining_api_create_method_with_class
-    | class className method |
-
-    className := 'TestClassNameForTestCase'.
-
-    class := codeBuilder
-        className: className;
-        classVariableNames: 'ClassVar1 ClassVar2';
-        instanceVariableNames: 'instVar1 instVar2';
-        poolDictionaryNames: 'dictName';
-        superclassName: 'TestCase';
-        category: 'Some-Category';
-        createClass.
-
-    codeBuilder 
-        class: class;
-        protocol: 'a protocol';
-        source: '`@selector
-    self shouldImplement';
-        replace: '`@selector' with: 'aSelector';
-        createMethod.
-
-    self assertClassNotExists: className.
-    [ 
-    codeBuilder execute.
-
-    class := Smalltalk classNamed: className.
-
-    self assert: class new className = className.
-    self assert: class superclass new className = 'TestCase'.
-    self assert: class instanceVariableString = 'instVar1 instVar2'.
-    self assert: class classVariableString = 'ClassVar1 ClassVar2'.
-    self assert: class poolDictionaries = 'dictName'.
-    self assert: class category = 'Some-Category'.
-
-    self assert: (class includesSelector: #aSelector).
-    self assert: (class sourceCodeAt: #aSelector) = 'aSelector
-    self shouldImplement'.
-    method := class compiledMethodAt: #aSelector.  
-    self assert: (method category) = 'a protocol'.
-    ] ensure:[
-        class notNil ifTrue:[ 
-            class removeFromSystem.
-        ].
-    ]
-
-    "Created: / 04-05-2014 / 13:00:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 15-06-2014 / 17:16:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 26-08-2014 / 23:56:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-test_chaining_api_create_method_within_given_package
-    | class package method1 method2 |
-
-    package := self class package.
-    self assert: package size > 3.
-
-    class := self class.
-
-    codeBuilder
-        package: package;  
-        class: class;
-        protocol: 'a protocol';
-        source: '`@selector
-            self shouldImplement';
-        replace: '`@selector' with: 'aSelector';
-        createMethod;
-
-        replace: '`@selector' with: 'aSelector2';
-        createMethod.
-
-    self assert: (class includesSelector: #aSelector) not.
-    self assert: (class includesSelector: #aSelector2) not.
-
-    codeBuilder execute.
-
-    self assert: (class includesSelector: #aSelector).
-    self assert: (class includesSelector: #aSelector2).
-
-    self assert: (class sourceCodeAt: #aSelector) = 'aSelector
-    self shouldImplement'.
-
-    self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
-    self shouldImplement'.
-
-    method1 := class compiledMethodAt: #aSelector.
-
-    self assert: method1 package equals: package.
-
-    method2 := class compiledMethodAt: #aSelector2.
-
-    self assert: method2 package equals: package.
-
-    "Created: / 30-08-2014 / 21:40:15 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_chaining_api_create_method_without_given_package
-    | class package method1 method2 |
-
-    package := self class package.
-    self assert: package size > 3.
-
-    class := self class.
-
-    codeBuilder
-        class: class;
-        protocol: 'a protocol';
-        source: '`@selector
-            self shouldImplement';
-        replace: '`@selector' with: 'aSelector';
-        createMethod;
-
-        replace: '`@selector' with: 'aSelector2';
-        createMethod.
-
-    self assert: (class includesSelector: #aSelector) not.
-    self assert: (class includesSelector: #aSelector2) not.
-
-    codeBuilder execute.
-
-    self assert: (class includesSelector: #aSelector).
-    self assert: (class includesSelector: #aSelector2).
-
-    self assert: (class sourceCodeAt: #aSelector) = 'aSelector
-    self shouldImplement'.
-
-    self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
-    self shouldImplement'.
-
-    method1 := class compiledMethodAt: #aSelector.
-
-    self deny: method1 package = package.
-
-    method2 := class compiledMethodAt: #aSelector2.
-
-    self deny: method2 package = package.
-
-    "Created: / 30-08-2014 / 21:42:19 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_class_and_class_method_generated_as_one_undo_change
-    | className class method lastUndoChange |
-
-    lastUndoChange := self lastUndoChange.
-
-    className := 'MockClassForTestingOneUndoChange'.
-
-    self assertClassNotExists: className.
-
-    codeBuilder := CustomSourceCodeBuilder new.
-    class := codeBuilder createClass.
-    class className: className.  
-
-    self assertClassNotExists: className.
-
-    method := codeBuilder createMethod.
-    method 
-        class: class theMetaclass;
-        protocol: 'a protocol';
-        source: 'aSelector
-        ^ nil'.
-
-    self assertClassNotExists: className.
-    self assert: lastUndoChange = (self lastUndoChange).
-
-    codeBuilder compile.
-
-    self assertClassExists: className.
-    self assert: (lastUndoChange = (self lastUndoChange)) not.
-    self assert: ((Smalltalk classNamed: className) class includesSelector: #aSelector).
-    self assert: ((Smalltalk classNamed: className) includesSelector: #aSelector) not.
-
-    refactoryChangeManager undoOperation.
-
-    self assertClassNotExists: className.
-    self assert: lastUndoChange = (self lastUndoChange).
-
-    "Created: / 17-04-2014 / 23:54:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 15-06-2014 / 17:17:53 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_class_and_instance_method_generated_as_one_undo_change
-    | className class method lastUndoChange |
-
-    lastUndoChange := self lastUndoChange.
-
-    className := 'MockClassForTestingOneUndoChange'.
-
-    self assertClassNotExists: className.
-
-    codeBuilder := CustomSourceCodeBuilder new.
-    class := codeBuilder createClass.
-    class className: className.  
-
-    self assertClassNotExists: className.
-
-    method := codeBuilder createMethod.
-    method 
-        class: class;
-        protocol: 'a protocol';
-        source: 'aSelector
-        ^ nil'.
-
-    self assertClassNotExists: className.
-    self assert: lastUndoChange = (self lastUndoChange).
-
-    codeBuilder compile.
-
-    self assertClassExists: className.
-    self assert: (lastUndoChange = (self lastUndoChange)) not.
-    self assert: ((Smalltalk classNamed: className) includesSelector: #aSelector).
-
-    refactoryChangeManager undoOperation.
-
-    self assertClassNotExists: className.
-    self assert: lastUndoChange = (self lastUndoChange).
-
-    "Created: / 17-04-2014 / 23:54:05 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 15-06-2014 / 17:19:06 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_comment_in_method_generated
-    | method class generatedSource expectedSource |
-
-    class := self class.
-
-    method := codeBuilder createMethod.
-    method 
-        class: self class;
-        protocol: 'a protocol';
-        source: 'aSelector
-            "a comment"
-            ^ nil'.
-
-    self assert: (class includesSelector: #aSelector) not.
-
-    codeBuilder execute.
-
-    generatedSource := (class sourceCodeAt: #aSelector).
-    expectedSource := 'aSelector
-    "a comment"
-
-    ^ nil'.
-
-    self assert: (class includesSelector: #aSelector).
-    self assert: (generatedSource includesSubString: '"a comment"').
-    self assertSource: expectedSource sameAs: generatedSource
-
-    "Created: / 27-04-2014 / 15:57:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 26-08-2014 / 23:42:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 29-08-2014 / 22:23:40 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_class_immediate
-    | mockClass |
-
-    mockClass := codeBuilder createClassImmediate: 'MockClassForTestCase'.
-
-    self assert: mockClass new className = 'MockClassForTestCase'.
-    self assert: mockClass superclass new className = 'Object'.
-    self assert: mockClass instanceVariableString = ''.
-    self assert: mockClass classVariableString = ''.
-    self assert: mockClass poolDictionaries = ''.
-    self assert: mockClass category = ''.
-
-    "Created: / 15-06-2014 / 17:27:41 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 27-07-2014 / 12:42:53 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_class_immediate_with_given_super_class_name
-    | mockClass |
-
-    mockClass := codeBuilder createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
-
-    self assert: mockClass new className = 'MockClassForTestCase'.
-    self assert: mockClass superclass new className = 'Object'.
-    self assert: mockClass instanceVariableString = ''.
-    self assert: mockClass classVariableString = ''.
-    self assert: mockClass poolDictionaries = ''.
-    self assert: mockClass category = ''.
-
-    "Created: / 27-07-2014 / 12:42:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_class_immediate_with_instance_and_class_variables
-    | mockClass |
-
-    mockClass := codeBuilder
-        createClassImmediate: 'MockClassForTestCase' 
-        superClassName: 'Object'
-        instanceVariableNames: 'instVar'
-        classVariableNames: 'ClassVar'.
-
-    self assert: mockClass new className = 'MockClassForTestCase'.
-    self assert: mockClass superclass new className = 'Object'.
-    self assert: mockClass instanceVariableString = 'instVar'.
-    self assert: mockClass classVariableString = 'ClassVar'.
-    self assert: mockClass poolDictionaries = ''.
-    self assert: mockClass category = ''.
-
-    "Created: / 23-08-2014 / 22:24:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_class_immediate_with_instance_variables
-    | mockClass |
-
-    mockClass := codeBuilder
-        createClassImmediate: 'MockClassForTestCase' 
-        instanceVariableNames: 'instVar'.
-
-    self assert: mockClass new className = 'MockClassForTestCase'.
-    self assert: mockClass superclass new className = 'Object'.
-    self assert: mockClass instanceVariableString = 'instVar'.
-    self assert: mockClass classVariableString = ''.
-    self assert: mockClass poolDictionaries = ''.
-    self assert: mockClass category = ''.
-
-    "Created: / 23-08-2014 / 22:26:24 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_class_within_given_package
-    | class package |
-
-    package := self class package.
-    self assert: package size > 3.
-
-    (codeBuilder createClass)
-        className: 'MockClassForTestCase';
-        package: package;
-        execute.
-
-    class := Smalltalk classNamed: 'MockClassForTestCase'.
-
-    self assert: class new className = 'MockClassForTestCase'.
-    self assert: class superclass new className = 'Object'.
-    self assert: class instanceVariableString = ''.
-    self assert: class classVariableString = ''.
-    self assert: class poolDictionaries = ''.
-    self assert: class category = ''.
-    self assert: class package = package.
-
-    "Created: / 30-08-2014 / 20:35:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_class_without_given_package
-    | class package |
-
-    package := self class package.
-    self assert: package size > 3.
-
-    (codeBuilder createClass)
-        className: 'MockClassForTestCase';
-        execute.
-
-    class := Smalltalk classNamed: 'MockClassForTestCase'.
-
-    self assert: class new className = 'MockClassForTestCase'.
-    self assert: class superclass new className = 'Object'.
-    self assert: class instanceVariableString = ''.
-    self assert: class classVariableString = ''.
-    self assert: class poolDictionaries = ''.
-    self assert: class category = ''.
-    self assert: (class package = package) not.
-
-    "Created: / 30-08-2014 / 20:57:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_method_immediate
-    | mockClass expectedSource actualSource |
-
-    expectedSource := 'instanceMethod:aParam
-    ^ self'.
-
-    mockClass := codeBuilder createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
-    codeBuilder createMethodImmediate: mockClass protocol: 'a protocol' source: expectedSource.
-
-    actualSource := (mockClass sourceCodeAt: #instanceMethod:).
-
-    self assertSource: expectedSource sameAs: actualSource.
-    self assert: (mockClass compiledMethodAt: #instanceMethod:) category = 'a protocol'
-
-    "Created: / 15-06-2014 / 17:28:36 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 24-06-2014 / 21:59:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_method_immediate_with_preset_protocol
-    | mockClass expectedSource actualSource |
-
-    expectedSource := 'instanceMethod:aParam
-    ^ self'.
-
-    mockClass := codeBuilder createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
-    codeBuilder createMethodImmediate: mockClass source: expectedSource.
-
-    actualSource := (mockClass sourceCodeAt: #instanceMethod:).
-
-    self assertSource: expectedSource sameAs: actualSource.
-    self assert: (mockClass compiledMethodAt: #instanceMethod:) category = 'protocol'
-
-    "Created: / 23-08-2014 / 21:48:51 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_method_within_given_package
-    | mockClass package method |
-
-    package := self class package.
-    self assert: package size > 3.
-
-    mockClass := codeBuilder createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
-    (codeBuilder createMethod)
-        class: mockClass;
-        protocol: 'a protocol';
-        package: package;
-        source: 'selector ^ 123';
-        execute.
-
-    method := (mockClass compiledMethodAt: #selector).
-
-    self assert: method package = package
-
-    "Created: / 30-08-2014 / 18:45:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 30-08-2014 / 20:46:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_method_without_given_package
-    | mockClass package method |
-
-    package := self class package.
-    self assert: package size > 3.
-
-    mockClass := codeBuilder createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
-    (codeBuilder createMethod)
-        class: mockClass;
-        protocol: 'a protocol';
-        source: 'selector ^ 123';
-        execute.
-
-    method := (mockClass compiledMethodAt: #selector).
-
-    self assert: (method package = package) not
-
-    "Created: / 30-08-2014 / 18:46:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 30-08-2014 / 20:46:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_empty_class_not_in_change
-
-    codeBuilder createClass.
-    self assert: codeBuilder change isNil.
-
-    "Created: / 22-07-2014 / 22:22:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_method_source_builded
-    | methodBuilder source |
-
-    methodBuilder := codeBuilder methodBuilder.
-    methodBuilder
-        source: '`@methodName
-    ^ `variableName';
-        replace: '`@methodName' with: #selector;
-        replace: '`variableName' with: 'aName'.
-
-    source := methodBuilder buildedSource.
-
-    self assert: source = 'selector
-    ^ aName'.
-
-    "Created: / 18-05-2014 / 17:14:13 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 19-05-2014 / 19:01:29 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 26-08-2014 / 23:40:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-test_method_source_builded_with_comment
-    | methodBuilder buildedSource expectedSource |
-
-    methodBuilder := codeBuilder methodBuilder.
-    methodBuilder
-        source: '`@methodName
-
-    `"comment
-
-    ^ `variableName';
-        replace: '`@methodName' with: #selector;
-        replace: '`variableName' with: 'aName';
-        replace: '`"comment' with: '"a comment"'.
-
-    buildedSource := methodBuilder buildedSource.
-    expectedSource := 'selector
-    "a comment"
-
-    ^ aName'.
-
-    self assertSource: expectedSource sameAs: buildedSource
-
-    "Created: / 19-05-2014 / 18:57:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 26-08-2014 / 23:55:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 29-08-2014 / 22:23:53 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_method_source_with_original_formatting
-    | methodBuilder originalSource actualSource expectedSource |
-
-    originalSource := 'methodName
-
-    `variableName do: [ each | each call ].'.
-
-    expectedSource := 'methodName
-
-    collection do: [ each | each call ].'.
-
-    codeBuilder formatter: CustomNoneSourceCodeFormatter new.
-    methodBuilder := codeBuilder methodBuilder.
-    methodBuilder
-        source: originalSource;
-        replace: '`variableName' with: 'collection'.
-
-    actualSource := methodBuilder buildedSource.
-
-    self assertSource: expectedSource sameAs: actualSource.
-
-    "Created: / 22-07-2014 / 23:04:43 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 29-08-2014 / 22:25:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_nil_changes_not_in_change_collector
-
-    codeBuilder createMethod.
-    self assert: codeBuilder change isNil.
-
-    "Created: / 22-07-2014 / 22:16:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_nil_changes_not_in_change_collector_two_code_builds
-
-    | method |
-
-    codeBuilder createMethod.
-    method := codeBuilder createMethod.
-    method source: 'some ^ 5'.
-
-    self assert: codeBuilder codeBuilds length = 2.
-    self assert: codeBuilder change isNil.
-
-    "Created: / 22-07-2014 / 22:39:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_one_method_for_multiple_classes
-    | classCollection classNames |
-
-    classCollection := OrderedCollection new.
-    classNames := Array with: 'DummyClassForTestCase1' with: 'DummyClassForTestCase2'.
-
-    classNames do: [ :className |
-        classCollection add: (codeBuilder className: className; createClass).
-    ].
-
-    codeBuilder
-        classes: classCollection;
-        protocol: 'a protocol';
-        source: '`@selector
-    self shouldImplement';
-        replace: '`@selector' with: 'aSelector';
-        createMethod.
-
-    codeBuilder execute.
-
-    classNames do: [ :className |
-        | class method |
-
-        class := Smalltalk classNamed: className.
-        self assert: (class includesSelector: #aSelector).
-        self assert: (class sourceCodeAt: #aSelector) = 'aSelector
-    self shouldImplement'.
-        method := class compiledMethodAt: #aSelector.  
-        self assert: (method category) = 'a protocol'.
-    ].
-
-    "Created: / 02-05-2014 / 23:31:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 04-05-2014 / 11:51:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 26-08-2014 / 23:41:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-test_redo_changes_for_multiple_executes
-    "Note: Methods createClassImmediate and createMethodImmediate have execute call inside"
-    | mockSuperClassName mockClassName mockSuperClass |
-
-    mockSuperClassName := 'MockSuperClassForTestCase'.
-    mockClassName := 'MockClassForTestCase'.
-
-    mockSuperClass := codeBuilder createClassImmediate: mockSuperClassName superClassName: 'Object'.
-    codeBuilder createClassImmediate: mockClassName superClassName: mockSuperClassName.
-
-    "/ Instance method
-    codeBuilder createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
-    self shouldImplement'.
-
-    "/ Class method
-    codeBuilder createMethodImmediate: mockSuperClass class protocol: 'class-protocol' source: 'classMethod: aParam
-    self shouldImplement'.
-
-    self assertClassExists: mockSuperClassName.
-    self assertClassExists: mockClassName.
-
-    codeBuilder redoChanges.
-
-    self assertClassNotExists: mockSuperClassName.
-    self assertClassNotExists: mockClassName.
-
-    "Created: / 15-06-2014 / 16:21:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilderTests class methodsFor:'documentation'!
-
-version_HG
-
-    ^ '$Changeset: <not expanded> $'
-! !
-
--- a/CustomSubclassResponsibilityCodeGenerator.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomSubclassResponsibilityCodeGenerator.st	Fri Oct 10 16:28:37 2014 +0200
@@ -65,7 +65,7 @@
 
         superclassMethod := (classQuery methodForSuperclassSelector: selector class: aClass).
 
-        codeBuilder createMethod
+        model createMethod
             class: aClass;
             protocol: superclassMethod category;
             source: ('`@selector
--- a/CustomSubclassResponsibilityCodeGeneratorTests.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomSubclassResponsibilityCodeGeneratorTests.st	Fri Oct 10 16:28:37 2014 +0200
@@ -21,8 +21,8 @@
 setUp
 
     super setUp.
-    mockSuperClass := codeBuilder createClassImmediate: 'MockSuperClassForTestCase' superClassName: 'Object'.
-    mockClass := codeBuilder createClassImmediate: 'MockClassForTestCase' superClassName: (mockSuperClass new className).
+    mockSuperClass := model createClassImmediate: 'MockSuperClassForTestCase' superClassName: 'Object'.
+    mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: (mockSuperClass new className).
 
     "Created: / 14-04-2014 / 17:16:28 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
     "Modified: / 29-08-2014 / 21:39:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
@@ -34,7 +34,7 @@
 
     context addSelectedClass: mockClass.
 
-    codeBuilder createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
+    model createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
     ^ self'.
 
     self assert: (mockClass includesSelector: #instanceMethod:) not. 
@@ -54,7 +54,7 @@
 
     context addSelectedClass: mockClass.
 
-    codeBuilder createMethodImmediate: mockSuperClass class protocol: 'class-protocol' source: 'classMethod: aParam
+    model createMethodImmediate: mockSuperClass class protocol: 'class-protocol' source: 'classMethod: aParam
     self subclassResponsibility'.
 
     self assert: (mockClass includesSelector: #classMethod:) not.
@@ -80,7 +80,7 @@
 
     context addSelectedClass: mockClass.
 
-    codeBuilder createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
+    model createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
     self subclassResponsibility'.
 
     self assert: (mockClass includesSelector: #instanceMethod:) not. 
--- a/CustomTestCaseCodeGenerator.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomTestCaseCodeGenerator.st	Fri Oct 10 16:28:37 2014 +0200
@@ -210,7 +210,7 @@
 generateTestCaseNamed:testCaseClassName forClassUnderTest:classUnderTest 
     | testCase |
 
-    (testCase := codeBuilder createClass)
+    (testCase := model createClass)
         superclassName:testSuperName;
         className:testClassName;
         category:testClassCategory.
--- a/CustomTestCaseMethodCodeGenerator.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomTestCaseMethodCodeGenerator.st	Fri Oct 10 16:28:37 2014 +0200
@@ -93,7 +93,7 @@
                 ].
 
                 (testClass includesSelector: testSelector asSymbol) ifFalse: [ 
-                    (codeBuilder createMethod)
+                    (model createMethod)
                         package: method package;
                         class: testClass;
                         protocol: 'tests';
--- a/CustomTestCaseSetUpCodeGenerator.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomTestCaseSetUpCodeGenerator.st	Fri Oct 10 16:28:37 2014 +0200
@@ -77,7 +77,7 @@
         category := (TestCase compiledMethodAt: #setUp) category.
     ].
 
-    codeBuilder createMethod
+    model createMethod
         class: class;
         source: source;
         category: category.
--- a/CustomTestCaseTearDownCodeGenerator.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomTestCaseTearDownCodeGenerator.st	Fri Oct 10 16:28:37 2014 +0200
@@ -78,7 +78,7 @@
         category := (TestCase compiledMethodAt: #tearDown ) category.
     ].
 
-    codeBuilder createMethod
+    model createMethod
         class: class;
         source: source;
         category: category.
--- a/CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.st	Fri Oct 10 16:28:37 2014 +0200
@@ -7,6 +7,7 @@
 	category:'Interface-Refactoring-Custom-Generators'
 !
 
+
 !CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator class methodsFor:'accessing-presentation'!
 
 description
@@ -79,3 +80,10 @@
     "Modified: / 19-09-2014 / 22:37:00 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
+!CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/CustomVisitorCodeGenerator.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomVisitorCodeGenerator.st	Fri Oct 10 16:28:37 2014 +0200
@@ -81,7 +81,7 @@
         methodSelector := methodSelector, parameterSelectorPart.
     ].
 
-    codeBuilder createMethod
+    model createMethod
         class: aClass;
         protocol: 'visiting';
         source: ('`@methodSelector
--- a/CustomVisitorCodeGeneratorTests.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomVisitorCodeGeneratorTests.st	Fri Oct 10 16:28:37 2014 +0200
@@ -28,14 +28,14 @@
 
     ^ visitor visitDummyTestClassForVisitorMethod:self with:parameter'.
 
-    class := codeBuilder createClassImmediate: 'DummyTestClassForVisitorMethod'.
+    class := model createClassImmediate: 'DummyTestClassForVisitorMethod'.
 
     generatorOrRefactoring
         buildAcceptVisitorMethod: 'visitDummyTestClassForVisitorMethod:'
         withParameter: true 
         forClass: class.
 
-    generatorOrRefactoring codeBuilder execute.
+    generatorOrRefactoring model execute.
 
     self assertMethodSource: expectedSource atSelector: #acceptVisitor:with: forClass: class
 
@@ -56,14 +56,14 @@
 
     ^ visitor visitDummyTestClassForVisitorMethod:self'.
 
-    class := codeBuilder createClassImmediate: 'DummyTestClassForVisitorMethod'.
+    class := model createClassImmediate: 'DummyTestClassForVisitorMethod'.
 
     generatorOrRefactoring
         buildAcceptVisitorMethod: 'visitDummyTestClassForVisitorMethod:'
         withParameter: false 
         forClass: class.
 
-    generatorOrRefactoring codeBuilder execute.
+    generatorOrRefactoring model execute.
 
     self assertMethodSource: expectedSource atSelector: #acceptVisitor: forClass: class
 
@@ -80,14 +80,14 @@
     expectedSource := 'acceptVisitor:visitor with:parameter 
     ^ visitor visitDummyTestClassForVisitorMethod:self with:parameter'.
 
-    class := codeBuilder createClassImmediate: 'DummyTestClassForVisitorMethod'.
+    class := model createClassImmediate: 'DummyTestClassForVisitorMethod'.
 
     generatorOrRefactoring
         buildAcceptVisitorMethod: 'visitDummyTestClassForVisitorMethod:'
         withParameter: true 
         forClass: class.
 
-    generatorOrRefactoring codeBuilder execute.
+    generatorOrRefactoring model execute.
 
     self assertMethodSource: expectedSource atSelector: #acceptVisitor:with: forClass: class
 
@@ -104,14 +104,14 @@
     expectedSource := 'acceptVisitor:visitor
     ^ visitor visitDummyTestClassForVisitorMethod:self'.
 
-    class := codeBuilder createClassImmediate: 'DummyTestClassForVisitorMethod'.
+    class := model createClassImmediate: 'DummyTestClassForVisitorMethod'.
 
     generatorOrRefactoring
         buildAcceptVisitorMethod: 'visitDummyTestClassForVisitorMethod:'
         withParameter: false 
         forClass: class.
 
-    generatorOrRefactoring codeBuilder execute.
+    generatorOrRefactoring model execute.
 
     self assertMethodSource: expectedSource atSelector: #acceptVisitor: forClass: class
 
--- a/Make.proto	Wed Oct 08 19:50:10 2014 +0200
+++ b/Make.proto	Fri Oct 10 16:28:37 2014 +0200
@@ -34,7 +34,7 @@
 # add the path(es) here:,
 # ********** OPTIONAL: MODIFY the next lines ***
 # LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/refactoring -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic3 -I$(INCLUDE_TOP)/stx/libtool -I$(INCLUDE_TOP)/stx/libview -I$(INCLUDE_TOP)/stx/libview2 -I$(INCLUDE_TOP)/stx/libwidg -I$(INCLUDE_TOP)/stx/libwidg2
+LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/refactoring -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic3 -I$(INCLUDE_TOP)/stx/libcomp -I$(INCLUDE_TOP)/stx/libtool -I$(INCLUDE_TOP)/stx/libview -I$(INCLUDE_TOP)/stx/libview2 -I$(INCLUDE_TOP)/stx/libwidg -I$(INCLUDE_TOP)/stx/libwidg2
 
 
 # if you need any additional defines for embedded C code,
@@ -143,10 +143,10 @@
 $(OUTDIR)CustomManager.$(O) CustomManager.$(H): CustomManager.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CustomMenuBuilder.$(O) CustomMenuBuilder.$(H): CustomMenuBuilder.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CustomMock.$(O) CustomMock.$(H): CustomMock.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)CustomNamespace.$(O) CustomNamespace.$(H): CustomNamespace.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBNamespace.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CustomParseTreeRewriter.$(O) CustomParseTreeRewriter.$(H): CustomParseTreeRewriter.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/ParseTreeRewriter.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/ParseTreeSearcher.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CustomPerspective.$(O) CustomPerspective.$(H): CustomPerspective.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CustomRefactoryBuilder.$(O) CustomRefactoryBuilder.$(H): CustomRefactoryBuilder.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/refactoring/RefactoryBuilder.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)CustomSourceCodeBuilder.$(O) CustomSourceCodeBuilder.$(H): CustomSourceCodeBuilder.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/AddClassChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/AddMethodChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/InteractiveAddClassChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/InteractiveAddMethodChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/RefactoryChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/RefactoryClassChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBAbstractClass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBClass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBMethod.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBNamespace.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CustomSourceCodeFormatter.$(O) CustomSourceCodeFormatter.$(H): CustomSourceCodeFormatter.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CustomSourceCodeGenerator.$(O) CustomSourceCodeGenerator.$(H): CustomSourceCodeGenerator.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/CodeGenerator.$(H) $(STCHDR)
 $(OUTDIR)CustomSourceCodeSelection.$(O) CustomSourceCodeSelection.$(H): CustomSourceCodeSelection.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -192,7 +192,7 @@
 $(OUTDIR)CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.$(O) CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.$(H): CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomAccessMethodsCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CustomValueHolderWithChangeNotificationSetterMethodsCodeGenerator.$(O) CustomValueHolderWithChangeNotificationSetterMethodsCodeGenerator.$(H): CustomValueHolderWithChangeNotificationSetterMethodsCodeGenerator.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomAccessMethodsCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CustomVisitorCodeGeneratorAcceptVisitor.$(O) CustomVisitorCodeGeneratorAcceptVisitor.$(H): CustomVisitorCodeGeneratorAcceptVisitor.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomVisitorCodeGenerator.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBAbstractClass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBClass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBMetaclass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBMethod.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/SystemBrowser.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__NewSystemBrowser.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/AddClassChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/AddMethodChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/RefactoryChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/RefactoryClassChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBAbstractClass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBClass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBMetaclass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBMethod.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/SystemBrowser.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__NewSystemBrowser.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
 
--- a/Make.spec	Wed Oct 08 19:50:10 2014 +0200
+++ b/Make.spec	Fri Oct 10 16:28:37 2014 +0200
@@ -58,10 +58,10 @@
 	CustomManager \
 	CustomMenuBuilder \
 	CustomMock \
+	CustomNamespace \
 	CustomParseTreeRewriter \
 	CustomPerspective \
 	CustomRefactoryBuilder \
-	CustomSourceCodeBuilder \
 	CustomSourceCodeFormatter \
 	CustomSourceCodeGenerator \
 	CustomSourceCodeSelection \
@@ -120,10 +120,10 @@
     $(OUTDIR_SLASH)CustomManager.$(O) \
     $(OUTDIR_SLASH)CustomMenuBuilder.$(O) \
     $(OUTDIR_SLASH)CustomMock.$(O) \
+    $(OUTDIR_SLASH)CustomNamespace.$(O) \
     $(OUTDIR_SLASH)CustomParseTreeRewriter.$(O) \
     $(OUTDIR_SLASH)CustomPerspective.$(O) \
     $(OUTDIR_SLASH)CustomRefactoryBuilder.$(O) \
-    $(OUTDIR_SLASH)CustomSourceCodeBuilder.$(O) \
     $(OUTDIR_SLASH)CustomSourceCodeFormatter.$(O) \
     $(OUTDIR_SLASH)CustomSourceCodeGenerator.$(O) \
     $(OUTDIR_SLASH)CustomSourceCodeSelection.$(O) \
--- a/abbrev.stc	Wed Oct 08 19:50:10 2014 +0200
+++ b/abbrev.stc	Fri Oct 10 16:28:37 2014 +0200
@@ -13,6 +13,7 @@
 CustomMenuBuilder CustomMenuBuilder jn:refactoring_custom 'Interface-Refactoring-Custom-UI' 0
 CustomMock CustomMock jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 0
 CustomMockTests CustomMockTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
+CustomNamespace CustomNamespace jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomNoneSourceCodeFormatterTests CustomNoneSourceCodeFormatterTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
 CustomParseTreeRewriter CustomParseTreeRewriter jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomPerspective CustomPerspective jn:refactoring_custom 'Interface-Refactoring-Custom' 1
@@ -21,7 +22,6 @@
 CustomRBLocalSourceCodeFormatterTests CustomRBLocalSourceCodeFormatterTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
 CustomRBMethodTests CustomRBMethodTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
 CustomRefactoryBuilder CustomRefactoryBuilder jn:refactoring_custom 'Interface-Refactoring-Custom' 0
-CustomSourceCodeBuilder CustomSourceCodeBuilder jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomSourceCodeFormatter CustomSourceCodeFormatter jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomSourceCodeGenerator CustomSourceCodeGenerator jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomSourceCodeGeneratorTests CustomSourceCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
@@ -45,6 +45,7 @@
 CustomLazyInitializationGetterMethodsCodeGeneratorTests CustomLazyInitializationGetterMethodsCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
 CustomLocalChangeManager CustomLocalChangeManager jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomMultiSetterMethodsCodeGeneratorTests CustomMultiSetterMethodsCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
+CustomNamespaceTests CustomNamespaceTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
 CustomNoneSourceCodeFormatter CustomNoneSourceCodeFormatter jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomRBLocalSourceCodeFormatter CustomRBLocalSourceCodeFormatter jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomRefactoring CustomRefactoring jn:refactoring_custom 'Interface-Refactoring-Custom-Refactorings' 0
@@ -54,7 +55,6 @@
 CustomSimpleAccessMethodsCodeGeneratorTests CustomSimpleAccessMethodsCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
 CustomSimpleGetterMethodsCodeGeneratorTests CustomSimpleGetterMethodsCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
 CustomSimpleSetterMethodsCodeGeneratorTests CustomSimpleSetterMethodsCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
-CustomSourceCodeBuilderTests CustomSourceCodeBuilderTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
 CustomSubContext CustomSubContext jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomSubclassResponsibilityCodeGeneratorTests CustomSubclassResponsibilityCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
 CustomTestCaseCodeGeneratorTests CustomTestCaseCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Generators-Tests' 1
--- a/bc.mak	Wed Oct 08 19:50:10 2014 +0200
+++ b/bc.mak	Fri Oct 10 16:28:37 2014 +0200
@@ -34,7 +34,7 @@
 
 
 
-LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\refactoring -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic3 -I$(INCLUDE_TOP)\stx\libtool -I$(INCLUDE_TOP)\stx\libview -I$(INCLUDE_TOP)\stx\libview2 -I$(INCLUDE_TOP)\stx\libwidg -I$(INCLUDE_TOP)\stx\libwidg2
+LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\refactoring -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic3 -I$(INCLUDE_TOP)\stx\libcomp -I$(INCLUDE_TOP)\stx\libtool -I$(INCLUDE_TOP)\stx\libview -I$(INCLUDE_TOP)\stx\libview2 -I$(INCLUDE_TOP)\stx\libwidg -I$(INCLUDE_TOP)\stx\libwidg2
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES)  -varPrefix=$(LIBNAME)
@@ -89,10 +89,10 @@
 $(OUTDIR)CustomManager.$(O) CustomManager.$(H): CustomManager.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CustomMenuBuilder.$(O) CustomMenuBuilder.$(H): CustomMenuBuilder.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CustomMock.$(O) CustomMock.$(H): CustomMock.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)CustomNamespace.$(O) CustomNamespace.$(H): CustomNamespace.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBNamespace.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CustomParseTreeRewriter.$(O) CustomParseTreeRewriter.$(H): CustomParseTreeRewriter.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\ParseTreeRewriter.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\ParseTreeSearcher.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CustomPerspective.$(O) CustomPerspective.$(H): CustomPerspective.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CustomRefactoryBuilder.$(O) CustomRefactoryBuilder.$(H): CustomRefactoryBuilder.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\refactoring\RefactoryBuilder.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)CustomSourceCodeBuilder.$(O) CustomSourceCodeBuilder.$(H): CustomSourceCodeBuilder.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\AddClassChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\AddMethodChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\InteractiveAddClassChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\InteractiveAddMethodChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\RefactoryChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\RefactoryClassChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBAbstractClass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBClass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBMethod.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBNamespace.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CustomSourceCodeFormatter.$(O) CustomSourceCodeFormatter.$(H): CustomSourceCodeFormatter.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CustomSourceCodeGenerator.$(O) CustomSourceCodeGenerator.$(H): CustomSourceCodeGenerator.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\CodeGenerator.$(H) $(STCHDR)
 $(OUTDIR)CustomSourceCodeSelection.$(O) CustomSourceCodeSelection.$(H): CustomSourceCodeSelection.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -138,7 +138,7 @@
 $(OUTDIR)CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.$(O) CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.$(H): CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomAccessMethodsCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CustomValueHolderWithChangeNotificationSetterMethodsCodeGenerator.$(O) CustomValueHolderWithChangeNotificationSetterMethodsCodeGenerator.$(H): CustomValueHolderWithChangeNotificationSetterMethodsCodeGenerator.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomAccessMethodsCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CustomVisitorCodeGeneratorAcceptVisitor.$(O) CustomVisitorCodeGeneratorAcceptVisitor.$(H): CustomVisitorCodeGeneratorAcceptVisitor.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomVisitorCodeGenerator.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBAbstractClass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBClass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBMetaclass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBMethod.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\SystemBrowser.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__NewSystemBrowser.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\AddClassChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\AddMethodChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\RefactoryChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\RefactoryClassChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBAbstractClass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBClass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBMetaclass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBMethod.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\SystemBrowser.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__NewSystemBrowser.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
 
--- a/extensions.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/extensions.st	Fri Oct 10 16:28:37 2014 +0200
@@ -1,5 +1,32 @@
 "{ Package: 'jn:refactoring_custom' }"!
 
+!AddClassChange methodsFor:'accessing'!
+
+package
+
+    ^ package
+
+    "Created: / 09-10-2014 / 23:45:53 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!AddClassChange methodsFor:'accessing'!
+
+package: aPackageName
+
+    package := aPackageName
+
+    "Created: / 08-10-2014 / 20:07:05 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!AddMethodChange methodsFor:'accessing'!
+
+package: aPackageName    
+
+    package := aPackageName
+
+    "Created: / 08-10-2014 / 19:59:34 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
 !RBAbstractClass methodsFor:'accessing'!
 
 allClassVarNames
@@ -32,6 +59,37 @@
     "Modified: / 04-10-2014 / 22:35:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
+!RBAbstractClass methodsFor:'method accessing'!
+
+compileMethod: anRBMethod
+    "Creates new method for this class with RBClass"
+    | change method newSource |
+
+    newSource := anRBMethod newSource.
+
+    change := model 
+        compile: newSource
+        in: self
+        classified: anRBMethod category.
+
+    change package: anRBMethod package.
+
+    method := anRBMethod deepCopy 
+        source: newSource;
+        category: anRBMethod category;
+        package: anRBMethod package;
+        model: self model;
+        modelClass: self;
+        yourself.
+
+    self addMethod: method.
+
+    ^ change
+
+    "Created: / 10-10-2014 / 11:37:58 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 10-10-2014 / 13:08:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
 !RBAbstractClass methodsFor:'accessing'!
 
 instVarNames
@@ -121,6 +179,32 @@
 
 !RBAbstractClass methodsFor:'accessing'!
 
+package
+    "see Class >> package ( same purpose, but for model class )"
+    | package |
+
+    package := self objectAttributeAt: #package.
+
+    (package isNil and: [ self realClass notNil ]) ifTrue: [ 
+        package := self realClass package.
+    ].
+
+    ^ package
+
+    "Created: / 09-10-2014 / 23:12:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!RBAbstractClass methodsFor:'accessing'!
+
+package: aPackage
+
+    self objectAttributeAt: #package put: aPackage
+
+    "Created: / 09-10-2014 / 23:12:14 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!RBAbstractClass methodsFor:'accessing'!
+
 superclassName: aName
     "Assign superclass by its name"
 
@@ -164,11 +248,18 @@
 
 compile
     "Updates class definition in the namespace along with code changes"
+    | change newClass |
 
-    model defineClass: self definitionString.
+    change := model defineClass: self definitionString.
+    change package: self package.
+
+    newClass := model classNamed: self name.
+    newClass package: self package.
+
+    ^ change
 
     "Created: / 25-09-2014 / 22:31:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 25-09-2014 / 23:36:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 10-10-2014 / 15:40:11 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
 !RBClass methodsFor:'accessing'!
@@ -239,18 +330,10 @@
 compile
     "Modifies/adds method in the model class."
 
-    | newSource generator |
-
-    newSource := self source.
-    generator := self sourceCodeGenerator.
-    generator notNil ifTrue: [ 
-        generator source: newSource.
-        newSource := generator newSource.
-    ].
-
-    self modelClass compile: newSource classified: self category
+    ^ self modelClass compileMethod: self
 
     "Created: / 06-10-2014 / 11:11:30 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 10-10-2014 / 12:28:06 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
 !RBMethod methodsFor:'accessing'!
@@ -316,6 +399,41 @@
 
 !RBMethod methodsFor:'accessing'!
 
+newSource
+    "Returns new source code with performed modifications by CodeGenerator
+    ( replace: something with: anotherthing and custom formatting)."
+    | newSource generator |
+
+    newSource := self source.
+    generator := self sourceCodeGenerator.
+    generator notNil ifTrue: [ 
+        generator source: newSource.
+        newSource := generator newSource.
+    ].
+
+    "Fixes test CustomRBMethodTests >> test_compile_with_code_generator
+    when none selector and method is given then parse the selector from new source code"
+    (selector isNil and: [ compiledMethod isNil ] and: [ newSource notNil ]) ifTrue: [ 
+        selector := (Parser parseMethodSpecification: newSource) selector
+    ].
+
+    ^ newSource
+
+    "Created: / 10-10-2014 / 12:23:20 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified (comment): / 10-10-2014 / 15:31:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!RBMethod methodsFor:'accessing'!
+
+package: aPackage
+
+    self objectAttributeAt: #package put: aPackage
+
+    "Created: / 10-10-2014 / 11:12:26 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!RBMethod methodsFor:'accessing'!
+
 protocol
     "Returns in which category/protocol does the method belongs within a class"
 
--- a/jn_refactoring_custom.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/jn_refactoring_custom.st	Fri Oct 10 16:28:37 2014 +0200
@@ -27,7 +27,7 @@
      by searching along the inheritance chain of all of my classes."
 
     ^ #(
-        #'stx:goodies/refactoryBrowser/changes'    "AddClassChange - superclass of CustomSourceCodeBuilder::ClassChange"
+        #'stx:goodies/refactoryBrowser/changes'    "AddClassChange - extended"
         #'stx:goodies/refactoryBrowser/helpers'    "RBAbstractClass - extended"
         #'stx:goodies/refactoryBrowser/parser'    "ParseTreeRewriter - superclass of CustomParseTreeRewriter"
         #'stx:goodies/refactoryBrowser/refactoring'    "RefactoryBuilder - superclass of CustomRefactoryBuilder"
@@ -47,6 +47,7 @@
 
     ^ #(
         #'stx:libbasic3'    "Change - referenced by CustomCodeGeneratorOrRefactoringTestCase>>assertSource:sameAs:"
+        #'stx:libcomp'    "Parser - referenced by RBMethod>>newSource"
         #'stx:libview'    "WindowGroup - referenced by CustomCodeGeneratorOrRefactoring>>executeInContextWithWaitCursor:"
         #'stx:libwidg'    "DialogBox - referenced by CustomUserDialog>>initialize"
         #'stx:libwidg2'    "CheckBox - referenced by CustomDialog>>addCheckBoxOn:labeled:"
@@ -85,6 +86,7 @@
         CustomMenuBuilder
         CustomMock
         (CustomMockTests autoload)
+        CustomNamespace
         (CustomNoneSourceCodeFormatterTests autoload)
         CustomParseTreeRewriter
         CustomPerspective
@@ -93,7 +95,6 @@
         (CustomRBLocalSourceCodeFormatterTests autoload)
         (CustomRBMethodTests autoload)
         CustomRefactoryBuilder
-        CustomSourceCodeBuilder
         CustomSourceCodeFormatter
         CustomSourceCodeGenerator
         (CustomSourceCodeGeneratorTests autoload)
@@ -117,6 +118,7 @@
         (CustomLazyInitializationGetterMethodsCodeGeneratorTests autoload)
         CustomLocalChangeManager
         (CustomMultiSetterMethodsCodeGeneratorTests autoload)
+        (CustomNamespaceTests autoload)
         CustomNoneSourceCodeFormatter
         CustomRBLocalSourceCodeFormatter
         CustomRefactoring
@@ -126,7 +128,6 @@
         (CustomSimpleAccessMethodsCodeGeneratorTests autoload)
         (CustomSimpleGetterMethodsCodeGeneratorTests autoload)
         (CustomSimpleSetterMethodsCodeGeneratorTests autoload)
-        (CustomSourceCodeBuilderTests autoload)
         CustomSubContext
         (CustomSubclassResponsibilityCodeGeneratorTests autoload)
         (CustomTestCaseCodeGeneratorTests autoload)
@@ -208,6 +209,14 @@
         RBMethod replace:with:
         RBMethod sourceCodeGenerator
         RBMethod sourceCodeGenerator:
+        AddClassChange package
+        AddClassChange package:
+        AddMethodChange package:
+        RBAbstractClass compileMethod:
+        RBAbstractClass package
+        RBAbstractClass package:
+        RBMethod newSource
+        RBMethod package:
     )
 ! !
 
--- a/libInit.cc	Wed Oct 08 19:50:10 2014 +0200
+++ b/libInit.cc	Fri Oct 10 16:28:37 2014 +0200
@@ -35,10 +35,10 @@
 _CustomManager_Init(pass,__pRT__,snd);
 _CustomMenuBuilder_Init(pass,__pRT__,snd);
 _CustomMock_Init(pass,__pRT__,snd);
+_CustomNamespace_Init(pass,__pRT__,snd);
 _CustomParseTreeRewriter_Init(pass,__pRT__,snd);
 _CustomPerspective_Init(pass,__pRT__,snd);
 _CustomRefactoryBuilder_Init(pass,__pRT__,snd);
-_CustomSourceCodeBuilder_Init(pass,__pRT__,snd);
 _CustomSourceCodeFormatter_Init(pass,__pRT__,snd);
 _CustomSourceCodeGenerator_Init(pass,__pRT__,snd);
 _CustomSourceCodeSelection_Init(pass,__pRT__,snd);
--- a/patches/Make.proto	Wed Oct 08 19:50:10 2014 +0200
+++ b/patches/Make.proto	Fri Oct 10 16:28:37 2014 +0200
@@ -34,7 +34,7 @@
 # add the path(es) here:,
 # ********** OPTIONAL: MODIFY the next lines ***
 # LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libcomp
+LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libcomp
 
 
 # if you need any additional defines for embedded C code,
@@ -102,6 +102,7 @@
 # build all mandatory prerequisite packages (containing superclasses) for this package
 prereq:
 	cd $(TOP)/libbasic && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+	cd $(TOP)/goodies/refactoryBrowser/changes && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd $(TOP)/goodies/refactoryBrowser/helpers && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 
 
@@ -123,7 +124,7 @@
 
 # BEGINMAKEDEPEND --- do not remove this line; make depend needs it
 $(OUTDIR)jn_refactoring_custom_patches.$(O) jn_refactoring_custom_patches.$(H): jn_refactoring_custom_patches.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
-$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBAbstractClass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBMethod.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/AddClassChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/RefactoryChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/RefactoryClassChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBAbstractClass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBMethod.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
 
--- a/patches/bc.mak	Wed Oct 08 19:50:10 2014 +0200
+++ b/patches/bc.mak	Fri Oct 10 16:28:37 2014 +0200
@@ -34,7 +34,7 @@
 
 
 
-LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libcomp
+LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libcomp
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES)  -varPrefix=$(LIBNAME)
@@ -51,6 +51,7 @@
 # build all mandatory prerequisite packages (containing superclasses) for this package
 prereq:
 	pushd ..\..\..\stx\libbasic & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	pushd ..\..\..\stx\goodies\refactoryBrowser\changes & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\..\stx\goodies\refactoryBrowser\helpers & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 
 
@@ -69,7 +70,7 @@
 
 # BEGINMAKEDEPEND --- do not remove this line; make depend needs it
 $(OUTDIR)jn_refactoring_custom_patches.$(O) jn_refactoring_custom_patches.$(H): jn_refactoring_custom_patches.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
-$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBAbstractClass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBMethod.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\AddClassChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\RefactoryChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\RefactoryClassChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBAbstractClass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBMethod.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
 
--- a/patches/extensions.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/patches/extensions.st	Fri Oct 10 16:28:37 2014 +0200
@@ -1,5 +1,28 @@
 "{ Package: 'jn:refactoring_custom/patches' }"!
 
+!AddClassChange methodsFor:'private'!
+
+primitiveExecute
+
+    package notNil ifTrue:[
+        Class packageQuerySignal 
+            answer:package
+            do:[
+                ^ self definingSuperclass subclassDefinerClass 
+                    evaluate: definition
+                    notifying: self controller
+                    logged: true
+            ]
+    ].
+
+    ^ self definingSuperclass subclassDefinerClass 
+                evaluate: definition
+                notifying: self controller
+                logged: true
+
+    "Modified: / 08-10-2014 / 20:10:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
 !RBAbstractClass methodsFor:'method accessing'!
 
 compile: aString classified: aSymbolCollection 
@@ -129,6 +152,32 @@
     "Modified: / 08-10-2014 / 18:52:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
+!RBMethod methodsFor:'accessing'!
+
+package
+    "see Method >> package ( same purpose, but for model method )"
+    | package |
+
+    package := self objectAttributeAt: #package.
+
+    package isNil ifTrue: [ 
+        | method |
+
+        method := self method.
+
+        method isNil ifTrue: [ 
+            package := PackageId noProjectID
+        ] ifFalse: [ 
+            package := method package
+        ]
+    ].
+
+    ^ package
+
+    "Created: / 17-02-2012 / 00:41:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-10-2014 / 11:11:36 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
 !jn_refactoring_custom_patches class methodsFor:'documentation'!
 
 extensionsVersion_HG
--- a/patches/jn_refactoring_custom_patches.st	Wed Oct 08 19:50:10 2014 +0200
+++ b/patches/jn_refactoring_custom_patches.st	Fri Oct 10 16:28:37 2014 +0200
@@ -30,6 +30,7 @@
      by searching along the inheritance chain of all of my classes."
 
     ^ #(
+        #'stx:goodies/refactoryBrowser/changes'    "AddClassChange - extended"
         #'stx:goodies/refactoryBrowser/helpers'    "RBAbstractClass - extended"
         #'stx:libbasic'    "LibraryDefinition - superclass of jn_refactoring_custom_patches"
     )
@@ -82,6 +83,8 @@
         RBMethod category
         RBMethod info
         RBMethod method
+        AddClassChange primitiveExecute
+        RBMethod package
     )
 ! !
 
--- a/patches/patches.rc	Wed Oct 08 19:50:10 2014 +0200
+++ b/patches/patches.rc	Fri Oct 10 16:28:37 2014 +0200
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
       VALUE "ProductName", "LibraryName\0"
       VALUE "ProductVersion", "6.2.4.1378\0"
-      VALUE "ProductDate", "Wed, 08 Oct 2014 17:38:45 GMT\0"
+      VALUE "ProductDate", "Fri, 10 Oct 2014 14:09:42 GMT\0"
     END
 
   END
--- a/refactoring_custom.rc	Wed Oct 08 19:50:10 2014 +0200
+++ b/refactoring_custom.rc	Fri Oct 10 16:28:37 2014 +0200
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
       VALUE "ProductName", "ProductName\0"
       VALUE "ProductVersion", "6.2.4.1378\0"
-      VALUE "ProductDate", "Wed, 08 Oct 2014 17:38:41 GMT\0"
+      VALUE "ProductDate", "Fri, 10 Oct 2014 14:09:39 GMT\0"
     END
 
   END