src/JavaResolver.st
author vranyj1
Wed, 29 Feb 2012 09:12:56 +0000
branchjk_new_structure
changeset 1392 b8cd2c9cf1ef
parent 1368 5f502e712403
child 1393 dc859d4870f1
permissions -rw-r--r--
Fixes for eager resolving
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
877
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
     1
"
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
     2
 COPYRIGHT (c) 1996-2011 by Claus Gittinger
1152
040cba55a7d2 Copyright fixes
vranyj1
parents: 1062
diff changeset
     3
1155
vranyj1
parents: 1152
diff changeset
     4
 New code and modifications done at SWING Research Group [1]:
1152
040cba55a7d2 Copyright fixes
vranyj1
parents: 1062
diff changeset
     5
877
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
     6
 COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
     7
                            SWING Research Group, Czech Technical University in Prague
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
     8
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
     9
 This software is furnished under a license and may be used
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    10
 only in accordance with the terms of that license and with the
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    11
 inclusion of the above copyright notice.   This software may not
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    12
 be provided or otherwise made available to, or used by, any
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    13
 other person.  No title to or ownership of the software is
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    14
 hereby transferred.
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    15
1155
vranyj1
parents: 1152
diff changeset
    16
 [1] Code written at SWING Research Group contains a signature
vranyj1
parents: 1152
diff changeset
    17
     of one of the above copright owners. For exact set of such code,
vranyj1
parents: 1152
diff changeset
    18
     see the differences between this version and version stx:libjava
1152
040cba55a7d2 Copyright fixes
vranyj1
parents: 1062
diff changeset
    19
     as of 1.9.2010
877
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    20
"
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    21
"{ Package: 'stx:libjava' }"
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    22
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    23
Object subclass:#JavaResolver
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
    24
	instanceVariableNames:'exceptionThrower'
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    25
	classVariableNames:'uniqueInstance'
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    26
	poolDictionaries:''
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    27
	category:'Languages-Java-Reader-Support-new'
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    28
!
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    29
877
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    30
!JavaResolver class methodsFor:'documentation'!
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    31
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    32
copyright
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    33
"
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    34
 COPYRIGHT (c) 1996-2011 by Claus Gittinger
1152
040cba55a7d2 Copyright fixes
vranyj1
parents: 1062
diff changeset
    35
1155
vranyj1
parents: 1152
diff changeset
    36
 New code and modifications done at SWING Research Group [1]:
1152
040cba55a7d2 Copyright fixes
vranyj1
parents: 1062
diff changeset
    37
877
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    38
 COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    39
                            SWING Research Group, Czech Technical University in Prague
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    40
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    41
 This software is furnished under a license and may be used
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    42
 only in accordance with the terms of that license and with the
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    43
 inclusion of the above copyright notice.   This software may not
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    44
 be provided or otherwise made available to, or used by, any
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    45
 other person.  No title to or ownership of the software is
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    46
 hereby transferred.
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    47
1155
vranyj1
parents: 1152
diff changeset
    48
 [1] Code written at SWING Research Group contains a signature
vranyj1
parents: 1152
diff changeset
    49
     of one of the above copright owners. For exact set of such code,
vranyj1
parents: 1152
diff changeset
    50
     see the differences between this version and version stx:libjava
1152
040cba55a7d2 Copyright fixes
vranyj1
parents: 1062
diff changeset
    51
     as of 1.9.2010
877
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    52
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    53
"
f5a5b93e1c78 Cleanup phase 1
vranyj1
parents: 851
diff changeset
    54
! !
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    55
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    56
!JavaResolver class methodsFor:'initialization'!
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    57
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    58
initialize
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    59
    uniqueInstance := JavaResolver new.
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
    60
    uniqueInstance exceptionThrower: JavaVM.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
    61
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    62
    "/has methods at: and at: put: 
759
66d28d2fa62e JavaResolver: fixed bug in JavaResolver class>>#initialize
vranyj1
parents: 758
diff changeset
    63
    "/uniqueInstance resolvedClasses: Java.
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    64
759
66d28d2fa62e JavaResolver: fixed bug in JavaResolver class>>#initialize
vranyj1
parents: 758
diff changeset
    65
    "Modified: / 10-04-2011 / 10:23:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
    66
    "Modified: / 13-04-2011 / 14:07:35 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    67
! !
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    68
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    69
!JavaResolver class methodsFor:'instance creation'!
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    70
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    71
uniqueInstance
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
    72
    ^uniqueInstance.
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    73
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    74
    "Created: / 08-04-2011 / 17:36:37 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
    75
    "Modified: / 11-04-2011 / 19:06:49 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
    76
! !
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
    77
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
    78
!JavaResolver methodsFor:'accessing'!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
    79
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
    80
exceptionThrower
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
    81
    ^ exceptionThrower
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
    82
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
    83
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
    84
exceptionThrower:something
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
    85
    exceptionThrower := something.
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    86
! !
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    87
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    88
!JavaResolver methodsFor:'class resolving'!
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
    89
817
3f2405c6ef88 its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :)
hlopkmar
parents: 816
diff changeset
    90
checkIfPrimitiveArrayRef: aJavaClassRef andWrap: result 
3f2405c6ef88 its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :)
hlopkmar
parents: 816
diff changeset
    91
3f2405c6ef88 its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :)
hlopkmar
parents: 816
diff changeset
    92
    ^ (JavaDescriptor readFromString: aJavaClassRef name) javaClass.
3f2405c6ef88 its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :)
hlopkmar
parents: 816
diff changeset
    93
3f2405c6ef88 its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :)
hlopkmar
parents: 816
diff changeset
    94
    "Created: / 23-05-2011 / 21:12:04 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
3f2405c6ef88 its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :)
hlopkmar
parents: 816
diff changeset
    95
!
3f2405c6ef88 its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :)
hlopkmar
parents: 816
diff changeset
    96
912
e651488f5741 Many fixes in reflection, expecially for generic types support
vranyj1
parents: 908
diff changeset
    97
resolveClassIndentifiedByRef: aJavaClassRef init: doInit 
1014
c8007906749d marcel back in service :)
hlopkmar
parents: 992
diff changeset
    98
    "marcel is back working harder then ever :)"
1225
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
    99
    
992
6d3e3d937fda Class loader mess cleanup, more will come later...
vranyj1
parents: 960
diff changeset
   100
    | result |
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   101
    self validateClassRef: aJavaClassRef.
