--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/JavaConstantPool.st Fri Apr 08 12:02:36 2011 +0000
@@ -0,0 +1,228 @@
+"
+ COPYRIGHT (c) 1997 by eXept Software AG
+ All Rights Reserved
+
+ 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.
+"
+"{ Package: 'stx:libjava' }"
+
+Array variableSubclass:#JavaConstantPool
+ instanceVariableNames:'owner'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'Languages-Java-Reader-Support'
+!
+
+!JavaConstantPool class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1997 by eXept Software AG
+ All Rights Reserved
+
+ 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.
+"
+
+
+! !
+
+!JavaConstantPool class methodsFor:'special'!
+
+compressPools
+ "unify all constants"
+
+ |strings nameandTypes jStrings|
+
+ strings := Set new.
+ nameandTypes := Set new.
+
+ self allInstancesDo:[:aPool |
+ aPool keysAndValuesDo:[:idx :aConst |
+ |existing nt|
+
+ aConst isString ifTrue:[
+ existing := strings elementAt:aConst ifAbsent:nil.
+ existing isNil ifTrue:[
+ strings add:aConst
+ ] ifFalse:[
+ aPool at:idx put:existing
+ ]
+ ] ifFalse:[
+ (aConst isMemberOf:JavaFieldref) ifTrue:[
+ nt := aConst nameandType.
+ existing := nameandTypes elementAt:nt ifAbsent:nil.
+ existing isNil ifTrue:[
+ nameandTypes add:nt
+ ] ifFalse:[
+ aConst nameandType:existing
+ ]
+ ] ifFalse:[
+ (aConst isMemberOf:JavaNameandType) ifTrue:[
+ existing := nameandTypes elementAt:aConst ifAbsent:nil.
+ existing isNil ifTrue:[
+ nameandTypes add:aConst
+ ] ifFalse:[
+ aPool at:idx put:existing
+ ]
+ ]
+ ]
+ ]
+ ].
+ ]
+
+ "
+ self compressPools
+ "
+
+ "Modified: 19.8.1997 / 14:04:25 / cg"
+! !
+
+!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:'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 do:[:constItem |
+ (constItem == aJavaMethod) ifTrue:[^ true].
+ (constItem isMemberOf:JavaMethodref) ifTrue:[
+ self halt.
+ ].
+ (constItem isMemberOf:JavaUnresolvedMethodrefConstant) ifTrue:[
+ self halt.
+ ]
+ ].
+ ^ false
+
+ "Modified: 29.7.1997 / 17:36:49 / cg"
+ "Created: 29.7.1997 / 17:39:19 / cg"
+!
+
+refersToMethodNamed:aJavaMethodName
+ self do:[:constItem |
+ (constItem isKindOf:JavaMethod) ifTrue:[
+ constItem name = aJavaMethodName ifTrue:[^ true].
+ ] ifFalse:[
+ (constItem isMemberOf:JavaMethodref) ifTrue:[
+ constItem name = aJavaMethodName ifTrue:[^ true].
+ ].
+ (constItem isMemberOf:JavaUnresolvedMethodrefConstant) ifTrue:[
+ self halt.
+ ]
+ ]
+ ].
+ ^ false
+
+ "Created: / 29.7.1997 / 17:39:24 / cg"
+ "Modified: / 16.10.1998 / 01:22:02 / cg"
+! !
+
+!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"
+!
+
+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
+ ^ '$Id$'
+!
+
+version_SVN
+ ^ '$Id$'
+! !