src/JavaDescriptor.st
author vranyj1
Wed, 20 Jul 2011 12:02:02 +0000
branchjk_new_structure
changeset 873 933263bd2d27
parent 866 10d1f47af6d9
child 877 f5a5b93e1c78
permissions -rw-r--r--
Fixes for primitive array types (uses Signed* variant of an array)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     1
"{ Package: 'stx:libjava' }"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     2
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     3
Object subclass:#JavaDescriptor
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     4
	instanceVariableNames:''
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     5
	classVariableNames:'BaseTypes BaseTypesByTypeName ArrayTypes'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     6
	poolDictionaries:''
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     7
	category:'Languages-Java-Support'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     8
!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     9
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    10
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    11
!JavaDescriptor class methodsFor:'instance creation'!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    12
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    13
fromString: aString
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    14
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    15
    ^self readFromString: aString
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    16
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    17
    "Created: / 25-11-2010 / 18:20:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    18
!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    19
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    20
readFrom: aStream
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    21
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    22
    ^ self
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    23
        readFrom:aStream
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    24
        onError:[ self conversionErrorSignal
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    25
                    raiseErrorString:'invalid java descriptor']
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    26
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    27
    "Created: / 25-11-2010 / 18:04:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    28
!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    29
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    30
readFrom:stream onError:exceptionBlock
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    31
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    32
    stream peek == $(
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    33
        ifTrue: [^self readMethodDescriptorFrom: stream onError: exceptionBlock]
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    34
        ifFalse:[^self readFieldDescriptorFrom:  stream onError: exceptionBlock].
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    35
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    36
    "
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    37
        JavaDescriptor fromString:'Ljava/lang/Object;'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    38
        JavaDescriptor fromString:'[I'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    39
        JavaDescriptor fromString:'[[I'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    40
        JavaDescriptor fromString:'(ILjava/lang/Object;)V'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    41
        JavaDescriptor fromString:'(ILjava/lang/Object;)Ljava/lang/Class;'    
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    42
    "
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    43
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    44
    "Created: / 25-11-2010 / 17:50:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    45
    "Modified: / 06-02-2011 / 15:08:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    46
! !
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    47
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    48
!JavaDescriptor class methodsFor:'accessing'!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    49
812
62e917825364 - JavaDescriptor, JavaResolver, JavaArray: fixes for primitive and array types
vranyj1
parents: 752
diff changeset
    50
baseTypes
62e917825364 - JavaDescriptor, JavaResolver, JavaArray: fixes for primitive and array types
vranyj1
parents: 752
diff changeset
    51
62e917825364 - JavaDescriptor, JavaResolver, JavaArray: fixes for primitive and array types
vranyj1
parents: 752
diff changeset
    52
    ^BaseTypes
62e917825364 - JavaDescriptor, JavaResolver, JavaArray: fixes for primitive and array types
vranyj1
parents: 752
diff changeset
    53
62e917825364 - JavaDescriptor, JavaResolver, JavaArray: fixes for primitive and array types
vranyj1
parents: 752
diff changeset
    54
    "Created: / 22-05-2011 / 17:45:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
62e917825364 - JavaDescriptor, JavaResolver, JavaArray: fixes for primitive and array types
vranyj1
parents: 752
diff changeset
    55
!
62e917825364 - JavaDescriptor, JavaResolver, JavaArray: fixes for primitive and array types
vranyj1
parents: 752
diff changeset
    56
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    57
baseTypesByTypeName
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    58
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    59
    ^BaseTypesByTypeName
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    60
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    61
    "Created: / 03-02-2011 / 21:08:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    62
! !
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    63
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    64
!JavaDescriptor class methodsFor:'class initialization'!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    65
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    66
initialize
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    67
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    68
    "
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    69
    Tools::NewSystemBrowser browseClasses: BaseTypes values label:'Java primitive types'        
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    70
    "
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    71
873
933263bd2d27 Fixes for primitive array types (uses Signed* variant of an array)
vranyj1
parents: 866
diff changeset
    72
    "/WARNING: If you change something here, you MUST also
933263bd2d27 Fixes for primitive array types (uses Signed* variant of an array)
vranyj1
parents: 866
diff changeset
    73
    "/         change JavaField class>>#initialize !!!!!!
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    74
    BaseTypes := IdentityDictionary new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    75
        at: $B  put: Byte;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    76
        at: $C  put: Character;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    77
        at: $D  put: Float;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    78
        at: $F  put: ShortFloat;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    79
        at: $I  put: Integer;       "Kludge: instances of java int are in fact SmallIntegers"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    80
        at: $J  put: LargeInteger;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    81
        at: $S  put: Short;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    82
        at: $Z  put: Boolean;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    83
        at: $V  put: UndefinedObject;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    84
        yourself.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    85
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    86
    BaseTypesByTypeName := Dictionary new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    87
        at: 'byte'      put: Byte;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    88
        at: 'char'      put: Character;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    89
        at: 'double'    put: Float;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    90
        at: 'float'     put: ShortFloat;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    91
        at: 'int'       put: Integer;       "Kludge: instances of java int are in fact SmallIntegers"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    92
        at: 'long'      put: LargeInteger;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    93
        at: 'short'     put: Short;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    94
        at: 'boolean'   put: Boolean;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    95
        at: 'void'      put: UndefinedObject;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    96
        yourself.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    97
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    98
    "
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    99
    Tools::NewSystemBrowser browseClasses: ArrayTypes values label:'Java primitive array types'        
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   100
    "
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   101
873
933263bd2d27 Fixes for primitive array types (uses Signed* variant of an array)
vranyj1
parents: 866
diff changeset
   102
    "/WARNING: If you change something here, you MUST also
933263bd2d27 Fixes for primitive array types (uses Signed* variant of an array)
vranyj1
parents: 866
diff changeset
   103
    "/         change JavaField class>>#initialize !!!!!!
933263bd2d27 Fixes for primitive array types (uses Signed* variant of an array)
vranyj1
parents: 866
diff changeset
   104
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   105
    ArrayTypes := IdentityDictionary new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   106
        at: $B  put: ByteArray;
865
82615f7deade Few fixes...
vranyj1
parents: 812
diff changeset
   107
        at: $C  put: Unicode32String;
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   108
        at: $D  put: DoubleArray;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   109
        at: $F  put: FloatArray;
866
10d1f47af6d9 Few fixes for Mauve...
vranyj1
parents: 865
diff changeset
   110
        at: $I  put: SignedIntegerArray;    
10d1f47af6d9 Few fixes for Mauve...
vranyj1
parents: 865
diff changeset
   111
        at: $J  put: SignedLongIntegerArray;
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   112
        at: $S  put: WordArray;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   113
        at: $Z  put: BooleanArray;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   114
        yourself
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   115
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   116
    "Created: / 25-11-2010 / 17:51:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
866
10d1f47af6d9 Few fixes for Mauve...
vranyj1
parents: 865
diff changeset
   117
    "Modified: / 25-06-2011 / 08:35:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
873
933263bd2d27 Fixes for primitive array types (uses Signed* variant of an array)
vranyj1
parents: 866
diff changeset
   118
    "Modified (comment): / 20-07-2011 / 10:41:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   119
! !
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   120
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   121
!JavaDescriptor class methodsFor:'reading-private'!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   122
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   123
readArrayTypeFrom:  stream onError: exceptionBlock
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   124
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   125
    | p c |
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   126
    stream next. "eat $["
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   127
    p := stream peek.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   128
    (#(
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   129
         $B "byte"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   130
         $C "char"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   131
         $D "double"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   132
         $F "float"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   133
         $I "int"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   134
         $J "long"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   135
         $S "short"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   136
         $Z "boolean"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   137
    ) includes: p) ifTrue:[^JavaFieldDescriptor javaClass: (ArrayTypes at: stream next)].
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   138
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   139
    "OK, not a primitive array..."
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   140
    c := self readFrom: stream onError: exceptionBlock.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   141
    ^JavaFieldDescriptor javaClass: (JavaVM javaArrayClassFor: c javaClass)
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   142
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   143
    "Created: / 25-11-2010 / 18:12:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   144
    "Modified: / 06-02-2011 / 23:15:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   145
