extensions.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 02 Sep 2015 09:18:30 +0100
changeset 4 90637b709fa9
parent 2 e439b82dda7d
permissions -rw-r--r--
Added RGAbstractContainer>>addElements:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/ring' }"!
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
!Behavior methodsFor:'*Ring-Core-Kernel'!
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
methodNamed: aSelector
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
    ^ self methodDict at: aSelector
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
    "Created: / 28-08-2015 / 09:37:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
! !
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
!Behavior methodsFor:'*Ring-Core-Kernel'!
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
protocols
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
    ^ self organization categories copy
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
    "Created: / 28-08-2015 / 09:37:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
! !
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
!Class methodsFor:'*Ring-Core-Kernel'!
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
asFullRingDefinition
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
    "A behavior is converted to a ring class including its variables, methods, direct superclass, direct subclasses and the package in which is loaded.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
    Active methods are generated and each knows its package as well.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
    Note that for its direct superclass and subclasses no full definitions are requested. If you need to traverse hierarchies use #asRingDefinitionWithMethods:withSuperclasses:withSubclasses:withPackages:"
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
    | rgClass rgSuper rgSub rgMethod packageKeys |
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
    rgClass:= self asRingDefinition.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
    rgClass package: (RGContainer packageOfClass: rgClass).
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
    self superclass notNil 
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
        ifTrue: [ 
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
            rgSuper := self superclass asRingDefinition.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
            rgClass superclass: rgSuper ]
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
        ifFalse: [  
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
            self isTrait ifTrue: [ 
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
                rgSuper := Trait asRingDefinition.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
                rgClass superclass: rgSuper. ]
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
            ].
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
    self subclasses do:[ :each |
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
        rgSub := each asRingDefinition.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
        rgSub superclass: rgClass ].
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
    packageKeys := RGContainer packageKeys.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
    self methodsDo:[ :mth|  
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
            rgMethod := mth asActiveRingDefinition.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
            rgClass addMethod: rgMethod.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
            rgMethod package: (RGContainer packageOfMethod: rgMethod using: packageKeys) ].
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
    self theMetaClass methodsDo:[ :mth|  
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
            rgMethod := mth asActiveRingDefinition.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
            rgClass theMetaClass addMethod: rgMethod.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
            rgMethod package: (RGContainer packageOfMethod: rgMethod using: packageKeys) ].
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
    ^ rgClass
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
    "Created: / 28-08-2015 / 09:36:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
! !
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
!Class methodsFor:'*Ring-Core-Kernel'!
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
asRingDefinition
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
    "A behavior is converted to a ring class. Only the receiver and its variables (instance, class, pools) are converted.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
    Methods, superclasses, subclasses are not generated"
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
    
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
    | ring |
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
    ring := (RGClassDefinition named: self name)
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
        category: self category;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
        superclassName: self superclass name;  
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
        traitCompositionSource: self traitCompositionString;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
        addInstanceVariables: self instVarNames;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
        addClassVariables: self classVarNames;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
        addSharedPools: self sharedPoolNames;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
        comment: self organization classComment;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
        stamp: self organization commentStamp;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
        definitionSource: self definition;
2
e439b82dda7d Fixed some tests. Not all pass, though,
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
    78
        package: (RGPackage named: self package);
0
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
        withMetaclass.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
    ring theMetaClass 
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
        traitCompositionSource: self theMetaClass traitCompositionString;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
        definitionSource: self theMetaClass definition;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
        addInstanceVariables: self theMetaClass instVarNames.  
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
    ^ ring
2
e439b82dda7d Fixed some tests. Not all pass, though,
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
    85
e439b82dda7d Fixed some tests. Not all pass, though,
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
    86
    "Modified: / 28-08-2015 / 18:27:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
! !
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
!Class methodsFor:'*Ring-Core-Kernel'!
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackageKeys: packageKeys in: aRGSlice
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
    | rgClass rgMethod rgSuper rgSub subs |
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
    rgClass := self asRingDefinition.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
    aRGSlice loadClass: rgClass using: packageKeys.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
    methodsBoolean
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
        ifTrue: [ 
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
            self
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
                methodsDo: [ :mth | 
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
                    rgMethod := mth asActiveRingDefinition.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
                    aRGSlice loadMethod: rgMethod inClass: rgClass using: packageKeys ].
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
            self theMetaClass
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
                methodsDo: [ :mth | 
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
                    rgMethod := mth asActiveRingDefinition.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
                    aRGSlice loadMethod: rgMethod inClass: rgClass theMetaClass using: packageKeys ] ].
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
    supersBoolean
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
        ifTrue: [ 
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
            self superclass
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
                ifNotNil: [ 
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
                    rgSuper := aRGSlice classNamed: self superclass name.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
                    rgSuper
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
                        ifNil: [ 
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
                            rgSuper := self superclass
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
                                asRingDefinitionWithMethods: methodsBoolean
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
                                withSuperclasses: supersBoolean
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
                                withSubclasses: subsBoolean
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
                                withPackageKeys: packageKeys
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
                                in: aRGSlice ].
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
                    rgClass superclass: rgSuper ] ].
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
    subsBoolean
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
        ifTrue: [ 
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
            subs := self subclasses reject: [ :sub | sub isMeta ].
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
            rgClass name = #Trait
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
                ifTrue: [ subs := aRGSlice environment allTraits ].
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
            subs
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
                do: [ :each | 
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
                    rgSub := aRGSlice classNamed: each name.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
                    rgSub
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
                        ifNil: [ 
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
                            rgSub := each
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
                                asRingDefinitionWithMethods: methodsBoolean
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
                                withSuperclasses: supersBoolean
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
                                withSubclasses: subsBoolean
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
                                withPackageKeys: packageKeys
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
                                in: aRGSlice ].
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
                    rgSub superclass: rgClass ] ].
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
    ^ rgClass
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
! !
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
!Class methodsFor:'*Ring-Core-Kernel'!
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackages: packsBoolean
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
    "Retrieves a ring class/trait based on the receiver.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
    The data loaded in the class/trait (active methods, superclasses, subclasses and packages) is requested by the users.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
    As it may need to traverse hierarchies for retrieving super and subclasses a ring slice is created as the container for every class, method and package.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
    To retrieve the slice:  aRGClass environment "
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
    | rgClass rgSlice  rgPackageKeys |
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
    rgSlice := RGSlice named: #fromImage.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
    packsBoolean ifTrue: [ 
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
        rgPackageKeys := rgSlice loadPackagesFromImage ].
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
    rgClass := self asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackageKeys: rgPackageKeys in: rgSlice.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
    rgSlice cleanEmptyPackages.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
    rgSlice loadTraitUsers.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
    ^ rgClass
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
    "Created: / 28-08-2015 / 09:36:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
