Merged 6f639016753b and d77d9a7561be
authorJan Vrany <jan.vrany@fit.cvut.cz>
Sun, 24 Aug 2014 01:49:18 +0100
changeset 635 9edd6a278835
parent 628 6f639016753b (current diff)
parent 634 d77d9a7561be (diff)
child 646 8338755e1088
Merged 6f639016753b and d77d9a7561be
CustomAccessMethodsCodeGenerator.st
CustomChangeNotificationSetterMethodsCodeGenerator.st
CustomCodeGenerator.st
CustomCodeGeneratorClassGenerator.st
CustomCodeGeneratorOrRefactoring.st
CustomCodeGeneratorTestCase.st
CustomCodeGeneratorTestCaseCodeGenerator.st
CustomDefaultGetterMethodsCodeGenerator.st
CustomLazyInitializationGetterMethodsCodeGenerator.st
CustomMultiSetterMethodsCodeGenerator.st
CustomRefactoring.st
CustomSimpleGetterMethodsCodeGenerator.st
CustomSimpleSetterMethodsCodeGenerator.st
CustomSubclassResponsibilityCodeGenerator.st
CustomTestCaseCodeGenerator.st
CustomValueHolderGetterMethodsCodeGenerator.st
CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.st
CustomValueHolderWithChangeNotificationSetterMethodsCodeGenerator.st
CustomVisitorCodeGenerator.st
CustomVisitorCodeGeneratorAcceptVisitorTests.st
Make.proto
Make.spec
abbrev.stc
bc.mak
jn_refactoring_custom.st
libInit.cc
refactoring_custom.rc
--- a/CustomAccessMethodsCodeGenerator.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomAccessMethodsCodeGenerator.st	Sun Aug 24 01:49:18 2014 +0100
@@ -93,7 +93,7 @@
 
             source := self sourceForClass: class variableName: variableName.
 
-            method := builder createMethod.
+            method := codeBuilder createMethod.
             method 
                 class: (self methodClass: class);
                 protocol: self protocol;
--- a/CustomAccessMethodsCodeGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomAccessMethodsCodeGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,17 +1,17 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomAccessMethodsCodeGeneratorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomAccessMethodsCodeGeneratorTests
 	instanceVariableNames:'expectedSource class'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-Refactoring-Custom-Tests'
 !
 
+
 !CustomAccessMethodsCodeGeneratorTests methodsFor:'accessing'!
 
-generator
-
-    ^ mock mockOf: CustomAccessMethodsCodeGenerator
+generatorOrRefactoring
+    ^ mock mockOf:CustomAccessMethodsCodeGenerator
 
     "Modified: / 01-07-2014 / 16:19:16 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
@@ -21,7 +21,7 @@
 test_arg_name_for_method_name_boolean
     | actualArgName |
 
-    actualArgName := generator argNameForMethodName: 'isSomething'.
+    actualArgName := generatorOrRefactoring argNameForMethodName: 'isSomething'.
 
     self assert: 'aBoolean' = actualArgName
 
@@ -31,7 +31,7 @@
 test_arg_name_for_method_name_other
     | actualArgName |
 
-    actualArgName := generator argNameForMethodName: 'selector'.
+    actualArgName := generatorOrRefactoring argNameForMethodName: 'selector'.
 
     self assert: 'something' = actualArgName
 
@@ -46,7 +46,7 @@
 
     context selectedClasses: (Array with: class).
 
-    generator mockSelector: #sourceForClass:variableName: withBlockValue: [
+    generatorOrRefactoring mockSelector: #sourceForClass:variableName: withBlockValue: [
         :aClass :varName |
 
         ^ varName, ' ^ ', varName. 
@@ -54,7 +54,7 @@
 
     methodCount := class methodDictionary size.
 
-    generator executeInContext: context.
+    generatorOrRefactoring executeInContext: context.
 
     self assert: (methodCount + 3) = class methodDictionary size.
 
@@ -82,7 +82,7 @@
     context selectedClasses: (Array with: class).
     context selectedVariables: (Array with: 'instanceVariable_02').
 
-    generator mockSelector: #sourceForClass:variableName: withBlockValue: [
+    generatorOrRefactoring mockSelector: #sourceForClass:variableName: withBlockValue: [
         :aClass :varName |
 
         ^ varName, ' ^ ', varName. 
@@ -90,7 +90,7 @@
 
     methodCount := class methodDictionary size.
 
-    generator executeInContext: context.
+    generatorOrRefactoring executeInContext: context.
 
     self assert: (methodCount + 1) = class methodDictionary size.
 
@@ -111,7 +111,7 @@
     context selectedClasses: (Array with: class).
     context selectedVariables: (Array with: 'instanceVariable_02' with: 'instanceVariable_01').
 
-    generator mockSelector: #sourceForClass:variableName: withBlockValue: [
+    generatorOrRefactoring mockSelector: #sourceForClass:variableName: withBlockValue: [
         :aClass :varName |
 
         ^ varName, ' ^ ', varName. 
@@ -119,7 +119,7 @@
 
     methodCount := class methodDictionary size.
 
-    generator executeInContext: context.
+    generatorOrRefactoring executeInContext: context.
 
     self assert: (methodCount + 2) = class methodDictionary size.
 
@@ -137,7 +137,7 @@
 test_default_method_name_for_variable_name
     | actualDefaultMethodName |
 
-    actualDefaultMethodName := generator defaultMethodNameFor: 'varName'.
+    actualDefaultMethodName := generatorOrRefactoring defaultMethodNameFor: 'varName'.
 
     self assert: 'defaultVarName' = actualDefaultMethodName
 
@@ -147,7 +147,7 @@
 test_method_name_for_all_upper_case
     | actualMethodName |
 
-    actualMethodName := generator methodNameFor: 'VAR'.
+    actualMethodName := generatorOrRefactoring methodNameFor: 'VAR'.
 
     self assert: 'VAR' = actualMethodName
 
@@ -157,7 +157,7 @@
 test_method_name_for_class_variable
     | actualMethodName |
 
-    actualMethodName := generator methodNameFor: 'ClassVar'.
+    actualMethodName := generatorOrRefactoring methodNameFor: 'ClassVar'.
 
     self assert: 'classVar' = actualMethodName
 
@@ -166,7 +166,7 @@
 
 test_method_name_for_instance_variable
 
-    self assert: 'instVar' = (generator methodNameFor: 'instVar')
+    self assert: 'instVar' = (generatorOrRefactoring methodNameFor: 'instVar')
 
     "Created: / 20-06-2014 / 20:35:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
@@ -174,7 +174,7 @@
 test_method_name_for_number
     | actualMethodName |
 
-    actualMethodName := generator methodNameFor: 'Var_7'.
+    actualMethodName := generatorOrRefactoring methodNameFor: 'Var_7'.
 
     self assert: 'var_7' = actualMethodName
 
@@ -191,7 +191,7 @@
 
     self assert: class isMeta.
 
-    actualVarType := generator varTypeOf: 'ClassInstVar2' class: class.
+    actualVarType := generatorOrRefactoring varTypeOf: 'ClassInstVar2' class: class.
 
     self assert: 'classInstVar' = actualVarType
 
@@ -204,7 +204,7 @@
     class := self createClass.
     class instanceVariableNames: 'instVar1 instVar2'.
 
-    actualVarType := generator varTypeOf: 'instVar2' class: class.
+    actualVarType := generatorOrRefactoring varTypeOf: 'instVar2' class: class.
 
     self assert: 'instance' = actualVarType
 
@@ -217,10 +217,17 @@
     class := self createClass.
     class classVariableNames: 'ClassVar1 ClassVar2'.
 
-    actualVarType := generator varTypeOf: 'ClassVar2' class: class.
+    actualVarType := generatorOrRefactoring varTypeOf: 'ClassVar2' class: class.
 
     self assert: 'static' = actualVarType
 
     "Created: / 20-06-2014 / 21:22:15 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
+!CustomAccessMethodsCodeGeneratorTests class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/CustomBrowserContext.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomBrowserContext.st	Sun Aug 24 01:49:18 2014 +0100
@@ -48,11 +48,29 @@
     "Modified: / 26-01-2014 / 23:39:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-selectedCode
+selectedCodes
+    | codeSelection currentMethod codeView |
+
+    currentMethod := state theSingleSelectedMethod.
+    codeView := state codeView.
+
+    (codeView isNil or: [ currentMethod isNil ]) ifTrue: [ 
+        ^ nil
+    ].
 
-    ^ state codeView textView selectionAsString
+    codeSelection := CustomSourceCodeSelection new.
+    codeSelection
+        selectedInterval: codeView selectedInterval;
+        currentSourceCode: codeView contentsAsString; 
+        selectedMethod: currentMethod; 
+        selectedClass: currentMethod mclass;
+        selectedSelector: currentMethod selector.
+        
 
-    "Created: / 05-08-2014 / 21:27:00 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    ^ Array with: codeSelection
+
+    "Created: / 18-08-2014 / 21:34:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 18-08-2014 / 23:51:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 selectedMethodProtocols
--- a/CustomChangeNotificationAccessMethodsCodeGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomChangeNotificationAccessMethodsCodeGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomChangeNotificationAccessMethodsCodeGeneratorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomChangeNotificationAccessMethodsCodeGeneratorTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -10,7 +10,7 @@
 
 !CustomChangeNotificationAccessMethodsCodeGeneratorTests methodsFor:'accessing'!
 
-generator
+generatorOrRefactoring
     ^ CustomChangeNotificationAccessMethodsCodeGenerator new
 ! !
 
--- a/CustomChangeNotificationSetterMethodsCodeGenerator.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomChangeNotificationSetterMethodsCodeGenerator.st	Sun Aug 24 01:49:18 2014 +0100
@@ -58,7 +58,7 @@
         comment := comment bindWith: varType with: aName.
     ].
 
