SmallSense__SmalltalkCompletionEngine.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 13 May 2014 16:34:38 +0100
changeset 205 43bee6463c53
parent 195 afdaa19094ef
child 208 0b9ed08a04c0
permissions -rw-r--r--
Introduced notion of `environment` to completion context. A completion engine should use given environment (passed in context) to look up classes and methods. This allow for further customization of completion by providing custom environment.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'jv:smallsense' }"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
"{ NameSpace: SmallSense }"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
117
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
     5
CompletionEngine subclass:#SmalltalkCompletionEngine
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
     6
	instanceVariableNames:'inferencer'
158
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
     7
	classVariableNames:'Debug'
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
	poolDictionaries:''
117
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
     9
	category:'SmallSense-Smalltalk'
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
158
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    13
!SmalltalkCompletionEngine class methodsFor:'initialization'!
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    14
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    15
initialize
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    16
    "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
    17
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    18
    "/ 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
    19
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    20
    Debug := false.
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    21
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    22
    "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
    23
! !
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    24
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    25
!SmalltalkCompletionEngine class methodsFor:'accessing'!
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    26
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    27
debug
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    28
    ^ Debug
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    29
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    30
    "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
    31
!
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    32
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    33
debug: aBoolean
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    34
    Debug := aBoolean .
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    35
    "
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
    36
    self debug: true.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
    37
    self debug: false.
158
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    38
    "
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    39
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    40
    "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
    41
    "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
    42
! !
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
    43
117
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
    44
!SmalltalkCompletionEngine class methodsFor:'utilities'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
resultSetFor: mode source: source class: class line: line column: col 
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
    | inferencer tree |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
    mode == #method ifTrue:[
69
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
    50
        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
    51
        inferencer parserClass: SmalltalkParser.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
    ] ifFalse:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
        self breakPoint: #jv.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
        ^nil.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
        inferencer := Parser for: (source asString readStream).
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
        "JV@2011-06-13: HACK, use polymorphism"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
        tree := inferencer
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
            parseExpressionWithSelf:nil 
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
            notifying:nil 
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
            ignoreErrors:false 
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
            ignoreWarnings:false 
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
            inNameSpace:nil.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
        inferencer tree: tree.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
    ^ self new
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
        completeAtLine:line
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
        column:col
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
    68
        inferencer:inferencer
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
    "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
    71
    "Created: / 26-11-2011 / 17:53:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
    72
    "Modified: / 13-05-2014 / 12:29:34 / 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
    73
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
    75
!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
    76
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
    77
