PrivateMetaclass.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 22 Sep 2015 16:28:42 +0100
branchjv
changeset 18759 c1217211909c
parent 17911 a99f15c5efa5
permissions -rw-r--r--
Changed identification strings to contain jv-branch ...to make explicit that this distribution is not the official one used by eXept and therefore that eXept is not to be blamed in case of any problem.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5274
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
     1
"
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
     2
 COPYRIGHT (c) 1996 by eXept Software AG
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
     3
              All Rights Reserved
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
     4
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
     5
 This software is furnished under a license and may be used
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
     6
 only in accordance with the terms of that license and with the
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
     8
 be provided or otherwise made available to, or used by, any
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
     9
 other person.  No title to or ownership of the software is
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    10
 hereby transferred.
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    11
"
5380
e96468801e76 fix for nil owningClass
Claus Gittinger <cg@exept.de>
parents: 5274
diff changeset
    12
"{ Package: 'stx:libbasic' }"
e96468801e76 fix for nil owningClass
Claus Gittinger <cg@exept.de>
parents: 5274
diff changeset
    13
1731
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
Metaclass subclass:#PrivateMetaclass
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
	instanceVariableNames:'owningClass'
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	classVariableNames:''
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	poolDictionaries:''
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	category:'Kernel-Classes'
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
!
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
1737
f3f31a158d7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1736
diff changeset
    21
!PrivateMetaclass class methodsFor:'documentation'!
1731
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
5274
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    23
copyright
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    24
"
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    25
 COPYRIGHT (c) 1996 by eXept Software AG
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    26
              All Rights Reserved
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    27
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    28
 This software is furnished under a license and may be used
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    29
 only in accordance with the terms of that license and with the
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    31
 be provided or otherwise made available to, or used by, any
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    32
 other person.  No title to or ownership of the software is
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    33
 hereby transferred.
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    34
"
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    35
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    36
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    37
!
c7355bfa2efc copyrights
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    38
1731
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
documentation
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
"
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    A PrivateMetaclass is much like a regular Metaclass, but it is only visible (known)
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
    to some owningClass (which is also true for the PrivateMetaclasses sole instance).
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
1755
fd24e54de800 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1744
diff changeset
    44
    Its sourceCode, package and revision is forced to be the same as the owning classes'.
fd24e54de800 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1744
diff changeset
    45
    Therefore, privateClasses delegate some queries to their owning class.
1731
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
1807
202f0af2c2e1 commentary
Claus Gittinger <cg@exept.de>
parents: 1757
diff changeset
    47
    Caution: support for private classes is an ST/X special feature.
202f0af2c2e1 commentary
Claus Gittinger <cg@exept.de>
parents: 1757
diff changeset
    48
             This mechanism may not be provided by other smalltalk systems,
202f0af2c2e1 commentary
Claus Gittinger <cg@exept.de>
parents: 1757
diff changeset
    49
             making your code unportable.
202f0af2c2e1 commentary
Claus Gittinger <cg@exept.de>
parents: 1757
diff changeset
    50
             (However, private classes can be simulated pretty easily, using classVariables
202f0af2c2e1 commentary
Claus Gittinger <cg@exept.de>
parents: 1757
diff changeset
    51
              or classInstance variables ...)
202f0af2c2e1 commentary
Claus Gittinger <cg@exept.de>
parents: 1757
diff changeset
    52
1731
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
    [author:]
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
        Claus Gittinger
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
    [see also:]
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
        Behavior ClassDescription Class Metaclass
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
"
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
! !
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
!PrivateMetaclass methodsFor:'accessing'!
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
1920
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1807
diff changeset
    63
nameSpace
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1807
diff changeset
    64
    "return the nameSpace I am contained in.
8088
08d53c1b4cd7 my owning class is my nameSpace
Claus Gittinger <cg@exept.de>
parents: 5380
diff changeset
    65
     For private classes, this is my owning class"
1920
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1807
diff changeset
    66
5380
e96468801e76 fix for nil owningClass
Claus Gittinger <cg@exept.de>
parents: 5274
diff changeset
    67
    owningClass isNil ifTrue:[
e96468801e76 fix for nil owningClass
Claus Gittinger <cg@exept.de>
parents: 5274
diff changeset
    68
        ^ super nameSpace
e96468801e76 fix for nil owningClass
Claus Gittinger <cg@exept.de>
parents: 5274
diff changeset
    69
    ].
