CustomChangeNotificationSetterMethodsCodeGenerator.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sun, 24 Aug 2014 01:49:18 +0100
changeset 635 9edd6a278835
parent 628 6f639016753b
parent 634 d77d9a7561be
child 656 a95284467938
permissions -rw-r--r--
Merged 6f639016753b and d77d9a7561be
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
597
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
     1
"{ Package: 'jn:refactoring_custom' }"
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
     2
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
     3
CustomAccessMethodsCodeGenerator subclass:#CustomChangeNotificationSetterMethodsCodeGenerator
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
     4
	instanceVariableNames:''
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
     5
	classVariableNames:''
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
     6
	poolDictionaries:''
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
     7
	category:'Interface-Refactoring-Custom'
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
     8
!
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
     9
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    10
!CustomChangeNotificationSetterMethodsCodeGenerator class methodsFor:'accessing-presentation'!
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    11
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    12
description
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    13
    "Returns more detailed description of the receiver"
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    14
    
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    15
    ^ 'Setter methods with Change Notification for selected instance variables'
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    16
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    17
    "Modified: / 06-07-2014 / 13:48:27 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    18
!
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    19
628
6f639016753b Sort generators or refactorings by their group.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 597
diff changeset
    20
group
6f639016753b Sort generators or refactorings by their group.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 597
diff changeset
    21
    "Returns a collection strings describing a group to which
6f639016753b Sort generators or refactorings by their group.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 597
diff changeset
    22
     receiver belongs. A groups may be nested hence the array of
6f639016753b Sort generators or refactorings by their group.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 597
diff changeset
    23
     strings. For example for subgroup 'Accessors' in group 'Generators'
6f639016753b Sort generators or refactorings by their group.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 597
diff changeset
    24
     this method should return #('Generators' 'Accessors')."
6f639016753b Sort generators or refactorings by their group.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 597
diff changeset
    25
6f639016753b Sort generators or refactorings by their group.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 597
diff changeset
    26
    "/ By default return an empty array which means the item will appear
6f639016753b Sort generators or refactorings by their group.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 597
diff changeset
    27
    "/ in top-level group.
6f639016753b Sort generators or refactorings by their group.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 597
diff changeset
    28
    ^ #('Accessors' 'Setters')
6f639016753b Sort generators or refactorings by their group.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 597
diff changeset
    29
6f639016753b Sort generators or refactorings by their group.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 597
diff changeset
    30
    "Created: / 22-08-2014 / 18:54:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6f639016753b Sort generators or refactorings by their group.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 597
diff changeset
    31
!
6f639016753b Sort generators or refactorings by their group.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 597
diff changeset
    32
597
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    33
label
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    34
    "Returns show label describing the receiver. This label
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    35
     is used in UI as menu item/tree item label."
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    36
    
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    37
    ^ 'Setter Method(s) with Change Notification'
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    38
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    39
    "Modified: / 06-07-2014 / 13:47:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    40
! !
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    41
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    42
!CustomChangeNotificationSetterMethodsCodeGenerator methodsFor:'code generation'!
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    43
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    44
sourceForClass: aClass variableName: aName
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    45
    "Returns setter method with change notification for given class and variable name"
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    46
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    47
    | methodName comment methodBuilder argName |
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    48
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    49
    methodName := self methodNameFor: aName.
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    50
    argName := self argNameForMethodName: methodName.  
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    51
    comment := ''.
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    52
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    53
    userPreferences generateCommentsForSetters ifTrue:[
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    54
        | varType |
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    55
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    56
        varType := self varTypeOf: aName class: aClass. 
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    57
        comment := '"set the value of the %1 variable ''%2'' and send a change notification (automatically generated)"'.
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    58
        comment := comment bindWith: varType with: aName.
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    59
    ].
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    60
634
d77d9a7561be move refactoryBuilder and codeBuilder to CustomCodeGeneratorOrRefactoring
Jakub Nesveda <jakubnesveda@seznam.cz>
parents: 597
diff changeset
    61
    methodBuilder := codeBuilder methodBuilder.
597
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    62
    methodBuilder
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    63
        source: '`@methodName
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    64
            `"comment
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    65
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    66
            (`variableName ~~ `argName) ifTrue:[
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    67
                `variableName := `argName.
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    68
                self changed: `#variableName.
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    69
            ].';
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    70
        replace: '`@methodName' with: (methodName, ': ', argName) asSymbol;
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    71
        replace: '`argName' with: argName asString;
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    72
        replace: '`variableName' with: aName asString;
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    73
        replace: '`#variableName' with: ($#, aName asSymbol);
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    74
        replace: '`"comment' with: comment.
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    75
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    76
    ^ methodBuilder buildedSource
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    77
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    78
    "Modified: / 06-07-2014 / 14:03:36 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    79
! !
97bf0099c6b0 add setter generators with change notification
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    80