javaClassesDo: aBlock
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
    78
    | 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
    79
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
    80
    class := inferencer klass.
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
    81
    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
    82
    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
    83
    [ 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
    84
        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
    85
        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
    86
    ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
    87
    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
    88
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
    89
    context environment allClassesDo:[:cls|
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
    90
        (cls isJavaClass and:[loaders includes: cls classLoader]) ifTrue:[
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
    91
            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
    92
        ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
    93
    ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
    94
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
    95
    "Created: / 04-10-2013 / 13:10:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
    96
    "Modified: / 13-05-2014 / 12:06:18 / 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
    97
! !
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
    98
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
    99
!SmalltalkCompletionEngine methodsFor:'completion-individual'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
addClassVariables
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
    | class |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   104
    class := inferencer klass theNonMetaclass.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
    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
   106
        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
   107
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
    "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
   110
    "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
   111
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
addGlobalsStartingWith: prefix
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   115
    | class ns cls environment |
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   116
    class := inferencer klass.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
    ns := class nameSpace.
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   118
    environment := context environment.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
    "nameSpace may return private class, sigh"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
    [ ns isNameSpace ] whileFalse:[ ns := ns nameSpace ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
    ns keysDo:[:nm|
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
        (nm startsWith: prefix) ifTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
            cls := ns classNamed: nm.
146
dfb2ae961d9c Fix for completing globals (like Transcript or OperatingSystem)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 136
diff changeset
   124
            (cls notNil and:[cls name = nm]) ifTrue:[
dfb2ae961d9c Fix for completing globals (like Transcript or OperatingSystem)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 136
diff changeset
   125
                (JavaPackage isNil or:[cls isJavaPackage not]) ifTrue:[
dfb2ae961d9c Fix for completing globals (like Transcript or OperatingSystem)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 136
diff changeset
   126
                    result add:(ClassPO new subject: cls; showPrefix: cls isJavaClass).
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
                ]
146
dfb2ae961d9c Fix for completing globals (like Transcript or OperatingSystem)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 136
diff changeset
   128
            ] ifFalse:[
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
   129
                (self isGlobalKeyForClassVariable: nm) ifFalse:[  
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
   130
                    result add:(VariablePO globalVariable: nm)
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
   131
                ].
146
dfb2ae961d9c Fix for completing globals (like Transcript or OperatingSystem)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 136
diff changeset
   132
            ].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
        ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
    ].
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   135
    ns ~~ environment ifTrue:[
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   136
        environment keysDo:[:nm|
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
            (nm startsWith: prefix) ifTrue:[
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   138
                cls := environment classNamed: 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
   139
                (JavaPackage isNil or:[cls isJavaPackage not ]) ifTrue:[
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   140
                    cls notNil ifTrue:[
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   141
                        cls isBehavior ifTrue:[
133
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   142
                            result add:(ClassPO new subject: cls; showPrefix: cls isJavaClass).
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   143
                        ] ifFalse:[
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
   144
                            (self isGlobalKeyForClassVariable: nm) ifFalse:[  
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
   145
                                result add:(VariablePO globalVariable: nm).
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
   146
                            ].
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   147
                        ]
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
                    ]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
                ]
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
    ]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
    "Created: / 26-11-2011 / 17:29:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   155
    "Modified: / 13-05-2014 / 12:09:53 / 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
   156
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   158
addJavaClassesInPackage: prefix
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   159
    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
   160
        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
   161
            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
   162
        ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   163
    ] ifFalse:[
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   164
        self javaClassesDo: [:cls |
133
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   165
            (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
   166
                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
   167
            ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   168
        ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   169
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   170
    ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   171
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   172
    "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
   173
    "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
   174
!
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   175
102
538fc4ef040c CodeNavigation service refactored to support Java (not yet done, though)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   176
addMethodsForType: type 
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
   177
    | classes seen |
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   178
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   179
    classes := type classes.
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   180
    "/ 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
   181
    "/ in Boolean ?!!?
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   182
    (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
   183
        classes := Array with: True with: False.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   184
    ].
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   185
    classes size == 1 ifTrue:[
128
a98866596a98 Fix in SmalltalkInferencer for known globals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 127
diff changeset
   186
        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
   187
            "/ 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
   188
            "/ 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
   189
            | node |
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   190
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   191
            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
   192
            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
   193
                | package |
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   194
                "/ 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
   195
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   196
                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
   197
                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
   198
                [ 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
   199
                    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
   200
                    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
   201
                ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   202
                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
   203
                ^ self.
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
    ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   207
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
   208
    seen := Set new.
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   209
    classes do: [:each | 
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   210
        | class |
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   212
        class := each.
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   213
        [ class notNil and:[(seen includes: class) not]] whileTrue: [
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   214
            seen add: class.
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   215
            "/ Now, special care for Java classes, sigh...
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   216
            (class isMetaclass and:[class theNonMetaclass isJavaClass]) ifTrue:[
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   217
                class theNonMetaclass selectorsAndMethodsDo: [:selector :met | 
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   218
                    met isStatic 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
   219
                        result add: (MethodPO 
102
538fc4ef040c CodeNavigation service refactored to support Java (not yet done, though)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   220
                                    name: selector
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   221
                                    class: met mclass).
102
538fc4ef040c CodeNavigation service refactored to support Java (not yet done, though)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   222
                    ].
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   223
                ].
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   224
            ] ifFalse:[
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   225
                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
   226
                    met isSynthetic ifFalse:[
a1c1b160f2ca Fix in method completion: do not offer synthetic methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 133
diff changeset
   227
                        result add: (MethodPO 
a1c1b160f2ca Fix in method completion: do not offer synthetic methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 133
diff changeset
   228
                                    name: selector
a1c1b160f2ca Fix in method completion: do not offer synthetic methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 133
diff changeset
   229
                                    class: met mclass).
a1c1b160f2ca Fix in method completion: do not offer synthetic methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 133
diff changeset
   230
                    ]
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   231
                ].
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   232
            ].
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   233
            class := class superclass.
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   234
        ]
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   235
    ].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
    "Created: / 26-11-2011 / 17:03:21 / 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
   238
    "Modified: / 22-01-2014 / 19:48:18 / 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
   239
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
192
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   241
addMethodsForType: type prefix: prefix stripOff: stripprefix
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   242
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   243
    type isUnknownType ifFalse:[
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   244
        self addMethodsForType:type stripOff: stripprefix.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   245
        
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   246
        "/ If the type is union of more than 6 types, then
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   247
        "/ assume that the inferencer is likely wrong.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   248
        "/ then, if the prefix is at least 3 chars,
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   249
        "/ also add methods with that prefix.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   250
        
193
c0c4605b3791 Keep (highlighter) source in ParseTreeIndex
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 192
diff changeset
   251
        ((type classes size > 6) and:[ prefix size > 2 ]) ifTrue:[
192
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   252
            self addMethodsStartingWith:prefix stripOff: stripprefix
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   253
        ].
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   254
    ] ifTrue:[
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   255
        self addMethodsStartingWith:prefix stripOff: stripprefix  
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   256
    ].
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   257
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   258
    "Created: / 08-04-2014 / 21:04:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
193
c0c4605b3791 Keep (highlighter) source in ParseTreeIndex
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 192
diff changeset
   259
    "Modified: / 09-04-2014 / 09:31:40 / 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
   260
!
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   261
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   262
addMethodsForType: type stripOff: stripprefix     
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   263
    | classes seen |
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   264
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   265
    classes := type classes.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   266
    "/ Hack for Boolean: ifTrue:iFalse: etc are not defined
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   267
    "/ in Boolean ?!!?
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   268
    (classes size == 1 and:[classes anElement == Boolean ]) ifTrue:[
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   269
        classes := Array with: True with: False.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   270
    ].
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   271
    classes size == 1 ifTrue:[
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   272
        classes anElement == JavaPackage class ifTrue:[  
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   273
            "/ Special hack for JAVA: for pattern `JAVA java lang reflect`
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   274
            "/ complete all Java classes in that package
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   275
            | node |
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   276
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   277
            node := result context node.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   278
            node isUnaryMessage ifTrue:[
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   279
                | package |
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   280
                "/ Compute package prefix...
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   281
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   282
                package := node selector.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   283
                node := node receiver.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   284
                [ node isUnaryMessage ] whileTrue:[
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   285
                    package := node selector , '/' , package.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   286
                    node := node receiver.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   287
                ].
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   288
                self addJavaClassesInPackage: package.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   289
                ^ self.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   290
            ]
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   291
        ]
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   292
    ].
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   293
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   294
    seen := Set new.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   295
    classes do: [:each | 
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   296
        | class |
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   297
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   298
        class := each.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   299
        [ class notNil and:[(seen includes: class) not]] whileTrue: [
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   300
            seen add: class.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   301
            "/ Now, special care for Java classes, sigh...
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   302
            (class isMetaclass and:[class theNonMetaclass isJavaClass]) ifTrue:[
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   303
                class theNonMetaclass selectorsAndMethodsDo: [:selector :met | 
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   304
                    met isStatic ifTrue:[
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   305
                        result add: (MethodPO 
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   306
                                    name: selector
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   307
                                    class: met mclass).
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   308
                    ].
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
            ] ifFalse:[
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   311
                class selectorsAndMethodsDo: [:selector :met | 
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   312
                    met isSynthetic ifFalse:[
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   313
                        (stripprefix isNil or:[ selector size > stripprefix size and:[selector startsWith: stripprefix]]) ifTrue:[
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   314
                            result add: (MethodPO 
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   315
                                        name: selector
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   316
                                        class: met mclass
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   317
                                        stripOff: stripprefix).
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   318
                        ].
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   319
                    ]
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   320
                ].
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   321
            ].
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   322
            class := class superclass.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   323
        ]
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   324
    ].
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   325
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   326
    "Created: / 08-04-2014 / 21:23:21 / 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
   327
!
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   328
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   329
addPools
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   330
    | class |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   331
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   332
    class := inferencer klass theNonMetaclass.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   333
    class theNonMetaclass sharedPools do:[:pool|
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   334
        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
   335
            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
   336
        ]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   337
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   338
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   339
    "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
   340
    "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
   341
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   342
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   343
addPrivateClasses
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   344
    | class |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   345
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   346
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   347
    class := inferencer klass theNonMetaclass.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   348
    class privateClassesDo:[:pclass|
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   349
        | nm |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   350
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   351
        nm := pclass fullName copyFrom: class fullName size + 3.
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   352
        result add:(ClassPO new subject: pclass; name: nm).
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   353
    ]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   354
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   355
    "Created: / 06-08-2013 / 12:28:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   356
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   357
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   358
addVariablesFor: node
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   359
93
f50bd9fded52 Fix in Recognizer - set correct class for instance-variable POs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   360
    | n klass |
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   361
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   362
    "Add Instance variables"
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   363
    klass := inferencer klass.
93
f50bd9fded52 Fix in Recognizer - set correct class for instance-variable POs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   364
    [ 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
   365
        | 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
   366
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   367
        usedInstVars := inferencer 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
   368
        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
   369
            | 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
   370
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
   371
            po := VariablePO instanceVariable: nm in: klass.
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
   372
            "/ Raise relevance if the instvar is already used in the code...
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
   373
            (usedInstVars includes: nm) ifTrue:[
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
   374
                po relevance: (po relevance + 10).
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
   375
            ].
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
   376
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
   377
            result add: 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
   378
        ].
158
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
   379
        "/ 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
   380
        "/ instance variables of Class / ClassDescription / Behaviour
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
   381
        "/ as STC won't compile such code.
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
   382
        klass := (klass isMetaclass and:[klass superclass == Class]) 
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
   383
                    ifTrue:[nil]
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
   384
                    ifFalse:[klass superclass].
64
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
    "Add pseudo variables"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   387
    #(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
   388
        result add: (VariablePO new name: nm).
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
    "Add arguments"
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   391
    inferencer 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
   392
        result add: (VariablePO argument: nm).
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   393
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   394
    "Add temporaries"
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   395
    inferencer 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
   396
        result add: (VariablePO variable: nm).
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   397
    ].
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   398
    "Add literals"
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   399
    #(#true #false #nil ) do:[:nm|
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   400
        result add: (SnippetPO new subject: nm).
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   401
    ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 158
diff changeset
   402
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   403
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   404
    n := node.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   405
    [ n notNil ] whileTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   406
        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
   407
            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
   408
            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
   409
        ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   410
        n := n parent.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   411
    ]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   412
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   413
    "Created: / 31-07-2013 / 00:32:13 / 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
   414
    "Modified: / 22-01-2014 / 19:42:05 / 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
   415
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   416
117
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   417
!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
   418
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
   419
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
   420
    "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
   421
     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
   422
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
   423
    | 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
   424
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
   425
    codeView := context codeView.
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
   426
    class := codeView isCodeView2
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
   427
                ifTrue: [ codeView klass ]  
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
   428
                ifFalse: [ codeView editedClass ].
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
   429
    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
   430
        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
   431
    ].
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
   432
    ^ self complete: codeView codeAspect source: codeView contents class: class line: codeView cursorLine column: codeView cursorCol
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
   433
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
   434
    "Created: / 02-10-2013 / 13:32:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
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
   435
    "Modified: / 21-01-2014 / 23:20:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
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
   436
!
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
   437
124
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   438
complete: mode source: source class: class line: lineNrArg column: colNrArg 
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   439
    | inf lineNr colNr |
124
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   440
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   441
    mode == #method ifTrue:[
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   442
        lineNr := lineNrArg.
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   443
        colNr := colNrArg.
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   444
        inf := SmalltalkInferencer forClass: class methodSource: source asString.
124
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   445
    ] ifFalse:[
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   446
        | line |
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   447
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   448
        lineNr := 1.
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   449
        colNr := colNrArg.
127
98c615301608 Fixes for Java completion (for both Java/Groovy and Smalltalk)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 124
diff changeset
   450
        line := codeView list at: lineNrArg ifAbsent:[ nil ].
124
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   451
        line isEmptyOrNil ifTrue:[ ^ nil ].
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   452
        inf := SmalltalkInferencer forExpression: line.
124
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   453
    ].
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   454
    inf parserClass: SmalltalkParser.
124
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   455
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   456
    ^ self
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   457
        completeAtLine:lineNr
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   458
        column:colNr
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   459
        inferencer:inf
124
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   460
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   461
    "Created: / 02-10-2013 / 13:23:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   462
    "Modified: / 13-05-2014 / 12:29:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
124
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   463
!
73fa59be4774 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   464
117
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   465
completeAfter:node
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   466
    "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
   467
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   468
    | type |
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   469
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   470
    type := node inferedType.
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   471
    type isUnknownType ifFalse:[
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   472
        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
   473
    ].
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   474
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   475
    "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
   476
    "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
   477
    "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
   478
    "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
   479
!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   480
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   481
completeAtLine:line column:col inferencer:inferencerArg 
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   482
    "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
   483
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
   484
    | 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
   485
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   486
    inferencer := inferencerArg.
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   487
    inferencer process.
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   488
    (inferencer tree isNil or:[inferencer tree == #Error]) 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
   489
        ^ nil 
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   490
    ].
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   491
    inferencer environment: context environment.
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   492
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
   493
    nodeToPosition := SmalltalkParseNodeFinder new 
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   494
                        findNodeIn: inferencer source tree: inferencer tree comments: inferencer parser commentPositions
161
5ff416530ac4 Fx in Smalltalk code completion - do not complete inside comments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   495
                        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
   496
    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
   497
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   498
    context isAfterNode ifTrue:[
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   499
        self completeAfter:context node.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   500
    ] ifFalse:[
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   501
    context isInNode ifTrue:[
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   502
        self completeIn:context node.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   503
    ] ifFalse:[
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   504
    context isBeforeNode ifTrue:[
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 131
diff changeset
   505
        self completeBefore:context node.
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
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   508
    result isEmpty ifTrue:[
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   509
        nil "/Only to set breakpoint here
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   510
    ].
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   511
    ^result.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   512
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 195
diff changeset
   513
    "Created: / 13-05-2014 / 12:29:14 / 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
   514
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   515
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   516
completeBefore:node
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   517
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   518
    self breakPoint: #jv. "Not yet implemented"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   519
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   520
    "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
   521
    "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
   522
    "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
   523
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   524
192
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   525
completeIn:node 
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   526
    "return collection which can be afterNode"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   527
    
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   528
    node isVariableNode ifTrue:[
192
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   529
        self completeInVariableNode:node.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   530
        ^ self.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   531
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   532
    node isMessage ifTrue:[
192
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   533
        self completeInMessageNode:node.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   534
        ^ self
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   535
    ].
192
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   536
    self breakPoint:#jv.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   537
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   538
    "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
   539
    "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
   540
    "Created: / 26-11-2011 / 17:07:29 / 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
   541
    "Modified: / 08-04-2014 / 20:52:05 / 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
   542
!
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   543
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   544
completeInMessageNode:node 
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   545
    | parent |
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   546
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   547
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   548
    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
   549
    parent := node parent.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   550
    parent isMessage ifTrue:[
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   551
        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
   552
    ].
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   553
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   554
    "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
   555
!
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   556
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   557
completeInVariableNode:node 
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   558
    node name first isUppercase ifTrue:[
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   559
        self addGlobalsStartingWith:node name.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   560
        self addClassVariables.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   561
        self addPools.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   562
        self addPrivateClasses.
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   563
    ] ifFalse:[
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   564
        self addVariablesFor:node
f27ce6dac101 Initial support for completing selector parts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   565
    ]
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   566
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   567
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
   568
!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
   569
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
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
   571
    | 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
   572
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
    i := 0.
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
    [ 
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
        i := aString indexOf: $: startingAt: 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
   576
        i ~~ 0 
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
    ] whileTrue:[ 
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
        aString size > i ifTrue:[ 
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
            (aString at: i + 1) ~~ $: ifTrue:[ 
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
                ^ 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
   581
            ].
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
   582
        ].
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
   583
        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
   584
    ].
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
   585
    ^ 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
   586
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
   587
    "
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
   588
    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
   589
    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
   590
    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
   591
    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
   592
    "
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
   593
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
   594
    "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
   595
! !
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
   596
117
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   597
!SmalltalkCompletionEngine class methodsFor:'documentation'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   598
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   599
version_HG
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   600
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   601
    ^ '$Changeset: <not expanded> $'
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   602
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   603
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   604
version_SVN
174
3e08d765d86f sync from current CVS head; fixed comment highlighting for STXEOLRule
Claus Gittinger
parents: 136
diff changeset
   605
    ^ '$Id: SmallSense__SmalltalkCompletionEngine.st,v 1.2 2014/02/12 14:49:29 sr Exp $'
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   606
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   607
158
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
   608
d275ae2a0003 Added simple debugg option to SmalltaqlkCodeCompletion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 157
diff changeset
   609
SmalltalkCompletionEngine initialize!