"
COPYRIGHT (c) 1996-2011 by Claus Gittinger
COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
SWING Research Group, Czech Technical University in Prague (*)
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
(*) extensions, changes and fixes for java1.1 compatibility.
For a list of changes, see a list of diffs against the last stable version before 2011-08.
"
"{ Package: 'stx:libjava' }"
Array variableSubclass:#JavaConstantPool
instanceVariableNames:'owner'
classVariableNames:'ConstantPools'
poolDictionaries:''
category:'Languages-Java-Reader-Support'
!
!JavaConstantPool class methodsFor:'documentation'!
copyright
"
COPYRIGHT (c) 1996-2011 by Claus Gittinger
COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
SWING Research Group, Czech Technical University in Prague (*)
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
(*) extensions, changes and fixes for java1.1 compatibility.
For a list of changes, see a list of diffs against the last stable version before 2011-08.
"
! !
!JavaConstantPool class methodsFor:'initialization'!
initialize
ConstantPools := OrderedCollection new: 1000.
"Modified: / 08-04-2011 / 17:28:07 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
"Modified: / 09-04-2011 / 09:25:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!JavaConstantPool class methodsFor:'instance creation'!
new: size
"return an initialized instance"
^ ConstantPools add: ((super new: size)
initialize;
yourself).
"Created: / 08-04-2011 / 16:56:18 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
"Modified: / 09-04-2011 / 09:24:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 11-04-2011 / 18:46:54 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
!JavaConstantPool class methodsFor:'accessing'!
allConstantPools
"linked list of all constant pools in system"
^ ConstantPools.
"Created: / 08-04-2011 / 16:53:58 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
"Modified: / 09-04-2011 / 09:24:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
allConstantPools: anOorderedCollection
"linked list of all constant pools in system"
ConstantPools := anOorderedCollection.
"Created: / 08-04-2011 / 17:07:28 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
"Modified: / 09-04-2011 / 09:24:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 11-04-2011 / 18:47:58 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
!JavaConstantPool class methodsFor:'special'!
invalidateForClass: internalJavaClassName
"Only alias, everybody calls invalidateForClass so why not me :)"
^self invalidateReferencesToClass: internalJavaClassName.
"Created: / 08-04-2011 / 16:52:52 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
invalidateReferencesToClass: internalJavaClassName
"Go over all constant pools and call invalidateForClass on all
references. (usable when given class was unloaded etc)"
ConstantPools do: [:each | each invalidateForClass: internalJavaClassName].
"Created: / 08-04-2011 / 16:09:03 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
!JavaConstantPool methodsFor:'accessing'!
owner
"return owner"
^ owner
"Created: 28.6.1996 / 21:12:22 / cg"
!
owner:something
"set owner"
owner := something.
"Created: 28.6.1996 / 21:12:22 / cg"
! !
!JavaConstantPool methodsFor:'adding'!
at: classRefIndex putClassRefWithNameAt: classNameIndex
self at: classRefIndex
put: (JavaClassRef2 in: self withNameAt: classNameIndex).
"Created: / 13-05-2011 / 09:48:01 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
at: fieldRefIndex putFieldRefWithClassAt: classRefIndex andNameAndTypeAt: nameAndTypeIndex
self at: fieldRefIndex
put: (JavaFieldRef2
in: self
withNameAndTypeAt: nameAndTypeIndex
andClassAt: classRefIndex).
"Created: / 13-05-2011 / 09:08:18 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
at: interfaceMethodRefIndex putInterfaceMethodRefWithClassAt: classRefIndex andNameAndTypeAt: nameAndTypeIndex
self at: interfaceMethodRefIndex
put: (JavaInterfaceMethodRef2
in: self
withNameAndTypeAt: nameAndTypeIndex
andClassAt: classRefIndex).
"Created: / 13-05-2011 / 09:08:50 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
at: methodRefIndex putMethodRefWithClassAt: classRefIndex andNameAndTypeAt: nameAndTypeIndex
self at: methodRefIndex
put: (JavaMethodRef2 in: self withNameAndTypeAt: nameAndTypeIndex andClassAt:classRefIndex).
"Created: / 13-05-2011 / 09:07:47 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
at: nameAndTypeIndex putNameAndTypeWithNameAt: nameIndex andDescriptorAt: descriptorIndex
self at: nameAndTypeIndex
put: (JavaNameAndType2 in: self withNameAt: nameIndex andDescriptorAt: descriptorIndex).
"Created: / 13-05-2011 / 09:05:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
!JavaConstantPool methodsFor:'initialization'!
initialize
"Invoked when a new instance is created."
"/ please change as required (and remove this comment)
"/ owner := nil.
"/ super initialize. -- commented since inherited method does nothing
! !
!JavaConstantPool methodsFor:'printing & storing'!
displayString
owner isNil ifTrue:[
^ '*** unowned ConstantPool'
].
^ 'ConstantPool of ' , owner fullName
"Created: 28.6.1996 / 21:13:41 / cg"
"Modified: 28.6.1996 / 21:20:26 / cg"
! !
!JavaConstantPool methodsFor:'queries'!
refersToMethod:aJavaMethod
self error: 'JV@2011-07-26: Update to new resolving scheme!!'.
self do:[:constItem |
(constItem == aJavaMethod) ifTrue:[^ true].
].
^ false
"Created: / 29-07-1997 / 17:39:19 / cg"
"Modified: / 26-07-2011 / 18:00:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
refersToMethodNamed:aJavaMethodName
self error: 'JV@2011-07-26: Update to new resolving scheme!!'.
self do:[:constItem |
(constItem isKindOf:JavaMethod) ifTrue:[
constItem name = aJavaMethodName ifTrue:[^ true].
] ifFalse:[
]
].
^ false
"Created: / 29-07-1997 / 17:39:24 / cg"
"Modified: / 16-10-1998 / 01:22:02 / cg"
"Modified: / 26-07-2011 / 17:54:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!JavaConstantPool methodsFor:'special'!
classReferencesDo:aBlock
self do:[:constItem |
constItem isJavaClass ifTrue:[
aBlock value:constItem
]
]
"Modified: / 7.8.1997 / 19:17:38 / cg"
"Created: / 4.1.1998 / 00:40:11 / cg"
!
invalidateAll
"go over all entries and call invalidate on all references"
self do:
[:entry |
entry isJavaRef
ifTrue: [ entry invalidate] ].
"Created: / 13-05-2011 / 09:37:41 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
invalidateForClass: internalJavaClassName
"go over all entries and call invalidateForClass on all references"
self do: [:entry | entry isJavaRef ifTrue:[entry invalidateForClass: internalJavaClassName]].
"Created: / 08-04-2011 / 16:11:36 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
updateClassRefsFrom:oldClass to:newClass
owner == oldClass ifTrue:[
self halt.
^ self
].
self keysAndValuesDo:[:index :constItem |
|nameIndex|
constItem == oldClass ifTrue:[
self at:index put:newClass
] ifFalse:[
(constItem isNil
or:[constItem isNumber]) ifFalse:[
constItem isString ifTrue:[
"/ nothing done ...
] ifFalse:[
(constItem isMemberOf:(Java java_lang_String)) ifTrue:[
"/ nothing done ...
] ifFalse:[
constItem isBehavior ifFalse:[
constItem updateClassRefsFrom:oldClass to:newClass
] ifTrue:[
constItem isJavaClass ifTrue:[
constItem fullName = oldClass fullName ifTrue:[
'JAVA: class update by name [in pool].' infoPrintCR.
newClass isNil ifTrue:[
"/ mhm - must find a slot for the classes name
nameIndex := -1.
self
at:index
put:(JavaUnresolvedClassConstant
pool:self
poolIndex:index
nameIndex:nameIndex)
] ifFalse:[
self at:index put:newClass
]
]
]
]
]
]
]
]
]
"Modified: / 4.2.1998 / 22:12:03 / cg"
! !
!JavaConstantPool class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/libjava/JavaConstantPool.st,v 1.16 2011-11-24 11:20:06 cg Exp $'
!
version_CVS
^ '$Header: /cvs/stx/stx/libjava/JavaConstantPool.st,v 1.16 2011-11-24 11:20:06 cg Exp $'
!
version_SVN
^ '§Id: JavaConstantPool.st,v 1.15 2011/08/18 18:42:48 vrany Exp §'
! !
JavaConstantPool initialize!