add value holder with change notification getter generator
authorJakub Nesveda <jakubnesveda@seznam.cz>
Tue, 01 Jul 2014 14:11:29 +0200
changeset 587 bd181c1f381a
parent 586 1c899d168cf4
child 588 ba44cf2de8b7
add value holder with change notification getter generator remove old access method generator - will be replaced with something else
CustomAccessMethodsCodeGenerator.st
CustomAccessMethodsCodeGeneratorOld.st
CustomValueHolderGetterMethodsCodeGenerator.st
CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.st
CustomValueHolderWithChangeNotificationGetterMethodsCodeGeneratorTests.st
Make.proto
Make.spec
abbrev.stc
bc.mak
jn_refactoring_custom.st
libInit.cc
refactoring_custom.rc
--- a/CustomAccessMethodsCodeGenerator.st	Mon Jun 30 19:21:53 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,291 +0,0 @@
-"{ Package: 'jn:refactoring_custom' }"
-
-CustomCodeGenerator subclass:#CustomAccessMethodsCodeGenerator
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Interface-Refactoring-Custom'
-!
-
-
-!CustomAccessMethodsCodeGenerator class methodsFor:'accessing-presentation'!
-
-description
-    "Returns more detailed description of the receiver"
-
-    ^ 'Generates three bogus methods - foo, bar and baz'
-
-    "Modified: / 26-01-2014 / 21:46:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-label
-    "Returns show label describing the receiver. This label
-     is used in UI as menu item/tree item label."
-
-    ^ 'foo, bar, baz...'
-
-    "Modified: / 26-01-2014 / 21:45:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
-!CustomAccessMethodsCodeGenerator 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."
-
-    ^ aCustomContext selectedClasses notEmptyOrNil
-
-    "Created: / 26-01-2014 / 21:41:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 26-01-2014 / 23:39:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 04-03-2014 / 22:34:19 / 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"
-
-    ^ aCustomPerspective isClassPerspective
-
-    "Created: / 26-01-2014 / 21:40:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 04-03-2014 / 21:41:34 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomAccessMethodsCodeGenerator methodsFor:'code generation-individual methods'!
-
-createAccessMethodsFor:aCollectionOfVarNames in:aClass withChange:withChange asValueHolder:asValueHolder readersOnly:readersOnly writersOnly:writersOnly lazyInitialization:lazyInitialization
-    "workhorse for creating access methods for instvars."
-
-    |classesClassVars generateCommentsForSetters generateCommentsForGetters|
-
-    self startCollectChanges.
-
-    generateCommentsForSetters := userPreferences generateCommentsForSetters.
-    generateCommentsForGetters := userPreferences generateCommentsForGetters.
-
-    classesClassVars := aClass theNonMetaclass allClassVarNames.
-
-    aCollectionOfVarNames do:[:name |
-        |source varType methodName defaultMethodName argName|
-
-        varType := (classesClassVars includes:name) 
-                        ifTrue:['static'] 
-                        ifFalse:[
-                            (aClass isMeta ifTrue:['classInstVar'] ifFalse:['instance'])].
-
-        methodName := name.
-        name isUppercaseFirst ifTrue:[
-            (name conform:[:ch | ch isLetter not or:[ch isUppercase]]) ifFalse:[      "/ allow all-uppercase for class-vars
-                methodName := methodName asLowercaseFirst. 
-            ]
-        ].
-        argName := 'something'.
-
-        "/ the GETTER
-        writersOnly ifFalse:[
-            lazyInitialization ifTrue:[
-                defaultMethodName := 'default' , name asUppercaseFirst.
-            ].
-
-            "check, if method is not already present"
-            (aClass includesSelector:(methodName asSymbol)) ifFalse:[
-                asValueHolder ifTrue:[
-                    source := methodName , '\'.
-                    generateComments ifTrue:[
-                        source := source , '    "return/create the ''%2'' value holder (automatically generated)"\\'. 
-                    ].
-                    source := source , '    %2 isNil ifTrue:[\'.
-                    lazyInitialization ifTrue:[
-                        source := source
-                                   , '        %2 := self class %3 asValue.\'.
-                    ] ifFalse:[
-                        source := source
-                                   , '        %2 := ValueHolder new.\'.
-                    ].
-
-                    withChange ifTrue:[
-                    source := source
-                               , '        %2 addDependent:self.\'.
-                    ].
-                    source := source
-                               , '    ].\'
-                               , '    ^ %2'.
-                ] ifFalse:[
-                    source := methodName , '\'.
-                    lazyInitialization ifTrue:[
-                        generateCommentsForGetters ifTrue:[
-                            source := source , '    "return the %1 instance variable ''%2'' with lazy instance creation (automatically generated)"\\'. 
-                        ].
-                        source := source
-                                    , '    %2 isNil ifTrue:[\'
-                                    , '        %2 := self class %3.\'
-                                    , '    ].\'
-                                    , '    ^ %2'.
-                    ] ifFalse:[
-                        generateCommentsForGetters ifTrue:[
-                            source := source , '    "return the %1 instance variable ''%2'' (automatically generated)"\\'. 
-                        ].
-                        source := source
-                                    , '    ^ %2'.
-                    ].
-                ].
-                source := (source bindWith:varType with:name with:defaultMethodName) withCRs.
-                self compile:source forClass:aClass inCategory:(asValueHolder ifTrue:[#aspects] ifFalse:[#accessing]).
-            ] ifTrue:[
-                Transcript showCR:'method ''', methodName , ''' already present'
-            ].
-
-            "/ default for lazy on class side
-            lazyInitialization ifTrue:[
-                (aClass theMetaclass includesSelector:(defaultMethodName asSymbol)) ifFalse:[
-                    source := defaultMethodName , '\'.
-                    generateComments ifTrue:[
-                        source := source , '    "default value for the ''%2'' instance variable (automatically generated)"\\'. 
-                    ].
-                    source := source    
-                               , '    self shouldImplement.\'
-                               , '    ^ nil.'.
-                    source := (source bindWith:varType with:name) withCRs.
-                    self compile:source forClass:aClass theMetaclass inCategory:#defaults.
-                ].
-            ].
-        ].
-
-        "/ the SETTER
-        readersOnly ifFalse:[
-            (aClass includesSelector:((methodName , ':') asSymbol)) ifFalse:[
-                ((methodName size > 2) and:[ (methodName startsWith:'is') and:[ (methodName at:3) isUppercase ]])
-                ifTrue:[
-                    argName := 'aBoolean'
-                ].
-                asValueHolder ifTrue:[
-                    source := methodName , ':%3\'.  "/ argName
-                    generateComments ifTrue:[
-                        source := source , '    "set the ''%2'' value holder' , ' (automatically generated)"\\'.
-                    ].
-                    withChange ifTrue:[
-                        source := source
-                                  , '    |oldValue newValue|\\'
-                                  , '    %2 notNil ifTrue:[\'
-                                  , '        oldValue := %2 value.\'
-                                  , '        %2 removeDependent:self.\'
-                                  , '    ].\'
-                                  , '    %2 := %3.\'        "/ argName
-                                  , '    %2 notNil ifTrue:[\'
-                                  , '        %2 addDependent:self.\'
-                                  , '    ].\'
-                                  , '    newValue := %2 value.\'
-                                  , '    oldValue ~~ newValue ifTrue:[\'
-                                  , '        self update:#value with:newValue from:%2.\'
-                                  , '    ].\'
-                    ] ifFalse:[
-                        source := source 
-                                  , '    %2 := %3.'.  "/ argName
-                    ].
-                ] ifFalse:[
-                    source := methodName , ':%3\'.    "/ argName
-                    withChange ifTrue:[
-                        generateComments ifTrue:[
-                            source := source , '    "set the value of the %1 variable ''%2'''.
-                            source := source , ' and send a change notification (automatically generated)"\\'.
-                        ].
-                        source := source
-                                  , '    (%2 ~~ %3) ifTrue:[\'
-                                  , '        %2 := %3.\'           "/ argName
-                                  , '        self changed:#%2.\'
-                                  , '     ].\'.
-                    ] ifFalse:[
-                        generateCommentsForSetters ifTrue:[
-                            source := source , '    "set the value of the %1 variable ''%2'''.
-                            source := source , ' (automatically generated)"\\'.
-                        ].
-                        source := source
-                                  , '    %2 := %3.'.          "/ argName
-                    ].
-                ].
-                source := (source bindWith:varType with:name with:argName) withCRs.
-                self 
-                    compile:source 
-                    forClass:aClass 
-                    inCategory:(asValueHolder ifTrue:[#aspects] ifFalse:[#accessing]).
-            ] ifTrue:[
-                Transcript showCR:'method ''', methodName , ':'' already present'
-            ].
-        ].
-    ].
-
-    self executeCollectedChangesNamed:('Add Accessors').
-
-    "Created: / 12-03-2014 / 23:35:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-createSetterFor:aVarName in:aClass 
-    self 
-        createAccessMethodsFor:{ aVarName} in:aClass 
-        withChange:false asValueHolder:false readersOnly:false writersOnly:true 
-        lazyInitialization:false
-
-    "Created: / 14-03-2014 / 23:12:46 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-setterMethodFor:aVarName 
-    |source methodName argName comment|
-
-    comment := ''.
-    userPreferences generateCommentsForSetters ifTrue:[
-        comment := '    "set the value of the %1 variable ''%2'' (automatically generated)"\\'.
-    ].
-
-    methodName := aVarName.
-    argName := 'something'.
-    source := methodName , ':%3\'.  "/ argName 
-    source := source , '    %2 := %3.'. 
-
-    ^ source
-
-    "Created: / 15-03-2014 / 22:13:00 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomAccessMethodsCodeGenerator 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"
-
-    | classes |
-
-    classes := aCustomContext selectedClasses.
-    classes do:[:class | 
-        (class canUnderstand: #foo) ifFalse:[  
-            self compile: 'foo
-    ^ self bar' forClass: class inCategory: 'foo - bar - baz'
-        ].
-        (class canUnderstand: #bar) ifFalse:[  
-            self compile: 'bar
-    ^ self baz' forClass: class inCategory: 'foo - bar - baz'
-        ].
-        (class canUnderstand: #baz) ifFalse:[  
-            self compile: 'baz
-    ^ 42' forClass: class inCategory: 'foo - bar - baz'
-        ].
-
-    ].
-
-    "Modified: / 26-01-2014 / 23:41:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
-!CustomAccessMethodsCodeGenerator class methodsFor:'documentation'!
-
-version_HG
-
-    ^ '$Changeset: <not expanded> $'
-! !
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CustomAccessMethodsCodeGeneratorOld.st	Tue Jul 01 14:11:29 2014 +0200
@@ -0,0 +1,291 @@
+"{ Package: 'jn:refactoring_custom' }"
+
+CustomCodeGenerator subclass:#CustomAccessMethodsCodeGeneratorOld
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Refactoring-Custom'
+!
+
+
+!CustomAccessMethodsCodeGeneratorOld class methodsFor:'accessing-presentation'!
+
+description
+    "Returns more detailed description of the receiver"
+
+    ^ 'Generates three bogus methods - foo, bar and baz'
+
+    "Modified: / 26-01-2014 / 21:46:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+label
+    "Returns show label describing the receiver. This label
+     is used in UI as menu item/tree item label."
+
+    ^ 'foo, bar, baz...'
+
+    "Modified: / 26-01-2014 / 21:45:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CustomAccessMethodsCodeGeneratorOld 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."
+
+    ^ aCustomContext selectedClasses notEmptyOrNil
+
+    "Created: / 26-01-2014 / 21:41:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 26-01-2014 / 23:39:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 04-03-2014 / 22:34:19 / 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"
+
+    ^ aCustomPerspective isClassPerspective
+
+    "Created: / 26-01-2014 / 21:40:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 04-03-2014 / 21:41:34 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomAccessMethodsCodeGeneratorOld methodsFor:'code generation-individual methods'!
+
+createAccessMethodsFor:aCollectionOfVarNames in:aClass withChange:withChange asValueHolder:asValueHolder readersOnly:readersOnly writersOnly:writersOnly lazyInitialization:lazyInitialization
+    "workhorse for creating access methods for instvars."
+
+    |classesClassVars generateCommentsForSetters generateCommentsForGetters|
+
+    self startCollectChanges.
+
+    generateCommentsForSetters := userPreferences generateCommentsForSetters.
+    generateCommentsForGetters := userPreferences generateCommentsForGetters.
+
+    classesClassVars := aClass theNonMetaclass allClassVarNames.
+
+    aCollectionOfVarNames do:[:name |
+        |source varType methodName defaultMethodName argName|
+
+        varType := (classesClassVars includes:name) 
+                        ifTrue:['static'] 
+                        ifFalse:[
+                            (aClass isMeta ifTrue:['classInstVar'] ifFalse:['instance'])].
+
+        methodName := name.
+        name isUppercaseFirst ifTrue:[
+            (name conform:[:ch | ch isLetter not or:[ch isUppercase]]) ifFalse:[      "/ allow all-uppercase for class-vars
+                methodName := methodName asLowercaseFirst. 
+            ]
+        ].
+        argName := 'something'.
+
+        "/ the GETTER
+        writersOnly ifFalse:[
+            lazyInitialization ifTrue:[
+                defaultMethodName := 'default' , name asUppercaseFirst.
+            ].
+
+            "check, if method is not already present"
+            (aClass includesSelector:(methodName asSymbol)) ifFalse:[
+                asValueHolder ifTrue:[
+                    source := methodName , '\'.
+                    generateComments ifTrue:[
+                        source := source , '    "return/create the ''%2'' value holder (automatically generated)"\\'. 
+                    ].
+                    source := source , '    %2 isNil ifTrue:[\'.
+                    lazyInitialization ifTrue:[
+                        source := source
+                                   , '        %2 := self class %3 asValue.\'.
+                    ] ifFalse:[
+                        source := source
+                                   , '        %2 := ValueHolder new.\'.
+                    ].
+
+                    withChange ifTrue:[
+                    source := source
+                               , '        %2 addDependent:self.\'.
+                    ].
+                    source := source
+                               , '    ].\'
+                               , '    ^ %2'.
+                ] ifFalse:[
+                    source := methodName , '\'.
+                    lazyInitialization ifTrue:[
+                        generateCommentsForGetters ifTrue:[
+                            source := source , '    "return the %1 instance variable ''%2'' with lazy instance creation (automatically generated)"\\'. 
+                        ].
+                        source := source
+                                    , '    %2 isNil ifTrue:[\'
+                                    , '        %2 := self class %3.\'
+                                    , '    ].\'
+                                    , '    ^ %2'.
+                    ] ifFalse:[
+                        generateCommentsForGetters ifTrue:[
+                            source := source , '    "return the %1 instance variable ''%2'' (automatically generated)"\\'. 
+                        ].
+                        source := source
+                                    , '    ^ %2'.
+                    ].
+                ].
+                source := (source bindWith:varType with:name with:defaultMethodName) withCRs.
+                self compile:source forClass:aClass inCategory:(asValueHolder ifTrue:[#aspects] ifFalse:[#accessing]).
+            ] ifTrue:[
+                Transcript showCR:'method ''', methodName , ''' already present'
+            ].
+
+            "/ default for lazy on class side
+            lazyInitialization ifTrue:[
+                (aClass theMetaclass includesSelector:(defaultMethodName asSymbol)) ifFalse:[
+                    source := defaultMethodName , '\'.
+                    generateComments ifTrue:[
+                        source := source , '    "default value for the ''%2'' instance variable (automatically generated)"\\'. 
+                    ].
+                    source := source    
+                               , '    self shouldImplement.\'
+                               , '    ^ nil.'.
+                    source := (source bindWith:varType with:name) withCRs.
+                    self compile:source forClass:aClass theMetaclass inCategory:#defaults.
+                ].
+            ].
+        ].
+
+        "/ the SETTER
+        readersOnly ifFalse:[
+            (aClass includesSelector:((methodName , ':') asSymbol)) ifFalse:[
+                ((methodName size > 2) and:[ (methodName startsWith:'is') and:[ (methodName at:3) isUppercase ]])
+                ifTrue:[
+                    argName := 'aBoolean'
+                ].
+                asValueHolder ifTrue:[
+                    source := methodName , ':%3\'.  "/ argName
+                    generateComments ifTrue:[
+                        source := source , '    "set the ''%2'' value holder' , ' (automatically generated)"\\'.
+                    ].
+                    withChange ifTrue:[
+                        source := source
+                                  , '    |oldValue newValue|\\'
+                                  , '    %2 notNil ifTrue:[\'
+                                  , '        oldValue := %2 value.\'
+                                  , '        %2 removeDependent:self.\'
+                                  , '    ].\'
+                                  , '    %2 := %3.\'        "/ argName
+                                  , '    %2 notNil ifTrue:[\'
+                                  , '        %2 addDependent:self.\'
+                                  , '    ].\'
+                                  , '    newValue := %2 value.\'
+                                  , '    oldValue ~~ newValue ifTrue:[\'
+                                  , '        self update:#value with:newValue from:%2.\'
+                                  , '    ].\'
+                    ] ifFalse:[
+                        source := source 
+                                  , '    %2 := %3.'.  "/ argName
+                    ].
+                ] ifFalse:[
+                    source := methodName , ':%3\'.    "/ argName
+                    withChange ifTrue:[
+                        generateComments ifTrue:[
+                            source := source , '    "set the value of the %1 variable ''%2'''.
+                            source := source , ' and send a change notification (automatically generated)"\\'.
+                        ].
+                        source := source
+                                  , '    (%2 ~~ %3) ifTrue:[\'
+                                  , '        %2 := %3.\'           "/ argName
+                                  , '        self changed:#%2.\'
+                                  , '     ].\'.
+                    ] ifFalse:[
+                        generateCommentsForSetters ifTrue:[
+                            source := source , '    "set the value of the %1 variable ''%2'''.
+                            source := source , ' (automatically generated)"\\'.
+                        ].
+                        source := source
+                                  , '    %2 := %3.'.          "/ argName
+                    ].
+                ].
+                source := (source bindWith:varType with:name with:argName) withCRs.
+                self 
+                    compile:source 
+                    forClass:aClass 
+                    inCategory:(asValueHolder ifTrue:[#aspects] ifFalse:[#accessing]).
+            ] ifTrue:[
+                Transcript showCR:'method ''', methodName , ':'' already present'
+            ].
+        ].
+    ].
+
+    self executeCollectedChangesNamed:('Add Accessors').
+
+    "Created: / 12-03-2014 / 23:35:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+createSetterFor:aVarName in:aClass 
+    self 
+        createAccessMethodsFor:{ aVarName} in:aClass 
+        withChange:false asValueHolder:false readersOnly:false writersOnly:true 
+        lazyInitialization:false
+
+    "Created: / 14-03-2014 / 23:12:46 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+setterMethodFor:aVarName 
+    |source methodName argName comment|
+
+    comment := ''.
+    userPreferences generateCommentsForSetters ifTrue:[
+        comment := '    "set the value of the %1 variable ''%2'' (automatically generated)"\\'.
+    ].
+
+    methodName := aVarName.
+    argName := 'something'.
+    source := methodName , ':%3\'.  "/ argName 
+    source := source , '    %2 := %3.'. 
+
+    ^ source
+
+    "Created: / 15-03-2014 / 22:13:00 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomAccessMethodsCodeGeneratorOld 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"
+
+    | classes |
+
+    classes := aCustomContext selectedClasses.
+    classes do:[:class | 
+        (class canUnderstand: #foo) ifFalse:[  
+            self compile: 'foo
+    ^ self bar' forClass: class inCategory: 'foo - bar - baz'
+        ].
+        (class canUnderstand: #bar) ifFalse:[  
+            self compile: 'bar
+    ^ self baz' forClass: class inCategory: 'foo - bar - baz'
+        ].
+        (class canUnderstand: #baz) ifFalse:[  
+            self compile: 'baz
+    ^ 42' forClass: class inCategory: 'foo - bar - baz'
+        ].
+
+    ].
+
+    "Modified: / 26-01-2014 / 23:41:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CustomAccessMethodsCodeGeneratorOld class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/CustomValueHolderGetterMethodsCodeGenerator.st	Mon Jun 30 19:21:53 2014 +0200
+++ b/CustomValueHolderGetterMethodsCodeGenerator.st	Tue Jul 01 14:11:29 2014 +0200
@@ -14,6 +14,7 @@
     ^ 'Getter methods with ValueHolder for selected instance variables'
 
     "Created: / 19-05-2014 / 20:56:42 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 30-06-2014 / 19:44:29 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 label
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.st	Tue Jul 01 14:11:29 2014 +0200
@@ -0,0 +1,69 @@
+"{ Package: 'jn:refactoring_custom' }"
+
+CustomGetterMethodsCodeGenerator subclass:#CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Refactoring-Custom'
+!
+
+!CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator class methodsFor:'accessing-presentation'!
+
+description
+
+    ^ 'Getter methods with ValueHolder and change notification for selected instance variables'
+
+    "Created: / 30-06-2014 / 19:31:27 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+label
+
+    ^ 'Getter Method(s) for ValueHolder with Change Notification'
+
+    "Created: / 30-06-2014 / 19:36:20 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator methodsFor:'accessing'!
+
+protocol
+    "Returns protocol name in which will belong getter method"
+
+    ^ 'aspects'
+
+    "Created: / 30-06-2014 / 19:48:14 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator methodsFor:'code generation'!
+
+sourceForClass: aClass variableName: aName
+    "Returns getter method source code with ValueHolder and change notification for given class and variable name"
+
+    | methodName comment methodBuilder |
+
+    methodName := self methodNameFor: aName.
+    comment := ''.
+
+    userPreferences generateCommentsForGetters ifTrue:[
+        comment := '"return/create the ''%1'' value holder with change notification (automatically generated)"'.
+        comment := comment bindWith: aName.
+    ].  
+
+    methodBuilder := builder methodBuilder.
+    methodBuilder
+        source: '`@methodName
+            `"comment
+
+            `variableName isNil ifTrue:[
+                `variableName := ValueHolder new.
+                `variableName addDependent: self.
+            ].
+            ^ `variableName';
+        replace: '`@methodName' with: methodName asSymbol;
+        replace: '`variableName' with: aName asString;
+        replace: '`"comment' with: comment.
+
+    ^ methodBuilder buildedSource
+
+    "Created: / 30-06-2014 / 19:18:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CustomValueHolderWithChangeNotificationGetterMethodsCodeGeneratorTests.st	Tue Jul 01 14:11:29 2014 +0200
@@ -0,0 +1,55 @@
+"{ Package: 'jn:refactoring_custom' }"
+
+CustomCodeGeneratorTestCase subclass:#CustomValueHolderWithChangeNotificationGetterMethodsCodeGeneratorTests
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Refactoring-Custom-Tests'
+!
+
+!CustomValueHolderWithChangeNotificationGetterMethodsCodeGeneratorTests methodsFor:'accessing'!
+
+generator
+    ^ CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator new
+! !
+
+!CustomValueHolderWithChangeNotificationGetterMethodsCodeGeneratorTests methodsFor:'tests'!
+
+test_value_holder_getter_with_change_notification_method_generated_with_comments
+    | expectedSource |
+
+    userPreferences generateCommentsForGetters: true.
+
+    expectedSource := 'instanceVariable
+    "return/create the ''instanceVariable'' value holder with change notification (automatically generated)"
+
+    instanceVariable isNil ifTrue:[
+        instanceVariable := ValueHolder new.
+        instanceVariable addDependent:self.
+    ].
+    ^ instanceVariable'.
+
+    self executeGeneratorInContext: #classWithInstanceVariable.
+    self assertMethodSource: expectedSource atSelector: #instanceVariable
+
+    "Created: / 30-06-2014 / 19:54:41 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_value_holder_getter_with_change_notification_method_generated_without_comments
+    | expectedSource |
+
+    userPreferences generateCommentsForGetters: false.
+
+    expectedSource := 'instanceVariable
+    instanceVariable isNil ifTrue:[
+        instanceVariable := ValueHolder new.
+        instanceVariable addDependent:self.
+    ].
+    ^ instanceVariable'.
+
+    self executeGeneratorInContext: #classWithInstanceVariable.
+    self assertMethodSource: expectedSource atSelector: #instanceVariable
+
+    "Created: / 30-06-2014 / 19:56:11 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
--- a/Make.proto	Mon Jun 30 19:21:53 2014 +0200
+++ b/Make.proto	Tue Jul 01 14:11:29 2014 +0200
@@ -152,7 +152,7 @@
 $(OUTDIR)CustomSilentDialog.$(O) CustomSilentDialog.$(H): CustomSilentDialog.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomDialog.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CustomSubContext.$(O) CustomSubContext.$(H): CustomSubContext.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CustomUserDialog.$(O) CustomUserDialog.$(H): CustomUserDialog.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomDialog.$(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)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/CodeGeneratorTool.$(H) $(STCHDR)
+$(OUTDIR)CustomAccessMethodsCodeGeneratorOld.$(O) CustomAccessMethodsCodeGeneratorOld.$(H): CustomAccessMethodsCodeGeneratorOld.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(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)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/CodeGeneratorTool.$(H) $(STCHDR)
 $(OUTDIR)CustomFooBarBazCodeGenerator.$(O) CustomFooBarBazCodeGenerator.$(H): CustomFooBarBazCodeGenerator.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/CodeGeneratorTool.$(H) $(STCHDR)
 $(OUTDIR)CustomGetterMethodsCodeGenerator.$(O) CustomGetterMethodsCodeGenerator.$(H): CustomGetterMethodsCodeGenerator.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/CodeGeneratorTool.$(H) $(STCHDR)
@@ -166,6 +166,7 @@
 $(OUTDIR)CustomSimpleGetterMethodsCodeGenerator.$(O) CustomSimpleGetterMethodsCodeGenerator.$(H): CustomSimpleGetterMethodsCodeGenerator.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomGetterMethodsCodeGenerator.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/CodeGeneratorTool.$(H) $(STCHDR)
 $(OUTDIR)CustomSimpleTestCaseCodeGenerator.$(O) CustomSimpleTestCaseCodeGenerator.$(H): CustomSimpleTestCaseCodeGenerator.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomTestCaseCodeGenerator.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/CodeGeneratorTool.$(H) $(STCHDR)
 $(OUTDIR)CustomValueHolderGetterMethodsCodeGenerator.$(O) CustomValueHolderGetterMethodsCodeGenerator.$(H): CustomValueHolderGetterMethodsCodeGenerator.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomGetterMethodsCodeGenerator.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/CodeGeneratorTool.$(H) $(STCHDR)
+$(OUTDIR)CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.$(O) CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.$(H): CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomGetterMethodsCodeGenerator.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/CodeGeneratorTool.$(H) $(STCHDR)
 $(OUTDIR)CustomVisitorCodeGeneratorAcceptVisitor.$(O) CustomVisitorCodeGeneratorAcceptVisitor.$(H): CustomVisitorCodeGeneratorAcceptVisitor.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomVisitorCodeGenerator.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/CodeGeneratorTool.$(H) $(STCHDR)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/SystemBrowser.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__NewSystemBrowser.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 
--- a/Make.spec	Mon Jun 30 19:21:53 2014 +0200
+++ b/Make.spec	Tue Jul 01 14:11:29 2014 +0200
@@ -70,7 +70,7 @@
 	CustomSilentDialog \
 	CustomSubContext \
 	CustomUserDialog \
-	CustomAccessMethodsCodeGenerator \
+	CustomAccessMethodsCodeGeneratorOld \
 	CustomCodeGeneratorClassGenerator \
 	CustomFooBarBazCodeGenerator \
 	CustomGetterMethodsCodeGenerator \
@@ -84,6 +84,7 @@
 	CustomSimpleGetterMethodsCodeGenerator \
 	CustomSimpleTestCaseCodeGenerator \
 	CustomValueHolderGetterMethodsCodeGenerator \
+	CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator \
 	CustomVisitorCodeGeneratorAcceptVisitor \
 
 
@@ -110,7 +111,7 @@
     $(OUTDIR_SLASH)CustomSilentDialog.$(O) \
     $(OUTDIR_SLASH)CustomSubContext.$(O) \
     $(OUTDIR_SLASH)CustomUserDialog.$(O) \
-    $(OUTDIR_SLASH)CustomAccessMethodsCodeGenerator.$(O) \
+    $(OUTDIR_SLASH)CustomAccessMethodsCodeGeneratorOld.$(O) \
     $(OUTDIR_SLASH)CustomCodeGeneratorClassGenerator.$(O) \
     $(OUTDIR_SLASH)CustomFooBarBazCodeGenerator.$(O) \
     $(OUTDIR_SLASH)CustomGetterMethodsCodeGenerator.$(O) \
@@ -124,6 +125,7 @@
     $(OUTDIR_SLASH)CustomSimpleGetterMethodsCodeGenerator.$(O) \
     $(OUTDIR_SLASH)CustomSimpleTestCaseCodeGenerator.$(O) \
     $(OUTDIR_SLASH)CustomValueHolderGetterMethodsCodeGenerator.$(O) \
+    $(OUTDIR_SLASH)CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.$(O) \
     $(OUTDIR_SLASH)CustomVisitorCodeGeneratorAcceptVisitor.$(O) \
     $(OUTDIR_SLASH)extensions.$(O) \
 
--- a/abbrev.stc	Mon Jun 30 19:21:53 2014 +0200
+++ b/abbrev.stc	Tue Jul 01 14:11:29 2014 +0200
@@ -37,7 +37,8 @@
 CustomSubContext CustomSubContext jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomUserDialog CustomUserDialog jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomValueHolderGetterMethodsCodeGeneratorTests CustomValueHolderGetterMethodsCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
-CustomAccessMethodsCodeGenerator CustomAccessMethodsCodeGenerator jn:refactoring_custom 'Interface-Refactoring-Custom' 0
+CustomValueHolderWithChangeNotificationGetterMethodsCodeGeneratorTests CustomValueHolderWithChangeNotificationGetterMethodsCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
+CustomAccessMethodsCodeGeneratorOld CustomAccessMethodsCodeGeneratorOld jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomCodeGeneratorClassGenerator CustomCodeGeneratorClassGenerator jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomFooBarBazCodeGenerator CustomFooBarBazCodeGenerator jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomGetterMethodsCodeGenerator CustomGetterMethodsCodeGenerator jn:refactoring_custom 'Interface-Refactoring-Custom' 0
@@ -51,4 +52,5 @@
 CustomSimpleGetterMethodsCodeGenerator CustomSimpleGetterMethodsCodeGenerator jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomSimpleTestCaseCodeGenerator CustomSimpleTestCaseCodeGenerator jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomValueHolderGetterMethodsCodeGenerator CustomValueHolderGetterMethodsCodeGenerator jn:refactoring_custom 'Interface-Refactoring-Custom' 0
+CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomVisitorCodeGeneratorAcceptVisitor CustomVisitorCodeGeneratorAcceptVisitor jn:refactoring_custom 'Interface-Refactoring-Custom' 0
--- a/bc.mak	Mon Jun 30 19:21:53 2014 +0200
+++ b/bc.mak	Tue Jul 01 14:11:29 2014 +0200
@@ -98,7 +98,7 @@
 $(OUTDIR)CustomSilentDialog.$(O) CustomSilentDialog.$(H): CustomSilentDialog.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomDialog.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CustomSubContext.$(O) CustomSubContext.$(H): CustomSubContext.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CustomUserDialog.$(O) CustomUserDialog.$(H): CustomUserDialog.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomDialog.$(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)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\CodeGeneratorTool.$(H) $(STCHDR)
+$(OUTDIR)CustomAccessMethodsCodeGeneratorOld.$(O) CustomAccessMethodsCodeGeneratorOld.$(H): CustomAccessMethodsCodeGeneratorOld.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(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)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\CodeGeneratorTool.$(H) $(STCHDR)
 $(OUTDIR)CustomFooBarBazCodeGenerator.$(O) CustomFooBarBazCodeGenerator.$(H): CustomFooBarBazCodeGenerator.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\CodeGeneratorTool.$(H) $(STCHDR)
 $(OUTDIR)CustomGetterMethodsCodeGenerator.$(O) CustomGetterMethodsCodeGenerator.$(H): CustomGetterMethodsCodeGenerator.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\CodeGeneratorTool.$(H) $(STCHDR)
@@ -112,6 +112,7 @@
 $(OUTDIR)CustomSimpleGetterMethodsCodeGenerator.$(O) CustomSimpleGetterMethodsCodeGenerator.$(H): CustomSimpleGetterMethodsCodeGenerator.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomGetterMethodsCodeGenerator.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\CodeGeneratorTool.$(H) $(STCHDR)
 $(OUTDIR)CustomSimpleTestCaseCodeGenerator.$(O) CustomSimpleTestCaseCodeGenerator.$(H): CustomSimpleTestCaseCodeGenerator.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomTestCaseCodeGenerator.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\CodeGeneratorTool.$(H) $(STCHDR)
 $(OUTDIR)CustomValueHolderGetterMethodsCodeGenerator.$(O) CustomValueHolderGetterMethodsCodeGenerator.$(H): CustomValueHolderGetterMethodsCodeGenerator.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomGetterMethodsCodeGenerator.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\CodeGeneratorTool.$(H) $(STCHDR)
+$(OUTDIR)CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.$(O) CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.$(H): CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomGetterMethodsCodeGenerator.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\CodeGeneratorTool.$(H) $(STCHDR)
 $(OUTDIR)CustomVisitorCodeGeneratorAcceptVisitor.$(O) CustomVisitorCodeGeneratorAcceptVisitor.$(H): CustomVisitorCodeGeneratorAcceptVisitor.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomVisitorCodeGenerator.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\CodeGeneratorTool.$(H) $(STCHDR)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\SystemBrowser.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__NewSystemBrowser.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 
--- a/jn_refactoring_custom.st	Mon Jun 30 19:21:53 2014 +0200
+++ b/jn_refactoring_custom.st	Tue Jul 01 14:11:29 2014 +0200
@@ -106,7 +106,8 @@
         CustomSubContext
         CustomUserDialog
         (CustomValueHolderGetterMethodsCodeGeneratorTests autoload)
-        CustomAccessMethodsCodeGenerator
+        (CustomValueHolderWithChangeNotificationGetterMethodsCodeGeneratorTests autoload)
+        CustomAccessMethodsCodeGeneratorOld
         CustomCodeGeneratorClassGenerator
         CustomFooBarBazCodeGenerator
         CustomGetterMethodsCodeGenerator
@@ -120,6 +121,7 @@
         CustomSimpleGetterMethodsCodeGenerator
         CustomSimpleTestCaseCodeGenerator
         CustomValueHolderGetterMethodsCodeGenerator
+        CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator
         CustomVisitorCodeGeneratorAcceptVisitor
     )
 !
--- a/libInit.cc	Mon Jun 30 19:21:53 2014 +0200
+++ b/libInit.cc	Tue Jul 01 14:11:29 2014 +0200
@@ -47,7 +47,7 @@
 _CustomSilentDialog_Init(pass,__pRT__,snd);
 _CustomSubContext_Init(pass,__pRT__,snd);
 _CustomUserDialog_Init(pass,__pRT__,snd);
-_CustomAccessMethodsCodeGenerator_Init(pass,__pRT__,snd);
+_CustomAccessMethodsCodeGeneratorOld_Init(pass,__pRT__,snd);
 _CustomCodeGeneratorClassGenerator_Init(pass,__pRT__,snd);
 _CustomFooBarBazCodeGenerator_Init(pass,__pRT__,snd);
 _CustomGetterMethodsCodeGenerator_Init(pass,__pRT__,snd);
@@ -61,6 +61,7 @@
 _CustomSimpleGetterMethodsCodeGenerator_Init(pass,__pRT__,snd);
 _CustomSimpleTestCaseCodeGenerator_Init(pass,__pRT__,snd);
 _CustomValueHolderGetterMethodsCodeGenerator_Init(pass,__pRT__,snd);
+_CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator_Init(pass,__pRT__,snd);
 _CustomVisitorCodeGeneratorAcceptVisitor_Init(pass,__pRT__,snd);
 
 _jn_137refactoring_137custom_extensions_Init(pass,__pRT__,snd);
--- a/refactoring_custom.rc	Mon Jun 30 19:21:53 2014 +0200
+++ b/refactoring_custom.rc	Tue Jul 01 14:11:29 2014 +0200
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
       VALUE "ProductName", "ProductName\0"
       VALUE "ProductVersion", "6.2.4.1259\0"
-      VALUE "ProductDate", "Mon, 30 Jun 2014 16:16:36 GMT\0"
+      VALUE "ProductDate", "Tue, 01 Jul 2014 12:03:41 GMT\0"
     END
 
   END