SmallSense__JavaCompletionEngine.st
author Stefan Vogel <sv@exept.de>
Mon, 04 Mar 2019 13:09:59 +0100
branchcvs_MAIN
changeset 1085 a22655fd60b5
parent 910 2cf84854bedc
permissions -rw-r--r--
#REFACTORING by stefan class: SmallSense::AbstractJavaCompletionEngineSimple changed: #guessTypeOfExpressionBefore:in: fixed shadowed var
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
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     3
Copyright (C) 2013-2014 Jan Vrany
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
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    35
Copyright (C) 2013-2014 Jan Vrany
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
328
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   101
    |scopeKind org_eclipse_jdt_internal_compiler_lookup_Scope|
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   102
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   103
    scopeKind := scope kind.
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   104
    org_eclipse_jdt_internal_compiler_lookup_Scope := JAVA org eclipse jdt internal compiler lookup Scope.
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   105
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   106
    ((scopeKind == org_eclipse_jdt_internal_compiler_lookup_Scope METHOD_SCOPE) 
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   107
    or:[ scopeKind == org_eclipse_jdt_internal_compiler_lookup_Scope BLOCK_SCOPE]) ifTrue:[ 
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
   108
        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
   109
            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
   110
        ].
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   111
        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
   112
    ].
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   113
328
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   114
    scopeKind == org_eclipse_jdt_internal_compiler_lookup_Scope CLASS_SCOPE ifTrue:[ 
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   115
        | type |
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   116
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   117
        type := scope referenceType.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   118
        type notNil ifTrue:[ 
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   119
            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
   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
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
    "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
   124
    "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
   125
! !
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   126
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   127
!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
   128
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   129
completeOnFieldType: node
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   130
    node type acceptCompletionEngine: self
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
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
    "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
   133
!
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
completeOnQualifiedNameReference: node
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   136
    | 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
   137
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   138
    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
   139
    (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
   140
        binding := binding type.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   141
        binding notNil ifTrue:[ 
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   142
            self addMethodsForTypeBinding: binding.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   143
            self addFieldsForTypeBinding: binding.  
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   144
        ].
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   145
    ].
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   146
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   147
    "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
   148
    "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
   149
!
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   150
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   151
completeOnSingleNameReference: node
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   152
    self addVariablesInScope: completionScope.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   153
    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
   154
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   155
    "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
   156
!
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
   157
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   158
completeOnSingleTypeReference: node
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   159
    self addClassesStartingWith: node token
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   160
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   161
    "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
   162
! !
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
!JavaCompletionEngine methodsFor:'completion-private'!
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
complete
328
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   167
    "use the eclipse framework (running in the stx java vm)
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   168
     to do java code completion"
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   169
426
509fd0895236 initial checkin
Claus Gittinger <cg@exept.de>
parents: 328
diff changeset
   170
    |position source stx_libjava_tools org_eclipse_jdt org_eclipse_jdt_internal_compiler 
509fd0895236 initial checkin
Claus Gittinger <cg@exept.de>
parents: 328
diff changeset
   171
     org_eclipse_jdt_internal_codeassist rslt problemReporter parser tree searcher resolver
509fd0895236 initial checkin
Claus Gittinger <cg@exept.de>
parents: 328
diff changeset
   172
     javaClass javaNamespace  |
509fd0895236 initial checkin
Claus Gittinger <cg@exept.de>
parents: 328
diff changeset
   173
509fd0895236 initial checkin
Claus Gittinger <cg@exept.de>
parents: 328
diff changeset
   174
    "/ cg: avoid prereq of libjava for smallsense
509fd0895236 initial checkin
Claus Gittinger <cg@exept.de>
parents: 328
diff changeset
   175
    javaNamespace := Smalltalk at:#JAVA.
509fd0895236 initial checkin
Claus Gittinger <cg@exept.de>
parents: 328
diff changeset
   176
    javaClass := Smalltalk at:#Java.
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
    position := context codeView characterPositionOfCursor.
267
b6fbf84b14ae Temporary commit: More work on JavaCompletionEngine
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   179
426
509fd0895236 initial checkin
Claus Gittinger <cg@exept.de>
parents: 328
diff changeset
   180
    stx_libjava_tools := javaNamespace stx libjava tools.
509fd0895236 initial checkin
Claus Gittinger <cg@exept.de>
parents: 328
diff changeset
   181
    org_eclipse_jdt := javaNamespace org eclipse jdt.
328
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   182
    org_eclipse_jdt_internal_compiler := org_eclipse_jdt internal compiler.
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   183
    org_eclipse_jdt_internal_codeassist := org_eclipse_jdt internal codeassist.
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   184
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   185
    source := stx_libjava_tools Source new.
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   186
267
b6fbf84b14ae Temporary commit: More work on JavaCompletionEngine
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   187
    source setContents: codeView 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
   188
"/    parser := JAVA stx libjava tools parser Parser new.
328
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   189
    rslt := org_eclipse_jdt_internal_compiler CompilationResult
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   190
                new: source _: 1 _: 1 _: 1000.
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
   191
328
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   192
    problemReporter := org_eclipse_jdt_internal_compiler problem ProblemReporter
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   193
                new: org_eclipse_jdt_internal_compiler DefaultErrorHandlingPolicies proceedWithAllProblems
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   194
                  _: stx_libjava_tools parser Parser defaultCompilerOptions   
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   195
                  _: stx_libjava_tools parser Parser defaultProblemFactory.
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   196
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   197
    parser := org_eclipse_jdt_internal_codeassist complete CompletionParser 
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
   198
                new: problemReporter _: true.
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
"/    tree := parser parse: source diet: true resolve: true.
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   201
    tree := parser dietParse: source _: rslt _: position - 1"Java is 0-based" - 1"cursor is actualy one fter the end of token".
328
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   202
    searcher := org_eclipse_jdt core dom NodeSearcher new: position - 1"Java is 0-based" - 1"cursor is actualy one fter the end of 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
   203
    tree traverse: searcher _: tree scope.
328
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   204
    (searcher found notNil and:[searcher found isKindOf: org_eclipse_jdt_internal_compiler ast AbstractMethodDeclaration]) ifTrue:[ 
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
   205
        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
   206
    ].
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
267
b6fbf84b14ae Temporary commit: More work on JavaCompletionEngine
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   208
    "
b6fbf84b14ae Temporary commit: More work on JavaCompletionEngine
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   209
    (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
   210
    "
b6fbf84b14ae Temporary commit: More work on JavaCompletionEngine
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   211
426
509fd0895236 initial checkin
Claus Gittinger <cg@exept.de>
parents: 328
diff changeset
   212
    resolver := (javaClass classForName: 'stx.libjava.tools.environment.Resolver') new: problemReporter.
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
   213
    [ 
696843cd1f9d Revamp of Java completion engine - use JDT's CompletionParser to parse source.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   214
        resolver resolve: tree.
328
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   215
    ] on: 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
   216
        completionNode := ex astNode.
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   217
        completionScope := ex scope.
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
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   220
    context node: completionNode position: position.
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   222
    (completionNode isNil or:[completionScope isNil]) ifTrue:[
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
        result := JavaCompletionEngineSimple new complete: context.
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
    ] ifFalse:[
280
100db0f8279b Support for completing Java methods (only first level).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 278
diff changeset
   225
        completionNode acceptCompletionEngine: self.
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
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
    ^ result
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
    "Created: / 02-10-2013 / 13:55:43 / 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
   231
    "Modified: / 13-08-2014 / 21:08:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
! !
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
328
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   234
!JavaCompletionEngine class methodsFor:'documentation'!
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   235
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   236
version
910
2cf84854bedc Fix version_CVS
Stefan Vogel <sv@exept.de>
parents: 426
diff changeset
   237
    ^ '$Header$'
328
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   238
!
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   239
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   240
version_CVS
910
2cf84854bedc Fix version_CVS
Stefan Vogel <sv@exept.de>
parents: 426
diff changeset
   241
    ^ '$Header$'
328
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   242
! !
d062756d694c initial checkin
Claus Gittinger <cg@exept.de>
parents: 281
diff changeset
   243