JavaSourceCodeCache.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 16 Sep 2013 14:09:52 +0100
branchdevelopment
changeset 2734 f56049613ff3
parent 2731 13f5be2bf83b
child 3324 a58245c0e83a
permissions -rw-r--r--
Initial support for live code checker / lint. JavaLintService parses the code as you type and displays all errors and other problems. This is done by running compiler in check mode in background. This also removes the necessity for JavaCompilerProblemRegistry.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
     1
"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
     2
 COPYRIGHT (c) 1996-2011 by Claus Gittinger
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
     3
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
     4
 New code and modifications done at SWING Research Group [1]:
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
     5
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
     6
 COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
     7
                            SWING Research Group, Czech Technical University in Prague
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
     8
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
     9
 This software is furnished under a license and may be used
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    10
 only in accordance with the terms of that license and with the
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    11
 inclusion of the above copyright notice.   This software may not
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    12
 be provided or otherwise made available to, or used by, any
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    13
 other person.  No title to or ownership of the software is
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    14
 hereby transferred.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    15
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
    16
 [1] Code written at SWING Research Group contains a signature
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
    17
     of one of the above copright owners. For exact set of such code,
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
    18
     see the differences between this version and version stx:libjava
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
    19
     as of 1.9.2010
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    20
"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    21
"{ Package: 'stx:libjava' }"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    22
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    23
Object subclass:#JavaSourceCodeCache
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    24
	instanceVariableNames:'parsedCodes'
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    25
	classVariableNames:'parsedCode'
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    26
	poolDictionaries:''
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    27
	category:'Languages-Java-Support'
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    28
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    29
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    30
JavaSourceCodeCache class instanceVariableNames:'instance'
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    31
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    32
"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    33
 No other class instance variables are inherited by this class.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    34
"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    35
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    36
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    37
!JavaSourceCodeCache class methodsFor:'documentation'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    38
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    39
copyright
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    40
"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    41
 COPYRIGHT (c) 1996-2011 by Claus Gittinger
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
    42
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
    43
 New code and modifications done at SWING Research Group [1]:
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
    44
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    45
 COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    46
                            SWING Research Group, Czech Technical University in Prague
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    47
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    48
 This software is furnished under a license and may be used
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    49
 only in accordance with the terms of that license and with the
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    50
 inclusion of the above copyright notice.   This software may not
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    51
 be provided or otherwise made available to, or used by, any
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    52
 other person.  No title to or ownership of the software is
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    53
 hereby transferred.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    54
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
    55
 [1] Code written at SWING Research Group contains a signature
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
    56
     of one of the above copright owners. For exact set of such code,
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
    57
     see the differences between this version and version stx:libjava
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
    58
     as of 1.9.2010
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    59
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    60
"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    61
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    62
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    63
!JavaSourceCodeCache class methodsFor:'instance creation'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    64
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    65
new
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    66
    instance isNil ifTrue: [ instance := self basicNew initialize ].
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    67
    ^ instance
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    68
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    69
    "Created: / 13-12-2010 / 13:56:31 / Jan Kurs <kurs.jan@post.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    70
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    71
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    72
!JavaSourceCodeCache methodsFor:'adding & removing'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    73
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    74
flush
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    75
    self parsedCodes removeAll.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    76
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    77
    "Created: / 17-12-2010 / 16:32:49 / Jan Kurs <kurs.jan@post.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    78
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    79
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    80
!JavaSourceCodeCache methodsFor:'initialize'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    81
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    82
initialize
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    83
    parsedCodes := IdentityDictionary new.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    84
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    85
    "Created: / 13-12-2010 / 14:11:49 / Jan Kurs <kurs.jan@post.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    86
    "Modified: / 17-12-2010 / 13:35:36 / Jan Kurs <kurs.jan@post.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    87
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    88
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    89
!JavaSourceCodeCache methodsFor:'private - searching'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    90
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    91
findMethodLine: javaMethod inMethods: methods 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    92
    | bestMatchMethod  pos |
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    93
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    94
    pos := javaMethod firstInstructionLineNumber.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    95
    bestMatchMethod := Plug new respondTo: #startLine with: [^ 0].
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    96
    methods do: [
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    97
        :method | 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    98
        method startLine > pos ifTrue: [
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    99
            ^ bestMatchMethod startLine
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   100
        ].
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   101
        bestMatchMethod := method.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   102
    ].
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   103
    ^ 0.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   104
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   105
    "Created: / 08-01-2011 / 16:10:37 / Jan Kurs <kurs.jan@post.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   106
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   107
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   108
getMethodsFor:class 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   109
    ^ parsedCodes at: class fullName ifAbsentPut: [
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   110
        [        
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
   111
            JavaParser_Old methodsIn: class source 
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   112
        ] on: Exception do:
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   113
        [
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   114
            OrderedCollection new.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   115
        ]
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   116
    ].
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   117
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   118
    "Created: / 08-01-2011 / 16:09:47 / Jan Kurs <kurs.jan@post.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
   119
    "Modified: / 09-03-2012 / 23:30:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   120
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   121
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   122
parsedCodes
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   123
    ^ parsedCodes
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   124
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   125
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   126
!JavaSourceCodeCache methodsFor:'queries'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   127
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   128
findLineForMethod:javaMethod inClass:javaClass 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   129
    | methods  mdL |
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   130
    methods := self getMethodsFor:javaClass.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   131
    mdL := self findMethodLine:javaMethod inMethods:methods.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   132
    ^ mdL
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   133
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   134
    "Created: / 13-12-2010 / 13:47:26 / Jan Kurs <kurs.jan@post.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   135
    "Modified: / 08-01-2011 / 16:10:21 / Jan Kurs <kurs.jan@post.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   136
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   137
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   138
!JavaSourceCodeCache class methodsFor:'documentation'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   139
2249
662911e44e26 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 2152
diff changeset
   140
version_CVS
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2396
diff changeset
   141
    ^ '$Header: /cvs/stx/stx/libjava/JavaSourceCodeCache.st,v 1.5 2013-09-06 00:41:26 vrany Exp $'
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
   142
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
   143
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
   144
version_HG
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
   145
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
   146
    ^ '$Changeset: <not expanded> $'
2249
662911e44e26 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 2152
diff changeset
   147
!
662911e44e26 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 2152
diff changeset
   148
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   149
version_SVN
2731
13f5be2bf83b Merged d87e89dd5276 and fe83a843a7bf (branch default - CVS HEAD)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2711 2678
diff changeset
   150
    ^ 'Id'
2152
1cbdfbcc685c Jan's version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 749
diff changeset
   151
! !
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2249
diff changeset
   152