JavaUnresolvedMethodrefConstant.st
author cg
Mon, 15 Apr 1996 15:32:42 +0000
changeset 3 e3c2a84b2a72
parent 1 083530508d9c
child 13 7075280c0cee
permissions -rw-r--r--
checkin from browser
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
083530508d9c intitial checkin
cg
parents:
diff changeset
     1
JavaUnresolvedRefConstant subclass:#JavaUnresolvedMethodrefConstant
083530508d9c intitial checkin
cg
parents:
diff changeset
     2
	instanceVariableNames:''
083530508d9c intitial checkin
cg
parents:
diff changeset
     3
	classVariableNames:''
083530508d9c intitial checkin
cg
parents:
diff changeset
     4
	poolDictionaries:''
083530508d9c intitial checkin
cg
parents:
diff changeset
     5
	category:'Java-Reader-Support'
083530508d9c intitial checkin
cg
parents:
diff changeset
     6
!
083530508d9c intitial checkin
cg
parents:
diff changeset
     7
083530508d9c intitial checkin
cg
parents:
diff changeset
     8
3
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
     9
!JavaUnresolvedMethodrefConstant methodsFor:'error handling'!
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    10
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    11
doesNotUnderstand:aMessage
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    12
    "this message is sent by the runtime system (VM) when
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    13
     a message is not understood by some object (i.e. there
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    14
     is no method for that selector). The original message has
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    15
     been packed into aMessage (i.e. the receiver, selector and
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    16
     any arguments) and the original receiver is then sent the
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    17
     #doesNotUnderstand: message.
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    18
     Here, we raise another signal which usually enters the debugger.
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    19
     You can of course redefine #doesNotUnderstand: in your classes
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    20
     to implement message delegation."
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    21
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    22
    |sel errorString cls sender|
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    23
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    24
    "/ handle the case of an error during early startup
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    25
    "/ (output streams not yet initialized)
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    26
    "/
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    27
    Stdout isNil ifTrue:[
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    28
	Smalltalk fatalAbort:'error during init: ' , aMessage selector , ' not understood'.
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    29
    ].
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    30
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    31
    (sel := aMessage selector) isNil ifTrue:[
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    32
	"/
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    33
	"/ happens when things go mad, or a method has been
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    34
	"/ called by valueWithReceiver: with a wrong receiver
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    35
	"/ to avoud later trouble (when concatenating strings),
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    36
	"/ replace the selector by some (nonNil) string
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    37
	"/
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    38
	sel := '(nil)'
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    39
    ].
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    40
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    41
    "/
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    42
    "/ extract the class that should have implemented the message.
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    43
    "/ (in case of a super-send, this is not the receivers class)
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    44
    "/
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    45
    sender := thisContext sender.
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    46
    cls := sender searchClass.
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    47
    cls isNil ifTrue:[
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    48
	"it was NOT a super or directed send ..."
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    49
	cls := self class
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    50
    ].
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    51
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    52
    cls notNil ifTrue:[
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    53
	"/
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    54
	"/ displayString is better than 'cls name',
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    55
	"/ since it appends (obsolete) for outdated classes.
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    56
	"/ (this happens if you send messages to old instances
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    57
	"/  after changing a classes definition)
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    58
	"/
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    59
	errorString := cls displayString.
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    60
    ] ifFalse:[    
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    61
	errorString := '(** nil-class **)'
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    62
    ].
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    63
    errorString := errorString , ' does not understand: ' , sel.
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    64
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    65
    "/
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    66
    "/ this only happens, when YOU play around with my classvars ...
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    67
    "/ (or an error occurs during early startup, when signals are not yet set)
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    68
    "/
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    69
    MessageNotUnderstoodSignal isNil ifTrue:[
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    70
	^ self enterDebuggerWith:nil
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    71
			 message:'oops - MessageNotUnderstoodSignal is gone'.
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    72
    ].
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    73
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    74
    "/
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    75
    "/ thats where we end up normally - raise a signal which (if unhandled) opens a debugger
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    76
    "/
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    77
    ^ MessageNotUnderstoodSignal
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    78
		raiseRequestWith:aMessage
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    79
		     errorString:errorString
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    80
			      in:sender
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    81
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    82
    "Modified: 9.12.1995 / 17:25:37 / cg"
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    83
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    84
"
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    85
*** WARNING
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    86
***
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    87
*** this method has been automatically created,
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    88
*** since all nil-subclasses should respond to some minimum required
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    89
*** protocol.
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    90
***
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    91
*** Inspection and/or debugging of instances may not be possible,
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    92
*** if you remove/change this method. 
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    93
"
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    94
! !
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    95
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    96
!JavaUnresolvedMethodrefConstant methodsFor:'queries'!
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    97
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    98
class
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
    99
    "return the receivers class"
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   100
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   101
%{  /* NOCONTEXT */
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   102
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   103
    RETURN ( __Class(self) );
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   104
%}
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   105
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   106
"
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   107
*** WARNING
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   108
***
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   109
*** this method has been automatically created,
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   110
*** since all nil-subclasses should respond to some minimum required
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   111
*** protocol.
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   112
***
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   113
*** Inspection and/or debugging of instances may not be possible,
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   114
*** if you remove/change this method. 
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   115
"
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   116
!
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   117
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   118
isBehavior
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   119
    "return true, if the receiver is some kind of class (i.e. behavior);
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   120
     false is returned here - the method is only redefined in Behavior."
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   121
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   122
    ^ false
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   123
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   124
"
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   125
*** WARNING
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   126
***
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   127
*** this method has been automatically created,
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   128
*** since all nil-subclasses should respond to some minimum required
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   129
*** protocol.
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   130
***
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   131
*** Inspection and/or debugging of instances may not be possible,
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   132
*** if you remove/change this method. 
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   133
"
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   134
! !
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   135
1
083530508d9c intitial checkin
cg
parents:
diff changeset
   136
