# HG changeset patch # User Jakub Nesveda # Date 1423172562 -3600 # Node ID 0ca40b727a4f4bee62cb3dcf93db072f5eca818f # Parent d18c25f112ce4bfcb8ffe38cf988b73497eaf62a Cleanup - remove unfinished implementation of chaining api and default values diff -r d18c25f112ce -r 0ca40b727a4f CustomNamespace.st --- 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 " - "Modified: / 09-10-2014 / 11:18:17 / Jakub Nesveda " + "Modified: / 05-02-2015 / 22:31:54 / Jakub Nesveda " ! 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 " - "Modified: / 09-10-2014 / 11:25:43 / Jakub Nesveda " + "Modified: / 05-02-2015 / 22:32:35 / Jakub Nesveda " ! ! !CustomNamespace methodsFor:'code creation - immediate'! @@ -390,175 +379,6 @@ "Created: / 19-10-2014 / 14:56:49 / Jakub Nesveda " ! ! -!CustomNamespace methodsFor:'default values'! - -category:aString - - self storeDefaultValue: #category: value: aString - - "Created: / 29-04-2014 / 19:51:45 / Jakub Nesveda " -! - -class:aClass - - self storeDefaultValue: #classes: value: (Array with: aClass) - - "Created: / 29-04-2014 / 19:55:50 / Jakub Nesveda " - "Modified: / 31-08-2014 / 17:01:22 / Jakub Nesveda " -! - -className:something - - self storeDefaultValue: #className: value: something - - "Created: / 29-04-2014 / 19:42:23 / Jakub Nesveda " -! - -classVariableNames:something - - self storeDefaultValue: #classVariableNames: value: something - - "Created: / 29-04-2014 / 19:43:22 / Jakub Nesveda " -! - -classes: aClassCollection - - self storeDefaultValue: #classes: value: aClassCollection - - "Created: / 29-04-2014 / 19:50:07 / Jakub Nesveda " -! - -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 " - "Modified: / 09-10-2014 / 10:47:07 / Jakub Nesveda " -! - -forgetReplacements - - defaultReplacements removeAll - - "Created: / 29-04-2014 / 20:19:15 / Jakub Nesveda " -! - -instanceVariableNames:something - - self storeDefaultValue: #instanceVariableNames: value: something - - "Created: / 29-04-2014 / 19:44:37 / Jakub Nesveda " -! - -isDefaultValueStored: aSelector - - ^ defaultValues includesKey: aSelector - - "Created: / 31-08-2014 / 16:43:52 / Jakub Nesveda " -! - -isMeta:aBoolean - - self storeDefaultValue: #isMeta: value: aBoolean - - "Created: / 29-04-2014 / 19:47:47 / Jakub Nesveda " -! - -poolDictionaryNames:something - - self storeDefaultValue: #poolDictionaryNames: value: something - - "Created: / 29-04-2014 / 19:48:37 / Jakub Nesveda " -! - -protocol:aString - - self storeDefaultValue: #protocol: value: aString - - "Created: / 29-04-2014 / 20:01:08 / Jakub Nesveda " -! - -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 " - "Modified: / 09-10-2014 / 09:18:22 / Jakub Nesveda " -! - -source:aString - - self storeDefaultValue: #source: value: aString - - "Created: / 29-04-2014 / 20:12:20 / Jakub Nesveda " -! - -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 " -! - -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 " - "Modified: / 09-10-2014 / 09:34:39 / Jakub Nesveda " -! - -superclassName:something - - self storeDefaultValue: #superclassName: value: something - - "Created: / 29-04-2014 / 19:49:02 / Jakub Nesveda " -! ! - !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 " - "Modified: / 09-10-2014 / 11:30:42 / Jakub Nesveda " -! ! - -!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 " + "Modified: / 05-02-2015 / 22:33:14 / Jakub Nesveda " ! ! !CustomNamespace methodsFor:'testing'! diff -r d18c25f112ce -r 0ca40b727a4f CustomNamespaceTests.st --- 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 " ! -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 " - "Modified: / 09-10-2014 / 22:26:01 / Jakub Nesveda " -! - -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 " - "Modified: / 09-10-2014 / 22:26:10 / Jakub Nesveda " -! - -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 " - "Modified: / 09-10-2014 / 22:26:18 / Jakub Nesveda " -! - -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 " - "Modified: / 26-08-2014 / 23:39:02 / Jan Vrany " - "Modified: / 09-10-2014 / 22:26:25 / Jakub Nesveda " -! - -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 " - "Modified: / 26-08-2014 / 23:56:26 / Jan Vrany " - "Modified: / 09-10-2014 / 22:27:27 / Jakub Nesveda " -! - -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 " - "Modified: / 09-10-2014 / 22:27:33 / Jakub Nesveda " -! - -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 " - "Modified: / 09-10-2014 / 22:27:41 / Jakub Nesveda " -! - test_changes_empty_as_default self assert: model changes size == 0 @@ -1125,44 +798,6 @@ "Modified: / 10-10-2014 / 16:00:56 / Jakub Nesveda " ! -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 " - "Modified: / 26-08-2014 / 23:41:47 / Jan Vrany " - "Modified: / 25-01-2015 / 15:56:55 / Jakub Nesveda " -! - test_put_model_class_changed_class |class| diff -r d18c25f112ce -r 0ca40b727a4f patches/patches.rc --- 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 diff -r d18c25f112ce -r 0ca40b727a4f refactoring_custom.rc --- 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