fix class changes not working with non existing classes defined as model classes (RBClass, RBMetaclass)
--- /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