fix rewriting objects in createImmediate methods in CustomNamespace
authorJakub Nesveda <jakubnesveda@seznam.cz>
Sun, 02 Nov 2014 22:01:00 +0100
changeset 720 33032cf72a9c
parent 719 8a4f5889081e
child 721 f76a4c53af1e
fix rewriting objects in createImmediate methods in CustomNamespace
CustomNamespace.st
CustomNamespaceTests.st
patches/extensions.st
patches/patches.rc
refactoring_custom.rc
--- a/CustomNamespace.st	Sun Nov 02 11:52:59 2014 +0100
+++ b/CustomNamespace.st	Sun Nov 02 22:01:00 2014 +0100
@@ -208,12 +208,12 @@
 
 createClassImmediate: aClassName superClassName: aSuperClassName instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: poolDict category: category privateIn: privateInClassName
     "Creates class immediately and returns the real class"
-    | newClassName |
+    | newClassName change |
 
     newClassName := aClassName.
 
     privateInClassName isNil ifTrue: [ 
-        changes addChange: (InteractiveAddClassChange definition:
+        change := (InteractiveAddClassChange definition:
             aSuperClassName asString, ' subclass:#', aClassName asString, '
                 instanceVariableNames:''', instVarNames asString, '''
                 classVariableNames:''', classVarNames asString, '''
@@ -221,7 +221,7 @@
                 category:''', category asString, '''
         ')
     ] ifFalse: [ 
-        changes addChange: (InteractiveAddClassChange definition:
+        change := (InteractiveAddClassChange definition:
             aSuperClassName asString, ' subclass:#', aClassName asString, '
                 instanceVariableNames:''', instVarNames asString, '''
                 classVariableNames:''', classVarNames asString, '''
@@ -232,12 +232,12 @@
         newClassName := privateInClassName asString, '::', aClassName asString.
     ].
 
-    self execute.
+    changeManager performChange: change.  
 
     ^ Smalltalk classNamed: newClassName
 
     "Created: / 30-10-2014 / 21:28:40 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-    "Modified: / 31-10-2014 / 00:17:53 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 02-11-2014 / 16:30:54 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 createClassImmediate: aClassName superClassName: aSuperClassName privateIn: privateInClassName
@@ -268,14 +268,13 @@
         change package: aPackageId  
     ].
 
-    changes addChange: change.
-
-    self execute.
+    changeManager performChange: change.    
 
     selector := (Parser parseMethodSpecification: aSource) selector.
     ^ aClass compiledMethodAt: selector
 
     "Created: / 17-10-2014 / 09:53:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 02-11-2014 / 16:17:21 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
 createMethodImmediate: aClass source: aSource
--- a/CustomNamespaceTests.st	Sun Nov 02 11:52:59 2014 +0100
+++ b/CustomNamespaceTests.st	Sun Nov 02 22:01:00 2014 +0100
@@ -531,6 +531,24 @@
     "Modified: / 27-07-2014 / 12:42:53 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
+test_create_class_immediate_object_changes_kept
+    | expectedId actualId mockClass |
+
+    mockClass := model createClassImmediate: 'MockClassForTestCase01'.
+    expectedId := mockClass identityHash.
+    mockClass package: #some_package.
+
+    model createClassImmediate: 'MockClassForTestCase02'.
+    self assertClassExists: #MockClassForTestCase02.  
+
+    actualId := (Smalltalk at: #MockClassForTestCase01) identityHash.
+
+    self assert: expectedId = actualId.
+    self assert: (Smalltalk at: #MockClassForTestCase01) package = #some_package.
+
+    "Created: / 02-11-2014 / 16:27:21 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
 test_create_class_immediate_super_class_name_instance_variable_names_class_variable_names_pool_dictionaries_category_private_in_private_class
     | mockClass |
 
@@ -731,6 +749,22 @@
     "Modified: / 24-06-2014 / 21:59:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 !
 
+test_create_method_immediate_object_changes_kept
+    | expectedId actualId mockClass method |
+
+    mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
+    method := model createMethodImmediate: mockClass protocol: 'a protocol' source: 'selector_01 ^ 11'.
+    expectedId := method identityHash.
+    method package: #some_package.
+    model createMethodImmediate: mockClass protocol: 'a protocol' source: 'selector_02 ^ 22'.
+    actualId := (mockClass compiledMethodAt:#selector_01) identityHash.
+
+    self assert: expectedId = actualId.
+    self assert: ((mockClass compiledMethodAt:#selector_01) package) = #some_package.
+
+    "Created: / 02-11-2014 / 16:12:09 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
 test_create_method_immediate_protocol_source_package
     | expectedSource actualSource mockClass |
 
--- a/patches/extensions.st	Sun Nov 02 11:52:59 2014 +0100
+++ b/patches/extensions.st	Sun Nov 02 22:01:00 2014 +0100
@@ -164,14 +164,14 @@
         selector := self selector.
 
         "Do not try to retrieve method when its not possible"
-        (realClass notNil and: [ selector notNil ]) ifTrue: [ 
+        (realClass notNil and: [ selector notNil ]) ifTrue: [
             compiledMethod := realClass compiledMethodAt: selector.
         ]
     ].
     ^compiledMethod
 
     "Modified: / 17-02-2012 / 00:07:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 08-10-2014 / 18:52:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 02-11-2014 / 16:38:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
 !RBMethod methodsFor:'accessing'!
@@ -187,9 +187,9 @@
 
         method := self method.
 
-        method isNil ifTrue: [ 
+        method isNil ifTrue: [
             package := PackageId noProjectID
-        ] ifFalse: [ 
+        ] ifFalse: [
             package := method package
         ]
     ].
@@ -197,7 +197,7 @@
     ^ package
 
     "Created: / 17-02-2012 / 00:41:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 10-10-2014 / 11:11:36 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+    "Modified: / 02-11-2014 / 16:34:27 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
 !jn_refactoring_custom_patches class methodsFor:'documentation'!
--- a/patches/patches.rc	Sun Nov 02 11:52:59 2014 +0100
+++ b/patches/patches.rc	Sun Nov 02 22:01:00 2014 +0100
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
       VALUE "ProductName", "LibraryName\0"
       VALUE "ProductVersion", "6.2.4.1378\0"
-      VALUE "ProductDate", "Sun, 02 Nov 2014 10:48:54 GMT\0"
+      VALUE "ProductDate", "Sun, 02 Nov 2014 20:52:52 GMT\0"
     END
 
   END
--- a/refactoring_custom.rc	Sun Nov 02 11:52:59 2014 +0100
+++ b/refactoring_custom.rc	Sun Nov 02 22:01:00 2014 +0100
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
       VALUE "ProductName", "ProductName\0"
       VALUE "ProductVersion", "6.2.4.1378\0"
-      VALUE "ProductDate", "Sun, 02 Nov 2014 10:48:51 GMT\0"
+      VALUE "ProductDate", "Sun, 02 Nov 2014 20:52:49 GMT\0"
     END
 
   END