! !
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
!Method methodsFor:'*Ring-Core-Kernel'!
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
asActiveRingDefinition
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
    "Retrieves an active RGMethodDefinition object based on the data of the receiver.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
    Source, protocol and stamp are retrieved from the compiled method"
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
    
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
    ^ RGMethodDefinition new 
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
            name: self selector;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
            parentName: self methodClass name;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
            isMetaSide: self methodClass isMeta;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
            asActive.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
! !
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
!Method methodsFor:'*Ring-Core-Kernel'!
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
asFullRingDefinition
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
    "Retrieves an active RGMethodDefinition which knows its parent <class>.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
    Note that the full conversion does not happen at the level of the class. If you need that request asFullRingDefinition to the class"
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
    | rgClass rgMethod |
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
    rgClass := self realClass asRingDefinition.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
    rgMethod := self asActiveRingDefinition.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
    rgClass addMethod: rgMethod.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
    rgMethod package: (RGContainer packageOfMethod: rgMethod).
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
    ^ rgMethod
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
! !
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
!Method methodsFor:'*Ring-Core-Kernel'!
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
asHistoricalRingDefinition
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
    "Retrieves a historical RGMethodDefinition object based on the data of the receiver.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
    Source, protocol and stamp are retrieved from the source file method"
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
    | ring |
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
    ring := (RGMethodDefinition named: self selector)
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
                parentName: self methodClass name;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
                isMetaSide: self methodClass isMeta.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
2
e439b82dda7d Fixed some tests. Not all pass, though,
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   198
    self sourceCode isNil
0
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
        ifTrue: [ "this should not happen but sometimes the system looks corrupted"
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
            ring protocol: self category;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
                sourceCode: self sourceCode;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
                stamp: self timeStamp ]
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
        ifFalse: [ 
2
e439b82dda7d Fixed some tests. Not all pass, though,
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   204
            ring sourceCode: self sourceCode ].
e439b82dda7d Fixed some tests. Not all pass, though,
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   205
    ring asHistorical.    
0
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
    ^ ring
2
e439b82dda7d Fixed some tests. Not all pass, though,
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   207
e439b82dda7d Fixed some tests. Not all pass, though,
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   208
    "Modified: / 29-08-2015 / 08:01:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
! !
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
!Method methodsFor:'*Ring-Core-Kernel'!
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
asPassiveRingDefinition
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
    "Retrieves a passive RGMethodDefinition object based on the data of the receiver.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
    Source, protocol and stamp are retrieved from value assigned in creation"
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
    
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
    ^RGMethodDefinition new 
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
         	name: self selector;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
            parentName: self methodClass name;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
            isMetaSide: self methodClass isMeta;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
            protocol: self category;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
            sourceCode: self sourceCode;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
            stamp: self timeStamp;
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
            asPassive.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
! !
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
!Method methodsFor:'*Ring-Core-Kernel'!
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
asRingDefinition
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
    "Retrieves an active RGMethodDefinition object based on the receiver.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
    Note that its class is not converted."
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
    
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
    ^ self asActiveRingDefinition
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
! !
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
!Method methodsFor:'*Ring-Core-Kernel'!
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
methodReference
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
    | class selector |
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
    class := self methodClass ifNil: [^nil].
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
    selector := self selector ifNil: [^nil].
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
    ^RGMethodDefinition realClass: class selector: selector.
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
    
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
! !
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
!Method methodsFor:'*Ring-Core-Kernel'!
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
realClass
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
    "answer the class that I am installed in"
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
    
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
    ^ self methodClass
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
! !
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
!Object methodsFor:'*Ring-Core-Kernel'!
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
isRingObject
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
    ^false
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
! !
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
!stx_goodies_ring class methodsFor:'documentation'!
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
extensionsVersion_HG
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
    ^ '$Changeset: <not expanded> $'
43cb9f3e345e Initial port form Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
! !