SmallSense__JavaCompletionEngine.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 25 Oct 2017 23:42:41 +0100
changeset 1058 6d4bf422a7dd
parent 937 86c69f55e934
child 1072 a44c741ee5ef
permissions -rw-r--r--
Fix subscript out of bounds error in Smalltalk inderences ...caused by missing size-check when analysing typed prefix.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     1
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     2
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
374
e65bd2bf892a Updated copyright notice.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 281
diff changeset
     3
Copyright (C) 2013-2015 Jan Vrany
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     4
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     5
This library is free software; you can redistribute it and/or
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     6
modify it under the terms of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     7
License as published by the Free Software Foundation; either
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     8
version 2.1 of the License. 
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     9
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    10
This library is distributed in the hope that it will be useful,
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    11
but WITHOUT ANY WARRANTY; without even the implied warranty of
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    13
Lesser General Public License for more details.
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    14
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    15
You should have received a copy of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    16
License along with this library; if not, write to the Free Software
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    17
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    18
"
249
8bc64027b189 Package renamed to stx:goodies/smallsense
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 210
diff changeset
    19
"{ Package: 'stx:goodies/smallsense' }"
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
"{ NameSpace: SmallSense }"
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
AbstractJavaCompletionEngine subclass:#JavaCompletionEngine
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    24
	instanceVariableNames:'completionNode completionScope'
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
	classVariableNames:''
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
	poolDictionaries:''
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
	category:'SmallSense-Java'
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
!
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    30
!JavaCompletionEngine class methodsFor:'documentation'!
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    31
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    32
copyright
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    33
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    34
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
374
e65bd2bf892a Updated copyright notice.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 281
diff changeset
    35
Copyright (C) 2013-2015 Jan Vrany
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    36
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    37
This library is free software; you can redistribute it and/or
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    38
modify it under the terms of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    39
License as published by the Free Software Foundation; either
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    40
version 2.1 of the License. 
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    41
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    42
This library is distributed in the hope that it will be useful,
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    43
but WITHOUT ANY WARRANTY; without even the implied warranty of
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    44
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    45
Lesser General Public License for more details.
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    46
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    47
You should have received a copy of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    48
License along with this library; if not, write to the Free Software
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    49
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    50
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    51
! !
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    52
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
!JavaCompletionEngine methodsFor:'completion-individual'!
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    55
addFieldsForTypeBinding:binding
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    56
    | current |
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    57
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    58
    current := binding.        
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    59
    [ current notNil ] whileTrue:[  
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    60
        current fields do:[:fbinding | 
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    61
            result add: (PO forFieldBinding: fbinding )
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    62
        ].  
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    63
        current := current superclass.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    64
    ].
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    65
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    66
    "Created: / 13-08-2014 / 21:39:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    67
    "Modified: / 14-08-2014 / 09:06:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    68
!
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    69
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
addMethodsForReceiver: maybeReceiverToken startingWith: prefix    
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
    ^ self addMethodsStartingWith: prefix
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
    "Created: / 03-10-2013 / 17:46:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
!
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    76
addMethodsForTypeBinding: binding
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    77
    | current seen |
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    78
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    79
    current := binding.        
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    80
    seen := Set new.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    81
    [ current notNil ] whileTrue:[  
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    82
        current methods do:[:mbinding |
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    83
            mbinding isConstructor ifFalse:[
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    84
                | selector |
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    85
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    86
                selector := mbinding selector , mbinding signature.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    87
                (seen includes: selector) ifFalse:[
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    88
                    result add: (PO forMethodBinding: mbinding).
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    89
                    seen add: selector.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    90
                ].
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    91
            ].
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    92
        ].  
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    93
        current := current superclass.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    94
    ].
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    95
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    96
    "Created: / 13-08-2014 / 21:39:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    97
    "Modified: / 13-08-2014 / 22:54:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    98