!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   146
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   147
readBaseTypeFrom:  stream onError: exceptionBlock
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   148
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   149
    ^JavaFieldDescriptor javaClass: (BaseTypes at: (stream next) ifAbsent: exceptionBlock)
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   150
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   151
    "Created: / 25-11-2010 / 18:11:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   152
!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   153
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   154
readFieldDescriptorFrom:  stream onError: exceptionBlock
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   155
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   156
    | p |
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   157
    p := stream peek.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   158
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   159
    p == $L ifTrue:[^self readObjectTypeFrom: stream onError: exceptionBlock].
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   160
    p == $[ ifTrue:[^self readArrayTypeFrom: stream onError: exceptionBlock].
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   161
    (#(
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   162
         $B "byte"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   163
         $C "char"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   164
         $D "double"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   165
         $F "float"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   166
         $I "int"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   167
         $J "long"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   168
         $S "short"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   169
         $Z "boolean"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   170
         $V "void"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   171
    ) includes: p) ifTrue:[^self readBaseTypeFrom: stream onError: exceptionBlock].
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   172
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   173
    exceptionBlock value
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   174
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   175
    "Created: / 25-11-2010 / 17:55:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   176
    "Modified: / 21-12-2010 / 22:47:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   177
!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   178
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   179
readMethodDescriptorFrom: stream onError: exceptionBlock
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   180
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   181
    | parameterDescriptors returnDescriptor |
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   182
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   183
    stream next. "eat $("
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   184
    parameterDescriptors := OrderedCollection new.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   185
    [ stream peek ~= $) ] whileTrue:[
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   186
        parameterDescriptors add:( self readFieldDescriptorFrom: stream onError: exceptionBlock).
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   187
    ].
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   188
    stream next. "eat $)"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   189
    stream peek == $V ifFalse:[
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   190
        returnDescriptor := self readFieldDescriptorFrom: stream onError: exceptionBlock.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   191
    ] ifTrue:[
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   192
        stream next. "eat $V"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   193
    ].
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   194
    ^JavaMethodDescriptor parameters: parameterDescriptors return: returnDescriptor
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   195
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   196
    "
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   197
        JavaDescriptor fromString:'(ILjava/lang/Object;)V'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   198
        JavaDescriptor fromString:'(ILjava/lang/Object;)Ljava/lang/Class;'  
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   199
    "
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   200
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   201
    "Created: / 25-11-2010 / 18:36:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   202
    "Modified: / 21-12-2010 / 22:50:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   203
!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   204
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   205
readObjectTypeFrom:  stream onError: exceptionBlock
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   206
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   207
    | clsName |
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   208
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   209
    stream next. "/eat $L.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   210
    clsName := stream upTo: $;.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   211
    "Just a check"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   212
    stream skip: -1.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   213
    stream next ~= $; ifTrue:[exceptionBlock value].
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   214
    ^JavaFieldDescriptor javaClassName: clsName.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   215
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   216
    "Created: / 25-11-2010 / 18:08:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   217
! !
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   218
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   219
!JavaDescriptor class methodsFor:'documentation'!
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   220
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   221
version_SVN
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   222
    ^ '$Id$'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   223
! !
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   224
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   225
JavaDescriptor initialize!