-    methodBuilder := builder methodBuilder.
+    methodBuilder := codeBuilder methodBuilder.
     methodBuilder
         source: '`@methodName
             `"comment
--- a/CustomChangeNotificationSetterMethodsCodeGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomChangeNotificationSetterMethodsCodeGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomChangeNotificationSetterMethodsCodeGeneratorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomChangeNotificationSetterMethodsCodeGeneratorTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,7 +9,7 @@
 
 !CustomChangeNotificationSetterMethodsCodeGeneratorTests methodsFor:'accessing'!
 
-generator
+generatorOrRefactoring
     ^ CustomChangeNotificationSetterMethodsCodeGenerator new
 ! !
 
--- a/CustomCodeGenerator.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomCodeGenerator.st	Sun Aug 24 01:49:18 2014 +0100
@@ -10,17 +10,12 @@
 
 !CustomCodeGenerator class methodsFor:'instance creation'!
 
-new
-    "return an initialized instance"
-
-    ^ self basicNew initialize.
-!
-
 subGeneratorOf: aCodeGenerator
     | codeGenerator nestingCount |
 
     codeGenerator := self new.
-    codeGenerator builder: aCodeGenerator builder.
+    codeGenerator codeBuilder: aCodeGenerator codeBuilder.
+    codeGenerator refactoryBuilder: aCodeGenerator refactoryBuilder.
     codeGenerator userPreferences: aCodeGenerator userPreferences.
     codeGenerator dialog: aCodeGenerator dialog.
     codeGenerator changeManager: aCodeGenerator changeManager.
@@ -33,7 +28,7 @@
     ^ codeGenerator
 
     "Created: / 19-04-2014 / 10:15:21 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 08-07-2014 / 16:57:32 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 23-08-2014 / 00:10:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
 !CustomCodeGenerator class methodsFor:'testing'!
@@ -44,57 +39,6 @@
     "Created: / 26-01-2014 / 21:38:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!CustomCodeGenerator methodsFor:'accessing'!
-
-builder
-
-    ^ builder
-
-    "Created: / 19-04-2014 / 10:16:28 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-builder: aBuilder
-
-    builder := aBuilder
-
-    "Created: / 19-04-2014 / 09:17:03 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomCodeGenerator methodsFor:'code generation'!
-
-addBuilderChanges
-    | change |
-
-    change := builder change.
-    change notNil ifTrue: [
-        self addChange: change 
-    ]
-
-    "Created: / 10-04-2014 / 23:26:12 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 13-05-2014 / 22:10:40 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-createClass: definitionString
-    "Create a new class defined by `definitionString`. 
-    `definitionString` is something like:
-
-    CustomCodeGeneratorOrRefactoring subclass:#CustomCodeGenerator
-        instanceVariableNames:'sourcesInBuildProcess'
-        classVariableNames:''
-        poolDictionaries:''
-        category:'Interface-Refactoring-Custom'     
-
-    "
-
-
-    | classChange  |
-
-    classChange := InteractiveAddClassChange definition: definitionString.
-    self addChange: classChange.
-
-    "Created: / 03-04-2014 / 10:27:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
 !CustomCodeGenerator methodsFor:'executing'!
 
 buildInContext: aCustomContext
@@ -104,18 +48,6 @@
     "Created: / 18-03-2014 / 22:52:09 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
-executeInContext: aCustomContext
-
-    self startCollectChanges.       
-    self buildInContext: aCustomContext.
-    self addBuilderChanges.
-    self executeChangesInContext: aCustomContext changesName: self class description.
-
-    "Created: / 19-03-2014 / 18:45:26 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 03-04-2014 / 11:04:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 07-08-2014 / 23:22:11 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
 executeSubGeneratorClasses: aSubGeneratorClasses inContext: aCustomContext
 
      aSubGeneratorClasses do: [ :aSubGeneratorClass | 
@@ -128,52 +60,6 @@
     "Created: / 08-07-2014 / 18:31:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
-!CustomCodeGenerator methodsFor:'initialization'!
-
-initialize
-
-    super initialize.
-    self setUpBuilder.
-    self setUpDialog.
-    self setUpChangeManager
-
-    "Created: / 17-03-2014 / 22:27:32 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 09-06-2014 / 22:58:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-setUpBuilder
-
-    builder := CustomSourceCodeBuilder new.
-
-    "Created: / 09-06-2014 / 22:56:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-setUpChangeManager
-
-    changeManager := CustomBrowserChangeManager new.
-
-    "Created: / 09-06-2014 / 22:56:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-setUpDialog
-
-    dialog := CustomUserDialog new.
-
-    "Created: / 09-06-2014 / 22:57:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomCodeGenerator methodsFor:'private'!
-
-addSource: source
-
-    source sourceExists ifFalse: [
-        self addChange: (source change).
-    ]
-
-    "Created: / 01-04-2014 / 21:53:54 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 10-04-2014 / 23:07:53 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
 !CustomCodeGenerator class methodsFor:'documentation'!
 
 version_HG
--- a/CustomCodeGeneratorClassGenerator.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomCodeGeneratorClassGenerator.st	Sun Aug 24 01:49:18 2014 +0100
@@ -69,7 +69,7 @@
 
     | subContext generator class |
 
-    class := builder createClass.
+    class := codeBuilder createClass.
     class
         superclassName: 'CustomCodeGenerator';
         className: aClassName;
--- a/CustomCodeGeneratorClassGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomCodeGeneratorClassGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -20,7 +20,7 @@
     self assert: (Smalltalk classNamed: testClassName) isNil.
 
     codeGenerator buildForClassName: testClassName.
-    codeGenerator builder compile.
+    codeGenerator codeBuilder compile.
 
     self assert: (Smalltalk classNamed: testClassName) isNil not.
     self assert: ((Smalltalk classNamed: testClassName) includesSelector: #buildInContext:).
@@ -31,7 +31,7 @@
     (Smalltalk classNamed: testClassName) removeFromSystem.
 
     "Created: / 31-03-2014 / 23:20:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 26-04-2014 / 00:24:55 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 23-08-2014 / 00:09:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 test_code_generator_class_created_with_mock_dialog
--- a/CustomCodeGeneratorOrRefactoring.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomCodeGeneratorOrRefactoring.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,13 +1,21 @@
 "{ Package: 'jn:refactoring_custom' }"
 
 CustomCodeGeneratorOrRefactoringBase subclass:#CustomCodeGeneratorOrRefactoring
-	instanceVariableNames:'dialog changeManager'
+	instanceVariableNames:'dialog changeManager codeBuilder refactoryBuilder'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-Refactoring-Custom'
 !
 
 
+!CustomCodeGeneratorOrRefactoring class methodsFor:'instance creation'!
+
+new
+    "return an initialized instance"
+
+    ^ self basicNew initialize.
+! !
+
 !CustomCodeGeneratorOrRefactoring class methodsFor:'accessing-presentation'!
 
 description
@@ -105,6 +113,20 @@
     "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
@@ -147,6 +169,20 @@
     "Created: / 11-05-2014 / 00:27:49 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
+refactoryBuilder
+
+    ^ refactoryBuilder
+
+    "Modified (format): / 23-08-2014 / 00:14:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+refactoryBuilder: aRefactoryBuilder
+
+    refactoryBuilder := aRefactoryBuilder.
+
+    "Modified (format): / 23-08-2014 / 00:14:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
 userPreferences
 
     ^ userPreferences
@@ -185,6 +221,26 @@
     "Created: / 31-05-2014 / 11:30:11 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
+!CustomCodeGeneratorOrRefactoring methodsFor:'code generation'!
+
+addBuilderChanges
+
+    self addChange: codeBuilder change.
+    self addChange: refactoryBuilder change
+
+    "Created: / 10-04-2014 / 23:26:12 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 23-08-2014 / 15:41:16 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+addChange: aCodeChange
+
+    aCodeChange notNil ifTrue: [
+        super addChange: aCodeChange 
+    ]
+
+    "Created: / 23-08-2014 / 15:40:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
 !CustomCodeGeneratorOrRefactoring methodsFor:'executing'!
 
 executeChangesInContext: aCustomContext changesName: aName
@@ -195,15 +251,15 @@
 !
 
 executeInContext: aCustomContext
-    "Generates the code or perform the refactoring. This method
-     is guaranteed to be called only if #availableInContext: returns
-     true. 
 
-     Called by the UI when user want to perform the task"
+    self startCollectChanges.       
+    self buildInContext: aCustomContext.
+    self addBuilderChanges.
+    self executeChangesInContext: aCustomContext changesName: self class description.
 
-    self subclassResponsibility
-
-    "Created: / 01-12-2013 / 00:15:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 19-03-2014 / 18:45:26 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 03-04-2014 / 11:04:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 07-08-2014 / 23:22:11 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 executeInContextWithWaitCursor: aCustomContext
@@ -225,6 +281,49 @@
     "Created: / 07-08-2014 / 23:17:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
+!CustomCodeGeneratorOrRefactoring methodsFor:'initialization'!
+
+initialize
+
+    super initialize.
+    self setUpCodeBuilder.
+    self setUpRefactoryBuilder.
+    self setUpDialog.
+    self setUpChangeManager
+
+    "Created: / 17-03-2014 / 22:27:32 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 23-08-2014 / 00:06:41 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+setUpChangeManager
+
+    changeManager := CustomBrowserChangeManager new.
+
+    "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.
+
+    "Created: / 09-06-2014 / 22:57:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+setUpRefactoryBuilder
+
+    refactoryBuilder := CustomRefactoryBuilder new.
+
+    "Created: / 23-08-2014 / 00:05:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
 !CustomCodeGeneratorOrRefactoring class methodsFor:'documentation'!
 
 version_HG
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CustomCodeGeneratorOrRefactoringTestCase.st	Sun Aug 24 01:49:18 2014 +0100
@@ -0,0 +1,300 @@
+"{ Package: 'jn:refactoring_custom' }"
+
+TestCase subclass:#CustomCodeGeneratorOrRefactoringTestCase
+	instanceVariableNames:'context codeBuilder refactoryBuilder generatorOrRefactoring
+		classes changeManager userPreferences mock testFormatterSettings
+		originalFormatterSettings'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Refactoring-Custom-Tests'
+!
+
+!CustomCodeGeneratorOrRefactoringTestCase methodsFor:'accessing'!
+
+formatterSettings
+    "see setUpFormatterSettings"
+
+    ^ testFormatterSettings
+
+    "Created: / 21-08-2014 / 12:21:00 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+generatorOrRefactoring
+    "Should return an instance of CustomCodeGenerator or CustomRefactoring subclass"
+    
+    ^ self subclassResponsibility
+
+    "Created: / 27-05-2014 / 19:16:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified (comment): / 23-08-2014 / 11:38:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomCodeGeneratorOrRefactoringTestCase methodsFor:'asserting'!
+
+assertClassExists: aClassName
+
+    self assert: (Smalltalk classNamed: aClassName asString) isNil not
+
+    "Created: / 15-06-2014 / 16:42:19 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+assertClassMethodSource: aSourceCode atSelector: aSelector
+    "Assert that source code is same at given selector for first generated class"
+
+    | className class |
+
+    className := classes first classNameBuilded.
+    class := Smalltalk classNamed: className.
+
+    ^ self assertClassMethodSource: aSourceCode atSelector: aSelector forClass: class
+
+    "Created: / 11-07-2014 / 20:11:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+assertClassMethodSource: expectedSource atSelector: aSelector forClass: aClass
+    "Assert that source code is same at given selector for given class"
+
+    | actualSource |
+
+    actualSource := aClass theMetaclass sourceCodeAt: aSelector asSymbol.
+
+    ^ self assertSource: expectedSource sameAs: actualSource
+
+    "Created: / 11-07-2014 / 20:09:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+assertClassNotExists: aClassName
+
+    self assert: (Smalltalk classNamed: aClassName asString) isNil
+
+    "Created: / 15-06-2014 / 16:42:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+assertMethodSource: aSourceCode atSelector: aSelector
+    "Assert that source code is same at given selector for first generated class"
+
+    | className class |
+
+    className := classes first classNameBuilded.
+    class := Smalltalk classNamed: className.
+
+    ^ self assertMethodSource: aSourceCode atSelector: aSelector forClass: class
+
+    "Created: / 27-05-2014 / 20:06:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 30-05-2014 / 22:36:09 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+assertMethodSource: expectedSource atSelector: aSelector forClass: aClass
+    "Assert that source code is same at given selector for given class"
+
+    | actualSource |
+
+    actualSource := aClass sourceCodeAt: aSelector asSymbol.
+
+    ^ self assertSource: expectedSource sameAs: actualSource
+
+    "Created: / 27-05-2014 / 20:08:32 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+assertSource: expectedSource sameAs: actualSource
+
+    self assert: (Change isSource: expectedSource sameSourceAs: actualSource)
+
+    "Created: / 25-05-2014 / 22:18:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 10-07-2014 / 11:31:19 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomCodeGeneratorOrRefactoringTestCase methodsFor:'code generation helpers'!
+
+createClass
+    "Returns new class change with some name"
+
+    | class |
+
+    class := codeBuilder createClass.
+    class className: 'DummyClassForGeneratorTestCase'.
+    classes add: class.
+
+    ^ class
+
+    "Created: / 29-05-2014 / 23:22:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomCodeGeneratorOrRefactoringTestCase methodsFor:'context templates'!
+
+classWithInstanceVariable
+    | class |
+
+    class := self createClass.
+    class instanceVariableNames: 'instanceVariable'.
+
+    context selectedClasses: (Array with: class)
+
+    "Created: / 29-05-2014 / 00:33:40 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 29-05-2014 / 23:44:20 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+classWithThreeInstanceVariables
+    | class |
+
+    class := self createClass.
+    class instanceVariableNames: 'instanceVariable_01 instanceVariable_02 instanceVariable_03'.
+
+    context selectedClasses: (Array with: class).
+    context selectedVariables: (class instanceVariableNames).
+
+    "Created: / 13-07-2014 / 21:56:12 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+classWithTwoInstanceVariables
+    | class |
+
+    class := self createClass.
+    class instanceVariableNames: 'instanceVariable_01 instanceVariable_02'.
+
+    context selectedClasses: (Array with: class).
+    context selectedVariables: (class instanceVariableNames).
+
+    "Created: / 13-07-2014 / 21:45:06 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomCodeGeneratorOrRefactoringTestCase methodsFor:'executing'!
+
+createContext: contextTemplateName
+    "Creates context by given template name
+    (produces more readable code than just method call)"
+
+    self perform: contextTemplateName asSymbol
+
+    "Created: / 27-07-2014 / 12:27:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+executeGeneratorInContext: contextTemplateName
+    "Executes generator in context created by given name"
+
+    self perform: contextTemplateName asSymbol.
+    generatorOrRefactoring executeInContext: context
+
+    "Created: / 27-05-2014 / 20:03:14 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 29-05-2014 / 23:38:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomCodeGeneratorOrRefactoringTestCase methodsFor:'initialization & release'!
+
+defaultUserPreferences
+
+    userPreferences
+        generateComments: true;
+        generateCommentsForAspectMethods: true;
+        generateCommentsForGetters: true;
+        generateCommentsForSetters: true
+
+    "Created: / 09-06-2014 / 22:36:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+initalizeTestFormatterSettings
+    "see setUpFormatterSettings"
+
+    testFormatterSettings := IdentityDictionary new.
+    testFormatterSettings
+        at: #tabIndent put: 4;  
+        at: #spaceAroundTemporaries put: false;  
+        at: #emptyLineAfterTemporaries put: true;  
+        at: #emptyLineAfterMethodComment put: true;
+        at: #spaceAfterReturnToken put: true;  
+        at: #spaceAfterKeywordSelector put: false;  
+        at: #spaceAfterBlockStart put: true;  
+        at: #spaceBeforeBlockEnd put: true;  
+        at: #cStyleBlocks put: true;  
+        at: #blockArgumentsOnNewLine put: false;  
+        at: #maxLengthForSingleLineBlocks put: 4;
+        at: #periodAfterLastStatementPolicy put: #keep.
+    "
+    EmptyLineBeforeFinalMethodComment := true.
+    SpaceAroundLiteralArrayElements := true.
+    STXStyleMethodComments := true.
+    "
+
+    "Created: / 21-08-2014 / 11:38:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+restoreFormatterSettings
+    "see setUpFormatterSettings"
+
+    originalFormatterSettings keysAndValuesDo: [ :key :value |
+        RBFormatter perform: key asMutator with: value.   
+    ].
+
+    "Created: / 20-08-2014 / 22:25:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+setUp
+
+    classes := OrderedCollection new.
+    mock := CustomMock new.
+
+    context := CustomSubContext new.
+
+    changeManager := CustomLocalChangeManager new.
+    self setUpBuilders.
+
+    userPreferences := UserPreferences new.
+    self defaultUserPreferences.
+    generatorOrRefactoring := self generatorOrRefactoring.
+
+    generatorOrRefactoring isNil ifFalse: [
+        self setUpGeneratorOrRefactoring: generatorOrRefactoring
+    ].
+
+    self initalizeTestFormatterSettings.
+    self setUpFormatterSettings
+
+    "Created: / 27-05-2014 / 19:16:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 23-08-2014 / 16:00:14 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+setUpBuilders
+
+    codeBuilder := CustomSourceCodeBuilder new.
+    codeBuilder changeManager: changeManager.
+
+    refactoryBuilder := CustomRefactoryBuilder new.
+    refactoryBuilder changeManager: changeManager.
+
+    "Created: / 23-08-2014 / 15:57:43 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+setUpFormatterSettings
+    "Settings for RBFormatter to keep formatting settings independent on system settings.
+    Actually this is not perfect solution because of global scope modifications - imagine
+    parallel execution."
+
+    originalFormatterSettings := IdentityDictionary new.
+    testFormatterSettings keysAndValuesDo: [ :key :value |
+        originalFormatterSettings at: key put: (RBFormatter perform: key).
+        RBFormatter perform: key asMutator with: value.   
+    ].
+
+    "Created: / 20-08-2014 / 22:21:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 21-08-2014 / 11:38:24 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+setUpGeneratorOrRefactoring: aGeneratorOrRefactoring
+
+    aGeneratorOrRefactoring codeBuilder: codeBuilder.
+    aGeneratorOrRefactoring refactoryBuilder: refactoryBuilder.
+    aGeneratorOrRefactoring changeManager: changeManager.
+    aGeneratorOrRefactoring userPreferences: userPreferences
+
+    "Created: / 23-08-2014 / 15:59:58 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+tearDown
+
+    self restoreFormatterSettings.
+    changeManager redoChanges.
+    mock unmockAll
+
+    "Created: / 27-05-2014 / 19:26:30 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 23-08-2014 / 15:54:15 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CustomCodeGeneratorOrRefactoringTestCaseTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -0,0 +1,58 @@
+"{ Package: 'jn:refactoring_custom' }"
+
+TestCase subclass:#CustomCodeGeneratorOrRefactoringTestCaseTests
+	instanceVariableNames:'spaceAfterReturnToken maxLengthForSingleLineBlocks
+		blockArgumentsOnNewLine'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Refactoring-Custom-Tests'
+!
+
+!CustomCodeGeneratorOrRefactoringTestCaseTests methodsFor:'initialization & release'!
+
+setUp
+
+    spaceAfterReturnToken := RBFormatter spaceAfterReturnToken.
+    maxLengthForSingleLineBlocks := RBFormatter maxLengthForSingleLineBlocks.
+    blockArgumentsOnNewLine := RBFormatter blockArgumentsOnNewLine.
+
+    "Modified: / 21-08-2014 / 11:53:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+tearDown
+
+    RBFormatter spaceAfterReturnToken: spaceAfterReturnToken.
+    RBFormatter maxLengthForSingleLineBlocks: maxLengthForSingleLineBlocks.
+    RBFormatter blockArgumentsOnNewLine: blockArgumentsOnNewLine.
+
+    "Modified: / 21-08-2014 / 11:54:09 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomCodeGeneratorOrRefactoringTestCaseTests methodsFor:'tests'!
+
+test_formatter_settings_modified_and_then_restored
+    | generatorTestCase |
+
+    generatorTestCase := CustomCodeGeneratorOrRefactoringTestCase new.
+    generatorTestCase initalizeTestFormatterSettings.
+    generatorTestCase formatterSettings
+        at: #spaceAfterReturnToken put: spaceAfterReturnToken not;  
+        at: #maxLengthForSingleLineBlocks put: maxLengthForSingleLineBlocks + 10;
+        at: #blockArgumentsOnNewLine put: blockArgumentsOnNewLine not.
+
+    generatorTestCase setUpFormatterSettings.
+
+    self assert: (RBFormatter spaceAfterReturnToken) == (spaceAfterReturnToken not).
+    self assert: (RBFormatter maxLengthForSingleLineBlocks) == (maxLengthForSingleLineBlocks + 10).
+    self assert: (RBFormatter blockArgumentsOnNewLine) == (blockArgumentsOnNewLine not).
+
+    generatorTestCase restoreFormatterSettings.
+
+    self assert: (RBFormatter spaceAfterReturnToken) == spaceAfterReturnToken.
+    self assert: (RBFormatter maxLengthForSingleLineBlocks) == maxLengthForSingleLineBlocks.
+    self assert: (RBFormatter blockArgumentsOnNewLine) == blockArgumentsOnNewLine.
+
+    "Created: / 21-08-2014 / 11:44:28 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 23-08-2014 / 11:16:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
--- a/CustomCodeGeneratorTestCase.st	Fri Aug 22 19:09:38 2014 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,222 +0,0 @@
-"{ Package: 'jn:refactoring_custom' }"
-
-TestCase subclass:#CustomCodeGeneratorTestCase
-	instanceVariableNames:'context builder generator classes changeManager userPreferences
-		mock'
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Interface-Refactoring-Custom-Tests'
-!
-
-!CustomCodeGeneratorTestCase methodsFor:'accessing'!
-
-generator
-    "Should return an instance of CustomCodeGenerator subclass"
-
-    ^ self subclassResponsibility
-
-    "Created: / 27-05-2014 / 19:16:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomCodeGeneratorTestCase methodsFor:'asserting'!
-
-assertClassExists: aClassName
-
-    self assert: (Smalltalk classNamed: aClassName asString) isNil not
-
-    "Created: / 15-06-2014 / 16:42:19 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-assertClassMethodSource: aSourceCode atSelector: aSelector
-    "Assert that source code is same at given selector for first generated class"
-
-    | className class |
-
-    className := classes first classNameBuilded.
-    class := Smalltalk classNamed: className.
-
-    ^ self assertClassMethodSource: aSourceCode atSelector: aSelector forClass: class
-
-    "Created: / 11-07-2014 / 20:11:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-assertClassMethodSource: expectedSource atSelector: aSelector forClass: aClass
-    "Assert that source code is same at given selector for given class"
-
-    | actualSource |
-
-    actualSource := aClass theMetaclass sourceCodeAt: aSelector asSymbol.
-
-    ^ self assertSource: expectedSource sameAs: actualSource
-
-    "Created: / 11-07-2014 / 20:09:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-assertClassNotExists: aClassName
-
-    self assert: (Smalltalk classNamed: aClassName asString) isNil
-
-    "Created: / 15-06-2014 / 16:42:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-assertMethodSource: aSourceCode atSelector: aSelector
-    "Assert that source code is same at given selector for first generated class"
-
-    | className class |
-
-    className := classes first classNameBuilded.
-    class := Smalltalk classNamed: className.
-
-    ^ self assertMethodSource: aSourceCode atSelector: aSelector forClass: class
-
-    "Created: / 27-05-2014 / 20:06:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 30-05-2014 / 22:36:09 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-assertMethodSource: expectedSource atSelector: aSelector forClass: aClass
-    "Assert that source code is same at given selector for given class"
-
-    | actualSource |
-
-    actualSource := aClass sourceCodeAt: aSelector asSymbol.
-
-    ^ self assertSource: expectedSource sameAs: actualSource
-
-    "Created: / 27-05-2014 / 20:08:32 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-assertSource: expectedSource sameAs: actualSource
-
-    self assert: (Change isSource: expectedSource sameSourceAs: actualSource)
-
-    "Created: / 25-05-2014 / 22:18:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 10-07-2014 / 11:31:19 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomCodeGeneratorTestCase methodsFor:'code generation helpers'!
-
-createClass
-    "Returns new class change with some name"
-
-    | class |
-
-    class := builder createClass.
-    class className: 'DummyClassForGeneratorTestCase'.
-    classes add: class.
-
-    ^ class
-
-    "Created: / 29-05-2014 / 23:22:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomCodeGeneratorTestCase methodsFor:'context templates'!
-
-classWithInstanceVariable
-    | class |
-
-    class := self createClass.
-    class instanceVariableNames: 'instanceVariable'.
-
-    context selectedClasses: (Array with: class)
-
-    "Created: / 29-05-2014 / 00:33:40 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 29-05-2014 / 23:44:20 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-classWithThreeInstanceVariables
-    | class |
-
-    class := self createClass.
-    class instanceVariableNames: 'instanceVariable_01 instanceVariable_02 instanceVariable_03'.
-
-    context selectedClasses: (Array with: class).
-    context selectedVariables: (class instanceVariableNames).
-
-    "Created: / 13-07-2014 / 21:56:12 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-classWithTwoInstanceVariables
-    | class |
-
-    class := self createClass.
-    class instanceVariableNames: 'instanceVariable_01 instanceVariable_02'.
-
-    context selectedClasses: (Array with: class).
-    context selectedVariables: (class instanceVariableNames).
-
-    "Created: / 13-07-2014 / 21:45:06 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomCodeGeneratorTestCase methodsFor:'executing'!
-
-createContext: contextTemplateName
-    "Creates context by given template name
-    (produces more readable code than just method call)"
-
-    self perform: contextTemplateName asSymbol
-
-    "Created: / 27-07-2014 / 12:27:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-executeGeneratorInContext: contextTemplateName
-    "Executes generator in context created by given name"
-
-    self perform: contextTemplateName asSymbol.
-    generator executeInContext: context
-
-    "Created: / 27-05-2014 / 20:03:14 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 29-05-2014 / 23:38:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomCodeGeneratorTestCase methodsFor:'initialization & release'!
-
-defaultUserPreferences
-
-    userPreferences
-        generateComments: true;
-        generateCommentsForAspectMethods: true;
-        generateCommentsForGetters: true;
-        generateCommentsForSetters: true
-
-    "Created: / 09-06-2014 / 22:36:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-setUp
-
-    classes := OrderedCollection new.
-    mock := CustomMock new.
-
-    context := CustomSubContext new.
-    builder := CustomSourceCodeBuilder new.
-    changeManager := CustomLocalChangeManager new.
-    userPreferences := UserPreferences new.
-    self defaultUserPreferences.
-    generator := self generator.
-
-    generator isNil ifFalse: [
-        self setUpGenerator: generator
-    ]
-
-    "Created: / 27-05-2014 / 19:16:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 10-07-2014 / 11:58:11 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-setUpGenerator: aGenerator
-
-    aGenerator builder: builder.
-    aGenerator changeManager: changeManager.
-    aGenerator userPreferences: userPreferences
-
-    "Created: / 10-07-2014 / 11:57:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-tearDown
-
-    builder redoChanges.
-    changeManager redoChanges.
-    mock unmockAll
-
-    "Created: / 27-05-2014 / 19:26:30 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 16-06-2014 / 00:45:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
--- a/CustomCodeGeneratorTestCaseCodeGenerator.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomCodeGeneratorTestCaseCodeGenerator.st	Sun Aug 24 01:49:18 2014 +0100
@@ -52,7 +52,7 @@
     self executeGeneratorInContext: #classWithInstanceVariable.
     self assertMethodSource: expectedSource atSelector: #instanceVariable'.
 
-    builder
+    codeBuilder
         class: aTestClass;
 
         protocol: 'tests';
--- a/CustomCodeGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomCodeGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomCodeGeneratorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomCodeGeneratorTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,7 +9,7 @@
 
 !CustomCodeGeneratorTests methodsFor:'accessing'!
 
-generator
+generatorOrRefactoring
     ^ CustomCodeGenerator new
 ! !
 
@@ -29,7 +29,7 @@
         :aCustomContext |
 
         aCustomContext selectedClasses do:[ :class | 
-            builder
+            codeBuilder
                 source: 'selector_01 ^ 1';
                 createMethod.
         ].
@@ -40,13 +40,13 @@
         :aCustomContext |
 
         aCustomContext selectedClasses do:[ :class | 
-            builder
+            codeBuilder
                 source: 'selector_02 ^ 2';
                 createMethod.
         ].
     ].
 
-    generator
+    generatorOrRefactoring
         executeSubGeneratorClasses: (
             Array
                 with: subGeneratorClass_01
--- a/CustomCodeGeneratorUserPreferencesTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomCodeGeneratorUserPreferencesTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomCodeGeneratorUserPreferencesTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomCodeGeneratorUserPreferencesTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,8 +9,7 @@
 
 !CustomCodeGeneratorUserPreferencesTests methodsFor:'accessing'!
 
-generator
-
+generatorOrRefactoring
     ^ nil
 
     "Modified: / 09-06-2014 / 22:42:50 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CustomCodeSelectionToResourceTranslation.st	Sun Aug 24 01:49:18 2014 +0100
@@ -0,0 +1,82 @@
+"{ Package: 'jn:refactoring_custom' }"
+
+CustomRefactoring subclass:#CustomCodeSelectionToResourceTranslation
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Refactoring-Custom'
+!
+
+!CustomCodeSelectionToResourceTranslation class methodsFor:'documentation'!
+
+documentation
+"
+    Wraps variable, literal, string or expression code selection
+    with following translation call: resources string:'Some string...'
+    Ie.: when 'Some string...' is selected in the code editor then its
+    replaced by: resources string:'Some string...'
+
+    [author:]
+        Jakub Nesveda <nesvejak@fit.cvut.cz>
+
+"
+! !
+
+!CustomCodeSelectionToResourceTranslation class methodsFor:'accessing-presentation'!
+
+description
+    "Returns more detailed description of the receiver"
+
+    ^ 'Wrap code selection with translation call - resources string:'
+
+    "Created: / 21-08-2014 / 23:46:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+label
+    "Returns show label describing the receiver. This label
+     is used in UI as menu item/tree item label."
+
+    ^ 'Selection to Resources Translation'
+
+    "Created: / 21-08-2014 / 23:43:03 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomCodeSelectionToResourceTranslation class methodsFor:'queries'!
+
+availableInContext:aCustomContext
+    "Returns true if the generator/refactoring is available in given
+     context, false otherwise.
+     
+     Called by the UI to figure out what generators / refactorings
+     are available at given point. See class CustomContext for details."
+
+    ^ true
+
+    "Created: / 21-08-2014 / 23:28:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+availableInPerspective:aCustomPerspective
+    "Returns true if the generator/refactoring is available in given
+     perspective, false otherwise.
+     
+     Called by the UI to figure out what generators / refactorings
+     to show"
+
+    ^ true
+
+    "Created: / 21-08-2014 / 23:28:34 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomCodeSelectionToResourceTranslation methodsFor:'executing'!
+
+buildInContext:aCustomContext
+    "Performs a refactoring within given context scope"
+
+    refactoryBuilder
+        replace: '``@expression'
+        with: '(resources string: (``@expression))'
+        inCodes: aCustomContext selectedCodes
+
+    "Created: / 23-08-2014 / 00:16:58 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
--- a/CustomContext.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomContext.st	Sun Aug 24 01:49:18 2014 +0100
@@ -37,12 +37,14 @@
     "Modified (comment): / 26-04-2014 / 22:38:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
-selectedCode
-    "a string with selected source code"
+selectedCodes
+    "a collection with source codes (CustomSourceCodeSelection) 
+    with selected interval (exact position in source code) and
+    corresponding class, method, selector."
 
     self subclassResponsibility
 
-    "Created: / 05-08-2014 / 21:20:36 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Created: / 18-08-2014 / 21:28:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 selectedMethodProtocols
--- a/CustomDefaultGetterMethodsCodeGenerator.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomDefaultGetterMethodsCodeGenerator.st	Sun Aug 24 01:49:18 2014 +0100
@@ -50,7 +50,7 @@
         comment := comment bindWith: aName.
     ].
 
-    methodBuilder := builder methodBuilder.
+    methodBuilder := codeBuilder methodBuilder.
     methodBuilder
         source: '`@methodName
             `"comment
--- a/CustomDefaultGetterMethodsCodeGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomDefaultGetterMethodsCodeGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomDefaultGetterMethodsCodeGeneratorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomDefaultGetterMethodsCodeGeneratorTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,7 +9,7 @@
 
 !CustomDefaultGetterMethodsCodeGeneratorTests methodsFor:'accessing'!
 
-generator
+generatorOrRefactoring
     ^ CustomDefaultGetterMethodsCodeGenerator new
 ! !
 
--- a/CustomLazyInitializationAccessMethodsCodeGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomLazyInitializationAccessMethodsCodeGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomLazyInitializationAccessMethodsCodeGeneratorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomLazyInitializationAccessMethodsCodeGeneratorTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,7 +9,7 @@
 
 !CustomLazyInitializationAccessMethodsCodeGeneratorTests methodsFor:'accessing'!
 
-generator
+generatorOrRefactoring
     ^ CustomLazyInitializationAccessMethodsCodeGenerator new
 ! !
 
--- a/CustomLazyInitializationGetterMethodsCodeGenerator.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomLazyInitializationGetterMethodsCodeGenerator.st	Sun Aug 24 01:49:18 2014 +0100
@@ -58,7 +58,7 @@
         comment := comment bindWith: varType with: aName.
     ].
 
-    methodBuilder := builder methodBuilder.
+    methodBuilder := codeBuilder methodBuilder.
     methodBuilder
         source: '`@methodName
             `"comment
--- a/CustomLazyInitializationGetterMethodsCodeGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomLazyInitializationGetterMethodsCodeGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomLazyInitializationGetterMethodsCodeGeneratorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomLazyInitializationGetterMethodsCodeGeneratorTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,7 +9,7 @@
 
 !CustomLazyInitializationGetterMethodsCodeGeneratorTests methodsFor:'accessing'!
 
-generator
+generatorOrRefactoring
     ^ CustomLazyInitializationGetterMethodsCodeGenerator new
 ! !
 
--- a/CustomLocalChangeManager.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomLocalChangeManager.st	Sun Aug 24 01:49:18 2014 +0100
@@ -42,21 +42,24 @@
 
 performChange: aRefactoringChange
 
+    "/ Transcript showCR: 'EXECUTE: ', aRefactoringChange asString.  
+
     executedChanges add: aRefactoringChange execute
 
-    "Modified: / 31-05-2014 / 19:28:43 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 23-08-2014 / 15:52:03 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 redoChanges
     "redo all changes made by performChange: method"
 
     executedChanges reversed do: [ :change | 
+        "/ Transcript showCR: 'REDO: ', change asString.  
         change execute
     ].
 
     executedChanges removeAll
 
     "Created: / 31-05-2014 / 19:29:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 15-06-2014 / 17:02:42 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 23-08-2014 / 15:51:55 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
--- a/CustomMultiSetterMethodsCodeGenerator.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomMultiSetterMethodsCodeGenerator.st	Sun Aug 24 01:49:18 2014 +0100
@@ -7,6 +7,7 @@
 	category:'Interface-Refactoring-Custom'
 !
 
+
 !CustomMultiSetterMethodsCodeGenerator class methodsFor:'accessing-presentation'!
 
 description
@@ -76,7 +77,7 @@
         assignVariablesCode := assignVariablesCode, variableName asString, ' := ', argumentName, '. '.
     ].
 
-    method := builder createMethod.
+    method := codeBuilder createMethod.
     method
         class: aClass;
         protocol: 'accessing';
@@ -106,3 +107,10 @@
     "Modified: / 13-07-2014 / 20:45:41 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
+!CustomMultiSetterMethodsCodeGenerator class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/CustomMultiSetterMethodsCodeGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomMultiSetterMethodsCodeGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomMultiSetterMethodsCodeGeneratorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomMultiSetterMethodsCodeGeneratorTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,7 +9,7 @@
 
 !CustomMultiSetterMethodsCodeGeneratorTests methodsFor:'accessing'!
 
-generator
+generatorOrRefactoring
     ^ CustomMultiSetterMethodsCodeGenerator new
 ! !
 
@@ -20,7 +20,7 @@
     context
         selectedClasses: (Array with: self class).
 
-    self assert: (generator class availableInContext: context) not.
+    self assert: (generatorOrRefactoring class availableInContext: context) not.
 
     "Created: / 13-07-2014 / 20:11:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
@@ -31,7 +31,7 @@
         selectedClasses: (Array with: self class);
         selectedVariables: (Array with: 'var_01').
 
-    self assert: (generator class availableInContext: context) not.
+    self assert: (generatorOrRefactoring class availableInContext: context) not.
 
     "Created: / 13-07-2014 / 20:08:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
@@ -42,7 +42,7 @@
         selectedClasses: (Array with: self class);
         selectedVariables: (Array with: 'var_01' with: 'var_02' with: 'var_03').
 
-    self assert: (generator class availableInContext: context).
+    self assert: (generatorOrRefactoring class availableInContext: context).
 
     "Created: / 13-07-2014 / 20:10:29 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
@@ -53,7 +53,7 @@
         selectedClasses: (Array with: self class);
         selectedVariables: (Array with: 'var_01' with: 'var_02').
 
-    self assert: (generator class availableInContext: context).
+    self assert: (generatorOrRefactoring class availableInContext: context).
 
     "Created: / 13-07-2014 / 20:09:36 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CustomParseTreeRewriter.st	Sun Aug 24 01:49:18 2014 +0100
@@ -0,0 +1,31 @@
+"{ Package: 'jn:refactoring_custom' }"
+
+ParseTreeRewriter subclass:#CustomParseTreeRewriter
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Refactoring-Custom'
+!
+
+!CustomParseTreeRewriter class methodsFor:'documentation'!
+
+documentation
+"
+    A small hack to initialize true ParseTreeRewriter - its current implementation returns ParseTreeSourceRewriter.
+
+    [author:]
+        Jakub Nesveda <nesvejak@fit.cvut.cz>
+
+"
+! !
+
+!CustomParseTreeRewriter class methodsFor:'instance creation'!
+
+new
+    "A small hack not to use ParseTreeSourceRewriter, but ParseTreeRewriter"
+
+    ^self basicNew initialize.
+
+    "Created: / 13-08-2014 / 00:23:19 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
--- a/CustomRefactoring.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomRefactoring.st	Sun Aug 24 01:49:18 2014 +0100
@@ -16,32 +16,6 @@
     "Created: / 26-01-2014 / 21:39:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!CustomRefactoring methodsFor:'executing'!
-
-executeInContext: aCustomContext
-    "Generates the code or perform the refactoring. This method
-     is guaranteed to be called only if #availableInContext: returns
-     true.
-     
-     Called by the UI when user want to perform the task"
-
-
-    self startCollectChanges.
-    self refactorInContext: aCustomContext.
-    self executeChangesInContext: aCustomContext changesName: self class description.
-
-    "Created: / 07-08-2014 / 22:54:12 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 11-08-2014 / 23:07:13 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-refactorInContext: aCustomContext
-    "Performs a refactoring within given context scope"
-
-    ^ self subclassResponsibility
-
-    "Created: / 07-08-2014 / 23:27:28 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
 !CustomRefactoring class methodsFor:'documentation'!
 
 version_HG
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CustomRefactoryBuilder.st	Sun Aug 24 01:49:18 2014 +0100
@@ -0,0 +1,260 @@
+"{ Package: 'jn:refactoring_custom' }"
+
+RefactoryBuilder subclass:#CustomRefactoryBuilder
+	instanceVariableNames:'changeManager'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Refactoring-Custom'
+!
+
+!CustomRefactoryBuilder class methodsFor:'documentation'!
+
+documentation
+"
+    Encapsulates performing refactoring changes on the source code within single object. 
+    Single refactorings are stored as change objects which represens changes in the source code.
+
+    [author:]
+        Jakub Nesveda <nesvejak@fit.cvut.cz> 
+
+"
+! !
+
+!CustomRefactoryBuilder methodsFor:'accessing'!
+
+change
+    "Returns single code change from collected code changes."
+
+    | change |
+
+    changes isEmpty ifTrue: [ 
+        ^ nil
+    ].
+
+    change := CompositeRefactoryChange new.
+
+    changes do: [ :codeChange | 
+        change addChange: codeChange
+    ].
+
+    ^ change
+
+    "Created: / 15-08-2014 / 00:45:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified (comment): / 17-08-2014 / 17:16:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+changeManager
+    ^ changeManager
+!
+
+changeManager:something
+    changeManager := something.
+!
+
+searcher
+
+    ^ ParseTreeSearcher new
+
+    "Created: / 16-08-2014 / 22:13:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomRefactoryBuilder methodsFor:'compiling'!
+
+execute
+    "
+    Most likely as compile method, but without undo change
+    in global RefactoryChangeManager
+    (true for CustomLocalChangeManager changeManager implementation)
+    "
+
+    changeManager performChange: self change
+
+    "Created: / 15-08-2014 / 00:45:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+redoChanges
+    "redo all changes made by execute method"
+
+    changeManager redoChanges
+
+    "Created: / 15-08-2014 / 00:46:47 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomRefactoryBuilder methodsFor:'initialization'!
+
+initialize
+    "Invoked when a new instance is created."
+
+    super initialize.
+    changeManager := CustomLocalChangeManager new.
+
+    "Created: / 15-08-2014 / 00:42:39 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomRefactoryBuilder methodsFor:'refactory-changes'!
+
+executeReplace: searchPattern with: rewritePattern inMethod: aMethod
+    "Executes replace in a method source and then creates a method change"
+
+    | newTree change |
+
+    newTree := (CustomParseTreeRewriter new)
+        replace: searchPattern with: rewritePattern;
+        executeTree: aMethod parseTree;
+        tree.
+
+    change := InteractiveAddMethodChange
+        compile: newTree newSource 
+        in: aMethod mclass 
+        classified: aMethod category.
+
+    changes add: change
+
+    "Created: / 17-08-2014 / 18:45:20 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+replace: searchPattern with: rewritePattern inContext: aCustomContext
+    "Searches for given pattern in methods source code and if source code matches then executes replacement"
+
+    self 
+        search: searchPattern 
+        inContext: aCustomContext 
+        withResultDo: [ :method |
+            self executeReplace: searchPattern with: rewritePattern inMethod: method 
+        ]
+
+    "Created: / 16-08-2014 / 19:15:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified (comment): / 17-08-2014 / 19:30:11 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomRefactoryBuilder methodsFor:'searching'!
+
+search: searchPattern inClass: aClass withResultDo: aBlock
+    | methods |
+
+    methods := OrderedCollection new.
+
+    methods addAll: aClass theNonMetaclass methodDictionary values.    
+    methods addAll: aClass theMetaclass methodDictionary values.
+
+    self search: searchPattern inMethods: methods withResultDo: aBlock
+
+    "Created: / 17-08-2014 / 13:15:03 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 17-08-2014 / 17:18:27 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+search: searchPattern inClassCategories: aCategoryCollection withResultDo: aBlock
+
+    "To be implemented"
+
+    "Created: / 17-08-2014 / 16:21:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+search: searchPattern inClasses: aClassCollection withResultDo: aBlock
+
+    aClassCollection do:[ :class | 
+        self search: searchPattern inClass: class withResultDo: aBlock
+    ].
+
+    "Created: / 17-08-2014 / 16:21:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+search: searchPattern inCodes: aCodeSelectionCollection withResultDo: aBlock
+
+    "To be implemented"
+
+    "Created: / 21-08-2014 / 21:22:13 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+search: searchPattern inContext: aCustomContext withResultDo: aBlock
+    "Searches for source code pattern in whole context which contains code, methods, classes... "
+
+    aCustomContext selectedCodes notNil ifTrue: [ 
+        self 
+            search: searchPattern 
+            inCodes: aCustomContext selectedCodes
+            withResultDo: aBlock
+    ].
+
+    aCustomContext selectedMethods notNil ifTrue: [ 
+        self 
+            search: searchPattern 
+            inMethods: aCustomContext selectedMethods
+            withResultDo: aBlock
+    ].
+
+    aCustomContext selectedMethodProtocols notNil ifTrue: [ 
+        self 
+            search: searchPattern 
+            inMethodProtocols: aCustomContext selectedMethodProtocols
+            withResultDo: aBlock
+    ].
+
+    aCustomContext selectedClasses notNil ifTrue: [ 
+        self 
+            search: searchPattern 
+            inClasses: aCustomContext selectedClasses
+            withResultDo: aBlock
+    ].
+
+    aCustomContext selectedClassCategories notNil ifTrue: [ 
+        self 
+            search: searchPattern 
+            inClassCategories: aCustomContext selectedClassCategories
+            withResultDo: aBlock
+    ].
+
+    aCustomContext selectedPackages notNil ifTrue: [ 
+        self 
+            search: searchPattern 
+            inPackages: aCustomContext selectedPackages
+            withResultDo: aBlock
+    ].
+
+    "Created: / 17-08-2014 / 16:21:24 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 21-08-2014 / 21:22:03 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+search: searchPattern inMethod: aMethod withResultDo: aBlock
+    | parseTree |
+
+    parseTree := aMethod parseTree.    
+
+    parseTree isNil ifTrue: [ 
+        self error: 'Cannot retrieve parseTree for method: ', aMethod asString.
+    ]
+    ifFalse: [
+        (self searcher)
+            matches: searchPattern do: [ :aNode :answer |
+                aBlock value: aMethod  
+            ];
+            executeTree: parseTree
+    ].
+
+    "Created: / 16-08-2014 / 22:27:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+search: searchPattern inMethodProtocols: aProtocolCollection withResultDo: aBlock
+
+    "To be implemented"
+
+    "Created: / 17-08-2014 / 16:21:21 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+search: searchPattern inMethods: aMethodCollection withResultDo: aBlock
+
+    aMethodCollection do: [ :method | 
+        self search: searchPattern inMethod: method withResultDo: aBlock
+    ].
+
+    "Created: / 17-08-2014 / 11:56:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 17-08-2014 / 20:35:16 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+search: searchPattern inPackages: aPackageCollection withResultDo: aBlock
+
+    "To be implemented"
+
+    "Created: / 17-08-2014 / 16:21:24 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
--- a/CustomReplaceIfNilWithIfTrueRefactoring.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomReplaceIfNilWithIfTrueRefactoring.st	Sun Aug 24 01:49:18 2014 +0100
@@ -54,66 +54,14 @@
 
 !CustomReplaceIfNilWithIfTrueRefactoring methodsFor:'executing'!
 
-refactorInContext:aCustomContext
+buildInContext: aCustomContext
     "Performs a refactoring within given context scope"
 
-    ^ self
+    refactoryBuilder
         replace: '``@receiver ifNil: ``@nilBlock ifNotNil: ``@notNilBlock'
         with: '``@receiver isNil ifTrue: ``@nilBlock ifFalse: ``@notNilBlock'
         inContext: aCustomContext
 
-    "Created: / 07-08-2014 / 23:29:28 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 09-08-2014 / 12:54:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-replace: searchPattern with: rewritePattern inContext: aCustomContext
-    | matchedMethods |
-
-    matchedMethods := OrderedCollection new.
-
-    aCustomContext selectedClasses do: [ :class |
-        | methods |
-
-        methods := OrderedCollection new.
-
-        methods addAll: class theNonMetaclass methodDictionary values. 
-        methods addAll: class theMetaclass methodDictionary values.
-
-        methods do:[ :method | 
-            | parseTree |
-
-            parseTree := method parseTree.    
-
-            parseTree isNil ifTrue: [ 
-                self error: 'Cannot retrieve parseTree for method: ', method asString.
-            ]
-            ifFalse: [
-                (ParseTreeSearcher new)
-                    matches: searchPattern do: [ :aNode :answer |
-                        matchedMethods add: method
-                    ];
-                    executeTree: parseTree
-            ].
-        ].
-    ].
-
-    matchedMethods do: [ :method | 
-        | newTree change |
-
-        newTree := (ParseTreeRewriter new)
-            replace: searchPattern with: rewritePattern;
-            executeTree: method parseTree;
-            tree.
-        Transcript showCR: newTree newSource.  
-        change := InteractiveAddMethodChange
-            compile: newTree newSource 
-            in: method mclass 
-            classified: method category.
-
-        self addChange: change  
-    ].
-
-    "Created: / 09-08-2014 / 12:54:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 11-08-2014 / 23:20:24 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Created: / 23-08-2014 / 00:17:55 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
--- a/CustomReplaceIfNilWithIfTrueRefactoringTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomReplaceIfNilWithIfTrueRefactoringTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomReplaceIfNilWithIfTrueRefactoringTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomReplaceIfNilWithIfTrueRefactoringTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,30 +9,17 @@
 
 !CustomReplaceIfNilWithIfTrueRefactoringTests methodsFor:'accessing'!
 
-generator
+generatorOrRefactoring
     ^ CustomReplaceIfNilWithIfTrueRefactoring new
 ! !
 
-!CustomReplaceIfNilWithIfTrueRefactoringTests methodsFor:'initialization & release'!
-
-setUpGenerator: aGenerator
-
-    "/ aGenerator builder: builder.
-    aGenerator changeManager: changeManager.
-    aGenerator userPreferences: userPreferences
-
-    "Created: / 10-08-2014 / 10:02:42 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
 !CustomReplaceIfNilWithIfTrueRefactoringTests methodsFor:'tests'!
 
 test_if_nil_replaced_with_is_nil_if_true
     | expectedSource class method |
 
-    self skipIf: true description: 'Incomplete'.
-"
-    class := builder createClassImmediate: 'DummyClassForTestCase01'.
-    method := builder createMethod.
+    class := codeBuilder createClassImmediate: 'DummyClassForTestCase01'.
+    method := codeBuilder createMethod.
     method
         class: class;
         protocol: 'protocol';
@@ -42,22 +29,22 @@
         ]
         ifNotNil: [ self information: ''info'' ].
         '.
-"
-    class := TestClass.
+
     context selectedClasses: (Array with: class).  
-    "/builder execute.
+    codeBuilder execute.
+
+    generatorOrRefactoring executeInContext: context.
 
-    generator executeInContext: context.
-
-    expectedSource := 'selector: arg
-        arg isNil ifTrue: [ 
-            self warn: ''nil''.
-        ]
-        ifFalse: [ self information: ''info'' ].'.
+    expectedSource := 'selector:arg 
+    arg isNil ifTrue:[
+        self warn:''nil''.
+    ] ifFalse:[
+        self information:''info''
+    ].'.
 
     self assertMethodSource: expectedSource atSelector: #selector: forClass: class.
 
     "Created: / 10-08-2014 / 09:42:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 12-08-2014 / 01:16:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 13-08-2014 / 00:33:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
--- a/CustomSimpleAccessMethodsCodeGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomSimpleAccessMethodsCodeGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomSimpleAccessMethodsCodeGeneratorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomSimpleAccessMethodsCodeGeneratorTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,7 +9,7 @@
 
 !CustomSimpleAccessMethodsCodeGeneratorTests methodsFor:'accessing'!
 
-generator
+generatorOrRefactoring
     ^ CustomSimpleAccessMethodsCodeGenerator new
 ! !
 
--- a/CustomSimpleGetterMethodsCodeGenerator.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomSimpleGetterMethodsCodeGenerator.st	Sun Aug 24 01:49:18 2014 +0100
@@ -54,7 +54,7 @@
         comment := comment bindWith: varType with: aName.
     ].  
 
-    methodBuilder := builder methodBuilder.
+    methodBuilder := codeBuilder methodBuilder.
     methodBuilder
         source: '`@methodName
         `"comment
--- a/CustomSimpleGetterMethodsCodeGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomSimpleGetterMethodsCodeGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomSimpleGetterMethodsCodeGeneratorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomSimpleGetterMethodsCodeGeneratorTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,8 +9,7 @@
 
 !CustomSimpleGetterMethodsCodeGeneratorTests methodsFor:'accessing'!
 
-generator
-
+generatorOrRefactoring
     ^ CustomSimpleGetterMethodsCodeGenerator new
 
     "Modified: / 29-05-2014 / 00:07:09 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
--- a/CustomSimpleSetterMethodsCodeGenerator.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomSimpleSetterMethodsCodeGenerator.st	Sun Aug 24 01:49:18 2014 +0100
@@ -58,7 +58,7 @@
         comment := comment bindWith: varType with: aName.
     ].
 
-    methodBuilder := builder methodBuilder.
+    methodBuilder := codeBuilder methodBuilder.
     methodBuilder
         source: '`@methodName
             `"comment
--- a/CustomSimpleSetterMethodsCodeGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomSimpleSetterMethodsCodeGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomSimpleSetterMethodsCodeGeneratorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomSimpleSetterMethodsCodeGeneratorTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,7 +9,7 @@
 
 !CustomSimpleSetterMethodsCodeGeneratorTests methodsFor:'accessing'!
 
-generator
+generatorOrRefactoring
     ^ CustomSimpleSetterMethodsCodeGenerator new
 ! !
 
--- a/CustomSimpleTestCaseCodeGenerator.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomSimpleTestCaseCodeGenerator.st	Sun Aug 24 01:49:18 2014 +0100
@@ -25,7 +25,7 @@
 
 buildForClass: aClass testClass: aTestClass
 
-    builder
+    codeBuilder
         class: aTestClass;
 
         protocol: 'tests';
--- a/CustomSourceCodeBuilder.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomSourceCodeBuilder.st	Sun Aug 24 01:49:18 2014 +0100
@@ -56,6 +56,14 @@
     "Created: / 24-03-2014 / 09:02:36 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
+changeManager
+    ^ changeManager
+!
+
+changeManager:something
+    changeManager := something.
+!
+
 codeBuilds
     ^ codeBuilds
 ! !
@@ -654,11 +662,13 @@
 
     "/ Transcript showCR: 'SRC2::: ', method source asString.
     "/ Transcript showCR: 'BODY::: ', method body asString.
+    "/ Transcript showCR: 'CLASS::: ', method className.
+    "/ Transcript showCR: '-----------'.
 
     ^ method formattedCode
 
     "Created: / 18-05-2014 / 16:48:27 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 03-07-2014 / 15:38:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 21-08-2014 / 12:19:26 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 category:aString
--- a/CustomSourceCodeBuilderTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomSourceCodeBuilderTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomSourceCodeBuilderTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomSourceCodeBuilderTests
 	instanceVariableNames:'refactoryChangeManager'
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,9 +9,8 @@
 
 !CustomSourceCodeBuilderTests methodsFor:'accessing'!
 
-generator
-
-   ^ nil
+generatorOrRefactoring
+    ^ nil
 
     "Modified: / 31-05-2014 / 22:48:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
@@ -46,7 +45,7 @@
 test_all_class_var_names
     | class actualClassVars expectedClassVars |
 
-    class := builder createClass.
+    class := codeBuilder createClass.
     class
         className: 'MockClassForTestCase';
         classVariableNames: 'ClassVar1 ClassVar2'.
@@ -62,7 +61,7 @@
 
 test_builder_change_nil_as_default
 
-    self assert: builder change isNil.
+    self assert: codeBuilder change isNil.
 
     "Created: / 22-07-2014 / 22:52:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
@@ -72,7 +71,7 @@
 
     class := self class.
 
-    builder
+    codeBuilder
         class: class;
         protocol: 'a protocol';
         source: '`@selector
