SmallSense__JavaCompletionEngine.st
author convert-repo
Thu, 27 Jun 2019 03:28:20 +0000
changeset 1089 f13772ffe08f
parent 1072 a44c741ee5ef
permissions -rw-r--r--
update tags
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
1072
a44c741ee5ef Copyright updates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 937
diff changeset
     4
Copyright (C) 2016 Jan Vrany
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     5
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     6
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
     7
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
     8
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
     9
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
    10
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    11
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
    12
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
    13
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
    14
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
    15
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    16
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
    17
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
    18
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
    19
"
249
8bc64027b189 Package renamed to stx:goodies/smallsense
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 210
diff changeset
    20
"{ Package: 'stx:goodies/smallsense' }"
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
"{ NameSpace: SmallSense }"
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
AbstractJavaCompletionEngine subclass:#JavaCompletionEngine
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    25
	instanceVariableNames:'completionNode completionScope'
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
	classVariableNames:''
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
	poolDictionaries:''
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
	category:'SmallSense-Java'
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
!
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    31
!JavaCompletionEngine class methodsFor:'documentation'!
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    32
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    33
copyright
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    34
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    35
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
    36
Copyright (C) 2013-2015 Jan Vrany
1072
a44c741ee5ef Copyright updates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 937
diff changeset
    37
Copyright (C) 2016 Jan Vrany
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    38
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    39
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
    40
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
    41
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
    42
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
    43
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    44
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
    45
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
    46
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
    47
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
    48
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    49
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
    50
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
    51
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
    52
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    53
! !
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    54
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
!JavaCompletionEngine methodsFor:'completion-individual'!
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    57
addFieldsForTypeBinding:binding
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    58
    | current |
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    59
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    60
    current := binding.        
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    61
    [ current notNil ] whileTrue:[  
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    62
        current fields do:[:fbinding | 
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    63
            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
    64
        ].  
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    65
        current := current superclass.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    66
    ].
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    67
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    68
    "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
    69
    "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
    70
!
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    71
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
addMethodsForReceiver: maybeReceiverToken startingWith: prefix    
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
    ^ self addMethodsStartingWith: prefix
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
    "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
    76
!
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    78
addMethodsForTypeBinding: binding
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    79
    | current seen |
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    80
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    81
    current := binding.        
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    82
    seen := Set new.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    83
    [ current notNil ] whileTrue:[  
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    84
        current methods do:[:mbinding |
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    85
            mbinding isConstructor ifFalse:[
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    86
                | selector |
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    87
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    88
                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
    89
                (seen includes: selector) ifFalse:[
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    90
                    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
    91
                    seen add: selector.
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
            ].
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
        current := current superclass.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    96
    ].
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    97
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
    98
    "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
    99
    "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
   100
!
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   101
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
   102
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
   103
    ((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
   104
    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
   105
        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
   106
            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
   107
        ].
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   108
        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
   109
    ].
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   110
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   111
    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
   112
        | type |
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   113
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   114
        type := scope referenceType.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   115
        type notNil ifTrue:[ 
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   116
            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
   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
    ].
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   119
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
    "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
   121
    "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
   122
! !
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
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   124
!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
   125
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   126
completeOnFieldType: node
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   127
    node type acceptCompletionEngine: self
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   129
    "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
   130
!
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   131
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   132
completeOnQualifiedNameReference: node
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   133
    | 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
   134
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   135
    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
   136
    (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
   137
        binding := binding type.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   138
        binding notNil ifTrue:[ 
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   139
            self addMethodsForTypeBinding: binding.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   140
            self addFieldsForTypeBinding: binding.  
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
    ].
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   143
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   144
    "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
   145
    "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
   146
!
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   147
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   148
completeOnSingleNameReference: node
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   149
    self addVariablesInScope: completionScope.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   150
    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
   151
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   152
    "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
   153
!
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
   154
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   155
completeOnSingleTypeReference: node
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   156
    self addClassesStartingWith: node token
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   157
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   158
    "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
   159
! !
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
!JavaCompletionEngine methodsFor:'completion-private'!
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
complete
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
    
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   165
    | position source rslt problemReporter parser tree searcher resolver  |
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
395
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 374
diff changeset
   167
    position := textView characterPositionOfCursor.
267
b6fbf84b14ae Temporary commit: More work on JavaCompletionEngine
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   168
b6fbf84b14ae Temporary commit: More work on JavaCompletionEngine
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   169
    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
   170
    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
   171
    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
   172
                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
   173
    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
   174
                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
   175
                  _: 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
   176
                  _: 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
   177
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   178
    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
   179
                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
   180
    [
5c253d838e86 Java completion: handle cases when no completion could be done.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   181
        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
   182
    ] 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
   183
        ^ result
5c253d838e86 Java completion: handle cases when no completion could be done.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   184
    ].
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
   185
    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
   186
    "/ Used to be
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
    "/     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
   189
    "/ 
86c69f55e934 Fixed bug in JavaCompletionEngine: use #perform: rather than interop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 449
diff changeset
   190
    "/ 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
   191
    "/ (traverse(...,CompilationUnitScope) and
86c69f55e934 Fixed bug in JavaCompletionEngine: use #perform: rather than interop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 449
diff changeset
   192
    "/ (traverse(...,BlockScope).
86c69f55e934 Fixed bug in JavaCompletionEngine: use #perform: rather than interop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 449
diff changeset
   193
    "/ 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
   194
    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
   195
         with: searcher    
86c69f55e934 Fixed bug in JavaCompletionEngine: use #perform: rather than interop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 449
diff changeset
   196
         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
   197
    (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
   198
        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
   199
    ].
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   200
267
b6fbf84b14ae Temporary commit: More work on JavaCompletionEngine
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   201
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
    (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
   204
    "
b6fbf84b14ae Temporary commit: More work on JavaCompletionEngine
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   205
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
   206
    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
   207
    [ 
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   208
        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
   209
    ] 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
   210
        completionNode := ex astNode.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   211
        completionScope := ex scope.
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
    ].
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
    context node: completionNode position: position.
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   216
    (completionNode isNil or:[completionScope isNil]) ifTrue:[
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
        result := JavaCompletionEngineSimple new complete: context.
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
    ] ifFalse:[
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   219
        completionNode acceptCompletionEngine: self.
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
    ].
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
    ^ result
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
    "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
   225
    "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
   226
! !
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
449
5c253d838e86 Java completion: handle cases when no completion could be done.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   228
!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
   229
5c253d838e86 Java completion: handle cases when no completion could be done.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   230
version_HG
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
    ^ '$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
   233
! !
5c253d838e86 Java completion: handle cases when no completion could be done.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 395
diff changeset
   234