src/JavaClassRef2.st
author vranyj1
Tue, 10 May 2011 21:04:10 +0000
branchjk_new_structure
changeset 771 fb8026dda011
parent 761 43e017ec7958
child 772 0f92c23b80ee
permissions -rw-r--r--
Merged with /trunk
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     1
"{ Package: 'stx:libjava' }"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     2
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     3
JavaRef2 subclass:#JavaClassRef2
771
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
     4
	instanceVariableNames:'name nameIndex'
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     5
	classVariableNames:''
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     6
	poolDictionaries:''
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     7
	category:'Languages-Java-Reader-Support-new'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     8
!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     9
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    10
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    11
!JavaClassRef2 class methodsFor:'instance creation'!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    12
771
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    13
in: aJavaConstantPool withNameAt: nameIndex
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    14
   
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    15
    
771
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    16
    ^ self basicNew initializeIn: aJavaConstantPool withNameAt: nameIndex.
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    17
771
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    18
    "Created: / 10-05-2011 / 14:56:15 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    19
! !
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    20
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    21
!JavaClassRef2 methodsFor:'accessing'!
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    22
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    23
classLoader
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    24
owner ifNil:[^nil] ifNotNil:[^owner classLoader].
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    25
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    26
    "Created: / 11-04-2011 / 21:52:06 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    27
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    28
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    29
javaClassName
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    30
    "return java class name as written in java programs e.g. java.util.String
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    31
     in case of array, return class name without square brackets"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    32
    
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    33
    | tmp |
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    34
771
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    35
    tmp := (self name replaceAll: '[' with: '').
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    36
    ^ tmp copyFrom: 2 to: tmp size -1.
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    37
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    38
    "Created: / 08-04-2011 / 18:30:44 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
771
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    39
    "Modified: / 10-05-2011 / 15:05:31 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    40
!
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    41
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    42
name
771
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    43
    name ifNil: [name := constantPool at: nameIndex].
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    44
    name ifNil: [self warning: 'name of the class is nil [' , self printString , ']'].
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    45
    ^ name.
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    46
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    47
    "Created: / 08-04-2011 / 13:48:36 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
771
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    48
    "Modified: / 10-05-2011 / 15:01:08 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    49
! !
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    50
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    51
!JavaClassRef2 methodsFor:'array support'!
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    52
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    53
arrayDimensions
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    54
^ name occurrencesOf:$[.
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    55
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    56
    "Created: / 08-04-2011 / 18:42:02 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    57
!
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    58
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    59
isJavaArrayClassRef
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    60
^ name startsWith:'['.
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    61
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    62
    "Created: / 08-04-2011 / 18:40:40 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    63
! !
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    64
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    65
!JavaClassRef2 methodsFor:'comparing'!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    66
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    67
= anotherJavaClassRef 
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    68
    "superclass JavaRef2 says that I am responsible to implement this method"
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    69
    
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    70
    anotherJavaClassRef isJavaClassRef ifFalse: [ ^ false ].
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    71
    ^ self name = anotherJavaClassRef name.
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    72
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    73
    "Modified: / 08-04-2011 / 13:48:56 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    74
!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    75
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    76
hash
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    77
    ^ name hash.
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    78
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    79
    "Modified: / 08-04-2011 / 13:52:44 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    80
! !
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    81
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    82
!JavaClassRef2 methodsFor:'initialization'!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    83
771
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    84
initializeIn: aJavaConstantPool withNameAt: nameCPIndex
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    85
    nameIndex := nameCPIndex.
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    86
    constantPool := aJavaConstantPool.
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    87
    super initialize.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    88
771
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    89
    "Modified: / 10-05-2011 / 14:57:38 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    90
! !
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    91
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    92
!JavaClassRef2 methodsFor:'printing'!
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    93
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    94
fullName
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    95
    ^ self name.
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    96
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    97
    "Created: / 10-05-2011 / 14:19:27 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    98
!
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
    99
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
   100
printString
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
   101
    ^ 'JavaClassRef for: ' , name printString.
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
   102
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
   103
    "Created: / 10-05-2011 / 14:16:50 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
   104
    "Modified: / 10-05-2011 / 15:52:33 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   105
! !
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   106
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   107
!JavaClassRef2 methodsFor:'private - resolving'!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   108
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   109
findResolvedStaticValue
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   110
    "Resolving static inner classes is not different from resolving any other class, it's only done in different circumstances"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   111
    
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   112
    ^ self findResolvedValue.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   113
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   114
    "Created: / 28-04-2011 / 21:57:46 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   115
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   116
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   117
findResolvedValue
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   118
    "Resolve reference and set valueCache."
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   119
    
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   120
    valueCache := JavaResolver uniqueInstance 
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   121
                resolveClassIndentifiedByRef: self.
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   122
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   123
    "Modified: / 08-04-2011 / 17:39:03 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   124
! !
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   125
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   126
!JavaClassRef2 methodsFor:'queries'!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   127
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   128
isJavaClassRef
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   129
^true.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   130
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   131
    "Created: / 11-04-2011 / 19:10:00 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   132
! !
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   133
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   134
!JavaClassRef2 methodsFor:'resolving'!
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   135
771
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
   136
invalidate
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
   137
super invalidate.
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
   138
    name := nil.
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
   139
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
   140
    "Created: / 10-05-2011 / 15:08:35 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
   141
!
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
   142
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   143
invalidateForClass: internalJavaClassName 
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   144
    "Invalidate (means call invalidate) reference if it has something to do with given class (e.g Class named internalJavaClassName was unloaded).
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   145
     Return true, if reference was invalidated."
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   146
    
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   147
   name = internalJavaClassName ifTrue: [self invalidate. ^ true].
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   148
   ^ false.
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   149
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   150
    "Modified: / 08-04-2011 / 16:06:47 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   151
! !
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   152
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   153
!JavaClassRef2 class methodsFor:'documentation'!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   154
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   155
version_SVN
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   156
    ^ '$Id$'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   157
! !
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   158
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   159
771
fb8026dda011 Merged with /trunk
vranyj1
parents: 761
diff changeset
   160