--- a/CustomNamespace.st Thu Feb 05 22:28:30 2015 +0100
+++ b/CustomNamespace.st Thu Feb 05 22:42:42 2015 +0100
@@ -3,8 +3,8 @@
"{ NameSpace: Smalltalk }"
RBNamespace subclass:#CustomNamespace
- instanceVariableNames:'changeManager formatter defaultValues defaultReplacements
- classModelClass methodModelClass sourceCodeGeneratorClass'
+ instanceVariableNames:'changeManager formatter classModelClass methodModelClass
+ sourceCodeGeneratorClass'
classVariableNames:''
poolDictionaries:''
category:'Interface-Refactoring-Custom'
@@ -178,9 +178,8 @@
createClass
"Much like createMethod, but for class"
- | class |
- class := self classModelClass new
+ ^ self classModelClass new
model: self;
superclass: (self classNamed: #Object);
instanceVariableNames: #();
@@ -188,13 +187,8 @@
poolDictionaryNames: #();
yourself.
- self fillDefaultValuesTo: class.
- self storeDefaultClassWhenNoneStored: class.
-
- ^ class
-
"Created: / 09-04-2014 / 21:38:20 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 09-10-2014 / 11:18:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 05-02-2015 / 22:31:54 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
createMethod
@@ -202,19 +196,14 @@
Creates, returns method representation
so code changes can be created withing this class as one undo change
"
- | method |
- method := self methodModelClass new
+ ^ self methodModelClass new
model: self;
sourceCodeGenerator: self sourceCodeGenerator;
yourself.
- self fillDefaultValuesTo: method.
-
- ^ method
-
"Created: / 09-04-2014 / 23:54:03 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 09-10-2014 / 11:25:43 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 05-02-2015 / 22:32:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !
!CustomNamespace methodsFor:'code creation - immediate'!
@@ -390,175 +379,6 @@
"Created: / 19-10-2014 / 14:56:49 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !
-!CustomNamespace methodsFor:'default values'!
-
-category:aString
-
- self storeDefaultValue: #category: value: aString
-
- "Created: / 29-04-2014 / 19:51:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-class:aClass
-
- self storeDefaultValue: #classes: value: (Array with: aClass)
-
- "Created: / 29-04-2014 / 19:55:50 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 31-08-2014 / 17:01:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-className:something
-
- self storeDefaultValue: #className: value: something
-
- "Created: / 29-04-2014 / 19:42:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-classVariableNames:something
-
- self storeDefaultValue: #classVariableNames: value: something
-
- "Created: / 29-04-2014 / 19:43:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-classes: aClassCollection
-
- self storeDefaultValue: #classes: value: aClassCollection
-
- "Created: / 29-04-2014 / 19:50:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-fillDefaultValuesTo: aCodeElement
- "Initializes new code element (class, method) and fills default values from this model"
- | builderClass |
-
- builderClass := aCodeElement class.
-
- defaultValues keysAndValuesDo: [ :selector :value |
- ((builderClass includesSelector: selector) or: [self isSharedAttribute: selector]) ifTrue: [
- aCodeElement perform: selector with: value.
- ]
- ].
-
- defaultReplacements keysAndValuesDo: [ :placeholder :code |
- aCodeElement replace: placeholder with: code
- ].
-
- "Created: / 29-04-2014 / 20:21:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 09-10-2014 / 10:47:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-forgetReplacements
-
- defaultReplacements removeAll
-
- "Created: / 29-04-2014 / 20:19:15 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-instanceVariableNames:something
-
- self storeDefaultValue: #instanceVariableNames: value: something
-
- "Created: / 29-04-2014 / 19:44:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-isDefaultValueStored: aSelector
-
- ^ defaultValues includesKey: aSelector
-
- "Created: / 31-08-2014 / 16:43:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-isMeta:aBoolean
-
- self storeDefaultValue: #isMeta: value: aBoolean
-
- "Created: / 29-04-2014 / 19:47:47 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-poolDictionaryNames:something
-
- self storeDefaultValue: #poolDictionaryNames: value: something
-
- "Created: / 29-04-2014 / 19:48:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-protocol:aString
-
- self storeDefaultValue: #protocol: value: aString
-
- "Created: / 29-04-2014 / 20:01:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-replace: placeholder with: code
-
- ((self class) == CustomNamespace) ifTrue: [
- defaultReplacements
- at: placeholder
- put: code
- ]
- ifFalse: [
- "replacements
- at: placeholder
- put: (self replacementFromCode: code)"
- ]
-
- "Created: / 29-04-2014 / 20:02:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 09-10-2014 / 09:18:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-source:aString
-
- self storeDefaultValue: #source: value: aString
-
- "Created: / 29-04-2014 / 20:12:20 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-storeDefaultClassWhenNoneStored:aClass
- "Save class as default class when none class is actually set as default class"
-
- (self isDefaultValueStored: #classes:) ifFalse: [
- self storeDefaultValue: #classes: value: (Array with: aClass)
- ]
-
- "Created: / 31-08-2014 / 16:23:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-storeDefaultValue: aSelector value: aValue
-
- ((self class) == CustomNamespace) ifTrue: [
- defaultValues
- at: aSelector
- put: aValue
- ]
- ifFalse: [
- self error: 'Selector ', aSelector, ' has to be overwritten by class: ', self className.
- "
- | superclass |
-
- superclass := self class superclass.
- superclass superclass isNil ifFalse: [
- superclass := superclass superclass
- ].
-
- (superclass canUnderstand: aSelector) ifTrue: [
- self assert: (superclass == CustomSourceCodeBuilder) not.
- self perform: aSelector with: aValue
- ]
- "
- ]
-
- "Created: / 28-04-2014 / 19:08:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 09-10-2014 / 09:34:39 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-superclassName:something
-
- self storeDefaultValue: #superclassName: value: something
-
- "Created: / 29-04-2014 / 19:49:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
!CustomNamespace methodsFor:'initialization'!
initialize
@@ -566,25 +386,13 @@
super initialize.
changeManager := CustomLocalChangeManager new.
- defaultValues := Dictionary new.
- defaultReplacements := Dictionary new.
formatter := CustomRBLocalSourceCodeFormatter new.
classModelClass := RBClass.
methodModelClass := RBMethod.
sourceCodeGeneratorClass := CustomSourceCodeGenerator.
"Created: / 09-04-2014 / 23:44:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 09-10-2014 / 11:30:42 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomNamespace methodsFor:'private'!
-
-isSharedAttribute: aSelector
- "Tells if given selector is shared attribute setter for subclasses"
-
- ^ (aSelector = #package:)
-
- "Created: / 30-08-2014 / 21:38:21 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 05-02-2015 / 22:33:14 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !
!CustomNamespace methodsFor:'testing'!
--- a/CustomNamespaceTests.st Thu Feb 05 22:28:30 2015 +0100
+++ b/CustomNamespaceTests.st Thu Feb 05 22:42:42 2015 +0100
@@ -89,333 +89,6 @@
"Created: / 16-11-2014 / 17:08:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
-test_chaining_api_create_class_and_method_with_default_class
- | class |
-
- self skipIf: true description: 'will be maybe fixed in future'.
-
- model
- name: #MockClassForTestCase;
- createClass;
-
- protocol: 'a protocol';
- source: '`@selector
- self shouldImplement';
- replace: '`@selector' with: 'aSelector';
- createMethod;
-
- replace: '`@selector' with: 'aSelector2';
- createMethod.
-
- model execute.
-
- class := Smalltalk classNamed: 'MockClassForTestCase'.
-
- self assert: (class includesSelector: #aSelector).
- self assert: (class includesSelector: #aSelector2).
-
- self assert: (class sourceCodeAt: #aSelector) = 'aSelector
- self shouldImplement'.
-
- self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
- self shouldImplement'.
-
- "Created: / 30-08-2014 / 23:09:42 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 09-10-2014 / 22:26:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_chaining_api_create_class_and_method_within_given_package
- | class package method1 method2 |
-
- self skipIf: true description: 'will be maybe fixed in future'.
-
- package := self class package.
- self assert: package size > 3.
-
- class := model
- package: package;
- className: 'MockClassForTestCase';
- createClass.
-
- model
- class: class;
- protocol: 'a protocol';
- source: '`@selector
- self shouldImplement';
- replace: '`@selector' with: 'aSelector';
- createMethod;
-
- replace: '`@selector' with: 'aSelector2';
- createMethod.
-
- self assert: (class includesSelector: #aSelector) not.
- self assert: (class includesSelector: #aSelector2) not.
-
- model execute.
-
- class := Smalltalk classNamed: 'MockClassForTestCase'.
-
- self assert: (class includesSelector: #aSelector).
- self assert: (class includesSelector: #aSelector2).
-
- self assert: (class sourceCodeAt: #aSelector) = 'aSelector
- self shouldImplement'.
-
- self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
- self shouldImplement'.
-
- self assert: class package equals: package.
-
- method1 := class compiledMethodAt: #aSelector.
-
- self assert: method1 package equals: package.
-
- method2 := class compiledMethodAt: #aSelector2.
-
- self assert: method2 package equals: package.
-
- "Created: / 30-08-2014 / 22:21:31 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 09-10-2014 / 22:26:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_chaining_api_create_class_and_method_without_given_package
- | class package method1 method2 |
-
- self skipIf: true description: 'will be maybe fixed in future'.
-
- package := self class package.
- self assert: package size > 3.
-
- class := model
- className: 'MockClassForTestCase';
- createClass.
-
- model
- class: class;
- protocol: 'a protocol';
- source: '`@selector
- self shouldImplement';
- replace: '`@selector' with: 'aSelector';
- createMethod;
-
- replace: '`@selector' with: 'aSelector2';
- createMethod.
-
- self assert: (class includesSelector: #aSelector) not.
- self assert: (class includesSelector: #aSelector2) not.
-
- model execute.
-
- class := Smalltalk classNamed: 'MockClassForTestCase'.
-
- self assert: (class includesSelector: #aSelector).
- self assert: (class includesSelector: #aSelector2).
-
- self assert: (class sourceCodeAt: #aSelector) = 'aSelector
- self shouldImplement'.
-
- self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
- self shouldImplement'.
-
- self deny: class package = package.
-
- method1 := class compiledMethodAt: #aSelector.
-
- self deny: method1 package = package.
-
- method2 := class compiledMethodAt: #aSelector2.
-
- self deny: method2 package = package.
-
- "Created: / 30-08-2014 / 23:01:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 09-10-2014 / 22:26:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_chaining_api_create_method
- | class |
-
- self skipIf: true description: 'will be maybe fixed in future'.
-
- class := self class.
-
- model
- class: class;
- protocol: 'a protocol';
- source: '`@selector
- self shouldImplement';
- replace: '`@selector' with: 'aSelector';
- createMethod;
-
- replace: '`@selector' with: 'aSelector2';
- createMethod.
-
- self assert: (class includesSelector: #aSelector) not.
- self assert: (class includesSelector: #aSelector2) not.
-
- model execute.
-
- self assert: (class includesSelector: #aSelector).
- self assert: (class includesSelector: #aSelector2).
-
- self assert: (class sourceCodeAt: #aSelector) = 'aSelector
- self shouldImplement'.
-
- self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
- self shouldImplement'.
-
- "Created: / 27-04-2014 / 17:48:30 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 26-08-2014 / 23:39:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 09-10-2014 / 22:26:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_chaining_api_create_method_with_class
- | class className method |
-
- self skipIf: true description: 'will be maybe fixed in future'.
-
- className := 'TestClassNameForTestCase'.
-
- class := model
- className: className;
- classVariableNames: 'ClassVar1 ClassVar2';
- instanceVariableNames: 'instVar1 instVar2';
- poolDictionaryNames: 'dictName';
- superclassName: 'TestCase';
- category: 'Some-Category';
- createClass.
-
- model
- class: class;
- protocol: 'a protocol';
- source: '`@selector
- self shouldImplement';
- replace: '`@selector' with: 'aSelector';
- createMethod.
-
- self assertClassNotExists: className.
- [
- model execute.
-
- class := Smalltalk classNamed: className.
-
- self assert: class new className = className.
- self assert: class superclass new className = 'TestCase'.
- self assert: class instanceVariableString = 'instVar1 instVar2'.
- self assert: class classVariableString = 'ClassVar1 ClassVar2'.
- self assert: class poolDictionaries = 'dictName'.
- self assert: class category = 'Some-Category'.
-
- self assert: (class includesSelector: #aSelector).
- self assert: (class sourceCodeAt: #aSelector) = 'aSelector
- self shouldImplement'.
- method := class compiledMethodAt: #aSelector.
- self assert: (method category) = 'a protocol'.
- ] ensure:[
- class notNil ifTrue:[
- class removeFromSystem.
- ].
- ]
-
- "Created: / 04-05-2014 / 13:00:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 26-08-2014 / 23:56:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 09-10-2014 / 22:27:27 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_chaining_api_create_method_within_given_package
- | class package method1 method2 |
-
- self skipIf: true description: 'will be maybe fixed in future'.
-
- package := self class package.
- self assert: package size > 3.
-
- class := self class.
-
- model
- package: package;
- class: class;
- protocol: 'a protocol';
- source: '`@selector
- self shouldImplement';
- replace: '`@selector' with: 'aSelector';
- createMethod;
-
- replace: '`@selector' with: 'aSelector2';
- createMethod.
-
- self assert: (class includesSelector: #aSelector) not.
- self assert: (class includesSelector: #aSelector2) not.
-
- model execute.
-
- self assert: (class includesSelector: #aSelector).
- self assert: (class includesSelector: #aSelector2).
-
- self assert: (class sourceCodeAt: #aSelector) = 'aSelector
- self shouldImplement'.
-
- self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
- self shouldImplement'.
-
- method1 := class compiledMethodAt: #aSelector.
-
- self assert: method1 package equals: package.
-
- method2 := class compiledMethodAt: #aSelector2.
-
- self assert: method2 package equals: package.
-
- "Created: / 30-08-2014 / 21:40:15 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 09-10-2014 / 22:27:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_chaining_api_create_method_without_given_package
- | class package method1 method2 |
-
- self skipIf: true description: 'will be maybe fixed in future'.
-
- package := self class package.
- self assert: package size > 3.
-
- class := self class.
-
- model
- class: class;
- protocol: 'a protocol';
- source: '`@selector
- self shouldImplement';
- replace: '`@selector' with: 'aSelector';
- createMethod;
-
- replace: '`@selector' with: 'aSelector2';
- createMethod.
-
- self assert: (class includesSelector: #aSelector) not.
- self assert: (class includesSelector: #aSelector2) not.
-
- model execute.
-
- self assert: (class includesSelector: #aSelector).
- self assert: (class includesSelector: #aSelector2).
-
- self assert: (class sourceCodeAt: #aSelector) = 'aSelector
- self shouldImplement'.
-
- self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
- self shouldImplement'.
-
- method1 := class compiledMethodAt: #aSelector.
-
- self deny: method1 package = package.
-
- method2 := class compiledMethodAt: #aSelector2.
-
- self deny: method2 package = package.
-
- "Created: / 30-08-2014 / 21:42:19 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 09-10-2014 / 22:27:41 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
test_changes_empty_as_default
self assert: model changes size == 0
@@ -1125,44 +798,6 @@
"Modified: / 10-10-2014 / 16:00:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
-test_one_method_for_multiple_classes
- | classCollection classNames |
-
- self skipIf: true description: 'will be maybe fixed in future'.
-
- classCollection := OrderedCollection new.
- classNames := Array with: 'DummyClassForTestCase1' with: 'DummyClassForTestCase2'.
-
- classCollection := classNames collect: [ :className |
- model className: className; createClass
- ].
-
- model
- classes: classCollection;
- protocol: 'a protocol';
- source: '`@selector
- self shouldImplement';
- replace: '`@selector' with: 'aSelector';
- createMethod.
-
- model execute.
-
- classNames do: [ :className |
- | class method |
-
- class := Smalltalk classNamed: className.
- self assert: (class includesSelector: #aSelector).
- self assert: (class sourceCodeAt: #aSelector) = 'aSelector
- self shouldImplement'.
- method := class compiledMethodAt: #aSelector.
- self assert: (method category) = 'a protocol'.
- ].
-
- "Created: / 02-05-2014 / 23:31:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 26-08-2014 / 23:41:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 25-01-2015 / 15:56:55 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
test_put_model_class_changed_class
|class|
--- a/patches/patches.rc Thu Feb 05 22:28:30 2015 +0100
+++ b/patches/patches.rc Thu Feb 05 22:42:42 2015 +0100
@@ -25,7 +25,7 @@
VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
VALUE "ProductName", "LibraryName\0"
VALUE "ProductVersion", "6.2.5.1525\0"
- VALUE "ProductDate", "Thu, 05 Feb 2015 21:27:41 GMT\0"
+ VALUE "ProductDate", "Thu, 05 Feb 2015 21:41:46 GMT\0"
END
END
--- a/refactoring_custom.rc Thu Feb 05 22:28:30 2015 +0100
+++ b/refactoring_custom.rc Thu Feb 05 22:42:42 2015 +0100
@@ -25,7 +25,7 @@
VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
VALUE "ProductName", "ProductName\0"
VALUE "ProductVersion", "6.2.5.1525\0"
- VALUE "ProductDate", "Thu, 05 Feb 2015 21:27:40 GMT\0"
+ VALUE "ProductDate", "Thu, 05 Feb 2015 21:41:44 GMT\0"
END
END