!
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    99
278
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   100
addVariablesInScope: scope
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   101
    ((scope kind == JAVA org eclipse jdt internal compiler lookup Scope METHOD_SCOPE) or:[
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   102
    scope kind == JAVA org eclipse jdt internal compiler lookup Scope BLOCK_SCOPE]) ifTrue:[ 
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   103
        1 to: scope localIndex do:[:i | 
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   104
            result add: (PO forLocalVariableBinding: (scope locals at:i) ) 
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   105
        ].
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   106
        self addVariablesInScope: (scope instVarNamed: #parent). "/ !!?!! Why 'scope parent' does not work?
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   107
    ].
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   108
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   109
    scope kind == JAVA org eclipse jdt internal compiler lookup Scope CLASS_SCOPE ifTrue:[ 
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   110
        | type |
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   111
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   112
        type := scope referenceType.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   113
        type notNil ifTrue:[ 
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   114
            self addFieldsForTypeBinding: type binding.  
278
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   115
        ].
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   116
    ].
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   117
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   118
    "Created: / 12-08-2014 / 10:41:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   119
    "Modified: / 14-08-2014 / 09:08:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
278
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   120
! !
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   121
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   122
!JavaCompletionEngine methodsFor:'completion-nodes'!
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   123
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   124
completeOnFieldType: node
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   125
    node type acceptCompletionEngine: self
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   127
    "Created: / 13-08-2014 / 21:04:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
278
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   128
!
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   129
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   130
completeOnQualifiedNameReference: node
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   131
    | binding |
278
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   132
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   133
    binding := node binding.
281
200db18cbc2f Fix for completion on field names - do not complete 'problem' fields.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 280
diff changeset
   134
    (binding notNil and:[binding problemId ~~ JAVA org eclipse jdt internal compiler lookup ProblemReasons NoError]) ifTrue:[
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   135
        binding := binding type.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   136
        binding notNil ifTrue:[ 
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   137
            self addMethodsForTypeBinding: binding.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   138
            self addFieldsForTypeBinding: binding.  
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   139
        ].
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   140
    ].
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   141
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   142
    "Created: / 13-08-2014 / 21:32:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
281
200db18cbc2f Fix for completion on field names - do not complete 'problem' fields.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 280
diff changeset
   143
    "Modified: / 14-08-2014 / 11:13:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
278
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   144
!
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   145
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   146
completeOnSingleNameReference: node
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   147
    self addVariablesInScope: completionScope.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   148
    self addClassesStartingWith: node token.
278
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   149
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   150
    "Created: / 13-08-2014 / 21:05:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   151
!
278
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   152
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   153
completeOnSingleTypeReference: node
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   154
    self addClassesStartingWith: node token
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   155
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   156
    "Created: / 13-08-2014 / 21:05:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
! !
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
!JavaCompletionEngine methodsFor:'completion-private'!
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
complete
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
    
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   163
    | position source rslt problemReporter parser tree searcher resolver  |
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
395
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 374
diff changeset
   165
    position := textView characterPositionOfCursor.
267
b6fbf84b14ae Temporary commit: More work on JavaCompletionEngine
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   166
b6fbf84b14ae Temporary commit: More work on JavaCompletionEngine
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   167
    source := JAVA stx libjava tools Source new.
395
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 374
diff changeset
   168
    source setContents: textView list asStringWithoutEmphasis.
278
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   169
    rslt := JAVA org eclipse jdt internal compiler CompilationResult
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   170
                new: source _: 1 _: 1 _: 1000.  
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   171
    problemReporter := JAVA org eclipse jdt internal compiler problem ProblemReporter
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   172
                new: JAVA org eclipse jdt internal compiler DefaultErrorHandlingPolicies proceedWithAllProblems
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   173
                  _: JAVA stx libjava tools parser Parser defaultCompilerOptions   
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   174
                  _: JAVA stx libjava tools parser Parser defaultProblemFactory.
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   175
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   176
    parser := JAVA org eclipse jdt internal codeassist complete CompletionParser 
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   177
                new: problemReporter _: true.
449
5c253d838e86 Java completion: handle cases when no completion could be done.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   178
    [
5c253d838e86 Java completion: handle cases when no completion could be done.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   179
        tree := parser dietParse: source _: rslt _: position - 1"Java is 0-based" - 1"cursor is actualy one fter the end of token".
5c253d838e86 Java completion: handle cases when no completion could be done.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   180
    ] on: JAVA org eclipse jdt internal codeassist complete InvalidCursorLocation do:[:icl |
5c253d838e86 Java completion: handle cases when no completion could be done.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   181
        ^ result
5c253d838e86 Java completion: handle cases when no completion could be done.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   182
    ].
278
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   183
    searcher := JAVA org eclipse jdt core dom NodeSearcher new: position - 1"Java is 0-based" - 1"cursor is actualy one fter the end of token".
937
86c69f55e934 Fixed bug in JavaCompletionEngine: use #perform: rather than interop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 449
diff changeset
   184
    "/ Used to be
86c69f55e934 Fixed bug in JavaCompletionEngine: use #perform: rather than interop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 449
diff changeset
   185
    "/ 
86c69f55e934 Fixed bug in JavaCompletionEngine: use #perform: rather than interop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 449
diff changeset
   186
    "/     tree traverse: searcher  _: tree scope.
86c69f55e934 Fixed bug in JavaCompletionEngine: use #perform: rather than interop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 449
diff changeset
   187
    "/ 
86c69f55e934 Fixed bug in JavaCompletionEngine: use #perform: rather than interop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 449
diff changeset
   188
    "/ But when a scope is nil, then there are two matching methods
86c69f55e934 Fixed bug in JavaCompletionEngine: use #perform: rather than interop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 449
diff changeset
   189
    "/ (traverse(...,CompilationUnitScope) and
86c69f55e934 Fixed bug in JavaCompletionEngine: use #perform: rather than interop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 449
diff changeset
   190
    "/ (traverse(...,BlockScope).
86c69f55e934 Fixed bug in JavaCompletionEngine: use #perform: rather than interop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 449
diff changeset
   191
    "/ Use perform to explicitly select the correct one.
86c69f55e934 Fixed bug in JavaCompletionEngine: use #perform: rather than interop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 449
diff changeset
   192
    tree perform: #'traverse(Lorg/eclipse/jdt/internal/compiler/ASTVisitor;Lorg/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope;)V'
86c69f55e934 Fixed bug in JavaCompletionEngine: use #perform: rather than interop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 449
diff changeset
   193
         with: searcher    
86c69f55e934 Fixed bug in JavaCompletionEngine: use #perform: rather than interop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 449
diff changeset
   194
         with: tree scope.
278
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   195
    (searcher found notNil and:[searcher found isKindOf: JAVA org eclipse jdt internal compiler ast AbstractMethodDeclaration]) ifTrue:[ 
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   196
        parser parseBlockStatements: searcher found _: tree.
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   197
    ].
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   198
267
b6fbf84b14ae Temporary commit: More work on JavaCompletionEngine
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   199
b6fbf84b14ae Temporary commit: More work on JavaCompletionEngine
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   200
    "
b6fbf84b14ae Temporary commit: More work on JavaCompletionEngine
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   201
    (SmallSense::ParseTreeInspector new node:tree source: codeView list asString) open
b6fbf84b14ae Temporary commit: More work on JavaCompletionEngine
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   202
    "
b6fbf84b14ae Temporary commit: More work on JavaCompletionEngine
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   203
278
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   204
    resolver := (Java classForName: 'stx.libjava.tools.environment.Resolver') new: problemReporter.
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   205
    [ 
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   206
        resolver resolve: tree.
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   207
    ] on: JAVA org eclipse jdt internal codeassist complete CompletionNodeFound do:[:ex |  
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   208
        completionNode := ex astNode.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   209
        completionScope := ex scope.
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
    ].
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   212
    context node: completionNode position: position.
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   214
    (completionNode isNil or:[completionScope isNil]) ifTrue:[
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
        result := JavaCompletionEngineSimple new complete: context.
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
    ] ifFalse:[
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   217
        completionNode acceptCompletionEngine: self.
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
    ].
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
    ^ result
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
    "Created: / 02-10-2013 / 13:55:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
937
86c69f55e934 Fixed bug in JavaCompletionEngine: use #perform: rather than interop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 449
diff changeset
   223
    "Modified: / 08-04-2016 / 09:25:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
! !
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
449
5c253d838e86 Java completion: handle cases when no completion could be done.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   226
!JavaCompletionEngine class methodsFor:'documentation'!
5c253d838e86 Java completion: handle cases when no completion could be done.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   227
5c253d838e86 Java completion: handle cases when no completion could be done.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   228
version_HG
5c253d838e86 Java completion: handle cases when no completion could be done.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   229
5c253d838e86 Java completion: handle cases when no completion could be done.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   230
    ^ '$Changeset: <not expanded> $'
5c253d838e86 Java completion: handle cases when no completion could be done.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   231
! !
5c253d838e86 Java completion: handle cases when no completion could be done.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   232