fix class changes not working with non existing classes defined as model classes (RBClass, RBMetaclass)
authorJakub Nesveda <jakubnesveda@seznam.cz>
Sat, 08 Nov 2014 14:42:12 +0100
changeset 731 6ec82b81a246
parent 730 a18417c3cee7
child 732 b7b75ad428ef
fix class changes not working with non existing classes defined as model classes (RBClass, RBMetaclass)
CustomRefactoryClassChangeTests.st
Make.proto
abbrev.stc
bc.mak
extensions.st
jn_refactoring_custom.st
patches/extensions.st
patches/jn_refactoring_custom_patches.st
patches/patches.rc
refactoring_custom.rc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CustomRefactoryClassChangeTests.st	Sat Nov 08 14:42:12 2014 +0100
@@ -0,0 +1,130 @@
+"{ Package: 'jn:refactoring_custom' }"
+
+TestCase subclass:#CustomRefactoryClassChangeTests
+	instanceVariableNames:'change model'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Refactoring-Custom-Tests'
+!
+
+!CustomRefactoryClassChangeTests methodsFor:'initialization & release'!
+
+setUp
+    super setUp.
+
+    model := RBNamespace new.
+    change := RefactoryClassChange new
+        model: model;
+        yourself.
+
+    "Modified: / 08-11-2014 / 14:29:19 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomRefactoryClassChangeTests methodsFor:'tests'!
+
+test_change_class_with_existing_class
+    | expectedClass actualClass |
+
+    change changeClass: self class.
+
+    expectedClass := self class.
+    actualClass := change changeClass.
+
+    self assert: expectedClass == actualClass
+
+    "Created: / 08-11-2014 / 14:35:16 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_change_class_with_existing_class_with_rb_class
+    | expectedClass actualClass rbClass |
+
+    rbClass := model classFor: self class.  
+
+    change changeClass: rbClass.
+
+    expectedClass := self class.
+    actualClass := change changeClass.
+
+    self assert: expectedClass == actualClass
+
+    "Created: / 08-11-2014 / 14:36:26 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_change_class_with_existing_metaclass
+    | expectedClass actualClass |
+
+    change changeClass: self class class.
+
+    expectedClass := self class class.
+    actualClass := change changeClass.
+
+    self assert: expectedClass == actualClass
+
+    "Created: / 08-11-2014 / 14:35:30 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_change_class_with_non_existing_class
+    | expectedClass actualClass |
+
+    change model: nil.
+
+    change changeClass: (RBClass new
+        name: #DummyClass01;
+        yourself).
+
+    self assert: (Smalltalk at: #DummyClass01) isNil.
+
+    expectedClass := nil.
+    actualClass := change changeClass.
+
+    self assert: expectedClass == actualClass
+
+    "Created: / 08-11-2014 / 14:38:20 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_change_class_with_non_existing_class_but_model_class
+    | expectedClass actualClass class |
+
+    model defineClass: 'Object subclass:#DummyClassForTestCase01
+        instanceVariableNames:''''
+        classVariableNames:''''
+        poolDictionaries:''''
+        category:'''''.
+
+    self assert: (Smalltalk at: #DummyClassForTestCase01) isNil.
+
+    class := model classNamed: #DummyClassForTestCase01.
+
+    change changeClass: class.
+
+    expectedClass := class.
+    actualClass := change changeClass.
+
+    self assert: expectedClass == actualClass
+
+    "Created: / 08-11-2014 / 14:27:39 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_change_class_with_non_existing_metaclass_but_model_metaclass
+    | expectedClass actualClass class |
+
+    model defineClass: 'Object subclass:#DummyClassForTestCase01
+        instanceVariableNames:''''
+        classVariableNames:''''
+        poolDictionaries:''''
+        category:'''''.
+
+    self assert: (Smalltalk at: #DummyClassForTestCase01) isNil.
+
+    class := model metaclassNamed: #DummyClassForTestCase01.
+
+    change changeClass: class.
+
+    expectedClass := class.
+    actualClass := change changeClass.
+
+    self assert: expectedClass == actualClass
+
+    "Created: / 08-11-2014 / 14:33:51 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
--- a/Make.proto	Sat Nov 08 13:31:49 2014 +0100
+++ b/Make.proto	Sat Nov 08 14:42:12 2014 +0100
@@ -34,7 +34,7 @@
 # add the path(es) here:,
 # ********** OPTIONAL: MODIFY the next lines ***
 # LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES= -I$(INCLUDE_TOP)/jn/refactoring_custom/patches -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/refactoring -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic3 -I$(INCLUDE_TOP)/stx/libcomp -I$(INCLUDE_TOP)/stx/libtool -I$(INCLUDE_TOP)/stx/libview -I$(INCLUDE_TOP)/stx/libview2 -I$(INCLUDE_TOP)/stx/libwidg -I$(INCLUDE_TOP)/stx/libwidg2
+LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/refactoring -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic3 -I$(INCLUDE_TOP)/stx/libcomp -I$(INCLUDE_TOP)/stx/libtool -I$(INCLUDE_TOP)/stx/libview -I$(INCLUDE_TOP)/stx/libview2 -I$(INCLUDE_TOP)/stx/libwidg -I$(INCLUDE_TOP)/stx/libwidg2
 
 
 # if you need any additional defines for embedded C code,
--- a/abbrev.stc	Sat Nov 08 13:31:49 2014 +0100
+++ b/abbrev.stc	Sat Nov 08 14:42:12 2014 +0100
@@ -25,6 +25,7 @@
 CustomRBLocalSourceCodeFormatterTests CustomRBLocalSourceCodeFormatterTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
 CustomRBMethodTests CustomRBMethodTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
 CustomRefactoryBuilder CustomRefactoryBuilder jn:refactoring_custom 'Interface-Refactoring-Custom' 0
+CustomRefactoryClassChangeTests CustomRefactoryClassChangeTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
 CustomSourceCodeFormatter CustomSourceCodeFormatter jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomSourceCodeGenerator CustomSourceCodeGenerator jn:refactoring_custom 'Interface-Refactoring-Custom' 0
 CustomSourceCodeGeneratorTests CustomSourceCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
--- a/bc.mak	Sat Nov 08 13:31:49 2014 +0100
+++ b/bc.mak	Sat Nov 08 14:42:12 2014 +0100
@@ -34,7 +34,7 @@
 
 
 
-LOCALINCLUDES= -I$(INCLUDE_TOP)\jn\refactoring_custom\patches -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\refactoring -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic3 -I$(INCLUDE_TOP)\stx\libcomp -I$(INCLUDE_TOP)\stx\libtool -I$(INCLUDE_TOP)\stx\libview -I$(INCLUDE_TOP)\stx\libview2 -I$(INCLUDE_TOP)\stx\libwidg -I$(INCLUDE_TOP)\stx\libwidg2
+LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\refactoring -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic3 -I$(INCLUDE_TOP)\stx\libcomp -I$(INCLUDE_TOP)\stx\libtool -I$(INCLUDE_TOP)\stx\libview -I$(INCLUDE_TOP)\stx\libview2 -I$(INCLUDE_TOP)\stx\libwidg -I$(INCLUDE_TOP)\stx\libwidg2
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES)  -varPrefix=$(LIBNAME)
--- a/extensions.st	Sat Nov 08 13:31:49 2014 +0100
+++ b/extensions.st	Sat Nov 08 14:42:12 2014 +0100
@@ -533,6 +533,26 @@
     "Created: / 06-10-2014 / 08:37:54 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
+!RefactoryChange methodsFor:'accessing'!
+
+model
+    "Returns reference to RBNamespace for retrieving model classes (RBClass, RBMetaclass)"
+
+    ^ self objectAttributeAt: #model
+
+    "Created: / 08-11-2014 / 14:00:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!RefactoryChange methodsFor:'accessing'!
+
+model: aModel
+    "see model"
+
+    self objectAttributeAt: #model put: aModel
+
+    "Created: / 08-11-2014 / 14:00:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
 !Tools::NewSystemBrowser methodsFor:'menus extensions-custom refactorings'!
 
 classMenuExtensionCustomGenerators:aMenu 
--- a/jn_refactoring_custom.st	Sat Nov 08 13:31:49 2014 +0100
+++ b/jn_refactoring_custom.st	Sat Nov 08 14:42:12 2014 +0100
@@ -68,10 +68,7 @@
         #'stx:libview'    "WindowGroup - referenced by CustomCodeGeneratorOrRefactoring>>executeInContextWithWaitCursor:"
         #'stx:libwidg'    "DialogBox - referenced by CustomUserDialog>>initialize"
         #'stx:libwidg2'    "CheckBox - referenced by CustomDialog>>addCheckBoxOn:labeled:"
-        #'jn:refactoring_custom/patches'
     )
-
-    "Modified: / 15-10-2014 / 00:02:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 subProjects
@@ -121,6 +118,7 @@
         (CustomRBLocalSourceCodeFormatterTests autoload)
         (CustomRBMethodTests autoload)
         CustomRefactoryBuilder
+        (CustomRefactoryClassChangeTests autoload)
         CustomSourceCodeFormatter
         CustomSourceCodeGenerator
         (CustomSourceCodeGeneratorTests autoload)
@@ -251,6 +249,8 @@
         RBAbstractClass isSubclassOf:
         RBAbstractClass instAndClassMethodsDo:
         RBAbstractClass methodsDo:
+        RefactoryChange model
+        RefactoryChange model:
     )
 ! !
 
