Object subclass:#JavaUnresolvedConstant
instanceVariableNames:'nextUnresolved prevUnresolved constantPool constantPoolIndex'
classVariableNames:'PatchLists'
poolDictionaries:''
category:'Java-Reader-Support'
!
!JavaUnresolvedConstant class methodsFor:'instance creation'!
pool:aPool poolIndex:index
^ self new
pool:aPool poolIndex:index
! !
!JavaUnresolvedConstant class methodsFor:'queries'!
countUnresolved
|u cnt|
cnt := 0.
PatchLists do:[:patchList |
u := patchList.
[u notNil] whileTrue:[
cnt := cnt + 1.
u := u nextUnresolved
]
].
^ cnt
"
self countUnresolved
"
! !
!JavaUnresolvedConstant class methodsFor:'resolving'!
flushPatchLists
PatchLists := nil
!
resolveFor:aJavaClass
"a JAVA class has been loaded - resolve what can be"
|patchList unresolved nameSymbol|
"/ 'resolving: ' print. aJavaClass fullName printCR.
PatchLists isNil ifTrue:[^ self].
nameSymbol := aJavaClass fullName asSymbol.
patchList := PatchLists at:nameSymbol ifAbsent:nil.
patchList notNil ifTrue:[
PatchLists removeKey:nameSymbol.
[patchList notNil] whileTrue:[
unresolved := patchList.
patchList := unresolved nextUnresolved.
unresolved prevUnresolved:nil.
unresolved nextUnresolved:nil.
unresolved preResolve.
]
].
!
unresolvedClassNames
"return a collection of unresolved class names"
|l|
PatchLists isNil ifTrue:[^ #()].
"/ kludge - ignore those primitive classes ...
l := PatchLists keys
select:[:clsName |
(clsName == #char
or:[clsName == #float
or:[clsName == #double
or:[clsName == #'unsigned short'
or:[clsName == #long
or:[clsName == #boolean]]]]]) not
].
^ l
"
self unresolvedClassNames
"
"Modified: 17.8.1997 / 20:06:46 / cg"
! !
!JavaUnresolvedConstant methodsFor:'accessing'!
constantPool
^ constantPool
"Created: 15.4.1996 / 15:59:45 / cg"
!
constantPool:aPool
constantPool := aPool
"Created: 7.4.1997 / 16:13:02 / cg"
!
constantPoolIndex
^ constantPoolIndex
"Created: 15.4.1996 / 15:59:45 / cg"
!
nextUnresolved
^ nextUnresolved
!
nextUnresolved:anUnresolvedConstant
nextUnresolved := anUnresolvedConstant
!
pool:aPool poolIndex:i
constantPool := aPool.
constantPoolIndex := i
"Created: 15.4.1996 / 15:59:45 / cg"
!
prevUnresolved:anUnresolvedConstant
prevUnresolved := anUnresolvedConstant
! !
!JavaUnresolvedConstant methodsFor:'printing & storing'!
displayString
^ (self class name) , '( idx= ' , constantPoolIndex printString , ')'
! !
!JavaUnresolvedConstant methodsFor:'queries'!
isUnresolved
^ true
! !
!JavaUnresolvedConstant methodsFor:'resolving'!
preResolve
self subclassResponsibility.
^ self
!
rememberForResolveWith:aFullClassName
|patchList nameSymbol|
prevUnresolved notNil ifTrue:[^ self].
PatchLists isNil ifTrue:[
PatchLists := IdentityDictionary new.
].
nameSymbol := aFullClassName asSymbol.
patchList := PatchLists at:nameSymbol ifAbsent:nil.
patchList isNil ifTrue:[
"/ ('first patch for: ' , aFullClassName) printCR.
] ifFalse:[
patchList prevUnresolved:self.
nextUnresolved := patchList.
].
PatchLists at:nameSymbol put:self.
prevUnresolved := #startOfList.
! !
!JavaUnresolvedConstant methodsFor:'special'!
updateClassRefsFrom:oldClass to:newClass
"Created: 7.8.1997 / 18:21:19 / cg"
! !
!JavaUnresolvedConstant class methodsFor:'documentation'!
version
^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedConstant.st,v 1.8 1997/08/18 10:42:00 cg Exp $'
! !