tools/JavaToolbox.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 05 Sep 2013 16:37:21 +0100
branchdevelopment
changeset 2708 648286432b9a
parent 2703 cec245f60b30
child 2711 a00302fe5083
permissions -rw-r--r--
More support fro browser (senders/implementors, field references)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2703
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'stx:libjava/tools' }"
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
Tools::Toolbox subclass:#JavaToolbox
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
	instanceVariableNames:''
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
	classVariableNames:''
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	poolDictionaries:''
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	category:'Languages-Java-Tools'
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
!
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!JavaToolbox class methodsFor:'documentation'!
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
documentation
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
"
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
    JavaToolbox contains various utility method used by other tools
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
    to perform language-specific tasks.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
    [author:]
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
        Jan Vrany <jan.vrany@fit.cvut.cz>
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
    [instance variables:]
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
    [class variables:]
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
    [see also:]
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
"
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
! !
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
!JavaToolbox methodsFor:'browsing'!
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
spawnBrowserOnAllImplementorsOf: selector class: class 
2708
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
    32
    | label |
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
    33
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
    34
    self ensureBrowser.
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
    35
    browser withWaitCursorDo:[
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
    36
        label := browser resources string:'Implementors of %1' with: (self displayStringForSelector: selector in: class name).
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
    37
        browser 
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
    38
            spawnMethodBrowserForSearch:[self searchForImplementorsOf: selector class: class]
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
    39
            sortBy:#class
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
    40
            in:#newBuffer
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
    41
            label:label.
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
    42
    ]
2703
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
    "Created: / 01-09-2013 / 17:59:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2708
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
    45
    "Modified: / 05-09-2013 / 12:44:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2703
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
!
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
spawnBrowserOnAllSendersOf: selector class: class 
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
    | label search |
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
    self ensureBrowser.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
    browser withWaitCursorDo:[
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
        label := browser resources string:'Senders of %1' with: (self displayStringForSelector: selector in: class name).
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
        search := selector upTo: $(.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
        browser 
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
            spawnMethodBrowserForSearch:[self searchForSendersOf: selector class: class]
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
            sortBy:#class
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
            in:#newBuffer
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
            label:label.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
        browser autoSearchSelector:search ignoreCase:false doMatch:false.     
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
    ]
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
    "Created: / 01-09-2013 / 17:59:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
! !
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
!JavaToolbox methodsFor:'menus'!
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
messagesMenuFor:actionSelector
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
    withMethods: methods
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
    withMethodSelectors:withMethodSelectors
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
    withSentSelectors: withSentSelectors
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
    withSelfSelectorsOnly: withSelfSelectorsOnly    
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
    | xlatedSelector menu builder sent |
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
    actionSelector == #spawnBrowserOnAllSendersOf: ifTrue:[
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
        xlatedSelector := #spawnBrowserOnAllSendersOf:class:
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
    ] ifFalse:[actionSelector == #spawnBrowserOnAllImplementorsOf: ifTrue:[
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
        xlatedSelector := #spawnBrowserOnAllImplementorsOf:class:
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
    ] ifFalse:[
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
        ^ Menu new
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
            addItem: ((MenuItem label: 'Not supported for Java') enabled: false);
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
            yourself.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
    ]].
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
    builder := [:class :selector |
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
        menu addItem:
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
            (MenuItem 
2708
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
    89
                label: (self displayStringForSelector: selector in: class name)
2703
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
                itemValue: [ self perform: xlatedSelector with: selector with: class ])
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
    ].
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
    menu := Menu new.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
    withMethodSelectors ifTrue:[
2708
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
    95
        methods do:[:m | builder value: m javaClass value: m selector ].
2703
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
    ].
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
    withSentSelectors ifTrue:[
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
        sent := Set new.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
        methods do:[:m | sent addAll: m analyzer methodsInvoked ].
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
        sent notEmptyOrNil ifTrue:[
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
            withMethodSelectors ifTrue:[
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
                menu addSeparator.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
            ].
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
            sent := sent asSortedCollection:[:a :b|a selector < b selector ].
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
            sent do:[:mref |
2708
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   106
                builder value: mref classRef javaClass value: mref selector
2703
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
            ]
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
        ].
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
    ].
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
    ^ menu.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
    "Created: / 01-09-2013 / 17:03:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2708
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   113
    "Modified: / 05-09-2013 / 13:38:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2703
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
! !
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
!JavaToolbox methodsFor:'private-presentation'!
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
displayStringForSelector: selector in: className
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
    | i name descriptor package localName |
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
    i := selector indexOf: $(.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
    name := selector copyTo: i - 1.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
    name = #'<clinit>' ifTrue:[
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
        ^ 'static {}'
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
    ].
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
    descriptor := selector copyFrom: i.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
    i := className lastIndexOf: $/.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
    package := className copyTo: i - 1.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
    name = '<init>' ifTrue:[
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
        localName := className copyFrom: i + 1.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
        ^ JavaMethod specTextFromSignature:descriptor in: package withName: localName.         
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
    ].
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
    ^ JavaMethod specTextFromSignature:descriptor in: package withName: name
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
    "Created: / 31-08-2013 / 23:31:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
