SmallSense__AbstractJavaCompletionEngine.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 15 May 2014 14:41:52 +0100
changeset 212 a2caebc602a7
parent 210 1922d415c704
child 217 6ff466b83ff9
permissions -rw-r--r--
Fixes and improvements for Java/Groovy completion (part 1) * Better presentation of constructors. * Better alignment of completion window when completing packages / full class names.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'jv:smallsense' }"
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
"{ NameSpace: SmallSense }"
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
CompletionEngine subclass:#AbstractJavaCompletionEngine
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	instanceVariableNames:'class method'
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	classVariableNames:''
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
	poolDictionaries:''
208
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
     9
	category:'SmallSense-Java-Abstract'
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
208
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    12
!AbstractJavaCompletionEngine class methodsFor:'queries'!
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
208
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    14
isAbstract
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    15
    "Return if this class is an abstract class.
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    16
     True is returned here for myself only; false for subclasses.
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    17
     Abstract subclasses must redefine again."
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    18
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    19
    ^ self == SmallSense::AbstractJavaCompletionEngine.
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    20
! !
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    21
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    22
!AbstractJavaCompletionEngine methodsFor:'completion-individual'!
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
208
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    24
addClassesStartingWith: prefix
210
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    25
    ^ self addClassesStartingWith: prefix fullName: false
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    26
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    27
    "Created: / 03-10-2013 / 11:16:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    28
    "Modified: / 15-05-2014 / 07:25:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    29
!
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    30
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    31
addClassesStartingWith: prefixArg fullName: matchFullName
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    32
    | prefix |
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    33
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    34
    prefix := prefixArg.
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    35
    matchFullName ifTrue:[
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    36
        prefix := prefix copyReplaceAll: $. with: $/.
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    37
    ].
208
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    38
    context environment allClassesDo: [:cls |
210
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    39
        cls isJavaClass ifTrue:[
208
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    40
            | name i |
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
210
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    42
            matchFullName ifTrue:[
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    43
                (cls binaryName startsWith: prefix) ifTrue:[
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    44
                    result add: (ClassPO new subject: cls; showPrefix: true; yourself).
208
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    45
                ].
210
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    46
            ] ifFalse:[
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    47
                name := cls lastName.
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    48
                i := name lastIndexOf: $/.
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    49
                ((name size >= (i + prefix size))
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    50
                    and:[(name at: i + 1) == prefix first
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    51
                    and:[(name at: i + prefix size) == prefix last
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    52
                    and:[(2 to: prefix size - 1) allSatisfy:[:o| (name at: i + o) == (prefix at: o)]]]])
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    53
                    ifTrue:[
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    54
                        result add: (ClassPO new subject: cls).
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    55
                    ].
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    56
            ].
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
        ].
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
    ].
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
210
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    60
    "Created: / 15-05-2014 / 07:24:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
208
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    61
!
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    62
212
a2caebc602a7 Fixes and improvements for Java/Groovy completion (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 210
diff changeset
    63
addConstructorsForClass: aJavaClass fullName: showFullName
a2caebc602a7 Fixes and improvements for Java/Groovy completion (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 210
diff changeset
    64
    aJavaClass selectorsAndMethodsDo:[:selector :method |
a2caebc602a7 Fixes and improvements for Java/Groovy completion (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 210
diff changeset
    65
        (selector first == $< and:[ selector startsWith: '<init>' ]) ifTrue:[ 
a2caebc602a7 Fixes and improvements for Java/Groovy completion (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 210
diff changeset
    66
            result add: ((JavaConstructorPO name: selector class: aJavaClass) showPrefix: showFullName)
a2caebc602a7 Fixes and improvements for Java/Groovy completion (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 210
diff changeset
    67
        ].
a2caebc602a7 Fixes and improvements for Java/Groovy completion (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 210
diff changeset
    68
    ].
a2caebc602a7 Fixes and improvements for Java/Groovy completion (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 210
diff changeset
    69
a2caebc602a7 Fixes and improvements for Java/Groovy completion (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 210
diff changeset
    70
    "Created: / 15-05-2014 / 12:05:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a2caebc602a7 Fixes and improvements for Java/Groovy completion (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 210
diff changeset
    71
!
a2caebc602a7 Fixes and improvements for Java/Groovy completion (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 210
diff changeset
    72
208
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    73
addImportsStartingWith: prefix
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    74
    | packages |
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    75
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    76
    packages := Set new.
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    77
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    78
    "/ Class imports...
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    79
    context environment allClassesDo: [:cls |
210
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    80
        cls isJavaClass ifTrue:[
208
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    81
            | name |
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    82
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    83
            name := cls javaName.
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    84
            (cls isPublic and:[name startsWith: prefix]) ifTrue:[
210
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    85
                result add: (JavaImportPO new subject: name; klass: cls; yourself).
208
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    86
                packages add: cls javaPackage.
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    87
            ].
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    88
        ]
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    89
    ].
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    90
    "/ Package imports...
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    91
    packages do:[:each |
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    92
        result add: (JavaImportPO new subject: (each , '.*'))
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    93
    ].
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    94
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    95
    "Created: / 19-10-2013 / 17:54:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    96
    "Modified (format): / 14-05-2014 / 12:48:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    97
!
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
    98
210
1922d415c704 AbstractJavaCompletionEngineSimple refactored to use token patterns. Initial support for receiver type guessing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    99
addMethodsStartingWith: prefix
208
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
   100
    ^ self addMethodsStartingWith: prefix stripOff: nil filter: [:m | m isJavaMethod ]
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
   101
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
   102
    "Created: / 03-10-2013 / 18:01:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0b9ed08a04c0 Introduced AbstractJavaCompletionEngineSimple...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 206
diff changeset
   103
    "Modified: / 08-04-2014 / 21:37:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
206
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
! !
f74a5ffd8eae Separated JavaCompletionEngine and JavaCompletionEngineSimple.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105