1225
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   102
    JavaClassReader classLoaderQuerySignal answer: (aJavaClassRef classLoader)
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   103
        do: [
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   104
            result := self lookupClassIfAlreadyResolved: aJavaClassRef javaClassName.
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   105
            
1041
d5ff8885b19f ClassLoader refactoring - loads groovy but funny
vranyj1
parents: 1036
diff changeset
   106
"/        result notNil ifTrue:[ 
d5ff8885b19f ClassLoader refactoring - loads groovy but funny
vranyj1
parents: 1036
diff changeset
   107
"/            "/wrap result with array(s) if needed and return it
d5ff8885b19f ClassLoader refactoring - loads groovy but funny
vranyj1
parents: 1036
diff changeset
   108
"/            "/FIXME: Marcel, can you have a look? Is that correct?
d5ff8885b19f ClassLoader refactoring - loads groovy but funny
vranyj1
parents: 1036
diff changeset
   109
"/            ^self checkIfArrayRef: aJavaClassRef andWrap: result.
d5ff8885b19f ClassLoader refactoring - loads groovy but funny
vranyj1
parents: 1036
diff changeset
   110
"/        ].
1225
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   111
        ].
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   112
     "
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   113
     To resolve an unresolved symbolic reference from D to a class or interface C denoted by N,
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   114
     the following steps are performed:
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   115
     The defining class loader of D is used to create a class or interface denoted by N.
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   116
     This class or interface is C. Any exception that can be thrown as a result of failure
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   117
     of class or interface creation can thus be thrown as a result of failure of class and
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   118
     interface resolution. The details of the process are given in Section 5.3.
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   119
    "
