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"
PatchLists isNil ifTrue:[^ #()].
^ PatchLists keys
"
self unresolvedClassNames
"
! !
!JavaUnresolvedConstant methodsFor:'accessing'!
constantPool
^ constantPool
"Created: 15.4.1996 / 15:59:45 / 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 class methodsFor:'documentation'!
version
^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedConstant.st,v 1.5 1997/02/07 20:36:09 cg Exp $'
! !