experiments/StString.st
author Claus Gittinger <cg@exept.de>
Thu, 22 Dec 2005 18:00:03 +0100
changeset 2125 cfa7b540ebf1
parent 749 e898eaeff091
child 2152 1cbdfbcc685c
permissions -rw-r--r--
*** empty log message ***

"{ Package: 'stx:libjava/experiments' }"

String variableByteSubclass:#StString
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'Languages-Java-Tests'
!


!StString class methodsFor:'accessing'!

javaObject
    ^ JavaObjectDictionary new reflectionOf: self name

    "Created: / 09-01-2011 / 21:02:37 / Jan Kurs <kurs.jan@post.cz>"
! !

!StString methodsFor:'accessing'!

javaObject
    ^ self class javaObject.
"/    javaObject ifNil: [
"/        javaObject:= Java classForName: 'Counter'.
"/    ].
"/    ^ javaObject.

    "Created: / 09-01-2011 / 13:56:56 / Jan Kurs <kurs.jan@post.cz>"
    "Modified: / 09-01-2011 / 21:02:18 / Jan Kurs <kurs.jan@post.cz>"
! !

!StString methodsFor:'error handling'!

doesNotUnderstand:aMessage 
    | method |
    aMessage selector = #'__hash()I' ifTrue:[ ^ self getHash.].
    aMessage selector = #'__count()I' ifTrue:[ ^ self getCount.].
    aMessage selector = #'__offset()I' ifTrue:[ ^ self getOffset.].
    aMessage selector = #'__value()[C' ifTrue:[ ^ self getValue.].
    aMessage selector = #'__hash(I)V' ifTrue:[ ^ self setHash: aMessage arguments first].
    method := JavaClass 
                lookupMethod:aMessage selector
                numArgs:aMessage arguments size
                in:self javaObject
                static:false.
    ^ method 
        ifNil:[ super doesNotUnderstand:aMessage.]
        ifNotNil:[ method valueWithReceiver:self arguments:aMessage arguments.]

    "Created: / 09-01-2011 / 13:42:08 / Jan Kurs <kurs.jan@post.cz>"
    "Modified: / 09-01-2011 / 15:54:04 / Jan Kurs <kurs.jan@post.cz>"
    "Modified: / 17-01-2011 / 12:17:11 / kursjan <kursjan@fit.cvut.cz>"
! !

!StString methodsFor:'java protocol'!

getCount
    ^ self size.

    "Created: / 17-01-2011 / 11:24:29 / kursjan <kursjan@fit.cvut.cz>"
!

getHash
    "
        hash should be cached in the future
    "
    self breakPoint: #libjava.
    ^ 0

    "Created: / 17-01-2011 / 11:23:48 / kursjan <kursjan@fit.cvut.cz>"
!

getOffset
    ^ 0.

    "Created: / 17-01-2011 / 11:24:43 / kursjan <kursjan@fit.cvut.cz>"
!

getValue
    "VM requires instance of String class"
    self breakPoint: #libjava.
    ^ String fromString: self.

    "Created: / 17-01-2011 / 11:24:35 / kursjan <kursjan@fit.cvut.cz>"
!

setHash:newHash
    "hash is not cached for this time"
    self breakPoint: #libjava

    "Created: / 17-01-2011 / 11:35:26 / kursjan <kursjan@fit.cvut.cz>"
! !

!StString methodsFor:'testing'!

isKindOf: aClass
    "This override is neccessary for ST <-> Java Object conversions"
    (self javaObject includesBehavior: aClass) ifTrue:
    [
        ^ true.
    ].
    ^ super isKindOf: aClass.

    "Created: / 09-01-2011 / 13:28:10 / Jan Kurs <kurs.jan@post.cz>"
    "Modified: / 09-01-2011 / 21:22:41 / Jan Kurs <kurs.jan@post.cz>"
! !

!StString class methodsFor:'documentation'!

version_SVN
    ^ '$Id$'
! !