JavaResolver.st
author Claus Gittinger <cg@exept.de>
Sun, 23 Feb 2020 14:03:15 +0100
branchcvs_MAIN
changeset 3997 5bb44f7e1d20
parent 3668 be42ff080cb6
permissions -rw-r--r--
#REFACTORING by exept class: Java class changed: #dumpConfigOn:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
     1
"
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3196
diff changeset
     2
 COPYRIGHT (c) 1996-2015 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: 2231
diff changeset
     3
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
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: 2231
diff changeset
     5
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3196
diff changeset
     6
 COPYRIGHT (c) 2010-2015 by Jan Vrany, Jan Kurs and Marcel Hlopko
749
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: 2231
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: 2231
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: 2231
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: 2231
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
3668
be42ff080cb6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3412
diff changeset
    23
"{ NameSpace: Smalltalk }"
be42ff080cb6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3412
diff changeset
    24
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    25
Object subclass:#JavaResolver
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    26
	instanceVariableNames:'exceptionThrower'
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    27
	classVariableNames:'uniqueInstance'
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    28
	poolDictionaries:''
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    29
	category:'Languages-Java-Reader-Support-new'
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    30
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    31
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    32
!JavaResolver class methodsFor:'documentation'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    33
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    34
copyright
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    35
"
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3196
diff changeset
    36
 COPYRIGHT (c) 1996-2015 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: 2231
diff changeset
    37
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
    38
 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: 2231