1225
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   120
    result isNil ifTrue: [
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   121
        JavaClassReader classLoaderQuerySignal answer: (aJavaClassRef classLoader)
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   122
            do: [
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   123
                "#loadUnresolvedClass: wraps the class!!!!!!"
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   124
                result := self loadUnresolvedClass: aJavaClassRef.
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   125
                ((aJavaClassRef name first == $[) and: [ result isJavaArrayClass not ]) ifTrue: [
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   126
                    self breakPoint: #jv.
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   127
                ]
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   128
            ].
1368
5f502e712403 Groovy language support and integration
vranyj1
parents: 1362
diff changeset
   129
    ] ifFalse: [ 
5f502e712403 Groovy language support and integration
vranyj1
parents: 1362
diff changeset
   130
        result := self checkIfArrayRef: aJavaClassRef andWrap: result. 
5f502e712403 Groovy language support and integration
vranyj1
parents: 1362
diff changeset
   131
    ].
1225
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   132
    result isNil ifTrue: [ self breakPoint: #mh ].
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   133
    result isJavaPrimitiveType ifTrue: [
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   134
        ^ self checkIfPrimitiveArrayRef: aJavaClassRef andWrap: result
883
b0eecab8d572 - JavaResolver: fixes in class resolving
vranyj1
parents: 882
diff changeset
   135
    ].
1225
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   136
    (doInit and: [ result isJavaArrayClass not ]) ifTrue: [ result classInit ].
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   137
     "
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   138
     If C is an array class and its element type is a reference type, then the symbolic reference
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   139
     to the class or interface representing the element type is resolved by invoking the algorithm
1225
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   140
     in Section 5.4.3.1 recursively.""Finally, access permissions to C are checked:
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   141
     If C is not accessible (5.4.4) to D, class or interface resolution throws an IllegalAccessError.
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   142
     This condition can occur, for example, if C is a class that was originally declared to be
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   143
     public but was changed to be non-public after D was compiled.
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   144
     
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   145
     If steps 1 and 2 succeed but step 3 fails, C is still valid and usable. Nevertheless, resolution
1238
c7cddd513da6 Few fixes for Tomcat
vranyj1
parents: 1235
diff changeset
   146
     fails, and D is prohibited from accessing C." 
c7cddd513da6 Few fixes for Tomcat
vranyj1
parents: 1235
diff changeset
   147
c7cddd513da6 Few fixes for Tomcat
vranyj1
parents: 1235
diff changeset
   148
    "JV@2011-08-10: HACK FOR SAXON DEMO!!!!!!" 
c7cddd513da6 Few fixes for Tomcat
vranyj1
parents: 1235
diff changeset
   149
    "(self checkPermissionsFrom: aJavaClassRef owner to: result)"
c7cddd513da6 Few fixes for Tomcat
vranyj1
parents: 1235
diff changeset
   150
c7cddd513da6 Few fixes for Tomcat
vranyj1
parents: 1235
diff changeset
   151
    "JV@2011-12-07: HACK FOR TOMCAT DEMO :-))"
c7cddd513da6 Few fixes for Tomcat
vranyj1
parents: 1235
diff changeset
   152
    OperatingSystem getLoginName = 'm' ifTrue:[
c7cddd513da6 Few fixes for Tomcat
vranyj1
parents: 1235
diff changeset
   153
        (self checkPermissionsFrom: aJavaClassRef owner to: result) ifTrue: [ ^ result ] ifFalse: [ self throwIllegalAccessError ].
c7cddd513da6 Few fixes for Tomcat
vranyj1
parents: 1235
diff changeset
   154
    ] ifFalse:[
c7cddd513da6 Few fixes for Tomcat
vranyj1
parents: 1235
diff changeset
   155
        ^result
c7cddd513da6 Few fixes for Tomcat
vranyj1
parents: 1235
diff changeset
   156
    ].
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   157
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   158
    "Created: / 11-04-2011 / 19:07:19 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
912
e651488f5741 Many fixes in reflection, expecially for generic types support
vranyj1
parents: 908
diff changeset
   159
    "Created: / 12-08-2011 / 22:19:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1014
c8007906749d marcel back in service :)
hlopkmar
parents: 992
diff changeset
   160
    "Modified (comment): / 03-10-2011 / 23:03:01 / m"
1225
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   161
    "Modified: / 06-12-2011 / 16:26:54 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
1238
c7cddd513da6 Few fixes for Tomcat
vranyj1
parents: 1235
diff changeset
   162
    "Modified: / 07-12-2011 / 21:30:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1368
5f502e712403 Groovy language support and integration
vranyj1
parents: 1362
diff changeset
   163
    "Modified (format): / 18-02-2012 / 19:22:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   164
! !
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   165
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   166
!JavaResolver methodsFor:'class resolving helpers'!
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   167
1041
d5ff8885b19f ClassLoader refactoring - loads groovy but funny
vranyj1
parents: 1036
diff changeset
   168
checkIfArrayRef: aJavaClassRef andWrap: nonArrayClass 
d5ff8885b19f ClassLoader refactoring - loads groovy but funny
vranyj1
parents: 1036
diff changeset
   169
d5ff8885b19f ClassLoader refactoring - loads groovy but funny
vranyj1
parents: 1036
diff changeset
   170
    "/wrap result with array(s) if needed and return it
d5ff8885b19f ClassLoader refactoring - loads groovy but funny
vranyj1
parents: 1036
diff changeset
   171
    | class|    
d5ff8885b19f ClassLoader refactoring - loads groovy but funny
vranyj1
parents: 1036
diff changeset
   172
    class := nonArrayClass.
d5ff8885b19f ClassLoader refactoring - loads groovy but funny
vranyj1
parents: 1036
diff changeset
   173
    aJavaClassRef name do:[:c|
d5ff8885b19f ClassLoader refactoring - loads groovy but funny
vranyj1
parents: 1036
diff changeset
   174
        c ~~ $[ ifTrue:[ ^ class ].
d5ff8885b19f ClassLoader refactoring - loads groovy but funny
vranyj1
parents: 1036
diff changeset
   175
        class := class javaArrayClass.
d5ff8885b19f ClassLoader refactoring - loads groovy but funny
vranyj1
parents: 1036
diff changeset
   176
    ].
d5ff8885b19f ClassLoader refactoring - loads groovy but funny
vranyj1
parents: 1036
diff changeset
   177
    ^class
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   178
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   179
    "Modified: / 11-04-2011 / 19:31:43 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
1041
d5ff8885b19f ClassLoader refactoring - loads groovy but funny
vranyj1
parents: 1036
diff changeset
   180
    "Modified: / 23-10-2011 / 23:46:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   181
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   182
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   183
checkPermissionsFrom: refOwner to: resolvedClass 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   184
    "
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   185
     A class or interface C is accessible to a class or interface D if and only if either of the following conditions are true:
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   186
            C is public.
1016
2b20730b8717 work on ticket #28(illegal access after evaluating expresion in workspace).
hlopkmar
parents: 1014
diff changeset
   187
            C and D are members of the same runtime package (§5.3).
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   188
     Finally, access permissions to C are checked:
1016
2b20730b8717 work on ticket #28(illegal access after evaluating expresion in workspace).
hlopkmar
parents: 1014
diff changeset
   189
     If C is not accessible (§5.4.4) to D, class or interface resolution throws an IllegalAccessError.
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   190
     This condition can occur, for example, if C is a class that was originally declared to be
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   191
     public but was changed to be non-public after D was compiled.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   192
     At run time, a class or interface is determined not by its name alone,
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   193
     but by a pair: its fully qualified name and its defining class loader.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   194
     Each such class or interface belongs to a single runtime package. The runtime
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   195
     package of a class or interface is determined by the package name and
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   196
     defining class loader of the class or interface."
1275
8cad19554d21 fixes to make tomcat work for mh
hlopkmar
parents: 1238
diff changeset
   197
    ^true.
8cad19554d21 fixes to make tomcat work for mh
hlopkmar
parents: 1238
diff changeset
   198
    (JavaDescriptor isJavaPrimitiveArrayName: resolvedClass javaName) ifTrue: [
8cad19554d21 fixes to make tomcat work for mh
hlopkmar
parents: 1238
diff changeset
   199
        ^ true
8cad19554d21 fixes to make tomcat work for mh
hlopkmar
parents: 1238
diff changeset
   200
    ].
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   201
    resolvedClass isPublic ifTrue: [ ^ true ].
1225
30600ca8173c ok now we enabled permissions and groovy maybe does not work :/
hlopkmar
parents: 1224
diff changeset
   202
    resolvedClass classLoader = refOwner classLoader ifFalse: [ ^ false. ].
1016
2b20730b8717 work on ticket #28(illegal access after evaluating expresion in workspace).
hlopkmar
parents: 1014
diff changeset
   203
    refOwner javaPackage = resolvedClass javaPackage ifTrue: [ ^ true ].
1224
b8a0cc35baaa permission testing enabled again, groovy works => we are awesome
hlopkmar
parents: 1155
diff changeset
   204
    
1016
2b20730b8717 work on ticket #28(illegal access after evaluating expresion in workspace).
hlopkmar
parents: 1014
diff changeset
   205
    "/a little bit too verbose here just so it's clear what's in query
1224
b8a0cc35baaa permission testing enabled again, groovy works => we are awesome
hlopkmar
parents: 1155
diff changeset
   206
    
1016
2b20730b8717 work on ticket #28(illegal access after evaluating expresion in workspace).
hlopkmar
parents: 1014
diff changeset
   207
    JavaVM privilegedAccessQuery query ifTrue: [ ^ true ] ifFalse: [ ^ false ].
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   208
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   209
    "Created: / 11-04-2011 / 19:35:21 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
1016
2b20730b8717 work on ticket #28(illegal access after evaluating expresion in workspace).
hlopkmar
parents: 1014
diff changeset
   210
    "Modified (format): / 09-10-2011 / 17:27:30 / m"
2b20730b8717 work on ticket #28(illegal access after evaluating expresion in workspace).
hlopkmar
parents: 1014
diff changeset
   211
    "Modified (comment): / 09-10-2011 / 23:11:54 / Marcel Hlopko <hlopik@gmail.com>"
1275
8cad19554d21 fixes to make tomcat work for mh
hlopkmar
parents: 1238
diff changeset
   212
    "Modified: / 13-12-2011 / 14:34:48 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   213
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   214
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   215
loadUnresolvedClass: aJavaClassRef 
817
3f2405c6ef88 its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :)
hlopkmar
parents: 816
diff changeset
   216
    | nm |
812
62e917825364 - JavaDescriptor, JavaResolver, JavaArray: fixes for primitive and array types
vranyj1
parents: 809
diff changeset
   217
1026
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents: 1021
diff changeset
   218
    nm := aJavaClassRef name.
817
3f2405c6ef88 its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :)
hlopkmar
parents: 816
diff changeset
   219
    nm size == 1 
3f2405c6ef88 its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :)
hlopkmar
parents: 816
diff changeset
   220
        and: [ JavaDescriptor baseTypes at: nm first ifPresent: [:cls | ^ cls ] ].
1026
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents: 1021
diff changeset
   221
     "Note, that loadClass itself deals with class loaders.
