SmallSense__ParseTreeIndex.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sun, 20 Oct 2013 03:10:44 +0100
changeset 133 bd659b67811c
parent 69 1a143dfff51b
child 193 c0c4605b3791
permissions -rw-r--r--
Improvements in Java completion. * completion for imports * completion for `new` expression * better completion for Java classes in Smalltalk code (fixes insertion)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
69
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
 COPYRIGHT (c) 2006 by eXept Software AG
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
              All Rights Reserved
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
 hereby transferred.
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
"
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
"{ Package: 'jv:smallsense' }"
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
"{ NameSpace: SmallSense }"
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
SortedCollection subclass:#ParseTreeIndex
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
	instanceVariableNames:'tree'
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
	classVariableNames:''
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
	poolDictionaries:''
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
	category:'SmallSense-Core-Index'
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
!
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
!ParseTreeIndex class methodsFor:'documentation'!
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
copyright
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
"
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
 COPYRIGHT (c) 2006 by eXept Software AG
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
              All Rights Reserved
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
 This software is furnished under a license and may be used
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
 only in accordance with the terms of that license and with the
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
 be provided or otherwise made available to, or used by, any
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
 other person.  No title to or ownership of the software is
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
 hereby transferred.
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
"
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
!
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
documentation
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
"
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
    For given parse tree, a ParseTreeIndex provides an
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
    fast access to individual (leave) nodes by keeping
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
    an index. Used by CodeView2 for various queries
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
    Experimental
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
    [author:]
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
        Jan Vrany <jan.vrany@fit.cvut.cz>
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
    [instance variables:]
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
    [class variables:]
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
    [see also:]
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
"
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
! !
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
!ParseTreeIndex methodsFor:'accessing'!
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
133
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    61
atCharacterPosition: characterPosition
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    62
    "Retrun entry at given character position or nil, if none"
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    63
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    64
    | index element |
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    65
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    66
    0"1" to:0 by:-1 do:[:d |
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    67
        index := (self indexForInserting:characterPosition) - d.
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    68
        index > self size ifTrue:[^nil].
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    69
        element := self at:index ifAbsent:nil.
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    70
        element notNil ifTrue:[
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    71
            (characterPosition between: element start and: element stop) ifTrue:[^element].
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    72
        ].
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    73
        index + 1 > self size ifTrue:[^nil].
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    74
        element := self at:index + 1 ifAbsent:nil.
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    75
        element notNil ifTrue:[
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    76
            (characterPosition between: element start and: element stop) ifTrue:[^element].
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    77
        ].
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    78
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    79
    ].
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    80
        ^nil
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    81
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    82
    "Created: / 20-10-2013 / 01:02:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    83
!
bd659b67811c Improvements in Java completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    84
69
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
tree
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
    ^ tree
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
!
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
tree:aParseNode
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
    tree := aParseNode.
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
! !
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
!ParseTreeIndex methodsFor:'utilities'!
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
newElementFor: aParseNode
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
    ^(ParseTreeIndexEntry new node: aParseNode)
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
    "Created: / 16-02-2012 / 21:00:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
! !
1a143dfff51b Copied ParseTreeIndex from libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101