AutoloadMetaclass.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 28 Sep 2011 20:07:49 +0100
branchjv
changeset 17865 598963c6ff8e
parent 17846 24edc476ac18
child 17869 9610c6c94e71
permissions -rw-r--r--
Recommited from itself
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5271
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     1
"
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     2
 COPYRIGHT (c) 1999 by eXept Software AG
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     3
              All Rights Reserved
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     4
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     5
 This software is furnished under a license and may be used
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     6
 only in accordance with the terms of that license and with the
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     8
 be provided or otherwise made available to, or used by, any
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     9
 other person.  No title to or ownership of the software is
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    10
 hereby transferred.
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    11
"
11112
e451ac8809b3 +isLoaded
Claus Gittinger <cg@exept.de>
parents: 5271
diff changeset
    12
"{ Package: 'stx:libbasic' }"
5271
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    13
4509
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    14
Metaclass subclass:#AutoloadMetaclass
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    15
	instanceVariableNames:''
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    16
	classVariableNames:''
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    17
	poolDictionaries:''
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    18
	category:'Kernel-Classes'
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    19
!
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    20
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    21
!AutoloadMetaclass class methodsFor:'documentation'!
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    22
5271
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    23
copyright
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    24
"
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    25
 COPYRIGHT (c) 1999 by eXept Software AG
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    26
              All Rights Reserved
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    27
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    28
 This software is furnished under a license and may be used
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    29
 only in accordance with the terms of that license and with the
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    31
 be provided or otherwise made available to, or used by, any
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    32
 other person.  No title to or ownership of the software is
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    33
 hereby transferred.
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    34
"
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    35
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    36
!
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    37
4509
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    38
documentation
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    39
"
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    40
    AutoloadMetaclass catches unhandled class methods, files in 
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    41
    the corresponding code when first used and resends the catched
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    42
    message to the now existing class.
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    43
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    44
    Autoload installs AutoloadMetaclass as its metaclass in #initialize. 
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    45
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    46
    [author:]
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    47
        Stefan Vogel
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    48
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    49
    [see also:]
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    50
        Autoload
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    51
"
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    52
! !
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    53
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    54
!AutoloadMetaclass methodsFor:'message catching'!
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    55
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    56
doesNotUnderstand:aMessage
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    57
    "caught a message; load the class and retry the message"
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    58
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    59
    |newClass|
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    60
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    61
    (myClass isNil or:[myClass == Autoload]) ifTrue:[
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    62
        "take care: subclassing Autoload must still be possible"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    63
        ^ self perform:aMessage selector inClass:Metaclass withArguments:aMessage arguments.
4509
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    64
    ].
17757
73caeb68bf1f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
    65
    newClass := myClass autoload.
73caeb68bf1f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
    66
    (newClass notNil and:[newClass isLoaded]) ifTrue:[
73caeb68bf1f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
    67
        ^ aMessage sendTo:newClass class
73caeb68bf1f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
    68
    ].
73caeb68bf1f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
    69
73caeb68bf1f Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17735
diff changeset
    70
    Transcript showCR:'Autoload [warning]: failed to autoload ',self name.
4509
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    71
    ^ super doesNotUnderstand:aMessage
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    72
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    73
    "
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    74
     Wrapper unload.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    75
     Wrapper class xxx
4509
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    76
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    77
     Wrapper unload.
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    78
     Wrapper
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    79
        subclass:#TTTT 
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    80
        instanceVariableNames:'' 
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    81
        classVariableNames:''
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    82
        poolDictionaries:'' 
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    83
        category:'AAAA-Test'
4509
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    84
    "
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    85
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    86
    "Modified: / 3.8.1999 / 13:57:05 / stefan"
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    87
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    88
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    89
new
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    90
    "catch  - load the class and send it to the real one"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    91
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    92
    ^ self doesNotUnderstand:(Message selector:#new)
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    93
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    94
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    95
newClassBuilder
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    96
    "catch  - load the class and send it to the real one"
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    97
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
    98
    ^ self doesNotUnderstand:(Message selector:#newClassBuilder)
4509
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    99
! !
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   100
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   101
!AutoloadMetaclass class methodsFor:'documentation'!
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   102
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   103
version
17865
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   104
    ^ '$Id: AutoloadMetaclass.st 10695 2011-09-28 19:07:49Z vranyj1 $'
17732
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   105
!
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   106
a1892eeca6c0 trunk merged into jv branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17711
diff changeset
   107
version_CVS
17845
7e0cfaac936d Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17841
diff changeset
   108
    ^ '§Header: /cvs/stx/stx/libbasic/AutoloadMetaclass.st,v 1.8 2010/04/03 10:47:04 cg Exp §'
17865
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   109
!
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   110
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   111
version_SVN
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   112
    ^ '$Id: AutoloadMetaclass.st 10695 2011-09-28 19:07:49Z vranyj1 $'
17846
24edc476ac18 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17845
diff changeset
   113
! !