992
6d3e3d937fda Class loader mess cleanup, more will come later...
vranyj1
parents: 960
diff changeset
   222
     The caller of me should set one using code like:
1026
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents: 1021
diff changeset
   223
     
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents: 1021
diff changeset
   224
     JavaClassReader classLoaderQuerySignal answer: loader do:[call me]
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents: 1021
diff changeset
   225
     
992
6d3e3d937fda Class loader mess cleanup, more will come later...
vranyj1
parents: 960
diff changeset
   226
    "
1033
a31de6a4cfa4 refactoringl, moved registry to JavaVM
hlopkmar
parents: 1028
diff changeset
   227
    ^ JavaVM classForName: nm.       
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   228
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   229
    "Created: / 11-04-2011 / 19:27:10 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
817
3f2405c6ef88 its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :)
hlopkmar
parents: 816
diff changeset
   230
    "Modified: / 23-05-2011 / 21:06:25 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
992
6d3e3d937fda Class loader mess cleanup, more will come later...
vranyj1
parents: 960
diff changeset
   231
    "Modified: / 08-09-2011 / 08:33:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   232
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   233
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   234
lookupClassIfAlreadyResolved: javaClassName 
1036
4ff03464c3b3 refactored registry..
hlopkmar
parents: 1035
diff changeset
   235
    ^ JavaVM classNamed: javaClassName
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   236
883
b0eecab8d572 - JavaResolver: fixes in class resolving
vranyj1
parents: 882
diff changeset
   237
    "Modified: / 06-08-2011 / 16:44:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1036
4ff03464c3b3 refactored registry..
hlopkmar
parents: 1035
diff changeset
   238
    "Modified: / 21-10-2011 / 13:40:52 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   239
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   240
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   241
validateClassRef: aJavaClassRef 
817
3f2405c6ef88 its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :)
hlopkmar
parents: 816
diff changeset
   242
    self assert: aJavaClassRef isJavaRef.
3f2405c6ef88 its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :)
hlopkmar
parents: 816
diff changeset
   243
    self assert: aJavaClassRef isJavaClassRef .
3f2405c6ef88 its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :)
hlopkmar
parents: 816
diff changeset
   244
3f2405c6ef88 its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :)
hlopkmar
parents: 816
diff changeset
   245
    "Modified: / 23-05-2011 / 21:04:00 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   246
! !
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   247
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   248
!JavaResolver methodsFor:'common helpers'!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   249
796
9b3e00dd3196 Small fix, so JavaFields have their javaClass always set.
hlopkmar
parents: 784
diff changeset
   250
checkPermissionsForMethodOrField: aJavaMethodOrField from: accessingJavaClass to: resolvedJavaClass 
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   251
    "A class or interface C is accessible to a class or interface D if 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   252
     and only if either of the following conditions are true:
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   253
     C is public.
1016
2b20730b8717 work on ticket #28(illegal access after evaluating expresion in workspace).
hlopkmar
parents: 1014
diff changeset
   254
     C and D are members of the same runtime package (§5.3).
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   255
     A field or method R is accessible to a class or interface D if and only
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   256
     if any of the following conditions is true:
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   257
     R is public.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   258
     R is protected and is declared in a class C, and D is either a subclass
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   259
     of C or C itself.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   260
     R is either protected or package private (that is, neither public nor
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   261
     protected nor private), and is declared by a class in the same runtime
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   262
     package as D.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   263
     R is private and is declared in D.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   264
     This discussion of access control omits a related restriction on the target
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   265
     of a protected field access or method invocation (the target must be of class
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   266
     D or a subtype of D). That requirement is checked as part of the verification
1016
2b20730b8717 work on ticket #28(illegal access after evaluating expresion in workspace).
hlopkmar
parents: 1014
diff changeset
   267
     process (§5.4.1); it is not part of link-time access control."
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   268
    
846
cec92244091c fixed bug in resolving
hlopkmar
parents: 822
diff changeset
   269
    (self checkPermissionsFrom: accessingJavaClass to: resolvedJavaClass) ifFalse: [
1016
2b20730b8717 work on ticket #28(illegal access after evaluating expresion in workspace).
hlopkmar
parents: 1014
diff changeset
   270
        JavaVM privilegedAccessQuery query ifTrue: [ ^ true ].
846
cec92244091c fixed bug in resolving
hlopkmar
parents: 822
diff changeset
   271
        ^ false
cec92244091c fixed bug in resolving
hlopkmar
parents: 822
diff changeset
   272
    ].
1016
2b20730b8717 work on ticket #28(illegal access after evaluating expresion in workspace).
hlopkmar
parents: 1014
diff changeset
   273
    aJavaMethodOrField isPublic ifTrue: [ ^ true ].
846
cec92244091c fixed bug in resolving
hlopkmar
parents: 822
diff changeset
   274
    ((aJavaMethodOrField isProtected 
cec92244091c fixed bug in resolving
hlopkmar
parents: 822
diff changeset
   275
        and: [
cec92244091c fixed bug in resolving
hlopkmar
parents: 822
diff changeset
   276
            resolvedJavaClass javaComponentClass 
cec92244091c fixed bug in resolving
hlopkmar
parents: 822
diff changeset
   277
                equalsOrIsSubclassOf: aJavaMethodOrField javaClass
cec92244091c fixed bug in resolving
hlopkmar
parents: 822
diff changeset
   278
        ]) 
cec92244091c fixed bug in resolving
hlopkmar
parents: 822
diff changeset
   279
            and: [
cec92244091c fixed bug in resolving
hlopkmar
parents: 822
diff changeset
   280
                accessingJavaClass javaComponentClass 
cec92244091c fixed bug in resolving
hlopkmar
parents: 822
diff changeset
   281
                    equalsOrIsSubclassOf: aJavaMethodOrField javaClass
cec92244091c fixed bug in resolving
hlopkmar
parents: 822
diff changeset
   282
            ]) 
821
560f60ad3a2a fixed (hopefully:) bug in permissions (new resolving)
hlopkmar
parents: 819
diff changeset
   283
            ifTrue: [ ^ true ].
796
9b3e00dd3196 Small fix, so JavaFields have their javaClass always set.
hlopkmar
parents: 784
diff changeset
   284
    ((aJavaMethodOrField isPrivate not 
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   285
        and: [ resolvedJavaClass javaPackage = accessingJavaClass javaPackage ]) 
1016
2b20730b8717 work on ticket #28(illegal access after evaluating expresion in workspace).
hlopkmar
parents: 1014
diff changeset
   286
            and: [
1224
b8a0cc35baaa permission testing enabled again, groovy works => we are awesome
hlopkmar
parents: 1155
diff changeset
   287
                resolvedJavaClass classLoader = accessingJavaClass classLoader                                                
1016
2b20730b8717 work on ticket #28(illegal access after evaluating expresion in workspace).
hlopkmar
parents: 1014
diff changeset
   288
            ]) 
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   289
            ifTrue: [ ^ true ].
