core/RGMethod.st
author Jan Vrany <jan.vrany@labware.com>
Wed, 23 Dec 2020 08:46:20 +0000
changeset 10 1fa4cd506c87
parent 9 d64df1abdf2a
child 12 ae376bb422f5
permissions -rw-r--r--
core: use `Timestamp` instead of (Pharo) `DateAndTime`
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
     1
"
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
     2
COPYRIGHT (c) 2020 LabWare
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
     3
"
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
     4
"{ Package: 'stx:goodies/ring/core' }"
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
     5
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
     6
"{ NameSpace: Smalltalk }"
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
     7
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
     8
RGElement subclass:#RGMethod
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
     9
	instanceVariableNames:'sourceCode package author time tags'
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    10
	classVariableNames:''
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    11
	poolDictionaries:''
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    12
	category:'Ring-Core-Kernel'
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    13
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    14
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    15
RGMethod comment:'RG2Method is a concrete representation of methods. It can be used to build browser for methods that are not in the image. It is polymorphic with CompiledMethod. 

* We can ask a RG2Method for its selector using the selector message.
Example:
	(Point>>#dist:) asRing2Definition selector
		-> #dist

We can also ask the ring object representation of its class or the Smalltalk class actually implementing the corresponding compiledMethod. 

* To access the ring class definition name, use parentName
	aRG2MethodDefinition parentName
	
Example:
	(Point>>#dist:) asRing2Definition parentName
		->  #Point
		
* If you have a complete model where classes and methods are ring definition, to access the ring class definition , use parent
	aRG2MethodDefinition parent
	
Example:
	aRG2MethodDefinition(Point>>#dist:) parent
		->  aRG2ClassDefinition(Point)
		
* If you want to access the smalltalk class that contains the compiledMethod that is represented by a ringMethodDefinition, use realParent
	aRG2MethodDefinition realParent
	
Example:
	(Point>>#dist:) asRing2Definition realParent
		->  Point
		

Now a RingEntityDefinition offers two APIs: one that is generic and works for all the source code entities and this is the one we just 
presented: parent, parentName and realParent. Having such interface is important to build generic tools that could manipulate 
any entities in a polymorphic way (yes no isKindOf: everywhere).

In addition, a ring method definition offers a specific interface that should only be used when you know that you are solely manipulate
specific entity such as class element: method definition, class comment, and variables. 

Here is the equivalence table

	realParent 				realClass
	parent					ringClass
	parentName			className


* The message class returns the class of the object :).

Example:
	(Point>>#dist:) asRing2Definition class
		->  RingMethodDefinition
		
* The message className returns the name of the ring class defining the reingMethodDefinition.

Example:
	(Point>>#dist:) asRing2Definition className
		->  #Point		
		
* If you have a complete model where classes and methods are ring definition, to access the ring class definition , use parent
	aRG2MethodDefinition ringClass
	
Example:
	aRG2MethodDefinition(Point>>#dist:) ringClass
		->  aRG2ClassDefinition(Point)
		
		
* If you want to access the smalltalk class that contains the compiledMethod that is represented by a ringMethodDefinition, use realClass
	aRG2MethodDefinition realClass
	
Example:
	(Point>>#dist:) asRing2Definition realClass
		->  Point

'
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    16
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    17
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    18
!RGMethod class methodsFor:'documentation'!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    19
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    20
copyright
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    21
"
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    22
COPYRIGHT (c) 2020 LabWare
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    23
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    24
"
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    25
! !
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    26
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    27
!RGMethod methodsFor:'accessing'!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    28
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    29
argumentNames		
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    30
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    31
    ^ self ast argumentNames
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    32
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    33
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    34
ast
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    35
    "Answer my AST with semantic analysis. See #parseTree."
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    36
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    37
    ^ self propertyNamed: #ast ifAbsentPut: [ self parseTree doSemanticAnalysisIn: self methodClass ]
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    38
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    39
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    40
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    41
compiledMethod
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    42
    ^ self
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    43
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    44
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    45
fullName
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    46
    "Keeps a unique description for the receiver. As annotation to avoid converting each time is invoked"
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    47
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    48
    ^ (self parent name, '>>#', self selector) asSymbol
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    49
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    50
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    51
hasSourceCode
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    52
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    53
    ^ self backend forMethod hasSourceCodeFor: self
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    54
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    55
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    56
isExtension
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    57
    "The receiver is an extension when is defined in a different package to the one of its parent"
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    58
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    59
    ^ self parent package ~= self package
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    60
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    61
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    62
numArgs
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    63
    ^ self selector asString numArgs
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    64
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    65
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    66
parseTree
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    67
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    68
    ^(RBParser 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    69
        parseMethod: self sourceCode 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    70
        onError: [ :msg :pos | ^ nil ]) methodClass: self methodClass.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    71
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    72
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    73
selector
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    74
    "Retrieves the name of the method"
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    75
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    76
    ^ self name asSymbol
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    77
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    78
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    79
sourceCode
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    80
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    81
    ^ self backend forMethod sourceCodeFor: self
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    82
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    83
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    84
sourceCode: anObject
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    85
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    86
    "ATTENTION: There is no check here if the selector is changed!!"
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    87
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    88
    self backend forMethod setSourceCodeFor: self to: anObject asString
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    89
    "TODO: announcements"
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    90
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    91
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    92
sourceCodeForNoSelector
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    93
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    94
    ^ 'unresolvedMessage', String cr, String tab, '"source code for the method model not set"'
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    95
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    96
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    97
sourceCodeForNoSource
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    98
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
    99
    ^ self selector asMethodPreamble, String cr, String tab, '"source code for the method model not set"'
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   100
! !
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   101
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   102
!RGMethod methodsFor:'accessing - backend'!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   103
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   104
author
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   105
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   106
    ^ self backend forBehavior authorFor: self
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   107
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   108
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   109
author: aString
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   110
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   111
    self backend forBehavior setAuthorFor: self to: aString
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   112
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   113
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   114
cleanTags
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   115
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   116
    self changeProtocolDuring: [ 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   117
        self cleanTagsWithoutAnnouncemnt ]
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   118
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   119
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   120
cleanTagsWithoutAnnouncemnt 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   121
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   122
    self backend forMethod cleanMethodTagsFor: self.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   123
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   124
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   125
package
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   126
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   127
    ^ self backend forMethod methodPackageFor: self
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   128
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   129
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   130
package: anRGPackage
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   131
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   132
    self backend forMethod setMethodPackageFor: self to: anRGPackage.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   133
    self environment addPackage: anRGPackage.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   134
    (self parent package = anRGPackage)
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   135
        ifFalse: [ self package addExtensionMethod: self ].
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   136
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   137
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   138
protocol
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   139
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   140
    | methodTags |
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   141
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   142
    methodTags := self tags.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   143
    ^	methodTags
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   144
        ifEmpty: [  self class asYetUnclassifiedProtocolName]
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   145
        ifNotEmpty: [ methodTags sorted first ]
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   146
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   147
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   148
protocol: aSymbol
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   149
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   150
    self cleanTagsWithoutAnnouncemnt.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   151
    self tagWith: aSymbol.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   152
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   153
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   154
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   155
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   156
tagWith: aSymbol 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   157
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   158
    self changeProtocolDuring: [ 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   159
        self backend forMethod tagMethod: self with: aSymbol.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   160
        self parent addMethodTag: aSymbol.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   161
    ]
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   162
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   163
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   164
tagsDo: aBlock
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   165
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   166
    self backend forMethod tagsForMethod: self do: aBlock
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   167
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   168
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   169
time
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   170
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   171
    ^ self backend forBehavior timeFor: self
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   172
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   173
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   174
time: aDateAndTime
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   175
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   176
    self backend forBehavior setTimeFor: self to: aDateAndTime
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   177
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   178
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   179
untagFrom: aSymbol
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   180
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   181
    self backend forMethod untagMethod: self from: aSymbol
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   182
! !
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   183
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   184
!RGMethod methodsFor:'accessing - model'!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   185
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   186
tags
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   187
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   188
    | allTags |
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   189
    allTags := IdentitySet new.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   190
    self tagsDo: [ :each | allTags add: each].
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   191
    ^ allTags asArray
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   192
! !
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   193
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   194
!RGMethod methodsFor:'backward compatibility'!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   195
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   196
category
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   197
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   198
    ^ self protocol
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   199
! !
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   200
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   201
!RGMethod methodsFor:'default model values'!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   202
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   203
defaultAuthor
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   204
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   205
    ^ ''
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   206
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   207
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   208
defaultSourceCode
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   209
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   210
    ^ self sourceCodeForNoSelector
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   211
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   212
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   213
defaultTags
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   214
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   215
    ^ Set new
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   216
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   217
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   218
defaultTime
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   219
10
1fa4cd506c87 core: use `Timestamp` instead of (Pharo) `DateAndTime`
Jan Vrany <jan.vrany@labware.com>
parents: 9
diff changeset
   220
    ^ Timestamp epoch
9
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   221
! !
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   222
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   223
!RGMethod methodsFor:'error handling'!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   224
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   225
changeProtocolDuring: aBlock
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   226
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   227
    | oldProtocol |
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   228
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   229
    oldProtocol := self protocol.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   230
    aBlock value.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   231
    self announce: (MethodRecategorized method: self oldProtocol: oldProtocol)
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   232
! !
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   233
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   234
!RGMethod methodsFor:'initialization'!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   235
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   236
initialize
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   237
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   238
    super initialize.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   239
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   240
    sourceCode := self unresolvedValue: self defaultSourceCode.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   241
    tags := self unresolvedValue: self defaultTags.	"tags must be set before package"
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   242
    package := self unresolvedValue: self parent package.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   243
    author := self unresolvedValue: self defaultAuthor.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   244
    time := self unresolvedValue: self defaultTime.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   245
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   246
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   247
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   248
initializeUnresolved
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   249
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   250
    super initializeUnresolved.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   251
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   252
    sourceCode := self unresolvedValue: self defaultSourceCode.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   253
    tags := self unresolvedValue: self defaultTags.	
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   254
    package := self unresolvedValue: self parent package.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   255
    author := self unresolvedValue: self defaultAuthor.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   256
    time := self unresolvedValue: self defaultTime.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   257
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   258
! !
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   259
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   260
!RGMethod methodsFor:'managing container'!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   261
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   262
addoptToParentStub
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   263
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   264
    super addoptToParentStub.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   265
    self environment backend createUnresolvedClassGroupFor: self parent.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   266
    self parent pvtAddLocalMethod: self.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   267
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   268
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   269
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   270
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   271
defaultParentStub
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   272
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   273
    ^ self defaultClassStub
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   274
! !
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   275
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   276
!RGMethod methodsFor:'printing'!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   277
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   278
printOn: aStream 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   279
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   280
    self parent name ifNotNil: [
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   281
        aStream nextPutAll: self parent name;
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   282
                  nextPutAll: '>>' ].
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   283
    aStream print: self selector
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   284
! !
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   285
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   286
!RGMethod methodsFor:'private'!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   287
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   288
astFromSource
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   289
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   290
    ^ RBParser parseMethod: self sourceCode
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   291
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   292
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   293
pvtSafeSourceCode
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   294
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   295
    | aStringOrUnresolved |
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   296
    aStringOrUnresolved := self pvtSourceCode. 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   297
    ^ aStringOrUnresolved isRingResolved
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   298
        ifFalse: [ 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   299
            self pvtName isRingResolved 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   300
                ifTrue: [ self sourceCodeForNoSource ]
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   301
                ifFalse: [ self sourceCodeForNoSelector ] ]
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   302
        ifTrue: [ aStringOrUnresolved value ]
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   303
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   304
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   305
pvtSourceCode
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   306
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   307
    ^ sourceCode 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   308
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   309
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   310
pvtSourceCode: anObject
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   311
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   312
    sourceCode := anObject
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   313
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   314
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   315
pvtTagsDo: aBlock
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   316
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   317
    ^ tags value do: aBlock
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   318
! !
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   319
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   320
!RGMethod methodsFor:'private - backend interface'!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   321
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   322
pvtAuthor
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   323
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   324
    ^ author value
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   325
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   326
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   327
pvtAuthor: aString
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   328
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   329
    ^ author := aString
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   330
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   331
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   332
pvtCleanTags
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   333
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   334
    tags := self defaultTags.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   335
        
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   336
    "TODO:Announce if not empty"
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   337
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   338
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   339
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   340
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   341
pvtPackage
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   342
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   343
    ^ package value
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   344
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   345
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   346
pvtPackage: anRGPackageDefinition
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   347
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   348
    self environment verifyOwnership: anRGPackageDefinition.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   349
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   350
    ^ package := anRGPackageDefinition
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   351
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   352
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   353
pvtResolvableProperties
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   354
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   355
    ^ super pvtResolvableProperties, { 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   356
        #sourceCode -> sourceCode. 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   357
        #package -> package. 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   358
        #author -> author. 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   359
        #time -> time. 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   360
        #tags -> tags. 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   361
    }
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   362
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   363
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   364
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   365
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   366
pvtTagWith: aSymbol
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   367
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   368
    tags isRingResolved ifFalse: [ 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   369
        self pvtCleanTags  ].
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   370
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   371
    tags add: aSymbol.	
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   372
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   373
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   374
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   375
pvtTime
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   376
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   377
    ^ time value
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   378
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   379
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   380
pvtTime: aDateAndTime
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   381
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   382
    ^ time := aDateAndTime
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   383
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   384
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   385
pvtUntagFrom: aSymbol
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   386
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   387
    (tags value includes: aSymbol)
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   388
        ifTrue: [ tags remove: aSymbol ].
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   389
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   390
    "TODO:Announce"
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   391
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   392
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   393
! !
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   394
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   395
!RGMethod methodsFor:'queries - class'!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   396
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   397
methodClass
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   398
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   399
    ^ self parent
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   400
! !
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   401
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   402
!RGMethod methodsFor:'queries - tags'!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   403
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   404
isTaggedWith: aSymbol
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   405
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   406
    ^self tags includes: aSymbol 
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   407
! !
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   408
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   409
!RGMethod methodsFor:'removing'!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   410
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   411
removeFromSystem
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   412
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   413
    ^ self parent removeLocalMethod: self
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   414
! !
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   415
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   416
!RGMethod methodsFor:'resolving'!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   417
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   418
makeResolved
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   419
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   420
    super makeResolved.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   421
    
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   422
    sourceCode := self sourceCode markAsRingResolved.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   423
    package := self package markAsRingResolved.	
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   424
    author := self author markAsRingResolved.	
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   425
    time := self time markAsRingResolved.	
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   426
    tags := self tags markAsRingResolved.
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   427
! !
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   428
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   429
!RGMethod methodsFor:'testing'!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   430
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   431
isFromTrait
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   432
    ^ self parent isTrait
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   433
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   434
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   435
isLiteralMethod
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   436
    "Ring methods does not know how to detect if they are literal"
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   437
    ^ false
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   438
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   439
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   440
isMetaSide
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   441
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   442
    ^ self parent isMeta
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   443
!
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   444
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   445
isMethod
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   446
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   447
    ^true
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   448
! !
d64df1abdf2a Initial commit
Jan Vrany <jan.vrany@labware.com>
parents:
diff changeset
   449