completed - rewriting code generators to replace CustomSourceCodeBuilder, but RBClass, RBMetaclass, RBNamespace and CodeGenerator
rename codeBuilder to model ( like in Refactory-Model category )
rename CustomSourceCodeBuilder to CustomNamespace
remove CustomSourceCodeBuilder private suclasses
move package set to AddClassChange and AddMethodChange
--- a/CustomAccessMethodsCodeGenerator.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomAccessMethodsCodeGenerator.st Fri Oct 10 16:28:37 2014 +0200
@@ -93,7 +93,7 @@
source := self sourceForClass: class variableName: variableName.
- codeBuilder
+ model
compile: source
in: (self methodClass: class)
classified: self protocol
--- a/CustomClassQueryTests.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomClassQueryTests.st Fri Oct 10 16:28:37 2014 +0200
@@ -1,7 +1,7 @@
"{ Package: 'jn:refactoring_custom' }"
TestCase subclass:#CustomClassQueryTests
- instanceVariableNames:'classQuery builder mockSuperClass mockClass'
+ instanceVariableNames:'classQuery model mockSuperClass mockClass'
classVariableNames:''
poolDictionaries:''
category:'Interface-Refactoring-Custom-Tests'
@@ -12,16 +12,16 @@
setUp
classQuery := CustomClassQuery new.
- builder := CustomSourceCodeBuilder new.
- mockSuperClass := builder createClassImmediate: 'MockSuperClassForTestCase' superClassName: 'Object'.
- mockClass := builder createClassImmediate: 'MockClassForTestCase' superClassName: (mockSuperClass new className).
+ model := CustomNamespace new.
+ mockSuperClass := model createClassImmediate: 'MockSuperClassForTestCase' superClassName: 'Object'.
+ mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: (mockSuperClass new className).
- "Modified: / 15-06-2014 / 16:15:49 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 09-10-2014 / 09:33:36 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
tearDown
- builder redoChanges
+ model redoChanges
"Modified: / 15-06-2014 / 16:16:06 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !
@@ -52,7 +52,7 @@
self assert: (classQuery methodForSuperclassSelector: 'initialize' class: Object) isNil.
"/ Instance method
- builder createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
+ model createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
self shouldImplement'.
method := classQuery methodForSuperclassSelector: #instanceMethod: class: mockClass.
@@ -61,7 +61,7 @@
self assert: 'instanceMethod:aParam' = method methodDefinitionTemplate.
"/ Class method
- builder createMethodImmediate: mockSuperClass class protocol: 'class-protocol' source: 'classMethod: aParam
+ model createMethodImmediate: mockSuperClass class protocol: 'class-protocol' source: 'classMethod: aParam
self shouldImplement'.
method := classQuery methodForSuperclassSelector: 'classMethod:' class: mockClass class.
--- a/CustomCodeGenerator.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomCodeGenerator.st Fri Oct 10 16:28:37 2014 +0200
@@ -14,7 +14,7 @@
| codeGenerator nestingCount |
codeGenerator := self new.
- codeGenerator codeBuilder: aCodeGenerator codeBuilder.
+ codeGenerator model:aCodeGenerator model.
codeGenerator refactoryBuilder: aCodeGenerator refactoryBuilder.
codeGenerator userPreferences: aCodeGenerator userPreferences.
codeGenerator dialog: aCodeGenerator dialog.
--- a/CustomCodeGeneratorClassGenerator.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomCodeGeneratorClassGenerator.st Fri Oct 10 16:28:37 2014 +0200
@@ -69,7 +69,7 @@
| subContext generator class |
- class := codeBuilder createClass.
+ class := model createClass.
class
superclassName: #CustomCodeGenerator;
name: aClassName asSymbol;
--- a/CustomCodeGeneratorOrRefactoring.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomCodeGeneratorOrRefactoring.st Fri Oct 10 16:28:37 2014 +0200
@@ -2,7 +2,7 @@
Object subclass:#CustomCodeGeneratorOrRefactoring
instanceVariableNames:'compositeChangeCollector compositeChangeNesting userPreferences
- confirmChanges generateComments dialog changeManager codeBuilder
+ confirmChanges generateComments dialog changeManager model
refactoryBuilder formatter'
classVariableNames:''
poolDictionaries:''
@@ -133,20 +133,6 @@
"Created: / 31-05-2014 / 13:30:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
-codeBuilder
-
- ^ codeBuilder
-
- "Created: / 23-08-2014 / 00:13:43 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-codeBuilder: aBuilder
-
- codeBuilder := aBuilder
-
- "Created: / 23-08-2014 / 00:13:26 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
compositeChangeCollector
^ compositeChangeCollector
@@ -203,6 +189,20 @@
"Created: / 19-09-2014 / 22:18:50 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
+model
+ ^model
+
+ "Created: / 23-08-2014 / 00:13:43 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+model: aModel
+
+ model := aModel
+
+ "Created: / 23-08-2014 / 00:13:26 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified (format): / 09-10-2014 / 10:17:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
refactoryBuilder
^ refactoryBuilder
@@ -219,7 +219,7 @@
sourceCodeGenerator
- ^ codeBuilder sourceCodeGenerator
+ ^ model sourceCodeGenerator
"Created: / 19-09-2014 / 20:56:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 07-10-2014 / 22:47:34 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
@@ -275,15 +275,6 @@
!CustomCodeGeneratorOrRefactoring methodsFor:'code generation'!
-addBuilderChanges
-
- self addChange: codeBuilder changes.
- self addChange: refactoryBuilder change
-
- "Created: / 10-04-2014 / 23:26:12 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 21-09-2014 / 23:14:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
addChange: aCodeChange
aCodeChange notNil ifTrue: [
@@ -292,6 +283,14 @@
"Created: / 23-08-2014 / 15:40:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 17-09-2014 / 22:53:48 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+addChanges
+ self addChange:model changes.
+ self addChange:refactoryBuilder change
+
+ "Created: / 10-04-2014 / 23:26:12 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 21-09-2014 / 23:14:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !
!CustomCodeGeneratorOrRefactoring methodsFor:'compilation'!
@@ -362,7 +361,7 @@
self validateInContext: aCustomContext.
self buildInContext: aCustomContext.
- self addBuilderChanges.
+ self addChanges.
self executeCollectedChangesNamed: self class description.
"Created: / 19-03-2014 / 18:45:26 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
@@ -445,7 +444,7 @@
generateComments := userPreferences generateComments.
self setUpFormatter.
- self setUpCodeBuilder.
+ self setUpModel.
self setUpRefactoryBuilder.
self setUpDialog.
self setUpChangeManager
@@ -461,14 +460,6 @@
"Created: / 09-06-2014 / 22:56:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
-setUpCodeBuilder
-
- codeBuilder := CustomSourceCodeBuilder new.
-
- "Created: / 09-06-2014 / 22:56:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified (format): / 23-08-2014 / 00:06:15 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
setUpDialog
dialog := CustomUserDialog new.
@@ -483,6 +474,13 @@
"Created: / 18-09-2014 / 23:12:42 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
+setUpModel
+ model := CustomNamespace new.
+
+ "Created: / 09-06-2014 / 22:56:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 09-10-2014 / 09:34:30 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
setUpRefactoryBuilder
refactoryBuilder := CustomRefactoryBuilder new.
--- a/CustomCodeGeneratorOrRefactoringTestCase.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomCodeGeneratorOrRefactoringTestCase.st Fri Oct 10 16:28:37 2014 +0200
@@ -1,8 +1,8 @@
"{ Package: 'jn:refactoring_custom' }"
TestCase subclass:#CustomCodeGeneratorOrRefactoringTestCase
- instanceVariableNames:'context codeBuilder refactoryBuilder generatorOrRefactoring
- classes changeManager userPreferences mock testFormatterSettings
+ instanceVariableNames:'context model refactoryBuilder generatorOrRefactoring classes
+ changeManager userPreferences mock testFormatterSettings
originalFormatterSettings formatter'
classVariableNames:''
poolDictionaries:''
@@ -122,17 +122,17 @@
| class |
- class := codeBuilder createClass.
- class
+ class := model createClass
name: #DummyClassForGeneratorTestCase;
- compile.
+ compile;
+ yourself.
classes add: class.
^ class
"Created: / 29-05-2014 / 23:22:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified (format): / 25-09-2014 / 23:39:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 09-10-2014 / 10:34:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !
!CustomCodeGeneratorOrRefactoringTestCase methodsFor:'context templates'!
@@ -235,19 +235,20 @@
setUpBuilders
- codeBuilder := CustomSourceCodeBuilder new.
- codeBuilder changeManager: changeManager.
+ model := CustomNamespace new.
+ model changeManager: changeManager.
refactoryBuilder := CustomRefactoryBuilder new.
refactoryBuilder changeManager: changeManager.
"Created: / 23-08-2014 / 15:57:43 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 09-10-2014 / 09:34:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
setUpGeneratorOrRefactoring: aGeneratorOrRefactoring
aGeneratorOrRefactoring formatter: formatter.
- aGeneratorOrRefactoring codeBuilder: codeBuilder.
+ aGeneratorOrRefactoring model:model.
aGeneratorOrRefactoring refactoryBuilder: refactoryBuilder.
aGeneratorOrRefactoring changeManager: changeManager.
aGeneratorOrRefactoring userPreferences: userPreferences
@@ -277,7 +278,7 @@
SpaceAroundLiteralArrayElements := true.
STXStyleMethodComments := true.
"
- codeBuilder formatter: formatter.
+ model formatter: formatter.
refactoryBuilder formatter: formatter
"Created: / 28-08-2014 / 23:29:34 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
--- a/CustomCodeGeneratorOrRefactoringTestCaseCodeGenerator.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomCodeGeneratorOrRefactoringTestCaseCodeGenerator.st Fri Oct 10 16:28:37 2014 +0200
@@ -74,7 +74,7 @@
self executeGeneratorInContext: #classWithInstanceVariable.
self assertMethodSource: expectedSource atSelector: #instanceVariable'.
- codeBuilder
+ model
class: aTestClass;
protocol: 'tests';
--- a/CustomCodeGeneratorTests.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomCodeGeneratorTests.st Fri Oct 10 16:28:37 2014 +0200
@@ -28,7 +28,7 @@
subGeneratorClass_01 new compileMockMethod: 'buildInContext: aCustomContext
aCustomContext selectedClasses do: [ :class |
- codeBuilder createMethod
+ model createMethod
class: class;
source: ''selector_01 ^ 1'';
compile.
@@ -38,7 +38,7 @@
subGeneratorClass_02 new compileMockMethod: 'buildInContext: aCustomContext
aCustomContext selectedClasses do: [ :class |
- codeBuilder createMethod
+ model createMethod
class: class;
source: ''selector_02 ^ 2'';
compile.
@@ -58,6 +58,6 @@
self assertMethodSource: expectedSource_02 atSelector: #selector_02.
"Created: / 10-07-2014 / 12:11:40 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 08-10-2014 / 18:55:55 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 10-10-2014 / 16:06:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !
--- a/CustomCodeSelectionToResourceTranslationTests.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomCodeSelectionToResourceTranslationTests.st Fri Oct 10 16:28:37 2014 +0200
@@ -22,8 +22,8 @@
self information: ''Translate this''.
^ self.'.
- class := codeBuilder createClassImmediate: 'DummyClassForTestCase01' instanceVariableNames: 'resources'.
- codeBuilder createMethodImmediate: class source: originalSource.
+ class := model createClassImmediate: 'DummyClassForTestCase01' instanceVariableNames: 'resources'.
+ model createMethodImmediate: class source: originalSource.
codeSelection := CustomSourceCodeSelection new.
codeSelection
--- a/CustomMockTests.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomMockTests.st Fri Oct 10 16:28:37 2014 +0200
@@ -1,7 +1,7 @@
"{ Package: 'jn:refactoring_custom' }"
TestCase subclass:#CustomMockTests
- instanceVariableNames:'builder mock testCompleted'
+ instanceVariableNames:'model mock testCompleted'
classVariableNames:''
poolDictionaries:''
category:'Interface-Refactoring-Custom-Tests'
@@ -12,16 +12,16 @@
setUp
- builder := CustomSourceCodeBuilder new.
+ model := CustomNamespace new.
mock := CustomMock new.
testCompleted := false.
- "Modified: / 22-09-2014 / 22:33:30 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 09-10-2014 / 09:34:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
tearDown
- builder redoChanges.
+ model redoChanges.
mock unmockAll
"Modified: / 11-07-2014 / 13:20:42 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
@@ -43,10 +43,10 @@
| class mockClass |
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
- builder createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_01: aParam
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ model createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_01: aParam
^ 10'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
^ 15'.
self assert: (class aSelector_01: nil) = 10.
@@ -76,10 +76,10 @@
self skipIf: true description: 'unable to fix'.
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
- builder createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_01: aParam
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ model createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_01: aParam
^ 10'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
^ 15'.
self assert: (class aSelector_01: nil) = 10.
@@ -108,10 +108,10 @@
| class mockClass |
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
- builder createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_01: aParam
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ model createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_01: aParam
^ 10'.
- builder createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_02: aParam
+ model createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_02: aParam
(self aSelector_01: aParam) = 10 ifTrue: [ ^ true ].
@@ -140,10 +140,10 @@
| class mockClass |
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
- builder createMethodImmediate: class theMetaclass protocol: 'p' source: 'aSelector_01: aParam
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ model createMethodImmediate: class theMetaclass protocol: 'p' source: 'aSelector_01: aParam
^ 10'.
- builder createMethodImmediate: class theMetaclass protocol: 'p' source: 'aSelector_02: aParam
+ model createMethodImmediate: class theMetaclass protocol: 'p' source: 'aSelector_02: aParam
(self aSelector_01: aParam) = 10 ifTrue: [ ^ true ].
@@ -175,10 +175,10 @@
self skipIf: true description: 'unable to fix'.
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
- builder createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_01: aParam
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ model createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_01: aParam
^ 10'.
- builder createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_02: aParam
+ model createMethodImmediate: (class theMetaclass) protocol: 'p' source: 'aSelector_02: aParam
(self aSelector_01: aParam) = 10 ifTrue: [ ^ true ].
@@ -208,10 +208,10 @@
| class mockClassInstance |
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
^ 10'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
(self aSelector_01: aParam) = 10 ifTrue: [ ^ true ].
@@ -241,10 +241,10 @@
| class mockClassInstance |
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
^ 10'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
(self aSelector_01: aParam) = 10 ifTrue: [ ^ true ].
@@ -278,8 +278,8 @@
| class mockClassInstance |
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: arg_01 param_02: arg_02
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: arg_01 param_02: arg_02
^ 10'.
self assert: ((class new aSelector_01: 1 param_02: 2) = 10).
@@ -304,8 +304,8 @@
| class mockClassInstance |
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_01
^ 10'.
self assert: (class new aSelector_01 = 10).
@@ -330,8 +330,8 @@
| class mockClassInstance |
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: arg_01 param_02: arg_02 param_03: arg_03
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: arg_01 param_02: arg_02 param_03: arg_03
^ 10'.
self assert: ((class new aSelector_01: 1 param_02: 2 param_03: 3) = 10).
@@ -357,10 +357,10 @@
| class mockClassInstance |
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
^ 10'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
(self aSelector_01: aParam) = 10 ifTrue: [ ^ true ].
@@ -393,10 +393,10 @@
self skipIf: true description: 'unable to fix'.
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
^ 10'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
(self aSelector_01: aParam) = 10 ifTrue: [ ^ true ].
@@ -429,8 +429,8 @@
self skipIf: true description: 'unable to fix'.
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_01
^ 10'.
self assert: (class new aSelector_01 = 10).
@@ -458,10 +458,10 @@
self skipIf: true description: 'unable to fix'.
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: aParam
^ 10'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_02: aParam
(self aSelector_01: aParam) = 10 ifTrue: [ ^ true ].
@@ -499,8 +499,8 @@
self skipIf: true description: 'unable to fix'.
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: arg_01 param_02: arg_02 param_03: arg_03
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: arg_01 param_02: arg_02 param_03: arg_03
^ 10'.
self assert: ((class new aSelector_01: 1 param_02: 2 param_03: 3) = 10).
@@ -532,8 +532,8 @@
self skipIf: true description: 'unable to fix'.
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
- builder createMethodImmediate: class protocol: 'p' source: 'aSelector_01: arg_01 param_02: arg_02
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ model createMethodImmediate: class protocol: 'p' source: 'aSelector_01: arg_01 param_02: arg_02
^ 10'.
self assert: ((class new aSelector_01: 1 param_02: 2) = 10).
@@ -559,7 +559,7 @@
| class mockClassInstance mockCount |
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
mockCount := mock mockCount.
@@ -582,7 +582,7 @@
| class mockClass mockClassName |
[
- class := builder createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
+ class := model createClassImmediate: 'TestClassForMockTestCase' superClassName: 'Object'.
mockClass := mock mockClassOf: class.
mockClassName := mockClass name.
--- a/CustomMultiSetterMethodsCodeGenerator.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomMultiSetterMethodsCodeGenerator.st Fri Oct 10 16:28:37 2014 +0200
@@ -77,7 +77,7 @@
assignVariablesCode := assignVariablesCode, variableName asString, ' := ', argumentName, '. '.
].
- codeBuilder createMethod
+ model createMethod
class: aClass;
protocol: 'accessing';
source: '`@setterSelector
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/CustomNamespace.st Fri Oct 10 16:28:37 2014 +0200
@@ -0,0 +1,447 @@
+"{ Package: 'jn:refactoring_custom' }"
+
+RBNamespace subclass:#CustomNamespace
+ instanceVariableNames:'changeManager formatter defaultValues defaultReplacements package
+ classModelClass methodModelClass sourceCodeGeneratorClass'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'Interface-Refactoring-Custom'
+!
+
+
+!CustomNamespace methodsFor:'accessing'!
+
+changeManager
+ ^ changeManager
+!
+
+changeManager:something
+ changeManager := something.
+!
+
+classModelClass
+ "Returns class which represents Class in model in which we make changes (add class, rename class ...)."
+
+ ^ classModelClass
+
+ "Modified (comment): / 09-10-2014 / 11:14:51 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+classModelClass: aClass
+ "see classModelClass"
+
+ classModelClass := aClass.
+
+ "Modified (comment): / 09-10-2014 / 11:15:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+formatter
+ ^ formatter
+
+ "Created: / 28-08-2014 / 23:19:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+formatter: aFormatter
+ formatter := aFormatter
+
+ "Created: / 28-08-2014 / 23:19:26 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+methodModelClass
+ "Returns class which represents Method in model in which we make changes (add method, change method source ...)."
+
+ ^ methodModelClass
+
+ "Modified (comment): / 09-10-2014 / 11:17:09 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+methodModelClass: aClass
+ "see methodModelClass"
+
+ methodModelClass := aClass.
+
+ "Modified (comment): / 09-10-2014 / 11:16:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+sourceCodeGenerator
+ "Returns initialized source code generator"
+ | sourceCodeGenerator |
+
+ sourceCodeGenerator := self sourceCodeGeneratorClass new.
+ sourceCodeGenerator formatter: formatter.
+ ^ sourceCodeGenerator.
+
+ "Created: / 19-09-2014 / 20:56:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 09-10-2014 / 11:35:24 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+sourceCodeGeneratorClass
+ "Returns code generator class which supports search & replace in method source code and formatting"
+
+ ^ sourceCodeGeneratorClass
+
+ "Modified (comment): / 09-10-2014 / 11:34:34 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+sourceCodeGeneratorClass: aClass
+ "see sourceCodeGeneratorClass"
+
+ sourceCodeGeneratorClass := aClass.
+
+ "Modified (comment): / 09-10-2014 / 11:34:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomNamespace methodsFor:'code creation'!
+
+createClass
+ "Much like createMethod, but for class"
+ | class |
+
+ class := self classModelClass new
+ model: self;
+ superclass: (self classNamed: #Object);
+ instanceVariableNames: #();
+ classVariableNames: #();
+ 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>"
+!
+
+createClassImmediate: aClassName
+ "Creates class immediately and returns the real class"
+
+ ^ self createClassImmediate: aClassName superClassName: 'Object'
+
+ "Created: / 27-07-2014 / 12:40:55 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+createClassImmediate: aClassName instanceVariableNames: instVarNames
+ "Creates class immediately and returns the real class"
+
+ ^ self
+ createClassImmediate: aClassName
+ superClassName: 'Object'
+ instanceVariableNames: instVarNames
+ classVariableNames: ''
+
+ "Created: / 23-08-2014 / 22:25:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+createClassImmediate: aClassName superClassName: aSuperClassName
+ "Creates class immediately and returns the real class"
+
+ ^ self
+ createClassImmediate: aClassName
+ superClassName: aSuperClassName
+ instanceVariableNames: ''
+ classVariableNames: ''
+
+ "Created: / 15-06-2014 / 15:59:21 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 23-08-2014 / 22:18:58 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+createClassImmediate: aClassName superClassName: aSuperClassName instanceVariableNames: instVarNames classVariableNames: classVarNames
+ "Creates class immediately and returns the real class"
+
+ changes addChange: (InteractiveAddClassChange definition:
+ aSuperClassName, ' subclass:#', aClassName, '
+ instanceVariableNames:''', instVarNames, '''
+ classVariableNames:''', classVarNames, '''
+ poolDictionaries:''''
+ category:''''
+ ').
+
+ self execute.
+
+ ^ Smalltalk classNamed: aClassName
+
+ "Created: / 23-08-2014 / 22:18:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 21-09-2014 / 22:39:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+createMethod
+ "
+ Creates, returns method representation
+ so code changes can be created withing this class as one undo change
+ "
+ | method |
+
+ method := 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>"
+!
+
+createMethodImmediate: aClass protocol: aProtocol source: aSource
+ "Much like createClassImmediate:superClassName:, but for method"
+
+ changes addChange: (InteractiveAddMethodChange compile: aSource in: aClass classified: aProtocol).
+
+ self execute
+
+ "Created: / 15-06-2014 / 16:06:00 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 21-09-2014 / 22:43:28 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+createMethodImmediate: aClass source: aSource
+ "Much like createClassImmediate:superClassName:, but for method"
+
+ ^ self createMethodImmediate: aClass protocol: 'protocol' source: aSource
+
+ "Created: / 23-08-2014 / 20:17:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomNamespace methodsFor:'compiling'!
+
+execute
+ "
+ Most likely as compile method, but without undo change
+ in global RefactoryChangeManager
+ (true for CustomLocalChangeManager changeManager implementation)
+ "
+
+ changeManager performChange: changes
+
+ "Created: / 27-04-2014 / 16:30:05 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 21-09-2014 / 22:34:58 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+redoChanges
+ "redo all changes made by execute method"
+
+ changeManager redoChanges
+
+ "Created: / 27-04-2014 / 17:07:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 31-05-2014 / 19:47:02 / 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>"
+!
+
+package:aPackage
+
+ ((self class) == CustomNamespace) ifTrue: [
+ self storeDefaultValue: #package: value: aPackage
+ ] ifFalse: [
+ package := aPackage
+ ]
+
+ "Created: / 30-08-2014 / 18:32:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 09-10-2014 / 09:18:16 / 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
+ "Invoked when a new instance is created."
+
+ 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>"
+! !
+
+!CustomNamespace class methodsFor:'documentation'!
+
+version_HG
+
+ ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/CustomNamespaceTests.st Fri Oct 10 16:28:37 2014 +0200
@@ -0,0 +1,904 @@
+"{ Package: 'jn:refactoring_custom' }"
+
+CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomNamespaceTests
+ instanceVariableNames:'refactoryChangeManager'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'Interface-Refactoring-Custom-Tests'
+!
+
+
+!CustomNamespaceTests methodsFor:'accessing'!
+
+generatorOrRefactoring
+ ^ nil
+
+ "Modified: / 31-05-2014 / 22:48:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomNamespaceTests methodsFor:'initialization & release'!
+
+setUp
+
+ super setUp.
+ refactoryChangeManager := RefactoryChangeManager instance.
+
+ "Created: / 16-04-2014 / 21:39:50 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 31-05-2014 / 22:45:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomNamespaceTests methodsFor:'private'!
+
+lastUndoChange
+
+ refactoryChangeManager undoableOperations isEmpty ifTrue: [
+ ^ nil
+ ] ifFalse: [
+ ^ refactoryChangeManager undoChange
+ ].
+
+ "Created: / 16-04-2014 / 21:40:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 31-05-2014 / 19:53:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomNamespaceTests methodsFor:'tests'!
+
+test_all_class_var_names
+ | class actualClassVars expectedClassVars |
+
+ class := model createClass
+ name: #MockClassForTestCase;
+ classVariableNames: #('ClassVar1' 'ClassVar2');
+ yourself.
+
+ expectedClassVars := (Object allClassVarNames, (Array with: #ClassVar1 with: #ClassVar2)).
+ actualClassVars := class theNonMetaclass allClassVarNames.
+
+ self assert: expectedClassVars = actualClassVars
+
+ "Created: / 20-06-2014 / 22:35:27 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 09-10-2014 / 10:47:56 / 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.
+
+ "Created: / 22-07-2014 / 22:52:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 09-10-2014 / 10:54:16 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_class_and_class_method_generated_as_one_undo_change
+ | className class lastUndoChange |
+
+ lastUndoChange := self lastUndoChange.
+
+ className := #MockClassForTestingOneUndoChange.
+
+ self assertClassNotExists: className.
+
+ model := CustomNamespace new.
+ model changeManager: refactoryChangeManager.
+
+ class := model createClass
+ name: className;
+ compile;
+ yourself.
+
+ self assertClassNotExists: className.
+
+ model createMethod
+ class: class theMetaclass;
+ protocol: 'a protocol';
+ source: 'aSelector
+ ^ nil';
+ compile.
+
+ self assertClassNotExists: className.
+ self assert: lastUndoChange = (self lastUndoChange).
+
+ model execute.
+
+ self assertClassExists: className.
+ self assert: (lastUndoChange = (self lastUndoChange)) not.
+ self assert: ((Smalltalk classNamed: className) class includesSelector: #aSelector).
+ self assert: ((Smalltalk classNamed: className) includesSelector: #aSelector) not.
+
+ refactoryChangeManager undoOperation.
+
+ self assertClassNotExists: className.
+ self assert: lastUndoChange = (self lastUndoChange).
+
+ "Created: / 17-04-2014 / 23:54:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 09-10-2014 / 23:02:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_class_and_instance_method_generated_as_one_undo_change
+ | className class lastUndoChange |
+
+ lastUndoChange := self lastUndoChange.
+
+ className := #MockClassForTestingOneUndoChange.
+
+ self assertClassNotExists: className.
+
+ model := CustomNamespace new.
+ model changeManager: refactoryChangeManager.
+
+ class := model createClass
+ name: className;
+ compile;
+ yourself.
+
+ self assertClassNotExists: className.
+
+ model createMethod
+ class: class;
+ protocol: 'a protocol';
+ source: 'aSelector
+ ^ nil';
+ compile.
+
+ self assertClassNotExists: className.
+ self assert: lastUndoChange = (self lastUndoChange).
+
+ model execute.
+
+ self assertClassExists: className.
+ self assert: (lastUndoChange = (self lastUndoChange)) not.
+ self assert: ((Smalltalk classNamed: className) includesSelector: #aSelector).
+
+ refactoryChangeManager undoOperation.
+
+ self assertClassNotExists: className.
+ self assert: lastUndoChange = (self lastUndoChange).
+
+ "Created: / 17-04-2014 / 23:54:05 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 09-10-2014 / 23:04:06 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_comment_in_method_generated
+ | class generatedSource expectedSource |
+
+ class := self class.
+
+ model createMethod
+ class: self class;
+ protocol: 'a protocol';
+ source: 'aSelector
+ "a comment"
+ ^ nil';
+ compile.
+
+ self assert: (class includesSelector: #aSelector) not.
+
+ model execute.
+
+ generatedSource := (class sourceCodeAt: #aSelector).
+ expectedSource := 'aSelector
+ "a comment"
+
+ ^ nil'.
+
+ self assert: (class includesSelector: #aSelector).
+ self assert: (generatedSource includesSubString: '"a comment"').
+ self assertSource: expectedSource sameAs: generatedSource
+
+ "Created: / 27-04-2014 / 15:57:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 26-08-2014 / 23:42:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 09-10-2014 / 23:06:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_class_immediate
+ | mockClass |
+
+ mockClass := model createClassImmediate: 'MockClassForTestCase'.
+
+ self assert: mockClass new className = 'MockClassForTestCase'.
+ self assert: mockClass superclass new className = 'Object'.
+ self assert: mockClass instanceVariableString = ''.
+ self assert: mockClass classVariableString = ''.
+ self assert: mockClass poolDictionaries = ''.
+ self assert: mockClass category = ''.
+
+ "Created: / 15-06-2014 / 17:27:41 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 27-07-2014 / 12:42:53 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_class_immediate_with_given_super_class_name
+ | mockClass |
+
+ mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
+
+ self assert: mockClass new className = 'MockClassForTestCase'.
+ self assert: mockClass superclass new className = 'Object'.
+ self assert: mockClass instanceVariableString = ''.
+ self assert: mockClass classVariableString = ''.
+ self assert: mockClass poolDictionaries = ''.
+ self assert: mockClass category = ''.
+
+ "Created: / 27-07-2014 / 12:42:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_class_immediate_with_instance_and_class_variables
+ | mockClass |
+
+ mockClass := model
+ createClassImmediate: 'MockClassForTestCase'
+ superClassName: 'Object'
+ instanceVariableNames: 'instVar'
+ classVariableNames: 'ClassVar'.
+
+ self assert: mockClass new className = 'MockClassForTestCase'.
+ self assert: mockClass superclass new className = 'Object'.
+ self assert: mockClass instanceVariableString = 'instVar'.
+ self assert: mockClass classVariableString = 'ClassVar'.
+ self assert: mockClass poolDictionaries = ''.
+ self assert: mockClass category = ''.
+
+ "Created: / 23-08-2014 / 22:24:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_class_immediate_with_instance_variables
+ | mockClass |
+
+ mockClass := model
+ createClassImmediate: 'MockClassForTestCase'
+ instanceVariableNames: 'instVar'.
+
+ self assert: mockClass new className = 'MockClassForTestCase'.
+ self assert: mockClass superclass new className = 'Object'.
+ self assert: mockClass instanceVariableString = 'instVar'.
+ self assert: mockClass classVariableString = ''.
+ self assert: mockClass poolDictionaries = ''.
+ self assert: mockClass category = ''.
+
+ "Created: / 23-08-2014 / 22:26:24 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_class_within_given_package
+ | class package |
+
+ package := self class package.
+ self assert: package size > 3.
+
+ model createClass
+ name: #MockClassForTestCase;
+ package: package;
+ compile.
+
+ model execute.
+
+ class := Smalltalk classNamed: 'MockClassForTestCase'.
+
+ self assert: class new className = 'MockClassForTestCase'.
+ self assert: class superclass new className = 'Object'.
+ self assert: class instanceVariableString = ''.
+ self assert: class classVariableString = ''.
+ self assert: class poolDictionaries = ''.
+ self assert: class category = '** As yet undefined **'.
+ self assert: class package = package.
+
+ "Created: / 30-08-2014 / 20:35:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified (format): / 09-10-2014 / 23:23:06 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_class_without_given_package
+ | class package |
+
+ package := self class package.
+ self assert: package size > 3.
+
+ model createClass
+ name: #MockClassForTestCase;
+ compile.
+
+ model execute.
+
+ class := Smalltalk classNamed: 'MockClassForTestCase'.
+
+ self assert: class new className = 'MockClassForTestCase'.
+ self assert: class superclass new className = 'Object'.
+ self assert: class instanceVariableString = ''.
+ self assert: class classVariableString = ''.
+ self assert: class poolDictionaries = ''.
+ self assert: class category = '** As yet undefined **'.
+ self assert: (class package = package) not.
+
+ "Created: / 30-08-2014 / 20:57:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 10-10-2014 / 00:02:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_method_immediate
+ | mockClass expectedSource actualSource |
+
+ expectedSource := 'instanceMethod:aParam
+ ^ self'.
+
+ mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
+ model createMethodImmediate: mockClass protocol: 'a protocol' source: expectedSource.
+
+ actualSource := (mockClass sourceCodeAt: #instanceMethod:).
+
+ self assertSource: expectedSource sameAs: actualSource.
+ self assert: (mockClass compiledMethodAt: #instanceMethod:) category = 'a protocol'
+
+ "Created: / 15-06-2014 / 17:28:36 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 24-06-2014 / 21:59:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_method_immediate_with_preset_protocol
+ | mockClass expectedSource actualSource |
+
+ expectedSource := 'instanceMethod:aParam
+ ^ self'.
+
+ mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
+ model createMethodImmediate: mockClass source: expectedSource.
+
+ actualSource := (mockClass sourceCodeAt: #instanceMethod:).
+
+ self assertSource: expectedSource sameAs: actualSource.
+ self assert: (mockClass compiledMethodAt: #instanceMethod:) category = 'protocol'
+
+ "Created: / 23-08-2014 / 21:48:51 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_method_within_given_package
+ | mockClass package method |
+
+ package := self class package.
+ self assert: package size > 3.
+
+ mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
+ model createMethod
+ class: mockClass;
+ protocol: 'a protocol';
+ package: package;
+ source: 'selector ^ 123';
+ compile.
+
+ model execute.
+
+ method := (mockClass compiledMethodAt: #selector).
+
+ self assert: method package = package
+
+ "Created: / 30-08-2014 / 18:45:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 10-10-2014 / 00:02:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_create_method_without_given_package
+ | mockClass package method |
+
+ package := self class package.
+ self assert: package size > 3.
+
+ mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
+ model createMethod
+ class: mockClass;
+ protocol: 'a protocol';
+ source: 'selector ^ 123';
+ compile.
+
+ model execute.
+
+ method := (mockClass compiledMethodAt: #selector).
+
+ self assert: (method package = package) not
+
+ "Created: / 30-08-2014 / 18:46:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 10-10-2014 / 15:33:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_empty_class_definition_string
+ | expectedDefinition actualDefinition |
+
+ expectedDefinition := 'Object subclass: #''Unknown Class''
+ instanceVariableNames: ''''
+ classVariableNames: ''''
+ poolDictionaries: ''''
+ category: ''** As yet undefined **'''.
+
+ actualDefinition := model createClass definitionString.
+
+ self assertSource: expectedDefinition sameAs: actualDefinition.
+
+ "Created: / 10-10-2014 / 15:41:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_empty_class_in_changes
+
+ model createClass compile.
+ self assert:(model changes changesSize) = 1.
+
+ "Created: / 22-07-2014 / 22:22:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 10-10-2014 / 15:48:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_method_source_builded
+ | method expectedSource actualSource |
+
+ method := model createMethod
+ source: '`@methodName
+ ^ `variableName';
+ replace: '`@methodName' with: #selector;
+ replace: '`variableName' with: 'aName';
+ yourself.
+
+ expectedSource := 'selector
+ ^ aName'.
+
+ actualSource := method newSource.
+
+ self assertSource: expectedSource sameAs: actualSource
+
+ "Created: / 18-05-2014 / 17:14:13 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 26-08-2014 / 23:40:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 10-10-2014 / 15:56:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_method_source_builded_with_comment
+ | method buildedSource expectedSource |
+
+ method := model createMethod
+ source: '`@methodName
+
+ `"comment
+
+ ^ `variableName';
+ replace: '`@methodName' with: #selector;
+ replace: '`variableName' with: 'aName';
+ replace: '`"comment' with: '"a comment"';
+ yourself.
+
+ buildedSource := method newSource.
+ expectedSource := 'selector
+ "a comment"
+
+ ^ aName'.
+
+ self assertSource: expectedSource sameAs: buildedSource
+
+ "Created: / 19-05-2014 / 18:57:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 26-08-2014 / 23:55:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 10-10-2014 / 15:56:32 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_method_source_with_original_formatting
+ | method originalSource actualSource expectedSource |
+
+ originalSource := 'methodName
+
+ `variableName do: [ each | each call ].'.
+
+ expectedSource := 'methodName
+
+ collection do: [ each | each call ].'.
+
+ model formatter: CustomNoneSourceCodeFormatter new.
+ method := model createMethod
+ source: originalSource;
+ replace: '`variableName' with: 'collection';
+ yourself.
+
+ actualSource := method newSource.
+
+ self assertSource: expectedSource sameAs: actualSource.
+
+ "Created: / 22-07-2014 / 23:04:43 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 10-10-2014 / 15:57:21 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_nil_changes_not_in_change_collector
+
+ self should: [
+ model createMethod compile.
+ ] raise: Error.
+
+ self assert: model changes changesSize = 0.
+
+ "Created: / 22-07-2014 / 22:16:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "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'.
+
+ classNames do: [ :className |
+ classCollection add: (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: / 10-10-2014 / 16:02:55 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_redo_changes_for_multiple_executes
+ "Note: Methods createClassImmediate and createMethodImmediate have execute call inside"
+ | mockSuperClassName mockClassName mockSuperClass |
+
+ mockSuperClassName := 'MockSuperClassForTestCase'.
+ mockClassName := 'MockClassForTestCase'.
+
+ mockSuperClass := model createClassImmediate: mockSuperClassName superClassName: 'Object'.
+ model createClassImmediate: mockClassName superClassName: mockSuperClassName.
+
+ "/ Instance method
+ model createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
+ self shouldImplement'.
+
+ "/ Class method
+ model createMethodImmediate: mockSuperClass class protocol: 'class-protocol' source: 'classMethod: aParam
+ self shouldImplement'.
+
+ self assertClassExists: mockSuperClassName.
+ self assertClassExists: mockClassName.
+
+ model redoChanges.
+
+ self assertClassNotExists: mockSuperClassName.
+ self assertClassNotExists: mockClassName.
+
+ "Created: / 15-06-2014 / 16:21:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!CustomNamespaceTests class methodsFor:'documentation'!
+
+version_HG
+
+ ^ '$Changeset: <not expanded> $'
+! !
+
--- a/CustomRBAbstractClassTests.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomRBAbstractClassTests.st Fri Oct 10 16:28:37 2014 +0200
@@ -154,6 +154,94 @@
"Created: / 04-10-2014 / 23:38:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
+test_compile_method_with_all_filled
+ | method compiledMethod change |
+
+ rbClass compileMockMethod: 'isMeta ^ false'.
+
+ method := RBMethod new
+ source: 'selector_01 ^ `#literal';
+ protocol: 'a test protocol';
+ package: 'some_package';
+ model: model;
+ class: self class;
+ method: (self class compiledMethodAt: #test_compile_method_with_all_filled);
+ sourceCodeGenerator: (CustomSourceCodeGenerator new
+ formatter: CustomNoneSourceCodeFormatter new;
+ yourself);
+ replace: '`#literal' with: '1';
+ selector: #selector_01;
+ yourself.
+
+ change := rbClass compileMethod: method.
+
+ self assert: (rbClass includesSelector: #selector_01).
+
+ self assert: 'a test protocol' = (change protocol).
+ self assert: 'some_package' = (change package).
+ self assert: 'selector_01 ^ 1' = (change source).
+
+ compiledMethod := rbClass compiledMethodAt: #selector_01.
+
+ self assert: 'a test protocol' = (compiledMethod protocol).
+ self assert: 'some_package' = (compiledMethod package).
+ self assert: 'selector_01 ^ 1' = (compiledMethod source).
+
+ "Created: / 10-10-2014 / 12:17:15 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_compile_method_with_real_method
+ | method compiledMethod realMethod change class |
+
+ rbClass compileMockMethod: 'isMeta ^ false'.
+
+ class := mock mockClassOf: Object.
+ class new compileMockMethod: 'selector_01 ^ 1'.
+ realMethod := class compiledMethodAt: #selector_01.
+
+ method := RBMethod
+ for: rbClass
+ fromMethod: realMethod
+ andSelector: #selector_01.
+
+ change := rbClass compileMethod: method.
+
+ self assert: (rbClass includesSelector: #selector_01).
+
+ self assert: (realMethod category) = (change protocol).
+ self assert: (realMethod package) = (change package).
+ self assert: 'selector_01 ^ 1' = (change source).
+
+ compiledMethod := rbClass compiledMethodAt: #selector_01.
+
+ self assert: (realMethod category) = (compiledMethod protocol).
+ self assert: (realMethod package) = (compiledMethod package).
+ self assert: 'selector_01 ^ 1' = (compiledMethod source).
+
+ "Created: / 10-10-2014 / 13:20:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_compile_method_with_source
+ | method change expectedSource actualSource |
+
+ rbClass compileMockMethod: 'isMeta ^ false'.
+
+ method := RBMethod new
+ source: 'selector_01 ^ 1';
+ yourself.
+
+ expectedSource := 'selector_01 ^ 1'.
+ change := rbClass compileMethod: method.
+
+ self assert: expectedSource = (change source).
+
+ actualSource := (rbClass compiledMethodAt: #selector_01) source.
+
+ self assert: expectedSource = actualSource
+
+ "Created: / 10-10-2014 / 11:56:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
test_method_dictionary_add_and_remove_methods
| expectedMethodDictionary actualMethodDictionary expectedMethodDictionaryKeys actualMethodDictionaryKeys |
@@ -245,6 +333,46 @@
"Created: / 05-10-2014 / 00:13:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
+test_package_custom
+ | expectedPackage actualPackage |
+
+ expectedPackage := 'some_package'.
+ rbClass package: 'some_package'.
+
+ actualPackage := rbClass package.
+
+ self assert: expectedPackage = actualPackage
+
+ "Created: / 09-10-2014 / 23:40:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_package_empty
+ | expectedPackage actualPackage |
+
+ expectedPackage := nil.
+ actualPackage := rbClass package.
+
+ self assert: expectedPackage = actualPackage
+
+ "Created: / 09-10-2014 / 23:39:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_package_from_real_class
+ | expectedPackage actualPackage |
+
+ expectedPackage := self class package.
+
+ self assert: expectedPackage size > 3.
+
+ rbClass realClass: self class.
+
+ actualPackage := rbClass package.
+
+ self assert: expectedPackage = actualPackage
+
+ "Created: / 09-10-2014 / 23:37:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
test_superclass_name
| expectedClassName actualClassName |
--- a/CustomRBClassTests.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomRBClassTests.st Fri Oct 10 16:28:37 2014 +0200
@@ -78,6 +78,91 @@
"Modified: / 05-10-2014 / 12:09:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
+test_compile_for_class_with_set_package
+ | lastChange savedRbClass |
+
+ rbClass
+ name: #SomeClass;
+ superclassName: #Object;
+ instVarNames: #('inst1' 'inst2');
+ classVariableNames: #('Cls1');
+ poolDictionaryNames: (Array with: 'poolDict1');
+ category: 'Some-Test-Category';
+ package: 'some_package';
+ compile.
+
+ model changes do: [ :change |
+ lastChange := change
+ ].
+ savedRbClass := model classNamed: #SomeClass.
+
+ self assert: (lastChange isKindOf: AddClassChange).
+ self assert: (lastChange changeClassName) = #SomeClass.
+ self assert: (lastChange category) = 'Some-Test-Category'.
+ self assert: (lastChange classVariableNames) = (OrderedCollection newFrom: #('Cls1')).
+ self assert: (lastChange instanceVariableNames) = (OrderedCollection newFrom: #('inst1' 'inst2')).
+ self assert: (lastChange poolDictionaryNames) = (OrderedCollection newFrom: #('poolDict1')).
+ self assert: (lastChange superclassName) = #Object.
+ self assert: (lastChange package) = 'some_package'.
+
+ self assert: (savedRbClass isKindOf: RBClass).
+ self assert: (savedRbClass name) = #SomeClass.
+ self assert: (savedRbClass category) = 'Some-Test-Category'.
+ self assert: (savedRbClass classVariableNames) = (OrderedCollection newFrom: #('Cls1')).
+ self assert: (savedRbClass instanceVariableNames) = (OrderedCollection newFrom: #('inst1' 'inst2')).
+ self assert: (savedRbClass poolDictionaryNames) = (OrderedCollection newFrom: #('poolDict1')).
+ self assert: (savedRbClass superclass name) = #Object.
+ self assert: (savedRbClass package) = 'some_package'.
+
+ "Created: / 09-10-2014 / 23:41:34 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_compile_for_real_class_with_set_package
+ | lastChange savedRbClass expectedPackage |
+
+ expectedPackage := self class package deepCopy.
+
+ self assert: expectedPackage size > 0.
+
+ rbClass := RBClass existingNamed: self class name.
+ rbClass
+ model: model;
+ compile.
+
+ model changes do: [ :change |
+ lastChange := change
+ ].
+ savedRbClass := model classNamed: self class name.
+
+ self assert: (lastChange isKindOf: AddClassChange).
+ self assert: (lastChange package) = expectedPackage.
+
+ self assert: (savedRbClass isKindOf: RBClass).
+ self assert: (savedRbClass package) = expectedPackage.
+
+ "Created: / 09-10-2014 / 23:54:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_real_class_with_set_package
+ | lastChange savedRbClass expectedPackage |
+
+ expectedPackage := self class package deepCopy.
+
+ self assert: expectedPackage size > 0.
+
+ rbClass := RBClass existingNamed: self class name.
+
+ model changes do: [ :change |
+ lastChange := change
+ ].
+ savedRbClass := model classNamed: self class name.
+
+ self assert: (savedRbClass isKindOf: RBClass).
+ self assert: (savedRbClass package) = expectedPackage.
+
+ "Created: / 09-10-2014 / 23:58:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
test_the_metaclass_for_new_class
| expectedMetaName actualMetaName |
--- a/CustomRBMethodTests.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomRBMethodTests.st Fri Oct 10 16:28:37 2014 +0200
@@ -143,7 +143,8 @@
| actualMethod generator class source expectedSource actualSource |
generator := CustomSourceCodeGenerator new
- formatter: CustomNoneSourceCodeFormatter new.
+ formatter: CustomNoneSourceCodeFormatter new;
+ yourself.
class := RBClass new
name: #SomeTestClass;
@@ -181,6 +182,39 @@
self assert: (actualMethod protocol) = (rbMethod protocol)
"Created: / 06-10-2014 / 22:45:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 10-10-2014 / 15:14:51 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_compile_with_custom_package
+ | actualMethod class change |
+
+ class := RBClass new
+ name: #SomeTestClass;
+ model: model;
+ superclassName: #Object;
+ yourself.
+
+ actualMethod := class compiledMethodAt: #selector_01.
+ self assert: actualMethod isNil.
+
+ change := rbMethod
+ class: class;
+ source: 'selector_01 ^ 12';
+ protocol: 'test protocol';
+ package: 'my_package';
+ compile.
+
+ actualMethod := class compiledMethodAt: #selector_01.
+
+ self assert: (actualMethod source) = (rbMethod source).
+ self assert: (actualMethod protocol) = (rbMethod protocol).
+ self assert: (actualMethod package) = (rbMethod package).
+
+ self assert: (change source) = (rbMethod source).
+ self assert: (change protocol) = (rbMethod protocol).
+ self assert: (change package) = (rbMethod package).
+
+ "Created: / 10-10-2014 / 11:25:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_compile_without_code_generator
@@ -210,6 +244,37 @@
"Modified: / 06-10-2014 / 22:33:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
+test_compile_without_custom_package
+ | actualMethod class change |
+
+ class := RBClass new
+ name: #SomeTestClass;
+ model: model;
+ superclassName: #Object;
+ yourself.
+
+ actualMethod := class compiledMethodAt: #selector_01.
+ self assert: actualMethod isNil.
+
+ change := rbMethod
+ class: class;
+ source: 'selector_01 ^ 12';
+ protocol: 'test protocol';
+ compile.
+
+ actualMethod := class compiledMethodAt: #selector_01.
+
+ self assert: (actualMethod source) = (rbMethod source).
+ self assert: (actualMethod protocol) = (rbMethod protocol).
+ self assert: (actualMethod package) = (rbMethod package).
+
+ self assert: (change source) = (rbMethod source).
+ self assert: (change protocol) = (rbMethod protocol).
+ self assert: (change package) = (rbMethod package).
+
+ "Created: / 10-10-2014 / 11:51:51 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
test_compiled_method_empty
| expectedMethod actualMethod |
@@ -335,6 +400,93 @@
"Created: / 07-10-2014 / 22:24:29 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
+test_new_source_code_generator_with_replacements
+ | expectedSource actualSource |
+
+ expectedSource := 'selector_01 ^ 1'.
+ rbMethod
+ source: 'selector_01 ^ `#literal';
+ sourceCodeGenerator: ( CustomSourceCodeGenerator new
+ formatter: CustomNoneSourceCodeFormatter new;
+ yourself);
+ replace: '`#literal' with: '1'.
+
+ actualSource := rbMethod newSource.
+
+ self assert: expectedSource = actualSource
+
+ "Created: / 10-10-2014 / 15:12:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_new_source_none_code_generator
+ | expectedSource actualSource |
+
+ expectedSource := 'selector_01 ^ 1'.
+ rbMethod source: 'selector_01 ^ 1'.
+
+ actualSource := rbMethod newSource.
+
+ self assert: expectedSource = actualSource
+
+ "Created: / 10-10-2014 / 14:43:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_new_source_some_code_generator
+ | expectedSource actualSource |
+
+ expectedSource := 'selector_01 ^ 1'.
+ rbMethod
+ source: 'selector_01 ^ 1';
+ sourceCodeGenerator: ( CustomSourceCodeGenerator new
+ formatter: CustomNoneSourceCodeFormatter new;
+ yourself).
+
+ actualSource := rbMethod newSource.
+
+ self assert: expectedSource = actualSource
+
+ "Created: / 10-10-2014 / 15:10:16 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_package_custom
+ | expectedPackage actualPackage |
+
+ expectedPackage := 'some_package'.
+
+ rbMethod package: 'some_package'.
+ actualPackage := rbMethod package.
+
+ self assert: expectedPackage = actualPackage
+
+ "Created: / 10-10-2014 / 11:20:58 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_package_empty
+ | expectedPackage actualPackage |
+
+ expectedPackage := PackageId noProjectID.
+ actualPackage := rbMethod package.
+
+ self assert: expectedPackage = actualPackage
+
+ "Created: / 10-10-2014 / 11:16:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
+test_package_from_real_method
+ | expectedPackage actualPackage |
+
+ expectedPackage := self class package.
+
+ self assert: expectedPackage size > 3.
+
+ rbMethod method: (self class compiledMethodAt: #test_package_from_real_method).
+ actualPackage := rbMethod package.
+
+ self assert: expectedPackage = actualPackage
+
+ "Created: / 10-10-2014 / 11:16:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+!
+
test_real_method_arg_names_none_arg
"to check what Method >> methodArgNames returns"
--- a/CustomReplaceIfNilWithIfTrueRefactoringTests.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomReplaceIfNilWithIfTrueRefactoringTests.st Fri Oct 10 16:28:37 2014 +0200
@@ -18,8 +18,8 @@
test_if_nil_replaced_with_is_nil_if_true
| expectedSource class method |
- class := codeBuilder createClassImmediate: 'DummyClassForTestCase01'.
- codeBuilder createMethod
+ class := model createClassImmediate: 'DummyClassForTestCase01'.
+ model createMethod
class: class;
protocol: 'protocol';
source: 'selector: arg
@@ -31,7 +31,7 @@
compile.
context selectedClasses: (Array with: class).
- codeBuilder execute.
+ model execute.
generatorOrRefactoring executeInContext: context.
--- a/CustomSourceCodeBuilder.st Wed Oct 08 19:50:10 2014 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,582 +0,0 @@
-"{ Package: 'jn:refactoring_custom' }"
-
-RBNamespace subclass:#CustomSourceCodeBuilder
- instanceVariableNames:'codeBuilds changeManager formatter defaultValues
- defaultReplacements package'
- classVariableNames:''
- poolDictionaries:''
- category:'Interface-Refactoring-Custom'
-!
-
-RBClass subclass:#Class
- instanceVariableNames:'formatter changeManager'
- classVariableNames:''
- poolDictionaries:''
- privateIn:CustomSourceCodeBuilder
-!
-
-InteractiveAddClassChange subclass:#ClassChange
- instanceVariableNames:''
- classVariableNames:''
- poolDictionaries:''
- privateIn:CustomSourceCodeBuilder
-!
-
-RBMethod subclass:#Method
- instanceVariableNames:'formatter changeManager'
- classVariableNames:''
- poolDictionaries:''
- privateIn:CustomSourceCodeBuilder
-!
-
-InteractiveAddMethodChange subclass:#MethodChange
- instanceVariableNames:''
- classVariableNames:''
- poolDictionaries:''
- privateIn:CustomSourceCodeBuilder
-!
-
-
-!CustomSourceCodeBuilder class methodsFor:'instance creation'!
-
-classBuilder
-
- ^ CustomSourceCodeBuilder::Class new
-
- "Created: / 31-03-2014 / 18:05:05 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-methodBuilder
-
- ^ CustomSourceCodeBuilder::Method new
-
- "Created: / 09-04-2014 / 23:47:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder methodsFor:'accessing'!
-
-changeManager
- ^ changeManager
-!
-
-changeManager:something
- changeManager := something.
-!
-
-formatter
- ^ formatter
-
- "Created: / 28-08-2014 / 23:19:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-formatter: aFormatter
- formatter := aFormatter
-
- "Created: / 28-08-2014 / 23:19:26 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-sourceCodeGenerator
- "Returns initialized source code generator"
- | sourceCodeGenerator |
-
- sourceCodeGenerator := CustomSourceCodeGenerator new.
- sourceCodeGenerator formatter: formatter.
- ^ sourceCodeGenerator.
-
- "Created: / 19-09-2014 / 20:56:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 19-09-2014 / 22:11:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder methodsFor:'code creation'!
-
-createClass
- "Much like createMethod, but for class"
- | classBuilder |
-
- classBuilder := self class classBuilder.
- classBuilder
- model: self;
- superclass: (self classNamed: #Object);
- instanceVariableNames: #();
- classVariableNames: #();
- poolDictionaryNames: #().
-
- self fillDefaultValuesTo: classBuilder.
- self storeDefaultClassWhenNoneStored: classBuilder.
- ^ classBuilder
-
- "Created: / 09-04-2014 / 21:38:20 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 25-09-2014 / 23:51:21 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-createClassImmediate: aClassName
- "Creates class immediately and returns the real class"
-
- ^ self createClassImmediate: aClassName superClassName: 'Object'
-
- "Created: / 27-07-2014 / 12:40:55 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-createClassImmediate: aClassName instanceVariableNames: instVarNames
- "Creates class immediately and returns the real class"
-
- ^ self
- createClassImmediate: aClassName
- superClassName: 'Object'
- instanceVariableNames: instVarNames
- classVariableNames: ''
-
- "Created: / 23-08-2014 / 22:25:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-createClassImmediate: aClassName superClassName: aSuperClassName
- "Creates class immediately and returns the real class"
-
- ^ self
- createClassImmediate: aClassName
- superClassName: aSuperClassName
- instanceVariableNames: ''
- classVariableNames: ''
-
- "Created: / 15-06-2014 / 15:59:21 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 23-08-2014 / 22:18:58 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-createClassImmediate: aClassName superClassName: aSuperClassName instanceVariableNames: instVarNames classVariableNames: classVarNames
- "Creates class immediately and returns the real class"
-
- changes addChange: (InteractiveAddClassChange definition:
- aSuperClassName, ' subclass:#', aClassName, '
- instanceVariableNames:''', instVarNames, '''
- classVariableNames:''', classVarNames, '''
- poolDictionaries:''''
- category:''''
- ').
-
- self execute.
-
- ^ Smalltalk classNamed: aClassName
-
- "Created: / 23-08-2014 / 22:18:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 21-09-2014 / 22:39:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-createMethod
- "
- Creates, returns method builder with adding it to codeBuils
- so code changes can be created withing this class at once -
- see method createChange.
- "
- | methodBuilder |
-
- methodBuilder := self methodBuilder.
- methodBuilder sourceCodeGenerator: self sourceCodeGenerator.
- ^ methodBuilder
-
- "Created: / 09-04-2014 / 23:54:03 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 07-10-2014 / 22:48:32 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-createMethodImmediate: aClass protocol: aProtocol source: aSource
- "Much like createClassImmediate:superClassName:, but for method"
-
- changes addChange: (InteractiveAddMethodChange compile: aSource in: aClass classified: aProtocol).
-
- self execute
-
- "Created: / 15-06-2014 / 16:06:00 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 21-09-2014 / 22:43:28 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-createMethodImmediate: aClass source: aSource
- "Much like createClassImmediate:superClassName:, but for method"
-
- ^ self createMethodImmediate: aClass protocol: 'protocol' source: aSource
-
- "Created: / 23-08-2014 / 20:17:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder methodsFor:'compiling'!
-
-execute
- "
- Most likely as compile method, but without undo change
- in global RefactoryChangeManager
- (true for CustomLocalChangeManager changeManager implementation)
- "
-
- changeManager performChange: changes
-
- "Created: / 27-04-2014 / 16:30:05 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 21-09-2014 / 22:34:58 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-redoChanges
- "redo all changes made by execute method"
-
- changeManager redoChanges
-
- "Created: / 27-04-2014 / 17:07:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 31-05-2014 / 19:47:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder 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: aCodeBuilder
- "Initializes new code builder and fills default values from parent builder"
- | builderClass |
-
- aCodeBuilder formatter: formatter.
- aCodeBuilder changeManager: changeManager.
-
- builderClass := aCodeBuilder class.
-
- defaultValues keysAndValuesDo: [ :selector :value |
- ((builderClass includesSelector: selector) or: [self isSharedAttribute: selector]) ifTrue: [
- aCodeBuilder perform: selector with: value.
- ]
- ].
-
- defaultReplacements keysAndValuesDo: [ :placeholder :code |
- aCodeBuilder replace: placeholder with: code
- ].
-
- "Created: / 29-04-2014 / 20:21:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 30-08-2014 / 23:04:37 / 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>"
-!
-
-package:aPackage
-
- ((self class) == CustomSourceCodeBuilder) ifTrue: [
- self storeDefaultValue: #package: value: aPackage
- ] ifFalse: [
- package := aPackage
- ]
-
- "Created: / 30-08-2014 / 18:32:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 30-08-2014 / 23:04:44 / 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) == CustomSourceCodeBuilder) 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: / 29-09-2014 / 23:18:59 / 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) == CustomSourceCodeBuilder) 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: / 30-08-2014 / 23:04:50 / 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>"
-! !
-
-!CustomSourceCodeBuilder methodsFor:'initialization'!
-
-initialize
- "Invoked when a new instance is created."
-
- super initialize.
- changeManager := CustomLocalChangeManager new.
- defaultValues := Dictionary new.
- defaultReplacements := Dictionary new.
- formatter := CustomRBLocalSourceCodeFormatter new.
-
- "Created: / 09-04-2014 / 23:44:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 24-09-2014 / 20:41:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder methodsFor:'instance creation'!
-
-methodBuilder
- "Creates and returns method source code builder with default values"
-
- | methodBuilder |
-
- methodBuilder := self class methodBuilder.
- methodBuilder model: self.
- self fillDefaultValuesTo: methodBuilder.
- ^ methodBuilder
-
- "Created: / 18-05-2014 / 11:41:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 08-10-2014 / 19:14:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder methodsFor:'private'!
-
-createChange
- "Creates refactory change from builder items - codeBuilds"
-
- "change := nil.
- codeBuilds do: [ :builder |
- | codeChange |
-
- codeChange := builder change.
- codeChange notNil ifTrue: [
- change isNil ifTrue: [
- change := CompositeRefactoryChange new.
- ].
-
- change addChange: codeChange
- ]
- ]"
-
- "Created: / 10-04-2014 / 00:14:39 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 29-09-2014 / 23:19:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-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>"
-! !
-
-!CustomSourceCodeBuilder methodsFor:'refactory-changes'!
-
-classChange
-
- ^ CustomSourceCodeBuilder::ClassChange new
-
- "Created: / 30-08-2014 / 20:11:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-methodChange
-
- ^ CustomSourceCodeBuilder::MethodChange new
-
- "Created: / 30-08-2014 / 18:27:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder::Class methodsFor:'accessing'!
-
-changeManager
- ^ changeManager
-!
-
-changeManager:something
- changeManager := something.
-!
-
-formatter
- ^ formatter
-!
-
-formatter:something
- formatter := something.
-! !
-
-!CustomSourceCodeBuilder::ClassChange class methodsFor:'documentation'!
-
-documentation
-"
- Method change (refacotry browser) wrapper to support additional functionality.
- For now its just package accesor.
-
- [author:]
- Jakub Nesveda <nesvejak@fit.cvut.cz>
-"
-! !
-
-!CustomSourceCodeBuilder::ClassChange methodsFor:'accessing'!
-
-package: aPackage
-
- package := aPackage
-
- "Created: / 30-08-2014 / 20:10:41 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder::ClassChange methodsFor:'performing-changes'!
-
-executeNotifying: aBlock
- "Wrapper for executeNotifying: to set desired package"
-
- Class packageQuerySignal answer: package do: [
- ^ super executeNotifying: aBlock
- ]
-
- "Created: / 30-08-2014 / 23:00:47 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder::Method methodsFor:'accessing'!
-
-changeManager
- ^ changeManager
-!
-
-changeManager:something
- changeManager := something.
-!
-
-formatter
- ^ formatter
-!
-
-formatter:something
- formatter := something.
-! !
-
-!CustomSourceCodeBuilder::MethodChange class methodsFor:'documentation'!
-
-documentation
-"
- Method change (refacotry browser) wrapper to support additional functionality.
- For now its just package accesor.
-
- [author:]
- Jakub Nesveda <nesvejak@fit.cvut.cz>
-
-"
-! !
-
-!CustomSourceCodeBuilder::MethodChange methodsFor:'accessing'!
-
-package: aPackage
-
- package := aPackage
-
- "Created: / 30-08-2014 / 18:24:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilder class methodsFor:'documentation'!
-
-version_HG
-
- ^ '$Changeset: <not expanded> $'
-! !
-
--- a/CustomSourceCodeBuilderTests.st Wed Oct 08 19:50:10 2014 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,857 +0,0 @@
-"{ Package: 'jn:refactoring_custom' }"
-
-CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomSourceCodeBuilderTests
- instanceVariableNames:'refactoryChangeManager'
- classVariableNames:''
- poolDictionaries:''
- category:'Interface-Refactoring-Custom-Tests'
-!
-
-
-!CustomSourceCodeBuilderTests methodsFor:'accessing'!
-
-generatorOrRefactoring
- ^ nil
-
- "Modified: / 31-05-2014 / 22:48:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilderTests methodsFor:'initialization & release'!
-
-setUp
-
- super setUp.
- refactoryChangeManager := RefactoryChangeManager instance.
-
- "Created: / 16-04-2014 / 21:39:50 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 31-05-2014 / 22:45:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilderTests methodsFor:'private'!
-
-lastUndoChange
-
- refactoryChangeManager undoableOperations isEmpty ifTrue: [
- ^ nil
- ] ifFalse: [
- ^ refactoryChangeManager undoChange
- ].
-
- "Created: / 16-04-2014 / 21:40:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 31-05-2014 / 19:53:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilderTests methodsFor:'tests'!
-
-test_all_class_var_names
- | class actualClassVars expectedClassVars |
-
- class := codeBuilder createClass.
- class
- className: 'MockClassForTestCase';
- classVariableNames: 'ClassVar1 ClassVar2'.
-
- expectedClassVars := (Object allClassVarNames, (Array with: #ClassVar1 with: #ClassVar2)).
- actualClassVars := class theNonMetaclass allClassVarNames.
-
- self assert: expectedClassVars = actualClassVars
-
- "Created: / 20-06-2014 / 22:35:27 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 23-06-2014 / 19:09:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_builder_change_nil_as_default
-
- self assert: codeBuilder change isNil.
-
- "Created: / 22-07-2014 / 22:52:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_chaining_api_create_class_and_method_with_default_class
- | class |
-
- codeBuilder
- className: 'MockClassForTestCase';
- createClass;
-
- protocol: 'a protocol';
- source: '`@selector
- self shouldImplement';
- replace: '`@selector' with: 'aSelector';
- createMethod;
-
- replace: '`@selector' with: 'aSelector2';
- createMethod.
-
- codeBuilder 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: / 31-08-2014 / 16:53:36 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_chaining_api_create_class_and_method_within_given_package
- | class package method1 method2 |
-
- package := self class package.
- self assert: package size > 3.
-
- class := codeBuilder
- package: package;
- className: 'MockClassForTestCase';
- createClass.
-
- codeBuilder
- 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.
-
- codeBuilder 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>"
-!
-
-test_chaining_api_create_class_and_method_without_given_package
- | class package method1 method2 |
-
- package := self class package.
- self assert: package size > 3.
-
- class := codeBuilder
- className: 'MockClassForTestCase';
- createClass.
-
- codeBuilder
- 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.
-
- codeBuilder 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>"
-!
-
-test_chaining_api_create_method
- | class |
-
- class := self class.
-
- codeBuilder
- 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.
-
- codeBuilder 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: / 28-04-2014 / 09:19:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 26-08-2014 / 23:39:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-test_chaining_api_create_method_with_class
- | class className method |
-
- className := 'TestClassNameForTestCase'.
-
- class := codeBuilder
- className: className;
- classVariableNames: 'ClassVar1 ClassVar2';
- instanceVariableNames: 'instVar1 instVar2';
- poolDictionaryNames: 'dictName';
- superclassName: 'TestCase';
- category: 'Some-Category';
- createClass.
-
- codeBuilder
- class: class;
- protocol: 'a protocol';
- source: '`@selector
- self shouldImplement';
- replace: '`@selector' with: 'aSelector';
- createMethod.
-
- self assertClassNotExists: className.
- [
- codeBuilder 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: / 15-06-2014 / 17:16:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 26-08-2014 / 23:56:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-test_chaining_api_create_method_within_given_package
- | class package method1 method2 |
-
- package := self class package.
- self assert: package size > 3.
-
- class := self class.
-
- codeBuilder
- 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.
-
- codeBuilder 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>"
-!
-
-test_chaining_api_create_method_without_given_package
- | class package method1 method2 |
-
- package := self class package.
- self assert: package size > 3.
-
- class := self class.
-
- codeBuilder
- 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.
-
- codeBuilder 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>"
-!
-
-test_class_and_class_method_generated_as_one_undo_change
- | className class method lastUndoChange |
-
- lastUndoChange := self lastUndoChange.
-
- className := 'MockClassForTestingOneUndoChange'.
-
- self assertClassNotExists: className.
-
- codeBuilder := CustomSourceCodeBuilder new.
- class := codeBuilder createClass.
- class className: className.
-
- self assertClassNotExists: className.
-
- method := codeBuilder createMethod.
- method
- class: class theMetaclass;
- protocol: 'a protocol';
- source: 'aSelector
- ^ nil'.
-
- self assertClassNotExists: className.
- self assert: lastUndoChange = (self lastUndoChange).
-
- codeBuilder compile.
-
- self assertClassExists: className.
- self assert: (lastUndoChange = (self lastUndoChange)) not.
- self assert: ((Smalltalk classNamed: className) class includesSelector: #aSelector).
- self assert: ((Smalltalk classNamed: className) includesSelector: #aSelector) not.
-
- refactoryChangeManager undoOperation.
-
- self assertClassNotExists: className.
- self assert: lastUndoChange = (self lastUndoChange).
-
- "Created: / 17-04-2014 / 23:54:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 15-06-2014 / 17:17:53 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_class_and_instance_method_generated_as_one_undo_change
- | className class method lastUndoChange |
-
- lastUndoChange := self lastUndoChange.
-
- className := 'MockClassForTestingOneUndoChange'.
-
- self assertClassNotExists: className.
-
- codeBuilder := CustomSourceCodeBuilder new.
- class := codeBuilder createClass.
- class className: className.
-
- self assertClassNotExists: className.
-
- method := codeBuilder createMethod.
- method
- class: class;
- protocol: 'a protocol';
- source: 'aSelector
- ^ nil'.
-
- self assertClassNotExists: className.
- self assert: lastUndoChange = (self lastUndoChange).
-
- codeBuilder compile.
-
- self assertClassExists: className.
- self assert: (lastUndoChange = (self lastUndoChange)) not.
- self assert: ((Smalltalk classNamed: className) includesSelector: #aSelector).
-
- refactoryChangeManager undoOperation.
-
- self assertClassNotExists: className.
- self assert: lastUndoChange = (self lastUndoChange).
-
- "Created: / 17-04-2014 / 23:54:05 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 15-06-2014 / 17:19:06 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_comment_in_method_generated
- | method class generatedSource expectedSource |
-
- class := self class.
-
- method := codeBuilder createMethod.
- method
- class: self class;
- protocol: 'a protocol';
- source: 'aSelector
- "a comment"
- ^ nil'.
-
- self assert: (class includesSelector: #aSelector) not.
-
- codeBuilder execute.
-
- generatedSource := (class sourceCodeAt: #aSelector).
- expectedSource := 'aSelector
- "a comment"
-
- ^ nil'.
-
- self assert: (class includesSelector: #aSelector).
- self assert: (generatedSource includesSubString: '"a comment"').
- self assertSource: expectedSource sameAs: generatedSource
-
- "Created: / 27-04-2014 / 15:57:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 26-08-2014 / 23:42:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 29-08-2014 / 22:23:40 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_class_immediate
- | mockClass |
-
- mockClass := codeBuilder createClassImmediate: 'MockClassForTestCase'.
-
- self assert: mockClass new className = 'MockClassForTestCase'.
- self assert: mockClass superclass new className = 'Object'.
- self assert: mockClass instanceVariableString = ''.
- self assert: mockClass classVariableString = ''.
- self assert: mockClass poolDictionaries = ''.
- self assert: mockClass category = ''.
-
- "Created: / 15-06-2014 / 17:27:41 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 27-07-2014 / 12:42:53 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_class_immediate_with_given_super_class_name
- | mockClass |
-
- mockClass := codeBuilder createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
-
- self assert: mockClass new className = 'MockClassForTestCase'.
- self assert: mockClass superclass new className = 'Object'.
- self assert: mockClass instanceVariableString = ''.
- self assert: mockClass classVariableString = ''.
- self assert: mockClass poolDictionaries = ''.
- self assert: mockClass category = ''.
-
- "Created: / 27-07-2014 / 12:42:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_class_immediate_with_instance_and_class_variables
- | mockClass |
-
- mockClass := codeBuilder
- createClassImmediate: 'MockClassForTestCase'
- superClassName: 'Object'
- instanceVariableNames: 'instVar'
- classVariableNames: 'ClassVar'.
-
- self assert: mockClass new className = 'MockClassForTestCase'.
- self assert: mockClass superclass new className = 'Object'.
- self assert: mockClass instanceVariableString = 'instVar'.
- self assert: mockClass classVariableString = 'ClassVar'.
- self assert: mockClass poolDictionaries = ''.
- self assert: mockClass category = ''.
-
- "Created: / 23-08-2014 / 22:24:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_class_immediate_with_instance_variables
- | mockClass |
-
- mockClass := codeBuilder
- createClassImmediate: 'MockClassForTestCase'
- instanceVariableNames: 'instVar'.
-
- self assert: mockClass new className = 'MockClassForTestCase'.
- self assert: mockClass superclass new className = 'Object'.
- self assert: mockClass instanceVariableString = 'instVar'.
- self assert: mockClass classVariableString = ''.
- self assert: mockClass poolDictionaries = ''.
- self assert: mockClass category = ''.
-
- "Created: / 23-08-2014 / 22:26:24 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_class_within_given_package
- | class package |
-
- package := self class package.
- self assert: package size > 3.
-
- (codeBuilder createClass)
- className: 'MockClassForTestCase';
- package: package;
- execute.
-
- class := Smalltalk classNamed: 'MockClassForTestCase'.
-
- self assert: class new className = 'MockClassForTestCase'.
- self assert: class superclass new className = 'Object'.
- self assert: class instanceVariableString = ''.
- self assert: class classVariableString = ''.
- self assert: class poolDictionaries = ''.
- self assert: class category = ''.
- self assert: class package = package.
-
- "Created: / 30-08-2014 / 20:35:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_class_without_given_package
- | class package |
-
- package := self class package.
- self assert: package size > 3.
-
- (codeBuilder createClass)
- className: 'MockClassForTestCase';
- execute.
-
- class := Smalltalk classNamed: 'MockClassForTestCase'.
-
- self assert: class new className = 'MockClassForTestCase'.
- self assert: class superclass new className = 'Object'.
- self assert: class instanceVariableString = ''.
- self assert: class classVariableString = ''.
- self assert: class poolDictionaries = ''.
- self assert: class category = ''.
- self assert: (class package = package) not.
-
- "Created: / 30-08-2014 / 20:57:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_method_immediate
- | mockClass expectedSource actualSource |
-
- expectedSource := 'instanceMethod:aParam
- ^ self'.
-
- mockClass := codeBuilder createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
- codeBuilder createMethodImmediate: mockClass protocol: 'a protocol' source: expectedSource.
-
- actualSource := (mockClass sourceCodeAt: #instanceMethod:).
-
- self assertSource: expectedSource sameAs: actualSource.
- self assert: (mockClass compiledMethodAt: #instanceMethod:) category = 'a protocol'
-
- "Created: / 15-06-2014 / 17:28:36 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 24-06-2014 / 21:59:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_method_immediate_with_preset_protocol
- | mockClass expectedSource actualSource |
-
- expectedSource := 'instanceMethod:aParam
- ^ self'.
-
- mockClass := codeBuilder createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
- codeBuilder createMethodImmediate: mockClass source: expectedSource.
-
- actualSource := (mockClass sourceCodeAt: #instanceMethod:).
-
- self assertSource: expectedSource sameAs: actualSource.
- self assert: (mockClass compiledMethodAt: #instanceMethod:) category = 'protocol'
-
- "Created: / 23-08-2014 / 21:48:51 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_method_within_given_package
- | mockClass package method |
-
- package := self class package.
- self assert: package size > 3.
-
- mockClass := codeBuilder createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
- (codeBuilder createMethod)
- class: mockClass;
- protocol: 'a protocol';
- package: package;
- source: 'selector ^ 123';
- execute.
-
- method := (mockClass compiledMethodAt: #selector).
-
- self assert: method package = package
-
- "Created: / 30-08-2014 / 18:45:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 30-08-2014 / 20:46:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_create_method_without_given_package
- | mockClass package method |
-
- package := self class package.
- self assert: package size > 3.
-
- mockClass := codeBuilder createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
- (codeBuilder createMethod)
- class: mockClass;
- protocol: 'a protocol';
- source: 'selector ^ 123';
- execute.
-
- method := (mockClass compiledMethodAt: #selector).
-
- self assert: (method package = package) not
-
- "Created: / 30-08-2014 / 18:46:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 30-08-2014 / 20:46:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_empty_class_not_in_change
-
- codeBuilder createClass.
- self assert: codeBuilder change isNil.
-
- "Created: / 22-07-2014 / 22:22:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_method_source_builded
- | methodBuilder source |
-
- methodBuilder := codeBuilder methodBuilder.
- methodBuilder
- source: '`@methodName
- ^ `variableName';
- replace: '`@methodName' with: #selector;
- replace: '`variableName' with: 'aName'.
-
- source := methodBuilder buildedSource.
-
- self assert: source = 'selector
- ^ aName'.
-
- "Created: / 18-05-2014 / 17:14:13 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 19-05-2014 / 19:01:29 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 26-08-2014 / 23:40:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-test_method_source_builded_with_comment
- | methodBuilder buildedSource expectedSource |
-
- methodBuilder := codeBuilder methodBuilder.
- methodBuilder
- source: '`@methodName
-
- `"comment
-
- ^ `variableName';
- replace: '`@methodName' with: #selector;
- replace: '`variableName' with: 'aName';
- replace: '`"comment' with: '"a comment"'.
-
- buildedSource := methodBuilder buildedSource.
- expectedSource := 'selector
- "a comment"
-
- ^ aName'.
-
- self assertSource: expectedSource sameAs: buildedSource
-
- "Created: / 19-05-2014 / 18:57:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 26-08-2014 / 23:55:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 29-08-2014 / 22:23:53 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_method_source_with_original_formatting
- | methodBuilder originalSource actualSource expectedSource |
-
- originalSource := 'methodName
-
- `variableName do: [ each | each call ].'.
-
- expectedSource := 'methodName
-
- collection do: [ each | each call ].'.
-
- codeBuilder formatter: CustomNoneSourceCodeFormatter new.
- methodBuilder := codeBuilder methodBuilder.
- methodBuilder
- source: originalSource;
- replace: '`variableName' with: 'collection'.
-
- actualSource := methodBuilder buildedSource.
-
- self assertSource: expectedSource sameAs: actualSource.
-
- "Created: / 22-07-2014 / 23:04:43 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 29-08-2014 / 22:25:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_nil_changes_not_in_change_collector
-
- codeBuilder createMethod.
- self assert: codeBuilder change isNil.
-
- "Created: / 22-07-2014 / 22:16:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_nil_changes_not_in_change_collector_two_code_builds
-
- | method |
-
- codeBuilder createMethod.
- method := codeBuilder createMethod.
- method source: 'some ^ 5'.
-
- self assert: codeBuilder codeBuilds length = 2.
- self assert: codeBuilder change isNil.
-
- "Created: / 22-07-2014 / 22:39:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-!
-
-test_one_method_for_multiple_classes
- | classCollection classNames |
-
- classCollection := OrderedCollection new.
- classNames := Array with: 'DummyClassForTestCase1' with: 'DummyClassForTestCase2'.
-
- classNames do: [ :className |
- classCollection add: (codeBuilder className: className; createClass).
- ].
-
- codeBuilder
- classes: classCollection;
- protocol: 'a protocol';
- source: '`@selector
- self shouldImplement';
- replace: '`@selector' with: 'aSelector';
- createMethod.
-
- codeBuilder 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: / 04-05-2014 / 11:51:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 26-08-2014 / 23:41:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-test_redo_changes_for_multiple_executes
- "Note: Methods createClassImmediate and createMethodImmediate have execute call inside"
- | mockSuperClassName mockClassName mockSuperClass |
-
- mockSuperClassName := 'MockSuperClassForTestCase'.
- mockClassName := 'MockClassForTestCase'.
-
- mockSuperClass := codeBuilder createClassImmediate: mockSuperClassName superClassName: 'Object'.
- codeBuilder createClassImmediate: mockClassName superClassName: mockSuperClassName.
-
- "/ Instance method
- codeBuilder createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
- self shouldImplement'.
-
- "/ Class method
- codeBuilder createMethodImmediate: mockSuperClass class protocol: 'class-protocol' source: 'classMethod: aParam
- self shouldImplement'.
-
- self assertClassExists: mockSuperClassName.
- self assertClassExists: mockClassName.
-
- codeBuilder redoChanges.
-
- self assertClassNotExists: mockSuperClassName.
- self assertClassNotExists: mockClassName.
-
- "Created: / 15-06-2014 / 16:21:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
-! !
-
-!CustomSourceCodeBuilderTests class methodsFor:'documentation'!
-
-version_HG
-
- ^ '$Changeset: <not expanded> $'
-! !
-
--- a/CustomSubclassResponsibilityCodeGenerator.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomSubclassResponsibilityCodeGenerator.st Fri Oct 10 16:28:37 2014 +0200
@@ -65,7 +65,7 @@
superclassMethod := (classQuery methodForSuperclassSelector: selector class: aClass).
- codeBuilder createMethod
+ model createMethod
class: aClass;
protocol: superclassMethod category;
source: ('`@selector
--- a/CustomSubclassResponsibilityCodeGeneratorTests.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomSubclassResponsibilityCodeGeneratorTests.st Fri Oct 10 16:28:37 2014 +0200
@@ -21,8 +21,8 @@
setUp
super setUp.
- mockSuperClass := codeBuilder createClassImmediate: 'MockSuperClassForTestCase' superClassName: 'Object'.
- mockClass := codeBuilder createClassImmediate: 'MockClassForTestCase' superClassName: (mockSuperClass new className).
+ mockSuperClass := model createClassImmediate: 'MockSuperClassForTestCase' superClassName: 'Object'.
+ mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: (mockSuperClass new className).
"Created: / 14-04-2014 / 17:16:28 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 29-08-2014 / 21:39:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
@@ -34,7 +34,7 @@
context addSelectedClass: mockClass.
- codeBuilder createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
+ model createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
^ self'.
self assert: (mockClass includesSelector: #instanceMethod:) not.
@@ -54,7 +54,7 @@
context addSelectedClass: mockClass.
- codeBuilder createMethodImmediate: mockSuperClass class protocol: 'class-protocol' source: 'classMethod: aParam
+ model createMethodImmediate: mockSuperClass class protocol: 'class-protocol' source: 'classMethod: aParam
self subclassResponsibility'.
self assert: (mockClass includesSelector: #classMethod:) not.
@@ -80,7 +80,7 @@
context addSelectedClass: mockClass.
- codeBuilder createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
+ model createMethodImmediate: mockSuperClass protocol: 'instance-protocol' source: 'instanceMethod: aParam
self subclassResponsibility'.
self assert: (mockClass includesSelector: #instanceMethod:) not.
--- a/CustomTestCaseCodeGenerator.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomTestCaseCodeGenerator.st Fri Oct 10 16:28:37 2014 +0200
@@ -210,7 +210,7 @@
generateTestCaseNamed:testCaseClassName forClassUnderTest:classUnderTest
| testCase |
- (testCase := codeBuilder createClass)
+ (testCase := model createClass)
superclassName:testSuperName;
className:testClassName;
category:testClassCategory.
--- a/CustomTestCaseMethodCodeGenerator.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomTestCaseMethodCodeGenerator.st Fri Oct 10 16:28:37 2014 +0200
@@ -93,7 +93,7 @@
].
(testClass includesSelector: testSelector asSymbol) ifFalse: [
- (codeBuilder createMethod)
+ (model createMethod)
package: method package;
class: testClass;
protocol: 'tests';
--- a/CustomTestCaseSetUpCodeGenerator.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomTestCaseSetUpCodeGenerator.st Fri Oct 10 16:28:37 2014 +0200
@@ -77,7 +77,7 @@
category := (TestCase compiledMethodAt: #setUp) category.
].
- codeBuilder createMethod
+ model createMethod
class: class;
source: source;
category: category.
--- a/CustomTestCaseTearDownCodeGenerator.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomTestCaseTearDownCodeGenerator.st Fri Oct 10 16:28:37 2014 +0200
@@ -78,7 +78,7 @@
category := (TestCase compiledMethodAt: #tearDown ) category.
].
- codeBuilder createMethod
+ model createMethod
class: class;
source: source;
category: category.
--- a/CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.st Fri Oct 10 16:28:37 2014 +0200
@@ -7,6 +7,7 @@
category:'Interface-Refactoring-Custom-Generators'
!
+
!CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator class methodsFor:'accessing-presentation'!
description
@@ -79,3 +80,10 @@
"Modified: / 19-09-2014 / 22:37:00 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !
+!CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator class methodsFor:'documentation'!
+
+version_HG
+
+ ^ '$Changeset: <not expanded> $'
+! !
+
--- a/CustomVisitorCodeGenerator.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomVisitorCodeGenerator.st Fri Oct 10 16:28:37 2014 +0200
@@ -81,7 +81,7 @@
methodSelector := methodSelector, parameterSelectorPart.
].
- codeBuilder createMethod
+ model createMethod
class: aClass;
protocol: 'visiting';
source: ('`@methodSelector
--- a/CustomVisitorCodeGeneratorTests.st Wed Oct 08 19:50:10 2014 +0200
+++ b/CustomVisitorCodeGeneratorTests.st Fri Oct 10 16:28:37 2014 +0200
@@ -28,14 +28,14 @@
^ visitor visitDummyTestClassForVisitorMethod:self with:parameter'.
- class := codeBuilder createClassImmediate: 'DummyTestClassForVisitorMethod'.
+ class := model createClassImmediate: 'DummyTestClassForVisitorMethod'.
generatorOrRefactoring
buildAcceptVisitorMethod: 'visitDummyTestClassForVisitorMethod:'
withParameter: true
forClass: class.
- generatorOrRefactoring codeBuilder execute.
+ generatorOrRefactoring model execute.
self assertMethodSource: expectedSource atSelector: #acceptVisitor:with: forClass: class
@@ -56,14 +56,14 @@
^ visitor visitDummyTestClassForVisitorMethod:self'.
- class := codeBuilder createClassImmediate: 'DummyTestClassForVisitorMethod'.
+ class := model createClassImmediate: 'DummyTestClassForVisitorMethod'.
generatorOrRefactoring
buildAcceptVisitorMethod: 'visitDummyTestClassForVisitorMethod:'
withParameter: false
forClass: class.
- generatorOrRefactoring codeBuilder execute.
+ generatorOrRefactoring model execute.
self assertMethodSource: expectedSource atSelector: #acceptVisitor: forClass: class
@@ -80,14 +80,14 @@
expectedSource := 'acceptVisitor:visitor with:parameter
^ visitor visitDummyTestClassForVisitorMethod:self with:parameter'.
- class := codeBuilder createClassImmediate: 'DummyTestClassForVisitorMethod'.
+ class := model createClassImmediate: 'DummyTestClassForVisitorMethod'.
generatorOrRefactoring
buildAcceptVisitorMethod: 'visitDummyTestClassForVisitorMethod:'
withParameter: true
forClass: class.
- generatorOrRefactoring codeBuilder execute.
+ generatorOrRefactoring model execute.
self assertMethodSource: expectedSource atSelector: #acceptVisitor:with: forClass: class
@@ -104,14 +104,14 @@
expectedSource := 'acceptVisitor:visitor
^ visitor visitDummyTestClassForVisitorMethod:self'.
- class := codeBuilder createClassImmediate: 'DummyTestClassForVisitorMethod'.
+ class := model createClassImmediate: 'DummyTestClassForVisitorMethod'.
generatorOrRefactoring
buildAcceptVisitorMethod: 'visitDummyTestClassForVisitorMethod:'
withParameter: false
forClass: class.
- generatorOrRefactoring codeBuilder execute.
+ generatorOrRefactoring model execute.
self assertMethodSource: expectedSource atSelector: #acceptVisitor: forClass: class
--- a/Make.proto Wed Oct 08 19:50:10 2014 +0200
+++ b/Make.proto Fri Oct 10 16:28:37 2014 +0200
@@ -34,7 +34,7 @@
# add the path(es) here:,
# ********** OPTIONAL: MODIFY the next lines ***
# LOCALINCLUDES=-Ifoo -Ibar
-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/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,
@@ -143,10 +143,10 @@
$(OUTDIR)CustomManager.$(O) CustomManager.$(H): CustomManager.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)CustomMenuBuilder.$(O) CustomMenuBuilder.$(H): CustomMenuBuilder.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)CustomMock.$(O) CustomMock.$(H): CustomMock.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)CustomNamespace.$(O) CustomNamespace.$(H): CustomNamespace.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBNamespace.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)CustomParseTreeRewriter.$(O) CustomParseTreeRewriter.$(H): CustomParseTreeRewriter.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/ParseTreeRewriter.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/ParseTreeSearcher.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)CustomPerspective.$(O) CustomPerspective.$(H): CustomPerspective.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)CustomRefactoryBuilder.$(O) CustomRefactoryBuilder.$(H): CustomRefactoryBuilder.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/refactoring/RefactoryBuilder.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)CustomSourceCodeBuilder.$(O) CustomSourceCodeBuilder.$(H): CustomSourceCodeBuilder.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/AddClassChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/AddMethodChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/InteractiveAddClassChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/InteractiveAddMethodChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/RefactoryChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/RefactoryClassChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBAbstractClass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBClass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBMethod.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBNamespace.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)CustomSourceCodeFormatter.$(O) CustomSourceCodeFormatter.$(H): CustomSourceCodeFormatter.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)CustomSourceCodeGenerator.$(O) CustomSourceCodeGenerator.$(H): CustomSourceCodeGenerator.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/CodeGenerator.$(H) $(STCHDR)
$(OUTDIR)CustomSourceCodeSelection.$(O) CustomSourceCodeSelection.$(H): CustomSourceCodeSelection.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -192,7 +192,7 @@
$(OUTDIR)CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.$(O) CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.$(H): CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomAccessMethodsCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)CustomValueHolderWithChangeNotificationSetterMethodsCodeGenerator.$(O) CustomValueHolderWithChangeNotificationSetterMethodsCodeGenerator.$(H): CustomValueHolderWithChangeNotificationSetterMethodsCodeGenerator.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomAccessMethodsCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)CustomVisitorCodeGeneratorAcceptVisitor.$(O) CustomVisitorCodeGeneratorAcceptVisitor.$(H): CustomVisitorCodeGeneratorAcceptVisitor.st $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGenerator.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)/jn/refactoring_custom/CustomVisitorCodeGenerator.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBAbstractClass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBClass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBMetaclass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBMethod.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/SystemBrowser.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__NewSystemBrowser.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/AddClassChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/AddMethodChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/RefactoryChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/RefactoryClassChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBAbstractClass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBClass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBMetaclass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBMethod.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/SystemBrowser.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__NewSystemBrowser.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
# ENDMAKEDEPEND --- do not remove this line
--- a/Make.spec Wed Oct 08 19:50:10 2014 +0200
+++ b/Make.spec Fri Oct 10 16:28:37 2014 +0200
@@ -58,10 +58,10 @@
CustomManager \
CustomMenuBuilder \
CustomMock \
+ CustomNamespace \
CustomParseTreeRewriter \
CustomPerspective \
CustomRefactoryBuilder \
- CustomSourceCodeBuilder \
CustomSourceCodeFormatter \
CustomSourceCodeGenerator \
CustomSourceCodeSelection \
@@ -120,10 +120,10 @@
$(OUTDIR_SLASH)CustomManager.$(O) \
$(OUTDIR_SLASH)CustomMenuBuilder.$(O) \
$(OUTDIR_SLASH)CustomMock.$(O) \
+ $(OUTDIR_SLASH)CustomNamespace.$(O) \
$(OUTDIR_SLASH)CustomParseTreeRewriter.$(O) \
$(OUTDIR_SLASH)CustomPerspective.$(O) \
$(OUTDIR_SLASH)CustomRefactoryBuilder.$(O) \
- $(OUTDIR_SLASH)CustomSourceCodeBuilder.$(O) \
$(OUTDIR_SLASH)CustomSourceCodeFormatter.$(O) \
$(OUTDIR_SLASH)CustomSourceCodeGenerator.$(O) \
$(OUTDIR_SLASH)CustomSourceCodeSelection.$(O) \
--- a/abbrev.stc Wed Oct 08 19:50:10 2014 +0200
+++ b/abbrev.stc Fri Oct 10 16:28:37 2014 +0200
@@ -13,6 +13,7 @@
CustomMenuBuilder CustomMenuBuilder jn:refactoring_custom 'Interface-Refactoring-Custom-UI' 0
CustomMock CustomMock jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 0
CustomMockTests CustomMockTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
+CustomNamespace CustomNamespace jn:refactoring_custom 'Interface-Refactoring-Custom' 0
CustomNoneSourceCodeFormatterTests CustomNoneSourceCodeFormatterTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
CustomParseTreeRewriter CustomParseTreeRewriter jn:refactoring_custom 'Interface-Refactoring-Custom' 0
CustomPerspective CustomPerspective jn:refactoring_custom 'Interface-Refactoring-Custom' 1
@@ -21,7 +22,6 @@
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
-CustomSourceCodeBuilder CustomSourceCodeBuilder jn:refactoring_custom 'Interface-Refactoring-Custom' 0
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
@@ -45,6 +45,7 @@
CustomLazyInitializationGetterMethodsCodeGeneratorTests CustomLazyInitializationGetterMethodsCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
CustomLocalChangeManager CustomLocalChangeManager jn:refactoring_custom 'Interface-Refactoring-Custom' 0
CustomMultiSetterMethodsCodeGeneratorTests CustomMultiSetterMethodsCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
+CustomNamespaceTests CustomNamespaceTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
CustomNoneSourceCodeFormatter CustomNoneSourceCodeFormatter jn:refactoring_custom 'Interface-Refactoring-Custom' 0
CustomRBLocalSourceCodeFormatter CustomRBLocalSourceCodeFormatter jn:refactoring_custom 'Interface-Refactoring-Custom' 0
CustomRefactoring CustomRefactoring jn:refactoring_custom 'Interface-Refactoring-Custom-Refactorings' 0
@@ -54,7 +55,6 @@
CustomSimpleAccessMethodsCodeGeneratorTests CustomSimpleAccessMethodsCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
CustomSimpleGetterMethodsCodeGeneratorTests CustomSimpleGetterMethodsCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
CustomSimpleSetterMethodsCodeGeneratorTests CustomSimpleSetterMethodsCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
-CustomSourceCodeBuilderTests CustomSourceCodeBuilderTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
CustomSubContext CustomSubContext jn:refactoring_custom 'Interface-Refactoring-Custom' 0
CustomSubclassResponsibilityCodeGeneratorTests CustomSubclassResponsibilityCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Tests' 1
CustomTestCaseCodeGeneratorTests CustomTestCaseCodeGeneratorTests jn:refactoring_custom 'Interface-Refactoring-Custom-Generators-Tests' 1
--- a/bc.mak Wed Oct 08 19:50:10 2014 +0200
+++ b/bc.mak Fri Oct 10 16:28:37 2014 +0200
@@ -34,7 +34,7 @@
-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\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)
@@ -89,10 +89,10 @@
$(OUTDIR)CustomManager.$(O) CustomManager.$(H): CustomManager.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)CustomMenuBuilder.$(O) CustomMenuBuilder.$(H): CustomMenuBuilder.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)CustomMock.$(O) CustomMock.$(H): CustomMock.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)CustomNamespace.$(O) CustomNamespace.$(H): CustomNamespace.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBNamespace.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)CustomParseTreeRewriter.$(O) CustomParseTreeRewriter.$(H): CustomParseTreeRewriter.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\ParseTreeRewriter.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\ParseTreeSearcher.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)CustomPerspective.$(O) CustomPerspective.$(H): CustomPerspective.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)CustomRefactoryBuilder.$(O) CustomRefactoryBuilder.$(H): CustomRefactoryBuilder.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\refactoring\RefactoryBuilder.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)CustomSourceCodeBuilder.$(O) CustomSourceCodeBuilder.$(H): CustomSourceCodeBuilder.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\AddClassChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\AddMethodChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\InteractiveAddClassChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\InteractiveAddMethodChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\RefactoryChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\RefactoryClassChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBAbstractClass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBClass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBMethod.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBNamespace.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)CustomSourceCodeFormatter.$(O) CustomSourceCodeFormatter.$(H): CustomSourceCodeFormatter.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)CustomSourceCodeGenerator.$(O) CustomSourceCodeGenerator.$(H): CustomSourceCodeGenerator.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\CodeGenerator.$(H) $(STCHDR)
$(OUTDIR)CustomSourceCodeSelection.$(O) CustomSourceCodeSelection.$(H): CustomSourceCodeSelection.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -138,7 +138,7 @@
$(OUTDIR)CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.$(O) CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.$(H): CustomValueHolderWithChangeNotificationGetterMethodsCodeGenerator.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomAccessMethodsCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)CustomValueHolderWithChangeNotificationSetterMethodsCodeGenerator.$(O) CustomValueHolderWithChangeNotificationSetterMethodsCodeGenerator.$(H): CustomValueHolderWithChangeNotificationSetterMethodsCodeGenerator.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomAccessMethodsCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)CustomVisitorCodeGeneratorAcceptVisitor.$(O) CustomVisitorCodeGeneratorAcceptVisitor.$(H): CustomVisitorCodeGeneratorAcceptVisitor.st $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGenerator.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomCodeGeneratorOrRefactoring.$(H) $(INCLUDE_TOP)\jn\refactoring_custom\CustomVisitorCodeGenerator.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBAbstractClass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBClass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBMetaclass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBMethod.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\SystemBrowser.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__NewSystemBrowser.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\AddClassChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\AddMethodChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\RefactoryChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\RefactoryClassChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBAbstractClass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBClass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBMetaclass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBMethod.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\SystemBrowser.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__NewSystemBrowser.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
# ENDMAKEDEPEND --- do not remove this line
--- a/extensions.st Wed Oct 08 19:50:10 2014 +0200
+++ b/extensions.st Fri Oct 10 16:28:37 2014 +0200
@@ -1,5 +1,32 @@
"{ Package: 'jn:refactoring_custom' }"!
+!AddClassChange methodsFor:'accessing'!
+
+package
+
+ ^ package
+
+ "Created: / 09-10-2014 / 23:45:53 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!AddClassChange methodsFor:'accessing'!
+
+package: aPackageName
+
+ package := aPackageName
+
+ "Created: / 08-10-2014 / 20:07:05 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!AddMethodChange methodsFor:'accessing'!
+
+package: aPackageName
+
+ package := aPackageName
+
+ "Created: / 08-10-2014 / 19:59:34 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
!RBAbstractClass methodsFor:'accessing'!
allClassVarNames
@@ -32,6 +59,37 @@
"Modified: / 04-10-2014 / 22:35:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !
+!RBAbstractClass methodsFor:'method accessing'!
+
+compileMethod: anRBMethod
+ "Creates new method for this class with RBClass"
+ | change method newSource |
+
+ newSource := anRBMethod newSource.
+
+ change := model
+ compile: newSource
+ in: self
+ classified: anRBMethod category.
+
+ change package: anRBMethod package.
+
+ method := anRBMethod deepCopy
+ source: newSource;
+ category: anRBMethod category;
+ package: anRBMethod package;
+ model: self model;
+ modelClass: self;
+ yourself.
+
+ self addMethod: method.
+
+ ^ change
+
+ "Created: / 10-10-2014 / 11:37:58 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 10-10-2014 / 13:08:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
!RBAbstractClass methodsFor:'accessing'!
instVarNames
@@ -121,6 +179,32 @@
!RBAbstractClass methodsFor:'accessing'!
+package
+ "see Class >> package ( same purpose, but for model class )"
+ | package |
+
+ package := self objectAttributeAt: #package.
+
+ (package isNil and: [ self realClass notNil ]) ifTrue: [
+ package := self realClass package.
+ ].
+
+ ^ package
+
+ "Created: / 09-10-2014 / 23:12:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!RBAbstractClass methodsFor:'accessing'!
+
+package: aPackage
+
+ self objectAttributeAt: #package put: aPackage
+
+ "Created: / 09-10-2014 / 23:12:14 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!RBAbstractClass methodsFor:'accessing'!
+
superclassName: aName
"Assign superclass by its name"
@@ -164,11 +248,18 @@
compile
"Updates class definition in the namespace along with code changes"
+ | change newClass |
- model defineClass: self definitionString.
+ change := model defineClass: self definitionString.
+ change package: self package.
+
+ newClass := model classNamed: self name.
+ newClass package: self package.
+
+ ^ change
"Created: / 25-09-2014 / 22:31:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
- "Modified: / 25-09-2014 / 23:36:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 10-10-2014 / 15:40:11 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !
!RBClass methodsFor:'accessing'!
@@ -239,18 +330,10 @@
compile
"Modifies/adds method in the model class."
- | newSource generator |
-
- newSource := self source.
- generator := self sourceCodeGenerator.
- generator notNil ifTrue: [
- generator source: newSource.
- newSource := generator newSource.
- ].
-
- self modelClass compile: newSource classified: self category
+ ^ self modelClass compileMethod: self
"Created: / 06-10-2014 / 11:11:30 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified: / 10-10-2014 / 12:28:06 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !
!RBMethod methodsFor:'accessing'!
@@ -316,6 +399,41 @@
!RBMethod methodsFor:'accessing'!
+newSource
+ "Returns new source code with performed modifications by CodeGenerator
+ ( replace: something with: anotherthing and custom formatting)."
+ | newSource generator |
+
+ newSource := self source.
+ generator := self sourceCodeGenerator.
+ generator notNil ifTrue: [
+ generator source: newSource.
+ newSource := generator newSource.
+ ].
+
+ "Fixes test CustomRBMethodTests >> test_compile_with_code_generator
+ when none selector and method is given then parse the selector from new source code"
+ (selector isNil and: [ compiledMethod isNil ] and: [ newSource notNil ]) ifTrue: [
+ selector := (Parser parseMethodSpecification: newSource) selector
+ ].
+
+ ^ newSource
+
+ "Created: / 10-10-2014 / 12:23:20 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+ "Modified (comment): / 10-10-2014 / 15:31:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!RBMethod methodsFor:'accessing'!
+
+package: aPackage
+
+ self objectAttributeAt: #package put: aPackage
+
+ "Created: / 10-10-2014 / 11:12:26 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
+!RBMethod methodsFor:'accessing'!
+
protocol
"Returns in which category/protocol does the method belongs within a class"
--- a/jn_refactoring_custom.st Wed Oct 08 19:50:10 2014 +0200
+++ b/jn_refactoring_custom.st Fri Oct 10 16:28:37 2014 +0200
@@ -27,7 +27,7 @@
by searching along the inheritance chain of all of my classes."
^ #(
- #'stx:goodies/refactoryBrowser/changes' "AddClassChange - superclass of CustomSourceCodeBuilder::ClassChange"
+ #'stx:goodies/refactoryBrowser/changes' "AddClassChange - extended"
#'stx:goodies/refactoryBrowser/helpers' "RBAbstractClass - extended"
#'stx:goodies/refactoryBrowser/parser' "ParseTreeRewriter - superclass of CustomParseTreeRewriter"
#'stx:goodies/refactoryBrowser/refactoring' "RefactoryBuilder - superclass of CustomRefactoryBuilder"
@@ -47,6 +47,7 @@
^ #(
#'stx:libbasic3' "Change - referenced by CustomCodeGeneratorOrRefactoringTestCase>>assertSource:sameAs:"
+ #'stx:libcomp' "Parser - referenced by RBMethod>>newSource"
#'stx:libview' "WindowGroup - referenced by CustomCodeGeneratorOrRefactoring>>executeInContextWithWaitCursor:"
#'stx:libwidg' "DialogBox - referenced by CustomUserDialog>>initialize"
#'stx:libwidg2' "CheckBox - referenced by CustomDialog>>addCheckBoxOn:labeled:"
@@ -85,6 +86,7 @@
CustomMenuBuilder
CustomMock
(CustomMockTests autoload)
+ CustomNamespace
(CustomNoneSourceCodeFormatterTests autoload)
CustomParseTreeRewriter
CustomPerspective
@@ -93,7 +95,6 @@
(CustomRBLocalSourceCodeFormatterTests autoload)
(CustomRBMethodTests autoload)
CustomRefactoryBuilder
- CustomSourceCodeBuilder
CustomSourceCodeFormatter
CustomSourceCodeGenerator
(CustomSourceCodeGeneratorTests autoload)
@@ -117,6 +118,7 @@
(CustomLazyInitializationGetterMethodsCodeGeneratorTests autoload)
CustomLocalChangeManager
(CustomMultiSetterMethodsCodeGeneratorTests autoload)
+ (CustomNamespaceTests autoload)
CustomNoneSourceCodeFormatter
CustomRBLocalSourceCodeFormatter
CustomRefactoring
@@ -126,7 +128,6 @@
(CustomSimpleAccessMethodsCodeGeneratorTests autoload)
(CustomSimpleGetterMethodsCodeGeneratorTests autoload)
(CustomSimpleSetterMethodsCodeGeneratorTests autoload)
- (CustomSourceCodeBuilderTests autoload)
CustomSubContext
(CustomSubclassResponsibilityCodeGeneratorTests autoload)
(CustomTestCaseCodeGeneratorTests autoload)
@@ -208,6 +209,14 @@
RBMethod replace:with:
RBMethod sourceCodeGenerator
RBMethod sourceCodeGenerator:
+ AddClassChange package
+ AddClassChange package:
+ AddMethodChange package:
+ RBAbstractClass compileMethod:
+ RBAbstractClass package
+ RBAbstractClass package:
+ RBMethod newSource
+ RBMethod package:
)
! !
--- a/libInit.cc Wed Oct 08 19:50:10 2014 +0200
+++ b/libInit.cc Fri Oct 10 16:28:37 2014 +0200
@@ -35,10 +35,10 @@
_CustomManager_Init(pass,__pRT__,snd);
_CustomMenuBuilder_Init(pass,__pRT__,snd);
_CustomMock_Init(pass,__pRT__,snd);
+_CustomNamespace_Init(pass,__pRT__,snd);
_CustomParseTreeRewriter_Init(pass,__pRT__,snd);
_CustomPerspective_Init(pass,__pRT__,snd);
_CustomRefactoryBuilder_Init(pass,__pRT__,snd);
-_CustomSourceCodeBuilder_Init(pass,__pRT__,snd);
_CustomSourceCodeFormatter_Init(pass,__pRT__,snd);
_CustomSourceCodeGenerator_Init(pass,__pRT__,snd);
_CustomSourceCodeSelection_Init(pass,__pRT__,snd);
--- a/patches/Make.proto Wed Oct 08 19:50:10 2014 +0200
+++ b/patches/Make.proto Fri Oct 10 16:28:37 2014 +0200
@@ -34,7 +34,7 @@
# add the path(es) here:,
# ********** OPTIONAL: MODIFY the next lines ***
# LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libcomp
+LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libcomp
# if you need any additional defines for embedded C code,
@@ -102,6 +102,7 @@
# build all mandatory prerequisite packages (containing superclasses) for this package
prereq:
cd $(TOP)/libbasic && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+ cd $(TOP)/goodies/refactoryBrowser/changes && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
cd $(TOP)/goodies/refactoryBrowser/helpers && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
@@ -123,7 +124,7 @@
# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
$(OUTDIR)jn_refactoring_custom_patches.$(O) jn_refactoring_custom_patches.$(H): jn_refactoring_custom_patches.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
-$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBAbstractClass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBMethod.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/AddClassChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/RefactoryChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/changes/RefactoryClassChange.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBAbstractClass.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers/RBMethod.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
# ENDMAKEDEPEND --- do not remove this line
--- a/patches/bc.mak Wed Oct 08 19:50:10 2014 +0200
+++ b/patches/bc.mak Fri Oct 10 16:28:37 2014 +0200
@@ -34,7 +34,7 @@
-LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libcomp
+LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libcomp
LOCALDEFINES=
STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES) -varPrefix=$(LIBNAME)
@@ -51,6 +51,7 @@
# build all mandatory prerequisite packages (containing superclasses) for this package
prereq:
pushd ..\..\..\stx\libbasic & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+ pushd ..\..\..\stx\goodies\refactoryBrowser\changes & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
pushd ..\..\..\stx\goodies\refactoryBrowser\helpers & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
@@ -69,7 +70,7 @@
# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
$(OUTDIR)jn_refactoring_custom_patches.$(O) jn_refactoring_custom_patches.$(H): jn_refactoring_custom_patches.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
-$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBAbstractClass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBMethod.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\AddClassChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\RefactoryChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\changes\RefactoryClassChange.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBAbstractClass.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers\RBMethod.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
# ENDMAKEDEPEND --- do not remove this line
--- a/patches/extensions.st Wed Oct 08 19:50:10 2014 +0200
+++ b/patches/extensions.st Fri Oct 10 16:28:37 2014 +0200
@@ -1,5 +1,28 @@
"{ Package: 'jn:refactoring_custom/patches' }"!
+!AddClassChange methodsFor:'private'!
+
+primitiveExecute
+
+ package notNil ifTrue:[
+ Class packageQuerySignal
+ answer:package
+ do:[
+ ^ self definingSuperclass subclassDefinerClass
+ evaluate: definition
+ notifying: self controller
+ logged: true
+ ]
+ ].
+
+ ^ self definingSuperclass subclassDefinerClass
+ evaluate: definition
+ notifying: self controller
+ logged: true
+
+ "Modified: / 08-10-2014 / 20:10:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
+! !
+
!RBAbstractClass methodsFor:'method accessing'!
compile: aString classified: aSymbolCollection
@@ -129,6 +152,32 @@
"Modified: / 08-10-2014 / 18:52:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !
+!RBMethod methodsFor:'accessing'!
+
+package
+ "see Method >> package ( same purpose, but for model method )"
+ | package |
+
+ package := self objectAttributeAt: #package.
+
+ package isNil ifTrue: [
+ | method |
+
+ method := self method.
+
+ method isNil ifTrue: [
+ package := PackageId noProjectID
+ ] ifFalse: [
+ package := method package
+ ]
+ ].
+
+ ^ 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>"
+! !
+
!jn_refactoring_custom_patches class methodsFor:'documentation'!
extensionsVersion_HG
--- a/patches/jn_refactoring_custom_patches.st Wed Oct 08 19:50:10 2014 +0200
+++ b/patches/jn_refactoring_custom_patches.st Fri Oct 10 16:28:37 2014 +0200
@@ -30,6 +30,7 @@
by searching along the inheritance chain of all of my classes."
^ #(
+ #'stx:goodies/refactoryBrowser/changes' "AddClassChange - extended"
#'stx:goodies/refactoryBrowser/helpers' "RBAbstractClass - extended"
#'stx:libbasic' "LibraryDefinition - superclass of jn_refactoring_custom_patches"
)
@@ -82,6 +83,8 @@
RBMethod category
RBMethod info
RBMethod method
+ AddClassChange primitiveExecute
+ RBMethod package
)
! !
--- a/patches/patches.rc Wed Oct 08 19:50:10 2014 +0200
+++ b/patches/patches.rc Fri Oct 10 16:28:37 2014 +0200
@@ -25,7 +25,7 @@
VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
VALUE "ProductName", "LibraryName\0"
VALUE "ProductVersion", "6.2.4.1378\0"
- VALUE "ProductDate", "Wed, 08 Oct 2014 17:38:45 GMT\0"
+ VALUE "ProductDate", "Fri, 10 Oct 2014 14:09:42 GMT\0"
END
END
--- a/refactoring_custom.rc Wed Oct 08 19:50:10 2014 +0200
+++ b/refactoring_custom.rc Fri Oct 10 16:28:37 2014 +0200
@@ -25,7 +25,7 @@
VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
VALUE "ProductName", "ProductName\0"
VALUE "ProductVersion", "6.2.4.1378\0"
- VALUE "ProductDate", "Wed, 08 Oct 2014 17:38:41 GMT\0"
+ VALUE "ProductDate", "Fri, 10 Oct 2014 14:09:39 GMT\0"
END
END