! !
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
!JavaToolbox methodsFor:'searching'!
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
2708
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   143
searchForDeclarationOf: selector class: class in: classes
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   144
    "Return 'declaration' of method with given selector in given class.
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   145
     By 'declaration' we mean top-most definition of the method or
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   146
     definition of the method in one of class's interface. 
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   147
     Returns the class (ot interface) in which the method is
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   148
     first declared."
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   149
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   150
    | current declaring |
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   151
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   152
    current := declaring := class.
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   153
    [ current ~~ JavaObject ] whileTrue:[
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   154
        (current canUnderstand: selector) ifTrue:[
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   155
            declaring := current.
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   156
        ].
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   157
        current allInterfaces do:[:iface|
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   158
            (iface canUnderstand: selector) ifTrue:[
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   159
                ^ iface
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   160
            ].
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   161
        ].
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   162
        current := current superclass.
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   163
    ].
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   164
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   165
    ^ declaring
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   166
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   167
    "Created: / 05-09-2013 / 13:10:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   168
!
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   169
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   170
searchForImplementorsOf: selector class: class
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   171
    ^ self searchForImplementorsOf: selector class: class in: environment allClasses
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   172
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   173
    "Created: / 05-09-2013 / 12:44:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   174
!
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   175
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   176
searchForImplementorsOf: selector class: class in: classes
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   177
    | senders |
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   178
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   179
    senders := Set new.
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   180
    self searchForImplementorsOf: selector class: class in: classes whenFoundDo: [:mthd | senders add: mthd ].
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   181
    ^ senders
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   182
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   183
    "Created: / 05-09-2013 / 12:45:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   184
!
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   185
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   186
searchForImplementorsOf: selector class: class in: classes whenFoundDo: block 
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   187
    | searchSelector searchClass |
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   188
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   189
    searchSelector := selector.
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   190
    searchClass := self searchForDeclarationOf: selector class: class in: classes.
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   191
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   192
    classes do: [:cls | 
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   193
        cls isJavaClass ifTrue: [
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   194
            ((cls canUnderstand: searchSelector) and:[ JavaVM canCast: cls javaClass to: searchClass]) ifTrue:[
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   195
                block value: (cls compiledMethodAt: searchSelector)
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   196
            ]
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   197
        ]
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   198
    ].
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   199
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   200
    "Created: / 05-09-2013 / 12:45:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   201
!
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   202
2703
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
searchForSendersOf: selector class: class
2708
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   204
    ^ self searchForSendersOf: selector class: class in: environment allClasses
2703
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
    "Created: / 01-09-2013 / 10:07:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2708
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   207
    "Modified: / 05-09-2013 / 12:46:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2703
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
!
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
searchForSendersOf: selector class: class in: classes
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
    | senders |
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
    senders := Set new.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
    self searchForSendersOf: selector class: class in: classes whenFoundDo: [:mthd | senders add: mthd ].
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
    ^ senders
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
    "Created: / 01-09-2013 / 10:07:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
!
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
searchForSendersOf: selector class: class in: classes whenFoundDo: block 
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
    | searchSelector searchClass |
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
    searchSelector := selector.
2708
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   224
    searchClass := self searchForDeclarationOf: selector class: class in: classes.
2703
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
    classes do: [:cls | 
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
        cls isJavaClass ifTrue: [
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
            | matching |
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
            matching := Set new.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
            "/ Quickly scan constant pool without need of analyzing
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
            "/ each method...
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
            cls constantPool do:[:ref|
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
                ref isJavaMethodRef ifTrue:[
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
                    (ref selector == searchSelector and:[ JavaVM canCast: ref classRef javaClass to: searchClass]) ifTrue:[
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
                        matching add: ref.
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
                    ]
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
                ]
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
            ].
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
            matching notEmpty ifTrue:[
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
                cls methodDictionary keysAndValuesDo:[:selector :method|
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
                    (method analyzer methodsInvoked includesAny: matching) ifTrue:[
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
                        block value: method
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
                    ]
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
                ]
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
            ]
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
        ]
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
    ]
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
    "Created: / 01-09-2013 / 03:11:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2708
648286432b9a More support fro browser (senders/implementors, field references)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2703
diff changeset
   251
    "Modified: / 05-09-2013 / 13:10:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2703
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
! !
cec245f60b30 Added JavaToolbox.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253