796
9b3e00dd3196 Small fix, so JavaFields have their javaClass always set.
hlopkmar
parents: 784
diff changeset
   290
    (aJavaMethodOrField isPrivate 
846
cec92244091c fixed bug in resolving
hlopkmar
parents: 822
diff changeset
   291
        and: [ aJavaMethodOrField javaClass name = accessingJavaClass name ]) 
821
560f60ad3a2a fixed (hopefully:) bug in permissions (new resolving)
hlopkmar
parents: 819
diff changeset
   292
            ifTrue: [ ^ true ].
1224
b8a0cc35baaa permission testing enabled again, groovy works => we are awesome
hlopkmar
parents: 1155
diff changeset
   293
    
b8a0cc35baaa permission testing enabled again, groovy works => we are awesome
hlopkmar
parents: 1155
diff changeset
   294
    "/a little bit too verbose here just so it's clear what's in query
b8a0cc35baaa permission testing enabled again, groovy works => we are awesome
hlopkmar
parents: 1155
diff changeset
   295
    
1016
2b20730b8717 work on ticket #28(illegal access after evaluating expresion in workspace).
hlopkmar
parents: 1014
diff changeset
   296
    JavaVM privilegedAccessQuery query ifTrue: [ ^ true ] ifFalse: [ ^ false ].
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   297
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   298
    "Created: / 14-04-2011 / 14:19:33 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
1016
2b20730b8717 work on ticket #28(illegal access after evaluating expresion in workspace).
hlopkmar
parents: 1014
diff changeset
   299
    "Modified (comment): / 09-10-2011 / 23:12:48 / Marcel Hlopko <hlopik@gmail.com>"
1224
b8a0cc35baaa permission testing enabled again, groovy works => we are awesome
hlopkmar
parents: 1155
diff changeset
   300
    "Modified: / 06-12-2011 / 16:19:35 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   301
! !
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   302
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   303
!JavaResolver methodsFor:'exceptions'!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   304
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   305
throwAbstractMethodError
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   306
    exceptionThrower throwAbstractMethodError.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   307
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   308
    "Created: / 11-04-2011 / 20:19:42 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   309
    "Modified: / 13-04-2011 / 14:07:46 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   310
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   311
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   312
throwIllegalAccessError
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   313
    exceptionThrower throwIllegalAccessError.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   314
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   315
    "Created: / 11-04-2011 / 19:39:16 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   316
    "Modified: / 13-04-2011 / 23:06:58 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   317
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   318
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   319
throwIncompatibleClassChangeError
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   320
    exceptionThrower throwIncompatibleClassChangeError.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   321
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   322
    "Created: / 11-04-2011 / 20:02:01 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   323
    "Modified: / 13-04-2011 / 14:07:54 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   324
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   325
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   326
throwNoSuchFieldException
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   327
    exceptionThrower throwNoSuchFieldException.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   328
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   329
    "Created: / 11-04-2011 / 21:35:02 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   330
    "Modified: / 13-04-2011 / 14:07:57 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   331
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   332
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   333
throwNoSuchMethodError
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   334
    exceptionThrower throwNoSuchMethodError.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   335
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   336
    "Created: / 11-04-2011 / 20:19:41 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   337
    "Modified: / 13-04-2011 / 14:08:01 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   338
! !
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   339
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   340
!JavaResolver methodsFor:'field resolving'!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   341
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   342
resolveFieldIndentifiedByRef: aJavaFieldRef 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   343
    | result  class |
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   344
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   345
    self validateFieldRef: aJavaFieldRef.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   346
    result := self lookupFieldIfAlreadyResolved: aJavaFieldRef.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   347
    result ifNotNil: [ ^ result ].
1392
b8cd2c9cf1ef Fixes for eager resolving
vranyj1
parents: 1368
diff changeset
   348
    class := aJavaFieldRef classRef resolve: false.
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   349
    class ifNil: [ self halt: 'should not happen - tell mh' ].
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   350
    result := class lookupFieldByNameAndType: aJavaFieldRef nameAndType.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   351
    result ifNil: [ self throwNoSuchFieldException ].
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   352
    (self 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   353
        checkPermissionsForField: result
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   354
        from: aJavaFieldRef classRef owner
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   355
        to: class) ifFalse: [ self throwIllegalAccessError ].
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   356
    ^ result.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   357
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   358
    "
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   359
     To resolve an unresolved symbolic reference from D to a field in a class
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   360
     or interface C, the symbolic reference to C given by the field reference
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   361
     must first be resolved (§5.4.3.1). Therefore, any exception that can be
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   362
     thrown as a result of failure of resolution of a class or interface reference
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   363
     can be thrown as a result of failure of field resolution. If the reference
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   364
     to C can be successfully resolved, an exception relating to the failure of
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   365
     resolution of the field reference itself can be thrown.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   366
     When resolving a field reference, field resolution first attempts to look
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   367
     up the referenced field in C and its superclasses:
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   368
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   369
     If C declares a field with the name and descriptor specified by the field
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   370
     reference, field lookup succeeds. The declared field is the result of the
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   371
     field lookup.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   372
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   373
     Otherwise, field lookup is applied recursively to the direct superinterfaces
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   374
     of the specified class or interface C.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   375
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   376
     Otherwise, if C has a superclass S, field lookup is applied recursively to S.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   377
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   378
     Otherwise, field lookup fails.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   379
     If field lookup fails, field resolution throws a NoSuchFieldError. Otherwise,
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   380
     if field lookup succeeds but the referenced field is not accessible (§5.4.4)
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   381
     to D, field resolution throws an IllegalAccessError.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   382
     Otherwise, let <E, L1> be the class or interface in which the referenced
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   383
     field is actually declared and let L2 be the defining loader of D. Let T be
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   384
     the name of the type of the referenced field. The Java virtual machine must
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   385
     impose the loading constraint that TL1=TL2(§5.3.4)."
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   386
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   387
    "Created: / 11-04-2011 / 21:15:20 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   388
    "Modified: / 13-04-2011 / 11:57:24 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   389
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   390
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   391
resolveStaticFieldIndentifiedByRef: aJavaFieldRef 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   392
    | result  class |
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   393
    self validateFieldRef: aJavaFieldRef.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   394
    result := self lookupFieldIfAlreadyResolved: aJavaFieldRef.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   395
    result ifNotNil: [ ^ result ].