@@ -86,7 +85,7 @@
     self assert: (class includesSelector: #aSelector) not.
     self assert: (class includesSelector: #aSelector2) not.
 
-    builder execute.
+    codeBuilder execute.
 
     self assert: (class includesSelector: #aSelector).
     self assert: (class includesSelector: #aSelector2).
@@ -106,7 +105,7 @@
 
     className := 'TestClassNameForTestCase'.
 
-    class := builder
+    class := codeBuilder
         className: className;
         classVariableNames: 'ClassVar1 ClassVar2';
         instanceVariableNames: 'instVar1 instVar2';
@@ -115,7 +114,7 @@
         category: 'Some-Category';
         createClass.
 
-    builder 
+    codeBuilder 
         class: class;
         protocol: 'a protocol';
         source: '`@selector
@@ -125,7 +124,7 @@
 
     self assertClassNotExists: className.
 
-    builder execute.
+    codeBuilder execute.
 
     class := Smalltalk classNamed: className.
 
@@ -155,13 +154,13 @@
 
     self assertClassNotExists: className.
 
-    builder := CustomSourceCodeBuilder new.
-    class := builder createClass.
+    codeBuilder := CustomSourceCodeBuilder new.
+    class := codeBuilder createClass.
     class className: className.  
 
     self assertClassNotExists: className.
 
-    method := builder createMethod.
+    method := codeBuilder createMethod.
     method 
         class: class theMetaclass;
         protocol: 'a protocol';
@@ -171,7 +170,7 @@
     self assertClassNotExists: className.
     self assert: lastUndoChange = (self lastUndoChange).
 
-    builder compile.
+    codeBuilder compile.
 
     self assertClassExists: className.
     self assert: (lastUndoChange = (self lastUndoChange)) not.
@@ -196,13 +195,13 @@
 
     self assertClassNotExists: className.
 
-    builder := CustomSourceCodeBuilder new.
-    class := builder createClass.
+    codeBuilder := CustomSourceCodeBuilder new.
+    class := codeBuilder createClass.
     class className: className.  
 
     self assertClassNotExists: className.
 
-    method := builder createMethod.
+    method := codeBuilder createMethod.
     method 
         class: class;
         protocol: 'a protocol';
@@ -212,7 +211,7 @@
     self assertClassNotExists: className.
     self assert: lastUndoChange = (self lastUndoChange).
 
-    builder compile.
+    codeBuilder compile.
 
     self assertClassExists: className.
     self assert: (lastUndoChange = (self lastUndoChange)) not.
@@ -232,7 +231,7 @@
 
     class := self class.
 
-    method := builder createMethod.
+    method := codeBuilder createMethod.
     method 
         class: self class;
         protocol: 'a protocol';
@@ -242,7 +241,7 @@
 
     self assert: (class includesSelector: #aSelector) not.
 
-    builder execute.
+    codeBuilder execute.
 
     generatedSource := (class sourceCodeAt: #aSelector).
     expectedSource := 'aSelector
@@ -263,7 +262,7 @@
 test_create_class_immediate
     | mockClass |
 
-    mockClass := builder createClassImmediate: 'MockClassForTestCase'.
+    mockClass := codeBuilder createClassImmediate: 'MockClassForTestCase'.
 
     self assert: mockClass new className = 'MockClassForTestCase'.
     self assert: mockClass superclass new className = 'Object'.
@@ -279,7 +278,7 @@
 test_create_class_immediate_with_given_super_class_name
     | mockClass |
 
-    mockClass := builder createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
+    mockClass := codeBuilder createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
 
     self assert: mockClass new className = 'MockClassForTestCase'.
     self assert: mockClass superclass new className = 'Object'.
@@ -297,8 +296,8 @@
     expectedSource := 'instanceMethod:aParam
     ^ self'.
 
-    mockClass := builder createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
-    builder createMethodImmediate: mockClass protocol: 'a protocol' source: expectedSource.
+    mockClass := codeBuilder createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
+    codeBuilder createMethodImmediate: mockClass protocol: 'a protocol' source: expectedSource.
 
     actualSource := (mockClass sourceCodeAt: #instanceMethod:).
 
@@ -311,8 +310,8 @@
 
 test_empty_class_not_in_change
 
-    builder createClass.
-    self assert: builder change isNil.
+    codeBuilder createClass.
+    self assert: codeBuilder change isNil.
 
     "Created: / 22-07-2014 / 22:22:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
@@ -320,7 +319,7 @@
 test_method_source_builded
     | methodBuilder source |
 
-    methodBuilder := builder methodBuilder.
+    methodBuilder := codeBuilder methodBuilder.
     methodBuilder
         source: '`@methodName
 
@@ -341,7 +340,7 @@
 test_method_source_builded_with_comment
     | methodBuilder buildedSource expectedSource |
 
-    methodBuilder := builder methodBuilder.
+    methodBuilder := codeBuilder methodBuilder.
     methodBuilder
         source: '`@methodName
 
@@ -375,7 +374,7 @@
 
     collection do: [ each | each call ].'.
 
-    methodBuilder := builder methodBuilder.
+    methodBuilder := codeBuilder methodBuilder.
     methodBuilder
         source: originalSource;
         replace: '`variableName' with: 'collection'.
@@ -389,8 +388,8 @@
 
 test_nil_changes_not_in_change_collector
 
-    builder createMethod.
-    self assert: builder change isNil.
+    codeBuilder createMethod.
+    self assert: codeBuilder change isNil.
 
     "Created: / 22-07-2014 / 22:16:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
@@ -399,12 +398,12 @@
 
     | method |
 
-    builder createMethod.
-    method := builder createMethod.
+    codeBuilder createMethod.
+    method := codeBuilder createMethod.
     method source: 'some ^ 5'.
 
-    self assert: builder codeBuilds length = 2.
-    self assert: builder change isNil.
+    self assert: codeBuilder codeBuilds length = 2.
+    self assert: codeBuilder change isNil.
 
     "Created: / 22-07-2014 / 22:39:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
@@ -416,10 +415,10 @@
     classNames := Array with: 'DummyClassForTestCase1' with: 'DummyClassForTestCase2'.
 
     classNames do: [ :className |
-        classCollection add: (builder className: className; createClass).
+        classCollection add: (codeBuilder className: className; createClass).
     ].
 
-    builder
+    codeBuilder
         classes: classCollection;
         protocol: 'a protocol';
         source: '`@selector
@@ -427,7 +426,7 @@
         replace: '`@selector' with: 'aSelector';
         createMethod.
 
-    builder execute.
+    codeBuilder execute.
 
     classNames do: [ :className |
         | class method |
@@ -451,21 +450,21 @@
     mockSuperClassName := 'MockSuperClassForTestCase'.
     mockClassName := 'MockClassForTestCase'.
 
-    mockSuperClass := builder createClassImmediate: mockSuperClassName superClassName: 'Object'.
-    builder createClassImmediate: mockClassName superClassName: mockSuperClassName.
+    mockSuperClass := codeBuilder createClassImmediate: mockSuperClassName superClassName: 'Object'.
+    codeBuilder createClassImmediate: mockClassName superClassName: mockSuperClassName.
 
     "/ Instance method
-    builder createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
+    codeBuilder createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
     self shouldImplement'.
 
     "/ Class method
-    builder createMethodImmediate: mockSuperClass class protocol: 'class-protocol' source: 'classMethod: aParam
+    codeBuilder createMethodImmediate: mockSuperClass class protocol: 'class-protocol' source: 'classMethod: aParam
     self shouldImplement'.
 
     self assertClassExists: mockSuperClassName.
     self assertClassExists: mockClassName.
 
-    builder redoChanges.
+    codeBuilder redoChanges.
 
     self assertClassNotExists: mockSuperClassName.
     self assertClassNotExists: mockClassName.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CustomSourceCodeSelection.st	Sun Aug 24 01:49:18 2014 +0100
@@ -0,0 +1,66 @@
+"{ Package: 'jn:refactoring_custom' }"
+
+Object subclass:#CustomSourceCodeSelection
+	instanceVariableNames:'selectedInterval currentSourceCode selectedMethod selectedClass
+		selectedSelector'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Refactoring-Custom'
+!
+
+!CustomSourceCodeSelection class methodsFor:'documentation'!
+
+documentation
+"
+    Container class which holds actual source code from text editor (source code editor) 
+    with exact position of selected source code. Also keeps corresponding class, method and selector
+    to current source code.
+
+    [author:]
+        Jakub Nesveda <nesvejak@fit.cvut.cz>
+
+"
+! !
+
+!CustomSourceCodeSelection methodsFor:'accessing'!
+
+currentSourceCode
+    ^ currentSourceCode
+!
+
+currentSourceCode:something
+    currentSourceCode := something.
+!
+
+selectedClass
+    ^ selectedClass
+!
+
+selectedClass:something
+    selectedClass := something.
+!
+
+selectedInterval
+    ^ selectedInterval
+!
+
+selectedInterval:something
+    selectedInterval := something.
+!
+
+selectedMethod
+    ^ selectedMethod
+!
+
+selectedMethod:something
+    selectedMethod := something.
+!
+
+selectedSelector
+    ^ selectedSelector
+!
+
+selectedSelector:something
+    selectedSelector := something.
+! !
+
--- a/CustomSubContext.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomSubContext.st	Sun Aug 24 01:49:18 2014 +0100
@@ -2,7 +2,7 @@
 
 CustomContext subclass:#CustomSubContext
 	instanceVariableNames:'selectedClasses selectedClassCategories selectedMethodProtocols
-		selectedMethods selectedPackages selectedVariables selectedCode'
+		selectedMethods selectedPackages selectedVariables selectedCodes'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-Refactoring-Custom'
@@ -31,10 +31,10 @@
     "Created: / 26-04-2014 / 16:05:34 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
-selectedCode:something
-    selectedCode := something.
+selectedCodes: something
+    selectedCodes := something.
 
-    "Created: / 05-08-2014 / 21:26:19 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Created: / 18-08-2014 / 23:53:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 selectedMethodProtocols:something
@@ -70,11 +70,11 @@
     "Modified (format): / 05-05-2014 / 20:25:42 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
-selectedCode
+selectedCodes
 
-    ^ selectedCode
+    ^ selectedCodes
 
-    "Modified: / 05-08-2014 / 21:25:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Created: / 18-08-2014 / 23:52:48 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 selectedMethodProtocols
--- a/CustomSubclassResponsibilityCodeGenerator.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomSubclassResponsibilityCodeGenerator.st	Sun Aug 24 01:49:18 2014 +0100
@@ -65,7 +65,7 @@
 
         superclassMethod := (classQuery methodForSuperclassSelector: selector class: aClass).
 
-        method := builder createMethod.
+        method := codeBuilder createMethod.
         method
             class: aClass;
             protocol: superclassMethod category;
--- a/CustomTestCaseCodeGenerator.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomTestCaseCodeGenerator.st	Sun Aug 24 01:49:18 2014 +0100
@@ -61,7 +61,7 @@
 
             testClassName := className, 'Tests'.
 
-            testClass := builder createClass.
+            testClass := codeBuilder createClass.
             testClass
                 className: testClassName;
                 superclassName: 'TestCase';
--- a/CustomValueHolderAccessMethodsCodeGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomValueHolderAccessMethodsCodeGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomValueHolderAccessMethodsCodeGeneratorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomValueHolderAccessMethodsCodeGeneratorTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,7 +9,7 @@
 
 !CustomValueHolderAccessMethodsCodeGeneratorTests methodsFor:'accessing'!
 
-generator
+generatorOrRefactoring
     ^ CustomValueHolderAccessMethodsCodeGenerator new
 ! !
 
--- a/CustomValueHolderGetterMethodsCodeGenerator.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomValueHolderGetterMethodsCodeGenerator.st	Sun Aug 24 01:49:18 2014 +0100
@@ -62,7 +62,7 @@
         comment := comment bindWith: aName.
     ].  
 
-    methodBuilder := builder methodBuilder.
+    methodBuilder := codeBuilder methodBuilder.
     methodBuilder
         source: '`@methodName
             `"comment
--- a/CustomValueHolderGetterMethodsCodeGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomValueHolderGetterMethodsCodeGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomValueHolderGetterMethodsCodeGeneratorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomValueHolderGetterMethodsCodeGeneratorTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,7 +9,7 @@
 
 !CustomValueHolderGetterMethodsCodeGeneratorTests methodsFor:'accessing'!
 
-generator
+generatorOrRefactoring
     ^ CustomValueHolderGetterMethodsCodeGenerator new
 ! !
 
--- a/CustomValueHolderWithChangeNotificationAccessMethodsCodeGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomValueHolderWithChangeNotificationAccessMethodsCodeGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomValueHolderWithChangeNotificationAccessMethodsCodeGeneratorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomValueHolderWithChangeNotificationAccessMethodsCodeGeneratorTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,7 +9,7 @@
 
 !CustomValueHolderWithChangeNotificationAccessMethodsCodeGeneratorTests methodsFor:'accessing'!
 
-generator
+generatorOrRefactoring
     ^ CustomValueHolderWithChangeNotificationAccessMethodsCodeGenerator new
 ! !
 
--- a/CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.st	Sun Aug 24 01:49:18 2014 +0100
@@ -61,7 +61,7 @@
         comment := comment bindWith: aName.
     ].  
 
-    methodBuilder := builder methodBuilder.
+    methodBuilder := codeBuilder methodBuilder.
     methodBuilder
         source: '`@methodName
             `"comment
--- a/CustomValueHolderWithChangeNotificationGetterMethodsCodeGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomValueHolderWithChangeNotificationGetterMethodsCodeGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomValueHolderWithChangeNotificationGetterMethodsCodeGeneratorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomValueHolderWithChangeNotificationGetterMethodsCodeGeneratorTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,7 +9,7 @@
 
 !CustomValueHolderWithChangeNotificationGetterMethodsCodeGeneratorTests methodsFor:'accessing'!
 
-generator
+generatorOrRefactoring
     ^ CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator new
 ! !
 
--- a/CustomValueHolderWithChangeNotificationSetterMethodsCodeGenerator.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomValueHolderWithChangeNotificationSetterMethodsCodeGenerator.st	Sun Aug 24 01:49:18 2014 +0100
@@ -55,7 +55,7 @@
         comment := comment bindWith: aName.
     ].
 
-    methodBuilder := builder methodBuilder.
+    methodBuilder := codeBuilder methodBuilder.
     methodBuilder
         source: '`@methodName
             `"comment
--- a/CustomValueHolderWithChangeNotificationSetterMethodsCodeGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomValueHolderWithChangeNotificationSetterMethodsCodeGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomValueHolderWithChangeNotificationSetterMethodsCodeGeneratorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomValueHolderWithChangeNotificationSetterMethodsCodeGeneratorTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,7 +9,7 @@
 
 !CustomValueHolderWithChangeNotificationSetterMethodsCodeGeneratorTests methodsFor:'accessing'!
 
-generator
+generatorOrRefactoring
     ^ CustomValueHolderWithChangeNotificationSetterMethodsCodeGenerator new
 ! !
 
--- a/CustomVisitorCodeGenerator.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomVisitorCodeGenerator.st	Sun Aug 24 01:49:18 2014 +0100
@@ -81,7 +81,7 @@
         methodSelector := methodSelector, parameterSelectorPart.
     ].
 
-    method := builder createMethod.
+    method := codeBuilder createMethod.
     method
         class: aClass;
         protocol: 'visiting';
--- a/CustomVisitorCodeGeneratorAcceptVisitorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomVisitorCodeGeneratorAcceptVisitorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomVisitorCodeGeneratorAcceptVisitorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomVisitorCodeGeneratorAcceptVisitorTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,7 +9,7 @@
 
 !CustomVisitorCodeGeneratorAcceptVisitorTests methodsFor:'accessing'!
 
-generator
+generatorOrRefactoring
     ^ CustomVisitorCodeGeneratorAcceptVisitor new
 ! !
 
--- a/CustomVisitorCodeGeneratorTests.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/CustomVisitorCodeGeneratorTests.st	Sun Aug 24 01:49:18 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jn:refactoring_custom' }"
 
-CustomCodeGeneratorTestCase subclass:#CustomVisitorCodeGeneratorTests
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomVisitorCodeGeneratorTests
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -9,7 +9,7 @@
 
 !CustomVisitorCodeGeneratorTests methodsFor:'accessing'!
 
-generator
+generatorOrRefactoring
     ^ CustomVisitorCodeGenerator new
 ! !
 
@@ -29,19 +29,19 @@
 
     ^ visitor visitDummyTestClassForVisitorMethod: self with:parameter'.
 
-    class := builder createClassImmediate: 'DummyTestClassForVisitorMethod'.
+    class := codeBuilder createClassImmediate: 'DummyTestClassForVisitorMethod'.
 
-    generator
+    generatorOrRefactoring
         buildAcceptVisitorMethod: 'visitDummyTestClassForVisitorMethod:'
         withParameter: true 
         forClass: class.
 
-    generator builder execute.
+    generatorOrRefactoring codeBuilder execute.
 
     self assertMethodSource: expectedSource atSelector: #acceptVisitor:with: forClass: class
 
     "Created: / 27-07-2014 / 12:32:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 03-08-2014 / 22:51:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 23-08-2014 / 00:11:00 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 test_accept_visitor_method_generated_with_comment_and_without_parameter
@@ -58,18 +58,19 @@
 
     ^ visitor visitDummyTestClassForVisitorMethod: self'.
 
-    class := builder createClassImmediate: 'DummyTestClassForVisitorMethod'.
+    class := codeBuilder createClassImmediate: 'DummyTestClassForVisitorMethod'.
 
-    generator
+    generatorOrRefactoring
         buildAcceptVisitorMethod: 'visitDummyTestClassForVisitorMethod:'
         withParameter: false 
         forClass: class.
 
-    generator builder execute.
+    generatorOrRefactoring codeBuilder execute.
 
     self assertMethodSource: expectedSource atSelector: #acceptVisitor: forClass: class
 
     "Created: / 03-08-2014 / 22:50:06 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 23-08-2014 / 00:11:14 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 test_accept_visitor_method_generated_without_comment_and_with_parameter
@@ -82,18 +83,19 @@
 
     ^ visitor visitDummyTestClassForVisitorMethod: self with:parameter'.
 
-    class := builder createClassImmediate: 'DummyTestClassForVisitorMethod'.
+    class := codeBuilder createClassImmediate: 'DummyTestClassForVisitorMethod'.
 
-    generator
+    generatorOrRefactoring
         buildAcceptVisitorMethod: 'visitDummyTestClassForVisitorMethod:'
         withParameter: true 
         forClass: class.
 
-    generator builder execute.
+    generatorOrRefactoring codeBuilder execute.
 
     self assertMethodSource: expectedSource atSelector: #acceptVisitor:with: forClass: class
 
     "Created: / 03-08-2014 / 22:53:36 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 23-08-2014 / 00:11:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 test_accept_visitor_method_generated_without_comment_and_without_parameter
@@ -106,17 +108,18 @@
 
     ^ visitor visitDummyTestClassForVisitorMethod: self'.
 
-    class := builder createClassImmediate: 'DummyTestClassForVisitorMethod'.
+    class := codeBuilder createClassImmediate: 'DummyTestClassForVisitorMethod'.
 
-    generator
+    generatorOrRefactoring
         buildAcceptVisitorMethod: 'visitDummyTestClassForVisitorMethod:'
         withParameter: false 
         forClass: class.
 
-    generator builder execute.
+    generatorOrRefactoring codeBuilder execute.
 
     self assertMethodSource: expectedSource atSelector: #acceptVisitor: forClass: class
 
     "Created: / 03-08-2014 / 22:51:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 23-08-2014 / 00:11:32 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
--- a/Make.proto	Fri Aug 22 19:09:38 2014 +0100
+++ b/Make.proto	Sun Aug 24 01:49:18 2014 +0100
@@ -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/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
+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
 
 
 # if you need any additional defines for embedded C code,
@@ -103,6 +103,7 @@
 prereq:
 	cd $(TOP)/libbasic && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd $(TOP)/goodies/refactoryBrowser/parser && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+	cd $(TOP)/goodies/refactoryBrowser/refactoring && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd $(TOP)/libbasic2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd $(TOP)/libbasic3 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd $(TOP)/libcomp && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
@@ -140,8 +141,11 @@
 $(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)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/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)
 $(OUTDIR)TestClass.$(O) TestClass.$(H): TestClass.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)TestClass2.$(O) TestClass2.$(H): TestClass2.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)jn_refactoring_custom.$(O) jn_refactoring_custom.$(H): jn_refactoring_custom.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
@@ -155,6 +159,7 @@
 $(OUTDIR)CustomCodeGenerator.$(O) CustomCodeGenerator.$(H): CustomCodeGenerator.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoringBase.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CustomRefactoring.$(O) CustomRefactoring.$(H): CustomRefactoring.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoringBase.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CustomAccessMethodsCodeGenerator.$(O) CustomAccessMethodsCodeGenerator.$(H): CustomAccessMethodsCodeGenerator.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoringBase.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)CustomCodeSelectionToResourceTranslation.$(O) CustomCodeSelectionToResourceTranslation.$(H): CustomCodeSelectionToResourceTranslation.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomRefactoring.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/CodeGeneratorTool.$(H) $(STCHDR)
 $(OUTDIR)CustomCodeGeneratorClassGenerator.$(O) CustomCodeGeneratorClassGenerator.$(H): CustomCodeGeneratorClassGenerator.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoringBase.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CustomIsAbstractCodeGenerator.$(O) CustomIsAbstractCodeGenerator.$(H): CustomIsAbstractCodeGenerator.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoringBase.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CustomReplaceIfNilWithIfTrueRefactoring.$(O) CustomReplaceIfNilWithIfTrueRefactoring.$(H): CustomReplaceIfNilWithIfTrueRefactoring.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoringBase.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomRefactoring.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
--- a/Make.spec	Fri Aug 22 19:09:38 2014 +0100
+++ b/Make.spec	Sun Aug 24 01:49:18 2014 +0100
@@ -58,8 +58,11 @@
 	CustomManager \
 	CustomMenuBuilder \
 	CustomMock \
+	CustomParseTreeRewriter \
 	CustomPerspective \
+	CustomRefactoryBuilder \
 	CustomSourceCodeBuilder \
+	CustomSourceCodeSelection \
 	TestClass \
 	TestClass2 \
 	jn_refactoring_custom \
@@ -74,6 +77,7 @@
 	CustomRefactoring \
 	CustomAccessMethodsCodeGenerator \
 	CustomCodeGeneratorClassGenerator \
+	CustomCodeSelectionToResourceTranslation \
 	CustomIsAbstractCodeGenerator \
 	CustomReplaceIfNilWithIfTrueRefactoring \
 	CustomSubclassResponsibilityCodeGenerator \
@@ -111,8 +115,11 @@
     $(OUTDIR_SLASH)CustomManager.$(O) \
     $(OUTDIR_SLASH)CustomMenuBuilder.$(O) \
     $(OUTDIR_SLASH)CustomMock.$(O) \
+    $(OUTDIR_SLASH)CustomParseTreeRewriter.$(O) \
     $(OUTDIR_SLASH)CustomPerspective.$(O) \
+    $(OUTDIR_SLASH)CustomRefactoryBuilder.$(O) \
     $(OUTDIR_SLASH)CustomSourceCodeBuilder.$(O) \
+    $(OUTDIR_SLASH)CustomSourceCodeSelection.$(O) \
     $(OUTDIR_SLASH)TestClass.$(O) \
     $(OUTDIR_SLASH)TestClass2.$(O) \
     $(OUTDIR_SLASH)jn_refactoring_custom.$(O) \
@@ -127,6 +134,7 @@
     $(OUTDIR_SLASH)CustomRefactoring.$(O) \
     $(OUTDIR_SLASH)CustomAccessMethodsCodeGenerator.$(O) \
     $(OUTDIR_SLASH)CustomCodeGeneratorClassGenerator.$(O) \
+    $(OUTDIR_SLASH)CustomCodeSelectionToResourceTranslation.$(O) \
     $(OUTDIR_SLASH)CustomIsAbstractCodeGenerator.$(O) \
     $(OUTDIR_SLASH)CustomReplaceIfNilWithIfTrueRefactoring.$(O) \
     $(OUTDIR_SLASH)CustomSubclassResponsibilityCodeGenerator.$(O) \
--- a/TestClass.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/TestClass.st	Sun Aug 24 01:49:18 2014 +0100
@@ -14,63 +14,11 @@
 "
 !
 
-!TestClass methodsFor:'aspects'!
 
-inst
-    "return/create the 'inst' value holder (automatically generated)"
-
-    inst isNil ifTrue:[
-        inst := ValueHolder new.
-        inst addDependent:self.
-    ].
-    ^ inst
-!
-
-inst2
-    "return/create the 'inst2' value holder (automatically generated)"
-
-    inst2 isNil ifTrue:[
-        inst2 := ValueHolder new.
-        inst2 addDependent:self.
-    ].
-    ^ inst2
-!
-
-inst2:something
-    "set the 'inst2' value holder (automatically generated)"
-
-    |oldValue newValue|
+!TestClass class methodsFor:'documentation'!
 
-    inst2 notNil ifTrue:[
-        oldValue := inst2 value.
-        inst2 removeDependent:self.
-    ].
-    inst2 := something.
-    inst2 notNil ifTrue:[
-        inst2 addDependent:self.
-    ].
-    newValue := inst2 value.
-    oldValue ~~ newValue ifTrue:[
-        self update:#value with:newValue from:inst2.
-    ].
-!
+version_HG
 
-inst:something
-    "set the 'inst' value holder (automatically generated)"
-
-    |oldValue newValue|
-
-    inst notNil ifTrue:[
-        oldValue := inst value.
-        inst removeDependent:self.
-    ].
-    inst := something.
-    inst notNil ifTrue:[
-        inst addDependent:self.
-    ].
-    newValue := inst value.
-    oldValue ~~ newValue ifTrue:[
-        self update:#value with:newValue from:inst.
-    ].
+    ^ '$Changeset: <not expanded> $'
 ! !
 
--- a/abbrev.stc	Fri Aug 22 19:09:38 2014 +0100
+++ b/abbrev.stc	Sun Aug 24 01:49:18 2014 +0100
@@ -4,13 +4,18 @@
 CustomChangeManager CustomChangeManager jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomClassQuery CustomClassQuery jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomCodeGeneratorOrRefactoringBase CustomCodeGeneratorOrRefactoringBase jn:refactoring_custom 'Interface-Refactoring-Custom' 0
+CustomCodeGeneratorOrRefactoringTestCase CustomCodeGeneratorOrRefactoringTestCase jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
+CustomCodeGeneratorOrRefactoringTestCaseTests CustomCodeGeneratorOrRefactoringTestCaseTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
 CustomContext CustomContext jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomDialog CustomDialog jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomManager CustomManager jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomMenuBuilder CustomMenuBuilder jn:refactoring_custom 'Interface-Refactoring-Custom-UI' 0
 CustomMock CustomMock jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 0
+CustomParseTreeRewriter CustomParseTreeRewriter jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomPerspective CustomPerspective jn:refactoring_custom 'Interface-Refactoring-Custom' 1
+CustomRefactoryBuilder CustomRefactoryBuilder jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomSourceCodeBuilder CustomSourceCodeBuilder jn:refactoring_custom 'Interface-Refactoring-Custom' 0
+CustomSourceCodeSelection CustomSourceCodeSelection jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 TestClass TestClass jn:refactoring_custom 'Interface-Refactoring-Custom' 1
 TestClass2 TestClass2 jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 jn_refactoring_custom jn_refactoring_custom jn:refactoring_custom '* Projects & Packages *' 3
@@ -76,3 +81,4 @@
 CustomValueHolderWithChangeNotificationSetterMethodsCodeGeneratorTests CustomValueHolderWithChangeNotificationSetterMethodsCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
 CustomVisitorCodeGeneratorAcceptVisitorTests CustomVisitorCodeGeneratorAcceptVisitorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
 CustomVisitorCodeGeneratorTests CustomVisitorCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
+CustomCodeSelectionToResourceTranslation CustomCodeSelectionToResourceTranslation jn:refactoring_custom 'Interface-Refactoring-Custom' 0
--- a/bc.mak	Fri Aug 22 19:09:38 2014 +0100
+++ b/bc.mak	Sun Aug 24 01:49:18 2014 +0100
@@ -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\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
+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
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES)  -varPrefix=$(LIBNAME)
@@ -52,6 +52,7 @@
 prereq:
 	pushd ..\..\stx\libbasic & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\stx\goodies\refactoryBrowser\parser & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	pushd ..\..\stx\goodies\refactoryBrowser\refactoring & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\stx\libbasic2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\stx\libbasic3 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\stx\libcomp & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
@@ -86,8 +87,11 @@
 $(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)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\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)
 $(OUTDIR)TestClass.$(O) TestClass.$(H): TestClass.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)TestClass2.$(O) TestClass2.$(H): TestClass2.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)jn_refactoring_custom.$(O) jn_refactoring_custom.$(H): jn_refactoring_custom.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
@@ -101,6 +105,7 @@
 $(OUTDIR)CustomCodeGenerator.$(O) CustomCodeGenerator.$(H): CustomCodeGenerator.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoringBase.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CustomRefactoring.$(O) CustomRefactoring.$(H): CustomRefactoring.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoringBase.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CustomAccessMethodsCodeGenerator.$(O) CustomAccessMethodsCodeGenerator.$(H): CustomAccessMethodsCodeGenerator.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoringBase.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)CustomCodeSelectionToResourceTranslation.$(O) CustomCodeSelectionToResourceTranslation.$(H): CustomCodeSelectionToResourceTranslation.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomRefactoring.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\CodeGeneratorTool.$(H) $(STCHDR)
 $(OUTDIR)CustomCodeGeneratorClassGenerator.$(O) CustomCodeGeneratorClassGenerator.$(H): CustomCodeGeneratorClassGenerator.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoringBase.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CustomIsAbstractCodeGenerator.$(O) CustomIsAbstractCodeGenerator.$(H): CustomIsAbstractCodeGenerator.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoringBase.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CustomReplaceIfNilWithIfTrueRefactoring.$(O) CustomReplaceIfNilWithIfTrueRefactoring.$(H): CustomReplaceIfNilWithIfTrueRefactoring.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoringBase.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomRefactoring.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
--- a/jn_refactoring_custom.st	Fri Aug 22 19:09:38 2014 +0100
+++ b/jn_refactoring_custom.st	Sun Aug 24 01:49:18 2014 +0100
@@ -27,7 +27,8 @@
      by searching along the inheritance chain of all of my classes."
 
     ^ #(
-        #'stx:goodies/refactoryBrowser/parser'    "RBProgramNodeVisitor - superclass of CustomSourceCodeBuilder"
+        #'stx:goodies/refactoryBrowser/parser'    "ParseTreeRewriter - superclass of CustomParseTreeRewriter"
+        #'stx:goodies/refactoryBrowser/refactoring'    "RefactoryBuilder - superclass of CustomRefactoryBuilder"
         #'stx:goodies/sunit'    "TestAsserter - superclass of CustomAccessMethodsCodeGeneratorTests"
         #'stx:libbasic'    "LibraryDefinition - superclass of jn_refactoring_custom"
         #'stx:libtool'    "CodeGenerator - superclass of CustomSourceCodeBuilder"
@@ -43,9 +44,9 @@
      by searching all classes (and their packages) which are referenced by my classes."
 
     ^ #(
-        #'stx:goodies/refactoryBrowser/changes'    "CompositeRefactoryChange - referenced by CustomCodeGeneratorOrRefactoringBase>>startCollectChanges"
+        #'stx:goodies/refactoryBrowser/changes'    "CompositeRefactoryChange - referenced by CustomRefactoryBuilder>>change"
         #'stx:goodies/refactoryBrowser/helpers'    "RBNamespace - referenced by CustomSourceCodeBuilder::Class>>asRBClass"
-        #'stx:libbasic3'    "Change - referenced by CustomCodeGeneratorTestCase>>assertSource:sameAs:"
+        #'stx:libbasic3'    "Change - referenced by CustomCodeGeneratorOrRefactoringTestCase>>assertSource:sameAs:"
         #'stx:libview'    "WindowGroup - referenced by CustomCodeGeneratorOrRefactoring>>executeInContextWithWaitCursor:"
     )
 !
@@ -73,13 +74,18 @@
         CustomChangeManager
         CustomClassQuery
         CustomCodeGeneratorOrRefactoringBase
+        (CustomCodeGeneratorOrRefactoringTestCase autoload)
+        (CustomCodeGeneratorOrRefactoringTestCaseTests autoload)
         CustomContext
         CustomDialog
         CustomManager
         CustomMenuBuilder
         CustomMock
+        CustomParseTreeRewriter
         CustomPerspective
+        CustomRefactoryBuilder
         CustomSourceCodeBuilder
+        CustomSourceCodeSelection
         TestClass
         TestClass2
         #'jn_refactoring_custom'
@@ -94,6 +100,7 @@
         CustomRefactoring
         CustomAccessMethodsCodeGenerator
         CustomCodeGeneratorClassGenerator
+        CustomCodeSelectionToResourceTranslation
         CustomIsAbstractCodeGenerator
         CustomReplaceIfNilWithIfTrueRefactoring
         CustomSubclassResponsibilityCodeGenerator
--- a/libInit.cc	Fri Aug 22 19:09:38 2014 +0100
+++ b/libInit.cc	Sun Aug 24 01:49:18 2014 +0100
@@ -35,8 +35,11 @@
 _CustomManager_Init(pass,__pRT__,snd);
 _CustomMenuBuilder_Init(pass,__pRT__,snd);
 _CustomMock_Init(pass,__pRT__,snd);
+_CustomParseTreeRewriter_Init(pass,__pRT__,snd);
 _CustomPerspective_Init(pass,__pRT__,snd);
+_CustomRefactoryBuilder_Init(pass,__pRT__,snd);
 _CustomSourceCodeBuilder_Init(pass,__pRT__,snd);
+_CustomSourceCodeSelection_Init(pass,__pRT__,snd);
 _TestClass_Init(pass,__pRT__,snd);
 _TestClass2_Init(pass,__pRT__,snd);
 _jn_137refactoring_137custom_Init(pass,__pRT__,snd);
@@ -51,6 +54,7 @@
 _CustomRefactoring_Init(pass,__pRT__,snd);
 _CustomAccessMethodsCodeGenerator_Init(pass,__pRT__,snd);
 _CustomCodeGeneratorClassGenerator_Init(pass,__pRT__,snd);
+_CustomCodeSelectionToResourceTranslation_Init(pass,__pRT__,snd);
 _CustomIsAbstractCodeGenerator_Init(pass,__pRT__,snd);
 _CustomReplaceIfNilWithIfTrueRefactoring_Init(pass,__pRT__,snd);
 _CustomSubclassResponsibilityCodeGenerator_Init(pass,__pRT__,snd);
--- a/refactoring_custom.rc	Fri Aug 22 19:09:38 2014 +0100
+++ b/refactoring_custom.rc	Sun Aug 24 01:49:18 2014 +0100
@@ -4,7 +4,7 @@
 //
 VS_VERSION_INFO VERSIONINFO
   FILEVERSION     6,2,32767,32767
-  PRODUCTVERSION  6,2,4,0
+  PRODUCTVERSION  6,2,4,1326
 #if (__BORLANDC__)
   FILEFLAGSMASK   VS_FF_DEBUG | VS_FF_PRERELEASE
   FILEFLAGS       VS_FF_PRERELEASE | VS_FF_SPECIALBUILD
@@ -24,8 +24,8 @@
       VALUE "InternalName", "jn:refactoring_custom\0"
       VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
       VALUE "ProductName", "ProductName\0"
-      VALUE "ProductVersion", "6.2.4.0\0"
-      VALUE "ProductDate", "Fri, 22 Aug 2014 18:08:30 GMT\0"
+      VALUE "ProductVersion", "6.2.4.1326\0"
+      VALUE "ProductDate", "Sat, 23 Aug 2014 14:35:48 GMT\0"
     END
 
   END