src/JavaClassRef2.st
author vranyj1
Sun, 01 May 2011 12:52:23 +0000
branchjk_new_structure
changeset 761 43e017ec7958
parent 758 be8e84381ce0
child 771 fb8026dda011
permissions -rw-r--r--
Merged with /branches/jk
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
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
     4
	instanceVariableNames:'name'
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
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    13
for: internalJavaClassName 
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    14
    "Create & return a new instance for arg."
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    15
    
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    16
    ^ self basicNew initializeFor: internalJavaClassName
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    17
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    18
    "Modified: / 08-04-2011 / 17:31:14 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
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
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    35
    tmp := (name replaceAll: '[' with: '').
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>"
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    39
    "Modified: / 11-04-2011 / 19:23:49 / 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
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    43
    ^ name.
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    44
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    45
    "Created: / 08-04-2011 / 13:48:36 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    46
! !
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    47
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    48
!JavaClassRef2 methodsFor:'array support'!
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    49
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    50
arrayDimensions
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    51
^ name occurrencesOf:$[.
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    52
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    53
    "Created: / 08-04-2011 / 18:42:02 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    54
!
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    55
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    56
isJavaArrayClassRef
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    57
^ name startsWith:'['.
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    58
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    59
    "Created: / 08-04-2011 / 18:40:40 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    60
! !
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    61
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    62
!JavaClassRef2 methodsFor:'comparing'!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    63
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    64
= anotherJavaClassRef 
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    65
    "superclass JavaRef2 says that I am responsible to implement this method"
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    66
    
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    67
    anotherJavaClassRef isJavaClassRef ifFalse: [ ^ false ].
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    68
    ^ self name = anotherJavaClassRef name.
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    69
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    70
    "Modified: / 08-04-2011 / 13:48:56 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    71
!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    72
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    73
hash
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    74
    ^ name hash.
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    75
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    76
    "Modified: / 08-04-2011 / 13:52:44 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    77
! !
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    78
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    79
!JavaClassRef2 methodsFor:'initialization'!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    80
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    81
initializeFor: internalJavaClassName 
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    82
    name := internalJavaClassName.
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    83
    super initialize.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    84
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    85
    "Modified: / 08-04-2011 / 17:30:11 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    86
! !
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    87
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    88
!JavaClassRef2 methodsFor:'private - resolving'!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    89
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    90
findResolvedStaticValue
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    91
    "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
    92
    
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    93
    ^ self findResolvedValue.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    94
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    95
    "Created: / 28-04-2011 / 21:57:46 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    96
!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
    97
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    98
findResolvedValue
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
    99
    "Resolve reference and set valueCache."
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   100
    
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   101
    valueCache := JavaResolver uniqueInstance 
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   102
                resolveClassIndentifiedByRef: self.
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   103
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   104
    "Modified: / 08-04-2011 / 17:39:03 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   105
! !
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   106
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   107
!JavaClassRef2 methodsFor:'queries'!
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   108
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   109
isJavaClassRef
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   110
^true.
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   111
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   112
    "Created: / 11-04-2011 / 19:10:00 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   113
! !
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   114
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   115
!JavaClassRef2 methodsFor:'resolving'!
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   116
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   117
invalidateForClass: internalJavaClassName 
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   118
    "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
   119
     Return true, if reference was invalidated."
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   120
    
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   121
   name = internalJavaClassName ifTrue: [self invalidate. ^ true].
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   122
   ^ false.
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   123
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   124
    "Modified: / 08-04-2011 / 16:06:47 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   125
! !
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   126
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   127
!JavaClassRef2 class methodsFor:'documentation'!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   128
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   129
version_SVN
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   130
    ^ '$Id$'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   131
! !
758
be8e84381ce0 Merged with /branches/jk
vranyj1
parents: 752
diff changeset
   132
761
43e017ec7958 Merged with /branches/jk
vranyj1
parents: 758
diff changeset
   133