1392
b8cd2c9cf1ef Fixes for eager resolving
vranyj1
parents: 1368
diff changeset
   396
    class := aJavaFieldRef classRef resolve: false.
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   397
    class ifNil: [ self halt: 'should not happen - tell mh' ].
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   398
    result := class lookupStaticFieldByNameAndType: aJavaFieldRef nameAndType.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   399
    result ifNil: [ self throwNoSuchFieldException ].
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   400
    (self 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   401
        checkPermissionsForField: result
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   402
        from: aJavaFieldRef classRef owner
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   403
        to: class) ifFalse: [ self throwIllegalAccessError ].
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   404
    ^ result.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   405
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   406
    "
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   407
     To resolve an unresolved symbolic reference from D to a field in a class
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   408
     or interface C, the symbolic reference to C given by the field reference
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   409
     must first be resolved (§5.4.3.1). Therefore, any exception that can be
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   410
     thrown as a result of failure of resolution of a class or interface reference
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   411
     can be thrown as a result of failure of field resolution. If the reference
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   412
     to C can be successfully resolved, an exception relating to the failure of
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   413
     resolution of the field reference itself can be thrown.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   414
     When resolving a field reference, field resolution first attempts to look
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   415
     up the referenced field in C and its superclasses:
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   416
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   417
     If C declares a field with the name and descriptor specified by the field
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   418
     reference, field lookup succeeds. The declared field is the result of the
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   419
     field lookup.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   420
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   421
     Otherwise, field lookup is applied recursively to the direct superinterfaces
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   422
     of the specified class or interface C.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   423
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   424
     Otherwise, if C has a superclass S, field lookup is applied recursively to S.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   425
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   426
     Otherwise, field lookup fails.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   427
     If field lookup fails, field resolution throws a NoSuchFieldError. Otherwise,
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   428
     if field lookup succeeds but the referenced field is not accessible (§5.4.4)
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   429
     to D, field resolution throws an IllegalAccessError.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   430
     Otherwise, let <E, L1> be the class or interface in which the referenced
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   431
     field is actually declared and let L2 be the defining loader of D. Let T be
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   432
     the name of the type of the referenced field. The Java virtual machine must
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   433
     impose the loading constraint that TL1=TL2(§5.3.4)."
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   434
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   435
    "Created: / 28-04-2011 / 22:31:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   436
! !
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   437
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   438
!JavaResolver methodsFor:'field resolving helpers'!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   439
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   440
checkPermissionsForField: aJavaField from: accessingJavaClass to: resolvedJavaClass 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   441
    "A class or interface C is accessible to a class or interface D if and only 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   442
     if either of the following conditions are true:
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   443
     C is public.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   444
     C and D are members of the same runtime package (5.3).
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   445
     A field or method R is accessible to a class or interface D if and only
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   446
     if any of the following conditions is true:
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   447
     R is public.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   448
     R is protected and is declared in a class C, and D is either a subclass of
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   449
     C or C itself.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   450
     R is either protected or package private (that is, neither public nor protected
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   451
     nor private), and is declared by a class in the same runtime package as D.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   452
     R is private and is declared in D.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   453
     This discussion of access control omits a related restriction on the target of
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   454
     a protected field access or method invocation (the target must be of class D or
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   455
     a subtype of D). That requirement is checked as part of the verification process
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   456
     (5.4.1); it is not part of link-time access control."
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   457
    
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   458
    ^ self 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   459
        checkPermissionsForMethodOrField: aJavaField from: accessingJavaClass
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   460
        to: resolvedJavaClass.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   461
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   462
    "Created: / 11-04-2011 / 21:46:29 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   463
    "Modified: / 14-04-2011 / 14:21:05 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   464
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   465
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   466
lookupFieldIfAlreadyResolved: aJavaFieldRef 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   467
    ^ nil.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   468
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   469
    "Created: / 11-04-2011 / 21:16:45 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   470
    "Modified: / 13-04-2011 / 11:57:13 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   471
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   472
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   473
validateFieldRef: aJavaFieldRef 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   474
    aJavaFieldRef isJavaRef ifFalse:[self halt:'I expected Java Ref'].
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   475
    aJavaFieldRef isJavaFieldRef ifFalse:[self halt:'I expected Java Field Ref'].
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   476
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   477
    "Created: / 11-04-2011 / 21:16:44 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   478
! !
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   479
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   480
!JavaResolver methodsFor:'interface method resolving'!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   481
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   482
resolveInterfaceMethodIdentifiedByRef: aJavaInterfaceMethodRef 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   483
    | result  class |
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   484
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   485
    self validateInterfaceMethodRef: aJavaInterfaceMethodRef.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   486
    result := self 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   487
                lookupInterfaceMethodIfAlreadyResolved: aJavaInterfaceMethodRef.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   488
    result ifNotNil: [ ^ result ].
1392
b8cd2c9cf1ef Fixes for eager resolving
vranyj1
parents: 1368
diff changeset
   489
    class := aJavaInterfaceMethodRef classRef resolve: false.
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   490
    class ifNil: [ self halt: 'should not happen - tell mh' ].
816
4e3072021201 all tests fixed.. updated interfaceMethodRef to checkPermissions (which were not checked until now ehm)
hlopkmar
parents: 814
diff changeset
   491
    class isInterface ifFalse: [ self throwIncompatibleClassChangeError ].
4e3072021201 all tests fixed.. updated interfaceMethodRef to checkPermissions (which were not checked until now ehm)
hlopkmar
parents: 814
diff changeset
   492
    result := class 
4e3072021201 all tests fixed.. updated interfaceMethodRef to checkPermissions (which were not checked until now ehm)
hlopkmar
parents: 814
diff changeset
   493
                lookupMethodByNameAndType: aJavaInterfaceMethodRef nameAndType.
4e3072021201 all tests fixed.. updated interfaceMethodRef to checkPermissions (which were not checked until now ehm)
hlopkmar
parents: 814
diff changeset
   494
    result ifNil: [ self throwNoSuchMethodError ].
