-
-
Notifications
You must be signed in to change notification settings - Fork 354
/
PermaLink.class.st
95 lines (78 loc) · 2.03 KB
/
PermaLink.class.st
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
"
I specify a kind of persistence for links to be put on a slot, a temporary variable or a class variable.
I can be of kind:
- #read only read nodes
- #write only assignment nodes
- #all both
I know the class of the slot/var the link will be put on. I also know my link, although several versions of me can exist for the same link, but with different targets (slots/var).
The isInstanceSpecific inst var seems to be needed to keep track that the metalink is installed on an object, because this information is lost after the link is installed through the API. It could be done better perhaps.
"
Class {
#name : #PermaLink,
#superclass : #Object,
#instVars : [
'slotOrVariable',
'persistenceType',
'isInstanceSpecific',
'slotOrVarClass',
'slotOrVarMethod',
'link'
],
#category : #'Reflectivity-Installer'
}
{ #category : #initalize }
PermaLink >> initialize [
isInstanceSpecific := false
]
{ #category : #accessing }
PermaLink >> isInstanceSpecific [
^ isInstanceSpecific
]
{ #category : #accessing }
PermaLink >> isInstanceSpecific: anObject [
isInstanceSpecific := anObject
]
{ #category : #accessing }
PermaLink >> link [
^ link
]
{ #category : #accessing }
PermaLink >> link: anObject [
link := anObject
]
{ #category : #accessing }
PermaLink >> persistenceType [
^ persistenceType
]
{ #category : #accessing }
PermaLink >> persistenceType: anObject [
persistenceType := anObject
]
{ #category : #accessing }
PermaLink >> slotOrVarClass [
^ (MetalinkTargetResolver classFor: slotOrVarClass)
]
{ #category : #accessing }
PermaLink >> slotOrVarClass: anObject [
slotOrVarClass := anObject
]
{ #category : #accessing }
PermaLink >> slotOrVarMethod [
^ slotOrVarMethod
]
{ #category : #accessing }
PermaLink >> slotOrVarMethod: anObject [
slotOrVarMethod := anObject
]
{ #category : #accessing }
PermaLink >> slotOrVariable [
^ slotOrVariable
]
{ #category : #accessing }
PermaLink >> slotOrVariable: anObject [
slotOrVariable := anObject
]
{ #category : #accessing }
PermaLink >> targetObjectOrClass [
^ slotOrVarClass
]