SmallSense__ProtocolSelectDialog.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 25 Oct 2017 23:42:41 +0100
changeset 1058 6d4bf422a7dd
parent 983 7379ac82aade
child 1072 a44c741ee5ef
permissions -rw-r--r--
Fix subscript out of bounds error in Smalltalk inderences ...caused by missing size-check when analysing typed prefix.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
368
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
Copyright (C) 2013-2014 Jan Vrany
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
This library is free software; you can redistribute it and/or
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
modify it under the terms of the GNU Lesser General Public
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
License as published by the Free Software Foundation; either
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
version 2.1 of the License.
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
This library is distributed in the hope that it will be useful,
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
but WITHOUT ANY WARRANTY; without even the implied warranty of
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
Lesser General Public License for more details.
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
You should have received a copy of the GNU Lesser General Public
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
License along with this library; if not, write to the Free Software
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
"
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
"{ Package: 'stx:goodies/smallsense' }"
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
"{ NameSpace: SmallSense }"
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
881
9a58acda666b Introduced CategorySelectDialog for selecting class category
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 370
diff changeset
    23
CetegoryOrProtocolSelectDialog subclass:#ProtocolSelectDialog
983
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    24
	instanceVariableNames:'protocolsToHighlight'
368
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
	classVariableNames:''
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
	poolDictionaries:''
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
	category:'SmallSense-Core-Interface-Search'
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
!
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
!ProtocolSelectDialog class methodsFor:'documentation'!
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
copyright
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
"
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
Copyright (C) 2013-2014 Jan Vrany
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
This library is free software; you can redistribute it and/or
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
modify it under the terms of the GNU Lesser General Public
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
License as published by the Free Software Foundation; either
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
version 2.1 of the License.
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
This library is distributed in the hope that it will be useful,
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
but WITHOUT ANY WARRANTY; without even the implied warranty of
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
Lesser General Public License for more details.
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
You should have received a copy of the GNU Lesser General Public
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
License along with this library; if not, write to the Free Software
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
"
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
! !
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
983
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    53
!ProtocolSelectDialog methodsFor:'accessing'!
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    54
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    55
protocolsToHighlight
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    56
    ^ protocolsToHighlight
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    57
!
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    58
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    59
protocolsToHighlight:aCollection
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    60
    protocolsToHighlight := aCollection.
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    61
! !
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    62
368
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
!ProtocolSelectDialog methodsFor:'accessing-defaults'!
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
defaultTitle
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
    ^ (resources string: 'Select Protocol...')
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
    "Created: / 13-12-2014 / 12:57:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
! !
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
!ProtocolSelectDialog methodsFor:'searching'!
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
matchingObjectPOsForPattern:pattern relax: level
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
    | environment protocols |
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
    environment := self environment.
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
    protocols := Set new.
983
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    78
    "/ Convert highlighted protocols to a Set because
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    79
    "/ (i)  Set>>includes: is faster O(1)
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    80
    "/ (ii) the collection passed in by client might be an iterator so
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    81
    "/      doing so actually caches the value. We want this for
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    82
    "/      performance reasons.
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    83
    protocolsToHighlight notNil ifTrue:[
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    84
        protocolsToHighlight := protocolsToHighlight asSet.
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    85
    ].
368
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
    environment allMethodsDo:[ :mth | 
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
        | protocol |
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
        protocol := mth category.
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
        (protocol notNil 
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
            and: [ (filter isNil or:[filter value: protocol]) 
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
            and: [ pattern isNil or:[pattern match: protocol relax: level] ] ]) ifTrue:[
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
                protocols add: mth category 
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
            ] 
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
    ].
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
    protocols := protocols asArray.
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
    protocols sort: [ :a :b | a < b ].
983
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
    99
    ^ protocols collect:[ :each | 
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
   100
        | label |
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
   101
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
   102
        label := each.
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
   103
        (protocolsToHighlight notNil and:[protocolsToHighlight includes: each]) ifTrue:[  
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
   104
            label := label asText allBold.
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
   105
        ].
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
   106
        PluggablePO new label: label; subject: each 
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
   107
    ].
368
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
    "Created: / 13-12-2014 / 08:42:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
983
7379ac82aade Highlight protocols already defined in a class or superclasses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 881
diff changeset
   110
    "Modified: / 17-08-2016 / 15:56:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
368
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
! !
a94d9afd766b Introduced a ProtocolSelectDialog...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112