8088
08d53c1b4cd7 my owning class is my nameSpace
Claus Gittinger <cg@exept.de>
parents: 5380
diff changeset
    70
    ^ owningClass
1920
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1807
diff changeset
    71
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1807
diff changeset
    72
    "Created: 7.11.1996 / 13:19:18 / cg"
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1807
diff changeset
    73
!
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1807
diff changeset
    74
1731
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
owningClass
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
    "return my owningClass"
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    ^ owningClass
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
    "Created: 11.10.1996 / 16:55:43 / cg"
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
    "Modified: 11.10.1996 / 17:35:13 / cg"
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
!
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
setOwningClass:something
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
    "set my owningClass - this is not a public entry"
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    owningClass := something.
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
    "Created: 11.10.1996 / 17:11:05 / cg"
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
    "Modified: 11.10.1996 / 17:35:24 / cg"
2048
91eeef9b3106 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
    91
!
91eeef9b3106 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
    92
91eeef9b3106 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
    93
topOwningClass
91eeef9b3106 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
    94
    "return my outermost owningClass; that is the first non-private
91eeef9b3106 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
    95
     class along the owner-chain."
91eeef9b3106 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
    96
91eeef9b3106 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
    97
    |outerOwner|
91eeef9b3106 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
    98
5380
e96468801e76 fix for nil owningClass
Claus Gittinger <cg@exept.de>
parents: 5274
diff changeset
    99
    owningClass isNil ifTrue:[^ nil].
e96468801e76 fix for nil owningClass
Claus Gittinger <cg@exept.de>
parents: 5274
diff changeset
   100
2048
91eeef9b3106 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
   101
    (outerOwner := owningClass owningClass) notNil ifTrue:[
91eeef9b3106 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
   102
        ^ owningClass topOwningClass
91eeef9b3106 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
   103
    ].
91eeef9b3106 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
   104
    ^ owningClass
91eeef9b3106 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
   105
91eeef9b3106 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
   106
    "Created: 3.1.1997 / 19:19:58 / cg"
91eeef9b3106 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
   107
    "Modified: 3.1.1997 / 19:50:05 / cg"
1731
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
! !
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
!PrivateMetaclass methodsFor:'queries'!
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
isBuiltInClass
1755
fd24e54de800 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1744
diff changeset
   113
     ^ self == PrivateMetaclass
1757
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1755
diff changeset
   114
!
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1755
diff changeset
   115
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1755
diff changeset
   116
package
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1755
diff changeset
   117
    "return my package-id"
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1755
diff changeset
   118
5380
e96468801e76 fix for nil owningClass
Claus Gittinger <cg@exept.de>
parents: 5274
diff changeset
   119
    owningClass notNil ifTrue:[
e96468801e76 fix for nil owningClass
Claus Gittinger <cg@exept.de>
parents: 5274
diff changeset
   120
        ^ owningClass package
e96468801e76 fix for nil owningClass
Claus Gittinger <cg@exept.de>
parents: 5274
diff changeset
   121
    ].
e96468801e76 fix for nil owningClass
Claus Gittinger <cg@exept.de>
parents: 5274
diff changeset
   122
    ^ super package
1757
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1755
diff changeset
   123
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1755
diff changeset
   124
    "Created: 15.10.1996 / 19:45:04 / cg"
1731
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
! !
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
1738
ea8b22caa829 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
   127
!PrivateMetaclass class methodsFor:'documentation'!
1731
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
d0d876111aa2 renamed
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
version
17892
d86c8bd5ece3 Merged with CVS
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17869
diff changeset
   130
    ^ '$Header: /cvs/stx/stx/libbasic/PrivateMetaclass.st,v 1.13 2004/03/05 17:53:16 cg Exp $'
17865
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   131
!
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   132
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   133
version_SVN
17911
a99f15c5efa5 Updated with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17910
diff changeset
   134
    ^ '$Id: PrivateMetaclass.st 10761 2012-01-19 11:46:00Z vranyj1 $'
17846
24edc476ac18 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17845
diff changeset
   135
! !
17892
d86c8bd5ece3 Merged with CVS
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17869
diff changeset
   136
17910
8d796ca8bd1d Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17892
diff changeset
   137
17911
a99f15c5efa5 Updated with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17910
diff changeset
   138