SmallSense__SmalltalkCompletionEngine.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 25 Oct 2017 23:42:41 +0100
changeset 1058 6d4bf422a7dd
parent 883 9c644e7c1d97
child 1060 af3a048f9618
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:
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     1
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     2
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
374
e65bd2bf892a Updated copyright notice.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 269
diff changeset
     3
Copyright (C) 2013-2015 Jan Vrany
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     4
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     5
This library is free software; you can redistribute it and/or
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     6
modify it under the terms of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     7
License as published by the Free Software Foundation; either
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     8
version 2.1 of the License. 
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     9
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    10
This library is distributed in the hope that it will be useful,
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    11
but WITHOUT ANY WARRANTY; without even the implied warranty of
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    13
Lesser General Public License for more details.
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    14
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    15
You should have received a copy of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    16
License along with this library; if not, write to the Free Software
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    17
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    18
"
249
8bc64027b189 Package renamed to stx:goodies/smallsense
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 236
diff changeset
    19
"{ Package: 'stx:goodies/smallsense' }"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
"{ NameSpace: SmallSense }"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
117
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
    23
CompletionEngine subclass:#SmalltalkCompletionEngine
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
    24
	instanceVariableNames:'collector'
158
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    25
	classVariableNames:'Debug'
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
	poolDictionaries:''
117
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
    27
	category:'SmallSense-Smalltalk'
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    30
!SmalltalkCompletionEngine class methodsFor:'documentation'!
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    31
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    32
copyright
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    33
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    34
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
374
e65bd2bf892a Updated copyright notice.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 269
diff changeset
    35
Copyright (C) 2013-2015 Jan Vrany
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    36
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    37
This library is free software; you can redistribute it and/or
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    38
modify it under the terms of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    39
License as published by the Free Software Foundation; either
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    40
version 2.1 of the License. 
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    41
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    42
This library is distributed in the hope that it will be useful,
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    43
but WITHOUT ANY WARRANTY; without even the implied warranty of
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    44
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    45
Lesser General Public License for more details.
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    46
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    47
You should have received a copy of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    48
License along with this library; if not, write to the Free Software
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    49
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    50
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    51
! !
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
158
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    53
!SmalltalkCompletionEngine class methodsFor:'initialization'!
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    54
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    55
initialize
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    56
    "Invoked at system start or when the class is dynamically loaded."
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    57
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    58
    "/ please change as required (and remove this comment)
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    59
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    60
    Debug := false.
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    61
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    62
    "Modified: / 22-01-2014 / 09:08:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    63
! !
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    64
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    65
!SmalltalkCompletionEngine class methodsFor:'accessing'!
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    66
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    67
debug
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    68
    ^ Debug
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    69
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    70
    "Created: / 22-01-2014 / 09:08:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    71
!
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    72
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    73
debug: aBoolean
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    74
    Debug := aBoolean .
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    75
    "
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
    76
    self debug: true.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
    77
    self debug: false.
158
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    78
    "
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    79
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    80
    "Created: / 22-01-2014 / 09:08:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
    81
    "Modified (comment): / 22-01-2014 / 19:42:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
158
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    82
! !
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    83
117
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
    84
!SmalltalkCompletionEngine class methodsFor:'utilities'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
    86
resultSetFor: mode source: source class: class line: line column: col
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
    | inferencer tree |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
    mode == #method ifTrue:[
69
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
    90
        inferencer := SmalltalkInferencer forClass: class methodSource: source asString.
78
16cd76c8d70c Fix in SmallSense::Recognizer: use customized SmalltalkParser to parse smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 73
diff changeset
    91
        inferencer parserClass: SmalltalkParser.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
        inferencer process.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
    ] ifFalse:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
        self breakPoint: #jv.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
        ^nil.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
        inferencer := Parser for: (source asString readStream).
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
        "JV@2011-06-13: HACK, use polymorphism"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
        tree := inferencer
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
    99
            parseExpressionWithSelf:nil
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   100
            notifying:nil
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   101
            ignoreErrors:false
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   102
            ignoreWarnings:false
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
            inNameSpace:nil.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
        inferencer tree: tree.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
    ^ self new
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
        completeAtLine:line
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
        column:col
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
        collector:inferencer
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
    "Modified: / 07-04-2011 / 22:55:58 / Jakub <zelenja7@fel.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
    "Created: / 26-11-2011 / 17:53:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
