JavaUnresolvedConstant.st
author cg
Mon, 18 Aug 1997 10:42:00 +0000
changeset 230 3bad67347125
parent 206 2200b9091b9e
child 399 94d37f2032a1
permissions -rw-r--r--
ignore builtIn-classes in patchlist

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 $'
! !