4e3072021201 all tests fixed.. updated interfaceMethodRef to checkPermissions (which were not checked until now ehm)
hlopkmar
parents: 814
diff changeset
   495
    (self 
4e3072021201 all tests fixed.. updated interfaceMethodRef to checkPermissions (which were not checked until now ehm)
hlopkmar
parents: 814
diff changeset
   496
        checkPermissionsForMethod: result
4e3072021201 all tests fixed.. updated interfaceMethodRef to checkPermissions (which were not checked until now ehm)
hlopkmar
parents: 814
diff changeset
   497
        from: aJavaInterfaceMethodRef classRef owner
4e3072021201 all tests fixed.. updated interfaceMethodRef to checkPermissions (which were not checked until now ehm)
hlopkmar
parents: 814
diff changeset
   498
        to: class) ifFalse: [ self throwIllegalAccessError ].
4e3072021201 all tests fixed.. updated interfaceMethodRef to checkPermissions (which were not checked until now ehm)
hlopkmar
parents: 814
diff changeset
   499
^ result.
4e3072021201 all tests fixed.. updated interfaceMethodRef to checkPermissions (which were not checked until now ehm)
hlopkmar
parents: 814
diff changeset
   500
     "
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   501
     To resolve an unresolved symbolic reference from D to an interface method in an
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   502
     interface C, the symbolic reference to C given by the interface method reference is
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   503
     first resolved (§5.4.3.1). Therefore, any exceptions that can be thrown as a result
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   504
     of failure of resolution of an interface reference can be thrown as a result of
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   505
     failure of interface method resolution. If the reference to C can be successfully
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   506
     resolved, exceptions relating to the resolution of the interface method reference
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   507
     itself can be thrown.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   508
     When resolving an interface method reference:
816
4e3072021201 all tests fixed.. updated interfaceMethodRef to checkPermissions (which were not checked until now ehm)
hlopkmar
parents: 814
diff changeset
   509
     
4e3072021201 all tests fixed.. updated interfaceMethodRef to checkPermissions (which were not checked until now ehm)
hlopkmar
parents: 814
diff changeset
   510
     If C is not an interface, interface method resolution throws an IncompatibleClassChangeError.""Otherwise, if the referenced method does not have the same name and descriptor as
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   511
     a method in C or in one of the superinterfaces of C, or in class Object, interface
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   512
     method resolution throws a NoSuchMethodError.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   513
     Otherwise, let <E, L1> be the interface in which the referenced interface method is
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   514
     actually declared and let L2 be the defining loader of D. Let T0 be the name of
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   515
     the type returned by the referenced method, and let T1, ..., Tn be the names of the
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   516
     argument types of the referenced method. The Java virtual machine must impose the
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   517
     loading constraints TiL1 = TiL2 for i = 0 to n (§5.3.4)."
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   518
816
4e3072021201 all tests fixed.. updated interfaceMethodRef to checkPermissions (which were not checked until now ehm)
hlopkmar
parents: 814
diff changeset
   519
    "Modified: / 23-05-2011 / 17:56:24 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   520
! !
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   521
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   522
!JavaResolver methodsFor:'interface method resolving helpers'!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   523
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   524
lookupInterfaceMethodIfAlreadyResolved: aJavaInterfaceMethodRef 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   525
    ^  nil.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   526
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   527
    "Created: / 13-04-2011 / 11:53:36 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   528
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   529
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   530
validateInterfaceMethodRef: aJavaInterfaceMethodRef 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   531
        aJavaInterfaceMethodRef isJavaRef 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   532
        ifFalse: [ self halt: 'I expected JavaRef instance as an argument' ].
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   533
    aJavaInterfaceMethodRef isJavaInterfaceMethodRef 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   534
                ifFalse: [ self halt: 'I expected JavaMethodRef instance as an argument' ].
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   535
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   536
    "Created: / 13-04-2011 / 11:53:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   537
! !
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   538
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   539
!JavaResolver methodsFor:'method resolving'!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   540
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   541
resolveMethodIndentifiedByRef: aJavaMethodRef 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   542
    | result  class |
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   543
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   544
    self validateMethodRef: aJavaMethodRef.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   545
    result := self lookupMethodIfAlreadyResolved: aJavaMethodRef.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   546
    result ifNotNil: [ ^ result ].
1392
b8cd2c9cf1ef Fixes for eager resolving
vranyj1
parents: 1368
diff changeset
   547
    class := aJavaMethodRef classRef resolve: false.
850
160c389771a6 Fixes in resolving methodrefs for array methods
vranyj1
parents: 846
diff changeset
   548
    class ifNil: [ self error: 'should not happen - tell mh' ].
1033
a31de6a4cfa4 refactoringl, moved registry to JavaVM
hlopkmar
parents: 1028
diff changeset
   549
     "Array types responds to all method of class java.lang.Object"
a31de6a4cfa4 refactoringl, moved registry to JavaVM
hlopkmar
parents: 1028
diff changeset
   550
    class isJavaArrayClass ifTrue: [
a31de6a4cfa4 refactoringl, moved registry to JavaVM
hlopkmar
parents: 1028
diff changeset
   551
        class := JavaVM classForName: 'java.lang.Object'.
850
160c389771a6 Fixes in resolving methodrefs for array methods
vranyj1
parents: 846
diff changeset
   552
    ].
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   553
     "
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   554
     To resolve an unresolved symbolic reference from D to a method in
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   555
     a class C, the symbolic reference to C given by the method reference
1033
a31de6a4cfa4 refactoringl, moved registry to JavaVM
hlopkmar
parents: 1028
diff changeset
   556
     is first resolved (§5.4.3.1). Therefore, any exceptions that can be
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   557
     thrown due to resolution of a class reference can be thrown as a result
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   558
     of method resolution. If the reference to C can be successfully resolved,
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   559
     exceptions relating to the resolution of the method reference itself
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   560
     can be thrown.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   561
     When resolving a method reference:
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   562
     
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   563
     Method resolution checks whether C is a class or an interface.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   564
     If C is an interface, method resolution throws an IncompatibleClassChangeError."
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   565
    class isInterface ifTrue: [ self throwIncompatibleClassChangeError ].
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   566
     "Method resolution attempts to look up the referenced method in C and its
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   567
     superclasses:
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   568
     If C declares a method with the name and descriptor specified by the method
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   569
     reference, method lookup succeeds.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   570
     Otherwise, if C has a superclass, step 2 of method lookup is recursively
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   571
     invoked on the direct superclass of C.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   572
     
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   573
     Otherwise, method lookup attempts to locate the referenced method in any of
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   574
     the superinterfaces of the specified class C.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   575
     If any superinterface of C declares a method with the name and descriptor
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   576
     specified by the method reference, method lookup succeeds.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   577
     Otherwise, method lookup fails.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   578
     If method lookup fails, method resolution throws a NoSuchMethodError. If method
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   579
     lookup succeeds and the method is abstract, but C is not abstract, method resolution
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   580
     throws an AbstractMethodError. Otherwise, if the referenced method is not accessible