78
16cd76c8d70c Fix in SmallSense::Recognizer: use customized SmalltalkParser to parse smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 73
diff changeset
   113
    "Modified: / 02-09-2013 / 14:43:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
117
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   114
    "Modified (format): / 02-10-2013 / 13:09:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   117
!SmalltalkCompletionEngine methodsFor:'completion-helpers'!
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   118
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   119
javaClassesDo: aBlock
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   120
    | class loader loaders |
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   121
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   122
    class := collector klass.
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   123
    loaders := Set new.
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   124
    loader := (class notNil and:[class isJavaClass]) ifTrue:[class classLoader] ifFalse:[JavaVM systemClassLoader].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   125
    [ loader notNil ] whileTrue:[
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   126
        loaders add: loader.
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   127
        loader := loader instVarNamed: #parent.
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   128
    ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   129
    loaders add: nil.
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   130
236
228595fdb79d Fix in SmalltalkCompletionEngine (senf allClassesDo: instead classesDo: to JavaVM registry)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 235
diff changeset
   131
    JavaVM registry  allClassesDo:[:cls|
269
8aaf6403a01d Fixed Smalltalk completion: do not offer Java anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 258
diff changeset
   132
        (cls isAnonymous not and:[(loaders includes: cls classLoader)]) ifTrue:[
8aaf6403a01d Fixed Smalltalk completion: do not offer Java anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 258
diff changeset
   133
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   134
            aBlock value: cls.
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   135
        ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   136
    ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   137
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   138
    "Created: / 04-10-2013 / 13:10:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
269
8aaf6403a01d Fixed Smalltalk completion: do not offer Java anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 258
diff changeset
   139
    "Modified: / 07-08-2014 / 13:03:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   140
! !
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   141
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   142
!SmalltalkCompletionEngine methodsFor:'completion-individual'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
addClassVariables
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
    | class |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
    class := collector klass theNonMetaclass.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
    class classVarNames do:[:nm|
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   149
        result add:(VariablePO classVariable: nm in: class).
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
    "Created: / 24-07-2013 / 17:00:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
    "Modified: / 30-07-2013 / 23:32:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
addGlobalsStartingWith: prefix
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
258
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   158
    | class namespace environment |
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
    class := collector klass.
258
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   160
    namespace := class nameSpace.
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   161
    environment := context environment.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
    "nameSpace may return private class, sigh"
258
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   163
    [ namespace isNameSpace ] whileFalse:[ namespace := namespace nameSpace ].
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   164
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   165
    environment keysDo:[:name |
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   166
            | value |
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   167
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   168
            (self isGlobalKeyForClassVariable: name) ifFalse:[ 
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   169
                value := environment at: name.
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   170
                ((name startsWith: prefix) or:[(value isBehavior and:[(value nameWithoutPrefix startsWith: prefix) or:[value nameWithoutNameSpacePrefix startsWith: prefix]])]) ifTrue:[
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   171
                    (value notNil and:[value isBehavior]) ifTrue:[ 
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   172
                        "/ Check for aliases...
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   173
                        | clsnm |
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   174
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   175
                        clsnm := value name.
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   176
                        clsnm = name ifTrue:[ 
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   177
                            result add: (PO forClass: value)
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   178
                        ] ifFalse:[ 
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   179
                            result add: (PO forGlobalNamed: name)  
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   180
                        ].
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   181
                    ] ifFalse:[ 
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   182
                        result add: (PO forGlobalNamed: name)  
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   183
                    ].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
                ]
146
dfb2ae961d9c Fix for completing globals (like Transcript or OperatingSystem)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 136
diff changeset
   185
            ].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
        ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
    "Created: / 26-11-2011 / 17:29:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
258
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   189
    "Modified: / 24-07-2014 / 17:51:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   192
addJavaClassesInPackage: prefix
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   193
    prefix isEmptyOrNil ifTrue:[
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   194
        self javaClassesDo: [:cls |
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   195
            result add: (ClassPO new klass: cls; showPrefix: true; yourself)
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   196
        ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   197
    ] ifFalse:[
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   198
        self javaClassesDo: [:cls |
133
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   199
            (cls binaryName startsWith: prefix) ifTrue:[
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   200
                result add: (ClassPO new klass: cls; showPrefix: true; yourself)
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   201
            ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   202
        ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   203
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   204
    ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   205
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   206
    "Created: / 04-10-2013 / 13:09:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
133
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   207
    "Modified: / 20-10-2013 / 02:42:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   208
!
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   209
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   210
addMethodsForType: type
201
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   211
    ^ self addMethodsForType: type stripOff: nil
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   212
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   213
    "Created: / 26-11-2011 / 17:03:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   214
    "Modified: / 09-05-2014 / 12:51:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   215
!
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   216
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   217
addMethodsForType: type prefix: prefix stripOff: stripprefix
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   218
201
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   219
    type isUnknownType ifFalse:[
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   220
        self addMethodsForType:type stripOff: stripprefix.
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   221
201
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   222
        "/ If the type is union of more than 6 types, then
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   223
        "/ assume that the inferencer is likely wrong.
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   224
        "/ then, if the prefix is at least 3 chars,
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   225
        "/ also add methods with that prefix.
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   226
201
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   227
        ((type classes size > 6) and:[ prefix size > 2 ]) ifTrue:[
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   228
            self addMethodsStartingWith:prefix stripOff: stripprefix
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   229
        ].
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   230
    ] ifTrue:[
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   231
        self addMethodsStartingWith:prefix stripOff: stripprefix
201
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   232
    ].
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   233
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   234
    "Created: / 08-04-2014 / 21:04:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   235
    "Modified: / 09-04-2014 / 09:31:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   236
!
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   237
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   238
addMethodsForType: type stripOff: stripprefix
201
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   239
    | classes seen selector2classesMap |
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   240
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   241
    selector2classesMap := Dictionary new.
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   242
    classes := type classes.
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   243
    "/ Hack for Boolean: ifTrue:iFalse: etc are not defined
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   244
    "/ in Boolean ?!!?
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   245
    (classes size == 1 and:[classes anElement == Boolean ]) ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   246
        classes := Array with: True with: False.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   247
    ].
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   248
    classes size == 1 ifTrue:[
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   249
        classes anElement == JavaPackage class ifTrue:[
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   250
            "/ Special hack for JAVA: for pattern `JAVA java lang reflect`
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   251
            "/ complete all Java classes in that package
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   252
            | node |
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   253
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   254
            node := result context node.
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   255
            node isUnaryMessage ifTrue:[
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   256
                | package |
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   257
                "/ Compute package prefix...
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   258
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   259
                package := node selector.
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   260
                node := node receiver.
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   261
                [ node isUnaryMessage ] whileTrue:[
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   262
                    package := node selector , '/' , package.
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   263
                    node := node receiver.
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   264
                ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   265
                self addJavaClassesInPackage: package.
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   266
                ^ self.
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   267
            ]
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   268
        ]
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   269
    ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   270
131
ea84eea5a3c4 Fix in code completion - do not add same method multiple times into completion list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 128
diff changeset
   271
    seen := Set new.
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   272
    classes do: [:each |
201
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   273
        | class selector2classMap |
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   275
        class := each.
201
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   276
        selector2classMap := Dictionary new.
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   277
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   278
        "/ Now, special care for Java classes, sigh...
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   279
        (class isMetaclass and:[class theNonMetaclass isJavaClass]) ifTrue:[
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   280
            seen add: class.
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   281
            class theNonMetaclass selectorsAndMethodsDo: [:selector :met |
201
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   282
                met isStatic ifTrue:[
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   283
                    result add: (PO forClass: met mclass selector: selector)
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   284
                ].
201
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   285
            ].
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   286
        ] ifFalse:[
201
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   287
            [ class notNil and:[(seen includes: class) not]] whileTrue: [
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   288
                class selectorsAndMethodsDo: [:selector :met |
136
a1c1b160f2ca Fix in method completion: do not offer synthetic methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 133
diff changeset
   289
                    met isSynthetic ifFalse:[
201
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   290
                        (stripprefix isNil or:[ selector size > stripprefix size and:[selector startsWith: stripprefix]]) ifTrue:[
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   291
                            selector2classMap at: selector put: class.
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   292
                        ].
136
a1c1b160f2ca Fix in method completion: do not offer synthetic methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 133
diff changeset
   293
                    ]
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   294
                ].
201
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   295
                class := class superclass.
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   296
            ]
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   297
        ].
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   298
        selector2classMap keysAndValuesDo:[:selector :class |
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   299
            | classes |
201
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   300
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   301
            classes := selector2classesMap at: selector ifAbsentPut: [ Set new ].
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   302
            classes add: class.
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   303
        ]
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   304
    ].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   305
201
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   306
    selector2classesMap keysAndValuesDo: [:selector :classes|
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   307
        result add:(MethodPO forClasses: classes selector: selector prefix: stripprefix)
201
9a0df215823a Fix in (Smalltalk)CompletionEngine - do not add method twice to completion result.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   308
    ]
192
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   309
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   310
    "Created: / 08-04-2014 / 21:23:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
229
c82a22d2153d PO refactoring: get rid of subject instvar.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 201
diff changeset
   311
    "Modified: / 20-05-2014 / 10:47:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
192
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   312
!
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   313
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   314
addPools
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
    | class |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   316
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   317
    class := collector klass theNonMetaclass.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   318
    class theNonMetaclass sharedPools do:[:pool|
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   319
        pool theNonMetaclass classVarNames do:[:nm|
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   320
            result add:(VariablePO classVariable: nm in: pool).
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   321
        ]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   322
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   323
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   324
    "Created: / 24-07-2013 / 16:59:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   325
    "Modified: / 30-07-2013 / 23:32:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   326
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   327
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   328
addVariablesFor: node
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   329
93
f50bd9fded52 Fix in Recognizer - set correct class for instance-variable POs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   330
    | n klass |
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   331
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   332
    "Add Instance variables"
93
f50bd9fded52 Fix in Recognizer - set correct class for instance-variable POs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   333
    klass := collector klass.
f50bd9fded52 Fix in Recognizer - set correct class for instance-variable POs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   334
    [ klass notNil ] whileTrue:[
153
b04d591c8788 Added relevance value to completion item. Pre-select the most relevant item in complection view.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 146
diff changeset
   335
        | usedInstVars |
b04d591c8788 Added relevance value to completion item. Pre-select the most relevant item in complection view.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 146
diff changeset
   336
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   337
        usedInstVars := collector parser usedInstVars.
153
b04d591c8788 Added relevance value to completion item. Pre-select the most relevant item in complection view.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 146
diff changeset
   338
        klass instVarNames do:[:nm |
b04d591c8788 Added relevance value to completion item. Pre-select the most relevant item in complection view.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 146
diff changeset
   339
            | po |
b04d591c8788 Added relevance value to completion item. Pre-select the most relevant item in complection view.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 146
diff changeset
   340
882
e1e21ed824b5 Fix in SmalltalkCompletion: do not offer non-object instvars
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   341
            "/ Check for non-object instvars - they cannot be referenced
e1e21ed824b5 Fix in SmalltalkCompletion: do not offer non-object instvars
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   342
            "/ directly!!
e1e21ed824b5 Fix in SmalltalkCompletion: do not offer non-object instvars
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   343
            (nm last == $*) ifFalse:[
e1e21ed824b5 Fix in SmalltalkCompletion: do not offer non-object instvars
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   344
                po := VariablePO instanceVariable: nm in: klass.
e1e21ed824b5 Fix in SmalltalkCompletion: do not offer non-object instvars
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   345
                "/ Raise relevance if the instvar is already used in the code...
e1e21ed824b5 Fix in SmalltalkCompletion: do not offer non-object instvars
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   346
                (usedInstVars includes: nm) ifTrue:[
e1e21ed824b5 Fix in SmalltalkCompletion: do not offer non-object instvars
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   347
                    po relevance: (po relevance + 10).
e1e21ed824b5 Fix in SmalltalkCompletion: do not offer non-object instvars
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   348
                ].
e1e21ed824b5 Fix in SmalltalkCompletion: do not offer non-object instvars
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   349
e1e21ed824b5 Fix in SmalltalkCompletion: do not offer non-object instvars
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   350
                result add: po.
153
b04d591c8788 Added relevance value to completion item. Pre-select the most relevant item in complection view.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 146
diff changeset
   351
            ].
b04d591c8788 Added relevance value to completion item. Pre-select the most relevant item in complection view.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 146
diff changeset
   352
        ].
158
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
   353
        "/ When on class side (i.e., in class method), do not complete
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
   354
        "/ instance variables of Class / ClassDescription / Behaviour
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
   355
        "/ as STC won't compile such code.
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   356
        klass := (klass isMetaclass and:[klass superclass == Class])
158
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
   357
                    ifTrue:[nil]
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
   358
                    ifFalse:[klass superclass].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   359
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   360
    "Add pseudo variables"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   361
    #(self super here thisContext) do:[:nm|
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   362
        result add: (VariablePO new name: nm).
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   363
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   364
    "Add arguments"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   365
    collector parser methodArgs ? #() do:[:nm|
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   366
        result add: (VariablePO argument: nm).
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   367
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   368
    "Add temporaries"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   369
    collector parser methodVars ? #() do:[:nm|
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   370
        result add: (VariablePO variable: nm).
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   371
    ].
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   372
    "Add literals"
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   373
    #(#true #false #nil ) do:[:nm|
229
c82a22d2153d PO refactoring: get rid of subject instvar.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 201
diff changeset
   374
        result add: (SnippetPO new value: nm).
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   375
    ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   376
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   377
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   378
    n := node.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   379
    [ n notNil ] whileTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   380
        n isBlockNode ifTrue:[
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   381
            n arguments ? #() do:[:barg|result add: (VariablePO variable: barg name)].
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   382
            n variables ? #() do:[:bvar|result add: (VariablePO variable: bvar name)].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   383
        ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   384
        n := n parent.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   385
    ]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   386
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   387
    "Created: / 31-07-2013 / 00:32:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
882
e1e21ed824b5 Fix in SmalltalkCompletion: do not offer non-object instvars
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   388
    "Modified: / 08-08-2015 / 02:52:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   389
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   390
117
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   391
!SmalltalkCompletionEngine methodsFor:'completion-private'!
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   392
157
c71d2e62ece2 Refactored API of CompletionEngine - caller now must set up an context pass it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   393
complete
c71d2e62ece2 Refactored API of CompletionEngine - caller now must set up an context pass it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   394
    "Compute completion for `codeView`, taking all the information
c71d2e62ece2 Refactored API of CompletionEngine - caller now must set up an context pass it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   395
     from it. Returns a CompletionResult with computed completions"
c71d2e62ece2 Refactored API of CompletionEngine - caller now must set up an context pass it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   396
c71d2e62ece2 Refactored API of CompletionEngine - caller now must set up an context pass it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   397
    | class |
c71d2e62ece2 Refactored API of CompletionEngine - caller now must set up an context pass it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   398
395
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 381
diff changeset
   399
    textView := context textView.
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 381
diff changeset
   400
    class := textView isCodeView2
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 381
diff changeset
   401
                ifTrue: [ textView klass ]
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 381
diff changeset
   402
                ifFalse: [ textView editedClass ].
157
c71d2e62ece2 Refactored API of CompletionEngine - caller now must set up an context pass it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   403
    class isNil ifTrue:[
c71d2e62ece2 Refactored API of CompletionEngine - caller now must set up an context pass it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   404
        class := UndefinedObject.
c71d2e62ece2 Refactored API of CompletionEngine - caller now must set up an context pass it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   405
    ].
395
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 381
diff changeset
   406
    ^ self complete: textView codeAspect source: textView contents string class: class line: textView cursorLine column: textView cursorCol
157
c71d2e62ece2 Refactored API of CompletionEngine - caller now must set up an context pass it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   407
c71d2e62ece2 Refactored API of CompletionEngine - caller now must set up an context pass it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   408
    "Created: / 02-10-2013 / 13:32:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
395
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 381
diff changeset
   409
    "Modified: / 11-02-2015 / 23:53:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
157
c71d2e62ece2 Refactored API of CompletionEngine - caller now must set up an context pass it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   410
!
c71d2e62ece2 Refactored API of CompletionEngine - caller now must set up an context pass it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   411
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   412
complete: mode source: source class: class line: lineNrArg column: colNrArg
124
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   413
    | inferencer lineNr colNr |
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   414
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   415
    mode == #method ifTrue:[
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   416
        lineNr := lineNrArg.
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   417
        colNr := colNrArg.
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   418
        inferencer := SmalltalkInferencer forClass: class methodSource: source asString.
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   419
    ] ifFalse:[
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   420
        | line |
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   421
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   422
        lineNr := 1.
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   423
        colNr := colNrArg.
395
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 381
diff changeset
   424
        line := textView list at: lineNrArg ifAbsent:[ nil ].
124
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   425
        line isEmptyOrNil ifTrue:[ ^ nil ].
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   426
        inferencer := SmalltalkInferencer forExpression: line.
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   427
    ].
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   428
    inferencer parserClass: SmalltalkParser.
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   429
    inferencer process.
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   430
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   431
    ^ self
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   432
        completeAtLine:lineNr
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   433
        column:colNr
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   434
        collector:inferencer
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   435
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   436
    "Created: / 02-10-2013 / 13:23:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
127
98c615301608 Fixes for Java completion (for both Java/Groovy and Smalltalk)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 124
diff changeset
   437
    "Modified: / 07-10-2013 / 13:43:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
124
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   438
!
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   439
117
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   440
completeAfter:node
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   441
    "return collection of completion items after given node"
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   442
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   443
    | type |
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   444
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   445
    type := node inferedType.
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   446
    type isUnknownType ifFalse:[
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   447
        self addMethodsForType: node inferedType
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   448
    ].
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   449
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   450
    "Created: / 04-03-2011 / 15:45:28 / Jakub <zelenja7@fel.cvut.cz>"
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   451
    "Modified: / 08-04-2011 / 10:55:09 / Jakub <zelenja7@fel.cvut.cz>"
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   452
    "Created: / 26-11-2011 / 17:07:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   453
    "Modified: / 24-09-2013 / 02:15:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   454
!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   455
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   456
completeAtLine:line column:col collector:coll
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   457
    "find most possible codeCompletion object"
157
c71d2e62ece2 Refactored API of CompletionEngine - caller now must set up an context pass it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   458
c71d2e62ece2 Refactored API of CompletionEngine - caller now must set up an context pass it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   459
    | nodeToPosition |
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   460
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   461
    collector := coll.
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   462
    (collector tree isNil or:[collector tree == #Error]) ifTrue:[
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   463
        ^ nil
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   464
    ].
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   465
    nodeToPosition := SmalltalkParseNodeFinder new
161
5ff416530ac4 Fx in Smalltalk code completion - do not complete inside comments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   466
                        findNodeIn: collector source tree: collector tree comments: collector parser commentPositions
5ff416530ac4 Fx in Smalltalk code completion - do not complete inside comments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   467
                        line: line column: col.
157
c71d2e62ece2 Refactored API of CompletionEngine - caller now must set up an context pass it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   468
    context node: nodeToPosition key position: nodeToPosition value.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   469
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   470
    context isAfterNode ifTrue:[
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   471
        self completeAfter:context node.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   472
    ] ifFalse:[
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   473
    context isInNode ifTrue:[
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   474
        self completeIn:context node.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   475
    ] ifFalse:[
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   476
    context isBeforeNode ifTrue:[
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   477
        self completeBefore:context node.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   478
    ]]].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   479
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   480
    result isEmpty ifTrue:[
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   481
        nil "/Only to set breakpoint here
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   482
    ].
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   483
    ^result.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   484
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   485
    "Created: / 04-03-2011 / 13:01:14 / Jakub <zelenja7@fel.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   486
    "Modified: / 08-04-2011 / 10:52:59 / Jakub <zelenja7@fel.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   487
    "Created: / 26-11-2011 / 17:05:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
161
5ff416530ac4 Fx in Smalltalk code completion - do not complete inside comments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   488
    "Modified: / 29-01-2014 / 10:36:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   489
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   490
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   491
completeBefore:node
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   492
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   493
    self breakPoint: #jv. "Not yet implemented"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   494
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   495
    "Created: / 04-03-2011 / 15:45:28 / Jakub <zelenja7@fel.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   496
    "Modified: / 08-04-2011 / 10:55:09 / Jakub <zelenja7@fel.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   497
    "Created: / 26-11-2011 / 17:07:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   498
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   499
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   500
completeIn:node
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   501
    "return collection which can be afterNode"
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   502
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   503
    node isVariableNode ifTrue:[
192
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   504
        self completeInVariableNode:node.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   505
        ^ self.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   506
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   507
    node isMessage ifTrue:[
192
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   508
        self completeInMessageNode:node.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   509
        ^ self
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   510
    ].
883
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 882
diff changeset
   511
    node isSelf ifTrue:[  
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 882
diff changeset
   512
        ^ self
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 882
diff changeset
   513
    ]. 
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 882
diff changeset
   514
    node isSuper ifTrue:[  
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 882
diff changeset
   515
        ^ self
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 882
diff changeset
   516
    ]. 
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 882
diff changeset
   517
    node isConstant ifTrue:[ 
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 882
diff changeset
   518
        ^ self
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 882
diff changeset
   519
    ].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   520
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   521
    "Created: / 07-03-2011 / 18:59:02 / Jakub <zelenja7@fel.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   522
    "Modified: / 08-04-2011 / 09:31:51 / Jakub <zelenja7@fel.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   523
    "Created: / 26-11-2011 / 17:07:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
883
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 882
diff changeset
   524
    "Modified: / 21-08-2015 / 22:53:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
192
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   525
!
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   526
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   527
completeInMessageNode:node
192
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   528
    | parent |
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   529
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   530
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   531
    self addMethodsForType: node receiver inferedType prefix: node selector stripOff: nil.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   532
    parent := node parent.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   533
    parent isMessage ifTrue:[
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   534
        self addMethodsForType: parent receiver inferedType prefix: node selector stripOff: parent selector.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   535
    ].
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   536
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   537
    "Modified (format): / 08-04-2014 / 21:16:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   538
!
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   539
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   540
completeInVariableNode:node
192
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   541
    node name first isUppercase ifTrue:[
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   542
        self addGlobalsStartingWith:node name.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   543
        self addClassVariables.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   544
        self addPools.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   545
    ] ifFalse:[
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   546
        self addVariablesFor:node
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   547
    ]
258
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   548
1b0df5fb47b9 Refactored and fixes class name completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   549
    "Modified: / 24-07-2014 / 19:11:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   550
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   551
195
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   552
!SmalltalkCompletionEngine methodsFor:'queries'!
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   553
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   554
isGlobalKeyForClassVariable: aString
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   555
    | i |
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   556
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   557
    i := 0.
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   558
    [
195
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   559
        i := aString indexOf: $: startingAt: i + 1.
233
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   560
        i ~~ 0
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   561
    ] whileTrue:[
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   562
        aString size > i ifTrue:[
fb33bd6466a4 Merged ef4a53a77c35 and a95a378b4248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 212 229
diff changeset
   563
            (aString at: i + 1) ~~ $: ifTrue:[
195
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   564
                ^ true
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   565
            ].
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   566
        ].
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   567
        i := i + 1.
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   568
    ].
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   569
    ^ false
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   570
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   571
    "
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   572
    SmalltalkCompletionEngine new isGlobalKeyForClassVariable: 'AAA'
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   573
    SmalltalkCompletionEngine new isGlobalKeyForClassVariable: 'AAA:X'
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   574
    SmalltalkCompletionEngine new isGlobalKeyForClassVariable: 'BB::CC::AA'
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   575
    SmalltalkCompletionEngine new isGlobalKeyForClassVariable: 'BB::CC::AA:X'
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   576
    "
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   577
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   578
    "Created: / 09-04-2014 / 13:49:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   579
! !
afdaa19094ef Fix in Smalltalk completion: do now show globals which are actually class vars.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 193
diff changeset
   580
117
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   581
!SmalltalkCompletionEngine class methodsFor:'documentation'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   582
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   583
version_HG
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   584
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   585
    ^ '$Changeset: <not expanded> $'
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   586
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   587
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   588
version_SVN
320
5242593726f0 Updated from upstream repository to revision 0a4845a0c211
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 269
diff changeset
   589
    ^ '$Id$'
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   590
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   591
158
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
   592
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
   593
SmalltalkCompletionEngine initialize!