!JavaUnresolvedMethodrefConstant methodsFor:'resolving'!
083530508d9c intitial checkin
cg
parents:
diff changeset
   137
083530508d9c intitial checkin
cg
parents:
diff changeset
   138
resolveFrom:aConstantTable
083530508d9c intitial checkin
cg
parents:
diff changeset
   139
    |class nameAndType|
083530508d9c intitial checkin
cg
parents:
diff changeset
   140
083530508d9c intitial checkin
cg
parents:
diff changeset
   141
    class := self class resolve:(aConstantTable at:index) from:aConstantTable.
083530508d9c intitial checkin
cg
parents:
diff changeset
   142
    nameAndType := self class resolve:(aConstantTable at:nameandTypeIndex) from:aConstantTable.
083530508d9c intitial checkin
cg
parents:
diff changeset
   143
    ^ JavaMethodref 
083530508d9c intitial checkin
cg
parents:
diff changeset
   144
        class:class
083530508d9c intitial checkin
cg
parents:
diff changeset
   145
        nameandType:nameAndType
083530508d9c intitial checkin
cg
parents:
diff changeset
   146
083530508d9c intitial checkin
cg
parents:
diff changeset
   147
    "Created: 15.4.1996 / 16:12:41 / cg"
083530508d9c intitial checkin
cg
parents:
diff changeset
   148
    "Modified: 15.4.1996 / 16:26:59 / cg"
083530508d9c intitial checkin
cg
parents:
diff changeset
   149
! !
083530508d9c intitial checkin
cg
parents:
diff changeset
   150
083530508d9c intitial checkin
cg
parents:
diff changeset
   151
!JavaUnresolvedMethodrefConstant class methodsFor:'documentation'!
083530508d9c intitial checkin
cg
parents:
diff changeset
   152
083530508d9c intitial checkin
cg
parents:
diff changeset
   153
version
3
e3c2a84b2a72 checkin from browser
cg
parents: 1
diff changeset
   154
    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedMethodrefConstant.st,v 1.2 1996/04/15 15:32:27 cg Exp $'
1
083530508d9c intitial checkin
cg
parents:
diff changeset
   155
! !