diff changeset
    39
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3196
diff changeset
    40
 COPYRIGHT (c) 2010-2015 by Jan Vrany, Jan Kurs and Marcel Hlopko
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    41
                            SWING Research Group, Czech Technical University in Prague
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    42
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    43
 This software is furnished under a license and may be used
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    44
 only in accordance with the terms of that license and with the
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    45
 inclusion of the above copyright notice.   This software may not
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    46
 be provided or otherwise made available to, or used by, any
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    47
 other person.  No title to or ownership of the software is
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    48
 hereby transferred.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    49
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
    50
 [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: 2231
diff changeset
    51
     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: 2231
diff changeset
    52
     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: 2231
diff changeset
    53
     as of 1.9.2010
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    54
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    55
"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    56
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    57
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    58
!JavaResolver class methodsFor:'initialization'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    59
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    60
initialize
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    61
    uniqueInstance := JavaResolver new.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    62
    uniqueInstance exceptionThrower: JavaVM.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    63
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    64
    "/has methods at: and at: put: 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    65
    "/uniqueInstance resolvedClasses: Java.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    66
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    67
    "Modified: / 10-04-2011 / 10:23:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    68
    "Modified: / 13-04-2011 / 14:07:35 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    69
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    70
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    71
!JavaResolver class methodsFor:'instance creation'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    72
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    73
uniqueInstance
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    74
    ^uniqueInstance.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    75
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    76
    "Created: / 08-04-2011 / 17:36:37 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    77
    "Modified: / 11-04-2011 / 19:06:49 / Marcel Hlopko <hlopkmar@fel.cvut.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
!JavaResolver methodsFor:'accessing'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    81
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    82
exceptionThrower
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    83
    ^ exceptionThrower
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    84
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    85
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    86
exceptionThrower:something
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    87
    exceptionThrower := something.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    88
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    89
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    90
!JavaResolver methodsFor:'class resolving'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    91
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    92
checkIfPrimitiveArrayRef: aJavaClassRef andWrap: result 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    93
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    94
    ^ (JavaDescriptor readFromString: aJavaClassRef name) javaClass.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    95
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    96
    "Created: / 23-05-2011 / 21:12:04 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    97
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    98
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    99
resolveClassIndentifiedByRef: aJavaClassRef init: doInit 
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   100
    "marcel is back working harder then ever :)"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   101
    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   102
    | result |
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   103
    self validateClassRef: aJavaClassRef.
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2396
diff changeset
   104
    result := self 
2794
cec025d0f359 Oops, fix for resolving.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   105
         lookupClassIfAlreadyResolved: aJavaClassRef javaClassNameOrPrimitiveTypeId
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2396
diff changeset
   106
         definedBy: aJavaClassRef classLoader.
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   107
            
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   108
"/        result notNil ifTrue:[ 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   109
"/            "/wrap result with array(s) if needed and return it
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   110
"/            "/FIXME: Marcel, can you have a look? Is that correct?
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   111
"/            ^self checkIfArrayRef: aJavaClassRef andWrap: result.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   112
"/        ].
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2396
diff changeset
   113
    "
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   114
     To resolve an unresolved symbolic reference from D to a class or interface C denoted by N,
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   115
     the following steps are performed:
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   116
     The defining class loader of D is used to create a class or interface denoted by N.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   117
     This class or interface is C. Any exception that can be thrown as a result of failure
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   118
     of class or interface creation can thus be thrown as a result of failure of class and
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   119
     interface resolution. The details of the process are given in Section 5.3.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   120
    "
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   121
    result isNil ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   122
        JavaClassReader classLoaderQuerySignal answer: (aJavaClassRef classLoader)
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   123
            do: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   124
                "#loadUnresolvedClass: wraps the class!!!!!!"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   125
                result := self loadUnresolvedClass: aJavaClassRef.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   126
                ((aJavaClassRef name first == $[) and: [ result isJavaArrayClass not ]) ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   127
                    self breakPoint: #jv.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   128
                ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   129
            ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   130
    ] ifFalse: [ result := self checkIfArrayRef: aJavaClassRef andWrap: result. ].
3668
be42ff080cb6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3412
diff changeset
   131
    result isNil ifTrue: [ self breakPoint: #mh. ^ nil ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   132
    result isJavaPrimitiveType ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   133
        ^ self checkIfPrimitiveArrayRef: aJavaClassRef andWrap: result
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   134
    ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   135
    (doInit and: [ result isJavaClass and: [ result isJavaArrayClass not ] ]) ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   136
        result classInit
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   137
    ].
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   138
     "
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   139
     If C is an array class and its element type is a reference type, then the symbolic reference
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   140
     to the class or interface representing the element type is resolved by invoking the algorithm
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   141
     in Section 5.4.3.1 recursively.""Finally, access permissions to C are checked:
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   142
     If C is not accessible (5.4.4) to D, class or interface resolution throws an IllegalAccessError.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   143
     This condition can occur, for example, if C is a class that was originally declared to be
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   144
     public but was changed to be non-public after D was compiled.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   145
     
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   146
     If steps 1 and 2 succeed but step 3 fails, C is still valid and usable. Nevertheless, resolution
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   147
     fails, and D is prohibited from accessing C." 
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   148
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   149
    (self checkPermissionsFrom: aJavaClassRef owner to: result) ifFalse: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   150
        self throwIllegalAccessError. 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   151
        ^nil.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   152
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   153
    ^result
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   154
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   155
    "Created: / 11-04-2011 / 19:07:19 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   156
    "Created: / 12-08-2011 / 22:19:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   157
    "Modified (comment): / 03-10-2011 / 23:03:01 / m"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   158
    "Modified: / 01-12-2012 / 13:44:54 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
2794
cec025d0f359 Oops, fix for resolving.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   159
    "Modified: / 05-10-2013 / 01:05:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   160
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   161
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   162
!JavaResolver methodsFor:'class resolving helpers'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   163
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   164
checkIfArrayRef: aJavaClassRef andWrap: nonArrayClass 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   165
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   166
    "/wrap result with array(s) if needed and return it
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   167
    | class|    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   168
    class := nonArrayClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   169
    aJavaClassRef name do:[:c|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   170
        c ~~ $[ ifTrue:[ ^ class ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   171
        class := class javaArrayClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   172
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   173
    ^class
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   174
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   175
    "Modified: / 11-04-2011 / 19:31:43 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   176
    "Modified: / 23-10-2011 / 23:46:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   177
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   178
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   179
checkPermissionsFrom: refOwner to: resolvedClass    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   180
    refOwner hasMagicAccessRights ifTrue: [ ^ true ].
2942
c39cbf09ea3d Fixes for Java reflection on Smalltalk classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2908
diff changeset
   181
    resolvedClass isJavaClass ifFalse:[ ^ true ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   182
    (JavaDescriptor isJavaPrimitiveArrayName: resolvedClass javaName) ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   183
        ^ true
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   184
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   185
    resolvedClass isPublic ifTrue: [ ^ true ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   186
    resolvedClass classLoader = refOwner classLoader ifFalse: [ ^ false. ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   187
    refOwner javaPackage = resolvedClass javaPackage ifTrue: [ ^ true ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   188
    
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   189
    "/a little bit too verbose here just so it's clear what's in query
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   190
    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   191
    JavaVM privilegedAccessQuery query ifTrue: [ ^ true ] ifFalse: [ ^ false ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   192
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   193
    "Created: / 11-04-2011 / 19:35:21 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   194
    "Modified (comment): / 09-10-2011 / 23:11:54 / Marcel Hlopko <hlopik@gmail.com>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   195
    "Modified: / 23-08-2012 / 20:21:40 / m"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   196
    "Modified: / 30-11-2012 / 20:34:26 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
2942
c39cbf09ea3d Fixes for Java reflection on Smalltalk classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2908
diff changeset
   197
    "Modified: / 20-11-2013 / 16:07:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   198
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   199
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   200
loadUnresolvedClass: aJavaClassRef 
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   201
    | nm cls i |
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   202
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   203
    nm := aJavaClassRef name.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   204
    nm size == 1 ifTrue:[ 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   205
        JavaDescriptor baseTypes at: nm first ifPresent: [:cls | ^ cls ] 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   206
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   207
    "Note, that JavaVM>>classForName: itself deals with class loaders.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   208
     The caller of me should set one using code like:
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   209
     
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   210
     JavaClassReader classLoaderQuerySignal answer: loader do:[call me]     
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   211
    "
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   212
    cls := JavaVM classForName: nm.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   213
    (nm startsWith:$[) ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   214
        i := 1.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   215
        [ (nm at:i) == $[ ] whileTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   216
            cls := cls javaArrayClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   217
            i := i + 1.                                        
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   218
        ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   219
        self assert: (nm at:i) == $L.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   220
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   221
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   222
    ^cls.
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   223
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   224
    "Created: / 11-04-2011 / 19:27:10 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   225
    "Modified: / 23-05-2011 / 21:06:25 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   226
    "Modified: / 29-02-2012 / 09:20:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   227
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   228
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2396
diff changeset
   229
lookupClassIfAlreadyResolved: javaClassName definedBy: classLoader
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2396
diff changeset
   230
    ^ JavaVM classNamed: javaClassName definedBy: classLoader
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   231
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2396
diff changeset
   232
    "Created: / 02-05-2013 / 01:20:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   233
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   234
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   235
validateClassRef: aJavaClassRef 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   236
    self assert: aJavaClassRef isJavaRef.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   237
    self assert: aJavaClassRef isJavaClassRef .
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   238
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   239
    "Modified: / 23-05-2011 / 21:04:00 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   240
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   241
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   242
!JavaResolver methodsFor:'common helpers'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   243
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   244
checkPermissionsForMethodOrField: aJavaMethodOrField from: accessingJavaClass to: resolvedJavaClass 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   245
    "A class or interface C is accessible to a class or interface D if 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   246
     and only if either of the following conditions are true:
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   247
     C is public.
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   248
     C and D are members of the same runtime package (§5.3).
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   249
     A field or method R is accessible to a class or interface D if and only
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   250
     if any of the following conditions is true:
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   251
     R is public.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   252
     R is protected and is declared in a class C, and D is either a subclass
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   253
     of C or C itself.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   254
     R is either protected or package private (that is, neither public nor
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   255
     protected nor private), and is declared by a class in the same runtime
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   256
     package as D.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   257
     R is private and is declared in D.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   258
     This discussion of access control omits a related restriction on the target
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   259
     of a protected field access or method invocation (the target must be of class
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   260
     D or a subtype of D). That requirement is checked as part of the verification
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   261
     process (§5.4.1); it is not part of link-time access control."
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   262
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   263
    accessingJavaClass hasMagicAccessRights ifTrue: [ ^true ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   264
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   265
    (self checkPermissionsFrom: accessingJavaClass to: resolvedJavaClass) ifFalse: [
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   266
        JavaVM privilegedAccessQuery query ifTrue: [ ^ true ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   267
        ^ false
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   268
    ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   269
    aJavaMethodOrField isPublic ifTrue: [ ^ true ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   270
    ((aJavaMethodOrField isProtected 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   271
        and: [
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   272
            resolvedJavaClass javaComponentClass 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   273
                equalsOrIsSubclassOf: aJavaMethodOrField javaClass
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   274
        ]) 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   275
            and: [
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   276
                accessingJavaClass javaComponentClass 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   277
                    equalsOrIsSubclassOf: aJavaMethodOrField javaClass
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   278
            ]) 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   279
            ifTrue: [ ^ true ].
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   280
    ((
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   281
    aJavaMethodOrField isPrivate not 
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   282
        and: [ resolvedJavaClass javaPackage = accessingJavaClass javaPackage ]) 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   283
            and: [ resolvedJavaClass classLoader = accessingJavaClass classLoader ]) 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   284
            ifTrue: [ ^ true ].
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   285
    (aJavaMethodOrField isPrivate 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   286
        and: [ aJavaMethodOrField javaClass name = accessingJavaClass name ]) 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   287
            ifTrue: [ ^ true ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   288
    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   289
    "/a little bit too verbose here just so it's clear what's in query
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   290
    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   291
    JavaVM privilegedAccessQuery query ifTrue: [ ^ true ] ifFalse: [ ^ false ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   292
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   293
    "Created: / 14-04-2011 / 14:19:33 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   294
    "Modified (comment): / 09-10-2011 / 23:12:48 / Marcel Hlopko <hlopik@gmail.com>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   295
    "Modified: / 18-11-2012 / 16:24:29 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   296
    "Modified (format): / 15-09-2013 / 00:09:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   297
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   298
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   299
!JavaResolver methodsFor:'exceptions'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   300
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   301
throwAbstractMethodError
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   302
    exceptionThrower throwAbstractMethodError.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   303
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   304
    "Created: / 11-04-2011 / 20:19:42 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   305
    "Modified: / 13-04-2011 / 14:07:46 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   306
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   307
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   308
throwIllegalAccessError
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   309
    exceptionThrower throwIllegalAccessError.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   310
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   311
    "Created: / 11-04-2011 / 19:39:16 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   312
    "Modified: / 13-04-2011 / 23:06:58 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   313
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   314
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   315
throwIncompatibleClassChangeError
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   316
    exceptionThrower throwIncompatibleClassChangeError.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   317
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   318
    "Created: / 11-04-2011 / 20:02:01 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   319
    "Modified: / 13-04-2011 / 14:07:54 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   320
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   321
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   322
throwNoSuchFieldException
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   323
    exceptionThrower throwNoSuchFieldException.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   324
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   325
    "Created: / 11-04-2011 / 21:35:02 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   326
    "Modified: / 13-04-2011 / 14:07:57 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   327
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   328
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   329
throwNoSuchMethodError
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   330
    exceptionThrower throwNoSuchMethodError.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   331
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   332
    "Created: / 11-04-2011 / 20:19:41 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   333
    "Modified: / 13-04-2011 / 14:08:01 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   334
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   335
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   336
!JavaResolver methodsFor:'field resolving'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   337
3196
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   338
resolveFieldIndentifiedByRef:aJavaFieldRef 
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   339
    | result  class |
3196
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   340
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   341
    self validateFieldRef:aJavaFieldRef.
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   342
    result := self lookupFieldIfAlreadyResolved:aJavaFieldRef.
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   343
    result notNil ifTrue:[
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   344
        ^ result
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   345
    ].
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   346
    class := aJavaFieldRef classRef resolve:false.
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   347
    class isNil ifTrue:[
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   348
        self error:'should not happen - tell mh'
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   349
    ].
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   350
    result := class lookupFieldByNameAndType:aJavaFieldRef nameAndType.
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   351
    result isNil ifTrue:[
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   352
        self throwNoSuchFieldException
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   353
    ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   354
    (self 
3196
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   355
        checkPermissionsForField:result
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   356
        from:aJavaFieldRef classRef owner
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   357
        to:class) ifFalse:[ self throwIllegalAccessError ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   358
    ^ result.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   359
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   360
    "
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   361
     To resolve an unresolved symbolic reference from D to a field in a class
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   362
     or interface C, the symbolic reference to C given by the field reference
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   363
     must first be resolved (§5.4.3.1). Therefore, any exception that can be
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   364
     thrown as a result of failure of resolution of a class or interface reference
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   365
     can be thrown as a result of failure of field resolution. If the reference
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   366
     to C can be successfully resolved, an exception relating to the failure of
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   367
     resolution of the field reference itself can be thrown.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   368
     When resolving a field reference, field resolution first attempts to look
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   369
     up the referenced field in C and its superclasses:
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   370
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   371
     If C declares a field with the name and descriptor specified by the field
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   372
     reference, field lookup succeeds. The declared field is the result of the
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   373
     field lookup.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   374
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   375
     Otherwise, field lookup is applied recursively to the direct superinterfaces
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   376
     of the specified class or interface C.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   377
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   378
     Otherwise, if C has a superclass S, field lookup is applied recursively to S.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   379
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   380
     Otherwise, field lookup fails.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   381
     If field lookup fails, field resolution throws a NoSuchFieldError. Otherwise,
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   382
     if field lookup succeeds but the referenced field is not accessible (§5.4.4)
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   383
     to D, field resolution throws an IllegalAccessError.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   384
     Otherwise, let <E, L1> be the class or interface in which the referenced
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   385
     field is actually declared and let L2 be the defining loader of D. Let T be
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   386
     the name of the type of the referenced field. The Java virtual machine must
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   387
     impose the loading constraint that TL1=TL2(§5.3.4)."
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   388
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   389
    "Created: / 11-04-2011 / 21:15:20 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   390
    "Modified: / 01-12-2012 / 13:45:41 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
3196
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   391
    "Modified: / 04-08-2014 / 15:52:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   392
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   393
3196
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   394
resolveStaticFieldIndentifiedByRef:aJavaFieldRef 
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   395
    | result  class |
3196
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   396
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   397
    self validateFieldRef:aJavaFieldRef.
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   398
    result := self lookupFieldIfAlreadyResolved:aJavaFieldRef.
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   399
    result notNil ifTrue:[
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   400
        ^ result
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   401
    ].
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   402
    class := aJavaFieldRef classRef resolve:false.
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   403
    class isNil ifTrue:[
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   404
        self error:'should not happen - tell mh'
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   405
    ].
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   406
    result := class lookupStaticFieldByNameAndType:aJavaFieldRef nameAndType.
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   407
    result isNil ifTrue:[
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   408
        self throwNoSuchFieldException
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   409
    ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   410
    (self 
3196
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   411
        checkPermissionsForField:result
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   412
        from:aJavaFieldRef classRef owner
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   413
        to:class) ifFalse:[ self throwIllegalAccessError ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   414
    ^ result.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   415
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   416
    "
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   417
     To resolve an unresolved symbolic reference from D to a field in a class
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   418
     or interface C, the symbolic reference to C given by the field reference
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   419
     must first be resolved (§5.4.3.1). Therefore, any exception that can be
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   420
     thrown as a result of failure of resolution of a class or interface reference
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   421
     can be thrown as a result of failure of field resolution. If the reference
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   422
     to C can be successfully resolved, an exception relating to the failure of
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   423
     resolution of the field reference itself can be thrown.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   424
     When resolving a field reference, field resolution first attempts to look
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   425
     up the referenced field in C and its superclasses:
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   426
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   427
     If C declares a field with the name and descriptor specified by the field
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   428
     reference, field lookup succeeds. The declared field is the result of the
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   429
     field lookup.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   430
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   431
     Otherwise, field lookup is applied recursively to the direct superinterfaces
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   432
     of the specified class or interface C.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   433
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   434
     Otherwise, if C has a superclass S, field lookup is applied recursively to S.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   435
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   436
     Otherwise, field lookup fails.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   437
     If field lookup fails, field resolution throws a NoSuchFieldError. Otherwise,
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   438
     if field lookup succeeds but the referenced field is not accessible (§5.4.4)
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   439
     to D, field resolution throws an IllegalAccessError.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   440
     Otherwise, let <E, L1> be the class or interface in which the referenced
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   441
     field is actually declared and let L2 be the defining loader of D. Let T be
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   442
     the name of the type of the referenced field. The Java virtual machine must
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   443
     impose the loading constraint that TL1=TL2(§5.3.4)."
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   444
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   445
    "Created: / 28-04-2011 / 22:31:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   446
    "Modified: / 01-12-2012 / 13:45:45 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
3196
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   447
    "Modified: / 04-08-2014 / 15:52:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   448
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   449
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   450
!JavaResolver methodsFor:'field resolving helpers'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   451
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   452
checkPermissionsForField: aJavaField from: accessingJavaClass to: resolvedJavaClass     
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   453
    ^ self 
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   454
        checkPermissionsForMethodOrField: aJavaField
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   455
        from: accessingJavaClass
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   456
        to: resolvedJavaClass.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   457
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   458
    "Created: / 11-04-2011 / 21:46:29 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   459
    "Modified: / 01-12-2012 / 13:45:55 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   460
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   461
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   462
lookupFieldIfAlreadyResolved: aJavaFieldRef 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   463
    ^ nil.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   464
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   465
    "Created: / 11-04-2011 / 21:16:45 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   466
    "Modified: / 13-04-2011 / 11:57:13 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   467
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   468
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   469
validateFieldRef: aJavaFieldRef 
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   470
    aJavaFieldRef isJavaRef ifFalse: [ self halt: 'I expected Java Ref' ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   471
    aJavaFieldRef isJavaFieldRef ifFalse: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   472
        self error: 'I expected Java Field Ref'
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   473
    ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   474
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   475
    "Created: / 11-04-2011 / 21:16:44 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   476
    "Modified: / 01-12-2012 / 13:46:02 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   477
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   478
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   479
!JavaResolver methodsFor:'interface method resolving'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   480
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   481
resolveInterfaceMethodIdentifiedByRef: aJavaInterfaceMethodRef 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   482
    | result  class |
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   483
    self validateInterfaceMethodRef: aJavaInterfaceMethodRef.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   484
    result := self 
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   485
            lookupInterfaceMethodIfAlreadyResolved: aJavaInterfaceMethodRef.
2908
064418faa2e3 Another pass over Mauve tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2794
diff changeset
   486
    result notNil ifTrue: [ ^ result ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   487
    class := aJavaInterfaceMethodRef classRef resolve: false.
2908
064418faa2e3 Another pass over Mauve tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2794
diff changeset
   488
    class isNil ifTrue: [ self error: 'should not happen - tell mh' ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   489
    class isInterface ifFalse: [ self throwIncompatibleClassChangeError ].
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   490
    result := class 
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   491
            lookupMethodByNameAndType: aJavaInterfaceMethodRef nameAndType.
2908
064418faa2e3 Another pass over Mauve tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2794
diff changeset
   492
    result isNil ifTrue: [ self throwNoSuchMethodError ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   493
    (self 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   494
        checkPermissionsForMethod: result
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   495
        from: aJavaInterfaceMethodRef classRef owner
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   496
        to: class) ifFalse: [ self throwIllegalAccessError ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   497
    ^ result.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   498
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   499
    "
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   500
     To resolve an unresolved symbolic reference from D to an interface method in an
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   501
     interface C, the symbolic reference to C given by the interface method reference is
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   502
     first resolved (§5.4.3.1). Therefore, any exceptions that can be thrown as a result
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   503
     of failure of resolution of an interface reference can be thrown as a result of
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   504
     failure of interface method resolution. If the reference to C can be successfully
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   505
     resolved, exceptions relating to the resolution of the interface method reference
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   506
     itself can be thrown.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   507
     When resolving an interface method reference:
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   508
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   509
     If C is not an interface, interface method resolution throws an IncompatibleClassChangeError."
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   510
    "Otherwise, if the referenced method does not have the same name and descriptor as
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   511
a method in C or in one of the superinterfaces of C, or in class Object, interface
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   512
method resolution throws a NoSuchMethodError.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   513
Otherwise, let <E, L1> be the interface in which the referenced interface method is
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   514
actually declared and let L2 be the defining loader of D. Let T0 be the name of
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   515
the type returned by the referenced method, and let T1, ..., Tn be the names of the
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   516
argument types of the referenced method. The Java virtual machine must impose the
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   517
loading constraints TiL1 = TiL2 for i = 0 to n (§5.3.4)."
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   518
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   519
    "Modified: / 01-12-2012 / 13:46:09 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
2908
064418faa2e3 Another pass over Mauve tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2794
diff changeset
   520
    "Modified: / 09-11-2013 / 00:12:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   521
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   522
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   523
!JavaResolver methodsFor:'interface method resolving helpers'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   524
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   525
lookupInterfaceMethodIfAlreadyResolved: aJavaInterfaceMethodRef 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   526
    ^  nil.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   527
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   528
    "Created: / 13-04-2011 / 11:53:36 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   529
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   530
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   531
validateInterfaceMethodRef: aJavaInterfaceMethodRef 
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   532
    aJavaInterfaceMethodRef isJavaRef ifFalse: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   533
        self error: 'I expected JavaRef instance as an argument'
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   534
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   535
    aJavaInterfaceMethodRef isJavaInterfaceMethodRef ifFalse: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   536
        self error: 'I expected JavaMethodRef instance as an argument'
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   537
    ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   538
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   539
    "Created: / 13-04-2011 / 11:53:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   540
    "Modified: / 01-12-2012 / 13:46:20 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   541
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   542
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   543
!JavaResolver methodsFor:'method resolving'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   544
3196
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   545
resolveMethodIndentifiedByRef:aJavaMethodRef 
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   546
    | result  class |
3196
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   547
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   548
    self validateMethodRef:aJavaMethodRef.
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   549
    result := self lookupMethodIfAlreadyResolved:aJavaMethodRef.
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   550
    result notNil ifTrue:[
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   551
        ^ result
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   552
    ].
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   553
    class := aJavaMethodRef classRef resolve:false.
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   554
    class isNil ifTrue:[
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   555
        self error:'should not happen - tell mh'
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   556
    ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   557
     "Array types responds to all method of class java.lang.Object"
3196
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   558
    class isJavaArrayClass ifTrue:[
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   559
        class := JavaVM classForName:'java.lang.Object'.
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   560
    ].
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   561
     "
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   562
     To resolve an unresolved symbolic reference from D to a method in
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   563
     a class C, the symbolic reference to C given by the method reference
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   564
     is first resolved (§5.4.3.1). Therefore, any exceptions that can be
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   565
     thrown due to resolution of a class reference can be thrown as a result
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   566
     of method resolution. If the reference to C can be successfully resolved,
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   567
     exceptions relating to the resolution of the method reference itself
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   568
     can be thrown.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   569
     When resolving a method reference:
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   570
     
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   571
     Method resolution checks whether C is a class or an interface.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   572
     If C is an interface, method resolution throws an IncompatibleClassChangeError."
3196
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   573
    class isInterface ifTrue:[
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   574
        self throwIncompatibleClassChangeError
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   575
    ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   576
     "Method resolution attempts to look up the referenced method in C and its
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   577
     superclasses:
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   578
     If C declares a method with the name and descriptor specified by the method
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   579
     reference, method lookup succeeds.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   580
     Otherwise, if C has a superclass, step 2 of method lookup is recursively
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   581
     invoked on the direct superclass of C.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   582
     
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   583
     Otherwise, method lookup attempts to locate the referenced method in any of
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   584
     the superinterfaces of the specified class C.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   585
     If any superinterface of C declares a method with the name and descriptor
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   586
     specified by the method reference, method lookup succeeds.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   587
     Otherwise, method lookup fails.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   588
     If method lookup fails, method resolution throws a NoSuchMethodError. If method
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   589
     lookup succeeds and the method is abstract, but C is not abstract, method resolution
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   590
     throws an AbstractMethodError. Otherwise, if the referenced method is not accessible
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   591
     (§5.4.4) to D, method resolution throws an IllegalAccessError."
3196
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   592
    result := class lookupMethodByNameAndType:aJavaMethodRef nameAndType.
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   593
    result isNil ifTrue:[
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   594
        self throwNoSuchMethodError
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   595
    ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   596
    (result isAbstract 
3196
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   597
        and:[ result javaClass isInterface not and:[ class isAbstract not ] ]) 
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   598
            ifTrue:[ self throwAbstractMethodError ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   599
    (self 
3196
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   600
        checkPermissionsForMethod:result
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   601
        from:aJavaMethodRef classRef owner
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   602
        to:class) ifFalse:[ self throwIllegalAccessError ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   603
    ^ result.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   604
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   605
    "Otherwise, let <E, L1> be the class or interface in which the referenced method is
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   606
     actually declared and let L2 be the defining loader of D. Let T0 be the name of
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   607
     the type returned by the referenced method, and let T1, ..., Tn be the names of
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   608
     the argument types of the referenced method. The Java virtual machine must impose
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   609
     the loading constraints TiL1=TiL2 for i = 0 to n (§5.3.4)."
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   610
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   611
    "Created: / 11-04-2011 / 19:45:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   612
    "Modified: / 14-04-2011 / 00:01:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   613
    "Modified (format): / 01-12-2012 / 13:46:25 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
3196
d617b4590431 (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   614
    "Modified: / 04-08-2014 / 15:55:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   615
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   616
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   617
!JavaResolver methodsFor:'method resolving helpers'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   618
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   619
checkPermissionsForMethod: aJavaMethod from: accessingJavaClass to: resolvedJavaClass    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   620
    ^ self 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   621
        checkPermissionsForMethodOrField: aJavaMethod
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   622
        from: accessingJavaClass
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   623
        to: resolvedJavaClass.
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   624
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   625
    "Created: / 11-04-2011 / 20:20:12 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   626
    "Modified: / 24-05-2011 / 14:06:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   627
    "Modified: / 09-02-2012 / 23:15:48 / mh <hlopik@gmail.com>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   628
    "Modified: / 01-12-2012 / 13:46:58 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   629
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   630
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   631
lookupMethodIfAlreadyResolved: aJavaMethodRef 
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   632
    ^ nil.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   633
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   634
    "Created: / 11-04-2011 / 19:50:38 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   635
    "Modified: / 13-04-2011 / 11:57:00 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   636
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   637
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   638
validateMethodRef: aJavaMethodRef 
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   639
    aJavaMethodRef isJavaRef ifFalse: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   640
        self error: 'I expected JavaRef instance as an argument'
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   641
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   642
    aJavaMethodRef isJavaMethodRef ifFalse: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   643
        self error: 'I expected JavaMethodRef instance as an argument'
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   644
    ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   645
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   646
    "Created: / 11-04-2011 / 19:47:25 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   647
    "Modified: / 01-12-2012 / 13:47:03 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   648
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   649
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   650
!JavaResolver class methodsFor:'documentation'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   651
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   652
version_CVS
3668
be42ff080cb6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3412
diff changeset
   653
    ^ '$Header$'
2156
a8c5720d1d05 changed: #resolveMethodIndentifiedByRef:
Claus Gittinger <cg@exept.de>
parents: 2152
diff changeset
   654
!
a8c5720d1d05 changed: #resolveMethodIndentifiedByRef:
Claus Gittinger <cg@exept.de>
parents: 2152
diff changeset
   655
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   656
version_HG
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   657
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   658
    ^ '$Changeset: <not expanded> $'
2156
a8c5720d1d05 changed: #resolveMethodIndentifiedByRef:
Claus Gittinger <cg@exept.de>
parents: 2152
diff changeset
   659
!
a8c5720d1d05 changed: #resolveMethodIndentifiedByRef:
Claus Gittinger <cg@exept.de>
parents: 2152
diff changeset
   660
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   661
version_SVN
3668
be42ff080cb6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 3412
diff changeset
   662
    ^ '$Id$'
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   663
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   664
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2231
diff changeset
   665
2152
1cbdfbcc685c Jan's version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 750
diff changeset
   666
JavaResolver initialize!