1033
a31de6a4cfa4 refactoringl, moved registry to JavaVM
hlopkmar
parents: 1028
diff changeset
   581
     (§5.4.4) to D, method resolution throws an IllegalAccessError."
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   582
    result := class lookupMethodByNameAndType: aJavaMethodRef nameAndType.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   583
    result ifNil: [ self throwNoSuchMethodError ].
1033
a31de6a4cfa4 refactoringl, moved registry to JavaVM
hlopkmar
parents: 1028
diff changeset
   584
    (result isAbstract 
a31de6a4cfa4 refactoringl, moved registry to JavaVM
hlopkmar
parents: 1028
diff changeset
   585
        and: [ result javaClass isInterface not and: [ class isAbstract not ] ]) 
a31de6a4cfa4 refactoringl, moved registry to JavaVM
hlopkmar
parents: 1028
diff changeset
   586
            ifTrue: [ self throwAbstractMethodError ].
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   587
    (self 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   588
        checkPermissionsForMethod: result
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   589
        from: aJavaMethodRef classRef owner
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   590
        to: class) ifFalse: [ self throwIllegalAccessError ].
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   591
    ^ result.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   592
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   593
    "Otherwise, let <E, L1> be the class or interface in which the referenced method is
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   594
     actually declared and let L2 be the defining loader of D. Let T0 be the name of
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   595
     the type returned by the referenced method, and let T1, ..., Tn be the names of
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   596
     the argument types of the referenced method. The Java virtual machine must impose
1033
a31de6a4cfa4 refactoringl, moved registry to JavaVM
hlopkmar
parents: 1028
diff changeset
   597
     the loading constraints TiL1=TiL2 for i = 0 to n (§5.3.4)."
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   598
    "Created: / 11-04-2011 / 19:45:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   599
    "Modified: / 14-04-2011 / 00:01:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
905
d03d9e05c581 Temporary commit. method resolving fixed
vranyj1
parents: 883
diff changeset
   600
    "Modified: / 10-08-2011 / 22:44:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   601
! !
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   602
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   603
!JavaResolver methodsFor:'method resolving helpers'!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   604
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   605
checkPermissionsForMethod: aJavaMethod from: accessingJavaClass to: resolvedJavaClass 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   606
    "A class or interface C is accessible to a class or interface D if 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   607
     and only if either of the following conditions are true:
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   608
     C is public.
1362
6bd3666e865a forgotten preresolver classes :)
hlopkmar
parents: 1353
diff changeset
   609
     C and D are members of the same runtime package (§5.3).
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   610
     A field or method R is accessible to a class or interface D if and only
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   611
     if any of the following conditions is true:
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   612
     R is public.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   613
     R is protected and is declared in a class C, and D is either a subclass
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   614
     of C or C itself.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   615
     R is either protected or package private (that is, neither public nor
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   616
     protected nor private), and is declared by a class in the same runtime
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   617
     package as D.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   618
     R is private and is declared in D.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   619
     This discussion of access control omits a related restriction on the target
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   620
     of a protected field access or method invocation (the target must be of class
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   621
     D or a subtype of D). That requirement is checked as part of the verification
1362
6bd3666e865a forgotten preresolver classes :)
hlopkmar
parents: 1353
diff changeset
   622
     process (§5.4.1); it is not part of link-time access control."
819
d95b67600835 Static field resolving fixed
vranyj1
parents: 817
diff changeset
   623
    "JV@2011-05-24: Temporary hack, since access checking
d95b67600835 Static field resolving fixed
vranyj1
parents: 817
diff changeset
   624
     is somewhat broken. Marcle should fix it :-)"
1353
2968f8acb434 one step closer to eager method resolving
hlopkmar
parents: 1275
diff changeset
   625
    
2968f8acb434 one step closer to eager method resolving
hlopkmar
parents: 1275
diff changeset
   626
    OperatingSystem getLoginName = 'jv' ifTrue: [ ^ true ].
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   627
    
1353
2968f8acb434 one step closer to eager method resolving
hlopkmar
parents: 1275
diff changeset
   628
    (self 
2968f8acb434 one step closer to eager method resolving
hlopkmar
parents: 1275
diff changeset
   629
        checkPermissionsForMethodOrField: aJavaMethod
2968f8acb434 one step closer to eager method resolving
hlopkmar
parents: 1275
diff changeset
   630
        from: accessingJavaClass
2968f8acb434 one step closer to eager method resolving
hlopkmar
parents: 1275
diff changeset
   631
        to: resolvedJavaClass) ifTrue: [ ^ true.] ifFalse: [self breakPoint:#mh. ^true].
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   632
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   633
    "Created: / 11-04-2011 / 20:20:12 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   634
    "Modified: / 14-04-2011 / 14:20:27 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
819
d95b67600835 Static field resolving fixed
vranyj1
parents: 817
diff changeset
   635
    "Modified: / 24-05-2011 / 14:06:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1353
2968f8acb434 one step closer to eager method resolving
hlopkmar
parents: 1275
diff changeset
   636
    "Modified: / 09-02-2012 / 23:15:48 / mh <hlopik@gmail.com>"
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   637
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   638
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   639
lookupMethodIfAlreadyResolved: aJavaMethodRef 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   640
    ^ nil.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   641
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   642
    "Created: / 11-04-2011 / 19:50:38 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   643
    "Modified: / 13-04-2011 / 11:57:00 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   644
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   645
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   646
validateMethodRef: aJavaMethodRef 
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   647
    aJavaMethodRef isJavaRef ifFalse:[self halt: 'I expected JavaRef instance as an argument'].
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   648
    aJavaMethodRef isJavaMethodRef ifFalse: [self halt: 'I expected JavaMethodRef instance as an argument'].
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   649
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   650
    "Created: / 11-04-2011 / 19:47:25 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   651
! !
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 759
diff changeset
   652
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   653
!JavaResolver class methodsFor:'documentation'!
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   654
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   655
version_SVN
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   656
    ^ '$Id$'
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   657
! !
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   658
be8e84381ce0 Merged with /branches/jk
vranyj1
parents:
diff changeset
   659
JavaResolver initialize!