extensions.st
author Jakub Nesveda <jakubnesveda@seznam.cz>
Sun, 05 Oct 2014 14:15:21 +0200
changeset 685 bc7798e413f6
parent 684 07bbc12ffdd6
parent 682 4496a137b756
child 686 12e570ea6c6e
permissions -rw-r--r--
Merged in janvrany/refactoring_custom (pull request #2)

"{ Package: 'jn:refactoring_custom' }"!

!RBAbstractClass methodsFor:'accessing'!

allClassVarNames
    | variableNames |

    variableNames := self allClassVariableNames.

    variableNames isNil ifTrue: [ 
        ^ #()
    ].

    ^ variableNames

    "Created: / 01-06-2014 / 23:40:50 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
    "Modified: / 20-09-2014 / 19:26:24 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !

!RBAbstractClass methodsFor:'enumerating'!

allSuperclassesDo: aBlock
    | superclass |

    superclass := self superclass.

    superclass isNil ifFalse: [ 
        superclass withAllSuperclassesDo: aBlock
    ].

    "Created: / 21-04-2014 / 19:15:49 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
    "Modified: / 04-10-2014 / 22:35:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !

!RBAbstractClass methodsFor:'accessing'!

instVarNames
    "Returns instance variable names - STX compatibility"

    ^ self instanceVariableNames

    "Created: / 29-05-2014 / 23:46:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
    "Modified: / 24-09-2014 / 20:36:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
    "Modified (comment): / 30-09-2014 / 19:30:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !

!RBAbstractClass methodsFor:'accessing'!

instVarNames: aCollectionOfStrings 
    "Set instance variable names - STX compatibility"

    self instanceVariableNames: aCollectionOfStrings

    "Created: / 30-09-2014 / 19:30:58 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !

!RBAbstractClass methodsFor:'accessing'!

methodDictionary
    "Stub method, returns real class MethodDictionary, although full MethodDictionary
    implementation would be better here."

    | methodDictionary |

    methodDictionary := MethodDictionary new.

    self realClass isNil ifFalse: [
        self realClass methodDictionary do: [ :method | 
            methodDictionary := methodDictionary 
                at: method selector asSymbol 
                putOrAppend: (RBMethod 
                    for: self 
                    fromMethod: method 
                    andSelector: method selector asSymbol)
        ].
    ].

    removedMethods isNil ifFalse: [
        removedMethods do: [ :removedMethod | 
            | method |

            method := methodDictionary at: removedMethod selector asSymbol ifAbsent: [ nil ].  
            method isNil ifFalse: [
                methodDictionary := methodDictionary removeKeyAndCompress: removedMethod selector asSymbol.
            ]
        ]
    ].

    newMethods isNil ifFalse: [
        newMethods do: [ :newMethod |
            methodDictionary := methodDictionary at: newMethod selector asSymbol putOrAppend: newMethod.
        ]
    ].

    ^ methodDictionary

    "Created: / 28-09-2014 / 22:57:28 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
    "Modified: / 02-10-2014 / 21:11:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !

!RBAbstractClass methodsFor:'accessing'!

nameWithoutPrefix
    "see ClassDescription >> nameWithoutPrefix"

    ^ (Smalltalk at: #Class) nameWithoutPrefix: name

    "Created: / 03-08-2014 / 23:29:11 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
    "Modified: / 20-09-2014 / 19:21:11 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !

!RBAbstractClass methodsFor:'accessing'!

superclassName: aName
    "Assign superclass by its name"

    self superclass: (self model classNamed: aName asSymbol)

    "Created: / 28-09-2014 / 22:53:46 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !

!RBAbstractClass methodsFor:'accessing'!

theMetaclass
    "alias for theMetaClass - STX compatibility"

    ^ self theMetaClass.

    "Created: / 26-09-2014 / 16:26:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !

!RBAbstractClass methodsFor:'accessing'!

theNonMetaclass
    "alias for theNonMetaClass - STX compatibility"

    ^ self theNonMetaClass

    "Created: / 26-09-2014 / 16:36:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !

!RBAbstractClass methodsFor:'enumerating'!

withAllSuperclassesDo:aBlock
    "evaluate aBlock for the class and all of its superclasses"

    aBlock value:self.
    self allSuperclassesDo:aBlock

    "Created: / 29-09-2014 / 22:48:09 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !

!RBClass methodsFor:'accessing'!

compile
    "Updates class definition in the namespace along with code changes"

    model defineClass: self definitionString.

    "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>"
! !

!RBClass methodsFor:'accessing'!

theNonMetaClass
    "alias for theNonMetaclass - squeak compatibility"

    ^ self theNonMetaclass

    "Created: / 26-09-2014 / 16:50:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !

!RBMetaclass methodsFor:'accessing'!

theMetaClass
    "alias for metaclass - sqeak compatibility"

    ^ self metaclass.

    "Created: / 26-09-2014 / 21:32:09 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !

!RBMetaclass methodsFor:'accessing'!

theMetaclass
    "alias for metaclass - STX compatibility"

    ^ self metaclass.

    "Created: / 26-09-2014 / 21:28:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !

!RBMethod methodsFor:'queries'!

sends:selectorSymbol1 or:selectorSymbol2
    "Returns true, if this method contains a message-send
     to either selectorSymbol1 or selectorSymbol2.
     ( non-optimized version of Message>>sends:or: )"

    ^ (self sendsSelector: selectorSymbol1) or: [ self sendsSelector: selectorSymbol2 ]

    "Created: / 04-10-2014 / 00:01:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !

!Tools::NewSystemBrowser methodsFor:'menus extensions-custom refactorings'!

classMenuExtensionCustomGenerators:aMenu 
    <menuextension: #classMenu>

    | item  index  perspective  context |

    item := MenuItem label:(resources string:'Generate - Custom').
    perspective := CustomPerspective classPerspective.
    context := CustomBrowserContext 
                    perspective:perspective
                    state:self navigationState.
    item submenuChannel:[ CustomMenuBuilder buildMenuForContext:context ].
    index := aMenu indexOfMenuItemForWhich:[:each | each label = 'Generate' ].
    index ~~ 0 ifTrue:[
        aMenu addItem:item beforeIndex:index + 1.
    ] ifFalse:[
        aMenu addItem:item.
    ].

    "Created: / 26-08-2014 / 10:21:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!Tools::NewSystemBrowser methodsFor:'menus extensions-custom refactorings'!

codeViewMenuExtensionCustomRefactorings:aMenu 
    <menuextension: #codeViewMenu>

    | item  index  perspective  context |

    item := MenuItem label:(resources string:'Refactor - Custom').
    perspective := CustomPerspective methodPerspective.
    context := CustomBrowserContext 
                    perspective:perspective
                    state:self navigationState.
    item submenuChannel:[ CustomMenuBuilder buildMenuForContext:context filter: [:each | each isCustomRefactoring ] ].
    index := aMenu indexOfMenuItemForWhich:[:each | each label = 'Refactor' ].
    index ~~ 0 ifTrue:[
        aMenu addItem:item beforeIndex:index + 1.
    ] ifFalse:[
        aMenu addItem:item.
    ].

    "Created: / 26-08-2014 / 22:44:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!Tools::NewSystemBrowser methodsFor:'menus extensions-custom refactorings'!

selectorMenuExtensionCustomGenerators:aMenu 
    <menuextension: #selectorMenuCompareGenerateDebugSlice>

    | item  index  perspective  context |

    item := MenuItem label:(resources string:'Generate - Custom').
    perspective := CustomPerspective methodPerspective.
    context := CustomBrowserContext 
                    perspective:perspective
                    state:self navigationState.
    item submenuChannel:[ CustomMenuBuilder buildMenuForContext:context filter: [:each | each isCustomCodeGenerator ] ].
    index := aMenu indexOfMenuItemForWhich:[:each | each label = 'Generate' ].
    index ~~ 0 ifTrue:[
        aMenu addItem:item beforeIndex:index + 1.
    ] ifFalse:[
        aMenu addItem:item.
    ].

    "Created: / 26-08-2014 / 10:18:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 05-09-2014 / 11:28:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!Tools::NewSystemBrowser methodsFor:'menus extensions-custom refactorings'!

selectorMenuExtensionCustomRefactorings:aMenu 
    <menuextension: #selectorMenuCompareGenerateDebugSlice>

    | item  index  perspective  context |

    item := MenuItem label:(resources string:'Refactor - Custom').
    perspective := CustomPerspective methodPerspective.
    context := CustomBrowserContext 
                    perspective:perspective
                    state:self navigationState.
    item submenuChannel:[ CustomMenuBuilder buildMenuForContext:context filter: [:each | each isCustomRefactoring ] ].
    index := aMenu indexOfMenuItemForWhich:[:each | each label = 'Refactor' ].
    index ~~ 0 ifTrue:[
        aMenu addItem:item beforeIndex:index + 1.
    ] ifFalse:[
        aMenu addItem:item.
    ].

    "Created: / 24-08-2014 / 15:23:49 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
    "Modified: / 05-09-2014 / 11:28:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!Tools::NewSystemBrowser methodsFor:'menus extensions-custom refactorings'!

variablesMenuExtensionCustomGenerators:aMenu 
    <menuextension: #variablesMenu>

    | item  index  perspective  context |

    item := MenuItem label:(resources string:'Generate - Custom').
    perspective := CustomPerspective instanceVariablePerspective.
    context := CustomBrowserContext 
                    perspective:perspective
                    state:self navigationState.
    item submenuChannel:[ CustomMenuBuilder buildMenuForContext:context ].
    index := aMenu indexOfMenuItemForWhich:[:each | each label = 'Generate' ].
    index ~~ 0 ifTrue:[
        aMenu addItem:item beforeIndex:index + 1.
    ] ifFalse:[
        aMenu addItem:item.
    ].

    "Created: / 26-08-2014 / 10:21:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!jn_refactoring_custom class methodsFor:'documentation'!

extensionsVersion_HG

    ^ '$Changeset: <not expanded> $'
! !