--- a/patches/extensions.st	Sat Nov 08 13:31:49 2014 +0100
+++ b/patches/extensions.st	Sat Nov 08 14:42:12 2014 +0100
@@ -215,6 +215,31 @@
     "Modified: / 02-11-2014 / 16:34:27 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
 ! !
 
+!RefactoryClassChange methodsFor:'accessing'!
+
+changeClass
+        | theClass |
+
+        "/ cg: handle anonymous classes
+        theClass := Smalltalk at: self changeClassName ifAbsent: [nil].
+        theClass isNil ifTrue:[
+            theClass := class.
+            theClass isNil ifTrue:[ 
+                self model notNil ifTrue: [ 
+                    ^ isMeta ifTrue: [
+                        self model metaclassNamed: self changeClassName  
+                    ] ifFalse: [
+                        self model classNamed: self changeClassName  
+                    ]
+                ].
+                ^ nil 
+            ].
+        ].
+        ^isMeta ifTrue: [theClass class] ifFalse: [theClass]
+
+    "Modified: / 08-11-2014 / 14:05:05 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
 !jn_refactoring_custom_patches class methodsFor:'documentation'!
 
 extensionsVersion_HG
--- a/patches/jn_refactoring_custom_patches.st	Sat Nov 08 13:31:49 2014 +0100
+++ b/patches/jn_refactoring_custom_patches.st	Sat Nov 08 14:42:12 2014 +0100
@@ -95,6 +95,7 @@
         RBMethod package
         AddMethodChange asUndoOperation
         BrowserEnvironment whichCategoryIncludes:
+        RefactoryClassChange changeClass
     )
 ! !
 
--- a/patches/patches.rc	Sat Nov 08 13:31:49 2014 +0100
+++ b/patches/patches.rc	Sat Nov 08 14:42:12 2014 +0100
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
       VALUE "ProductName", "LibraryName\0"
       VALUE "ProductVersion", "6.2.4.1420\0"
-      VALUE "ProductDate", "Sat, 08 Nov 2014 12:28:39 GMT\0"
+      VALUE "ProductDate", "Sat, 08 Nov 2014 13:40:12 GMT\0"
     END
 
   END
--- a/refactoring_custom.rc	Sat Nov 08 13:31:49 2014 +0100
+++ b/refactoring_custom.rc	Sat Nov 08 14:42:12 2014 +0100
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
       VALUE "ProductName", "ProductName\0"
       VALUE "ProductVersion", "6.2.4.1420\0"
-      VALUE "ProductDate", "Sat, 08 Nov 2014 12:28:37 GMT\0"
+      VALUE "ProductDate", "Sat, 08 Nov 2014 13:40:10 GMT\0"
     END
 
   END