Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
MemberRelationshipService.cs
Go to the documentation of this file.
1
using
System.Collections.Generic
;
2
using
System.Diagnostics.CodeAnalysis
;
3
4
namespace
System.ComponentModel.Design.Serialization
;
5
6
public
abstract
class
MemberRelationshipService
7
{
8
private
struct
RelationshipEntry
9
{
10
internal
WeakReference
_owner
;
11
12
internal
MemberDescriptor
_member
;
13
14
private
readonly
int
_hashCode
;
15
16
internal
RelationshipEntry
(
MemberRelationship
rel
)
17
{
18
_owner
=
new
WeakReference
(
rel
.Owner);
19
_member
=
rel
.Member;
20
_hashCode
= ((rel.Owner !=
null
) ?
rel
.Owner.GetHashCode() : 0);
21
}
22
23
public
override
bool
Equals
([
NotNullWhen
(
true
)]
object
o
)
24
{
25
return
this
== (
RelationshipEntry
)
o
;
26
}
27
28
public
static
bool
operator ==
(
RelationshipEntry
re1
,
RelationshipEntry
re2
)
29
{
30
object
obj
= (re1._owner.IsAlive ? re1._owner.Target :
null
);
31
object
obj2
= (re2._owner.IsAlive ? re2._owner.Target :
null
);
32
if
(
obj
==
obj2
)
33
{
34
return
re1
._member.Equals(
re2
._member);
35
}
36
return
false
;
37
}
38
39
public
override
int
GetHashCode
()
40
{
41
return
_hashCode
;
42
}
43
}
44
45
private
readonly
Dictionary<RelationshipEntry, RelationshipEntry>
_relationships
=
new
Dictionary<RelationshipEntry, RelationshipEntry>
();
46
47
public
MemberRelationship
this
[
MemberRelationship
source
]
48
{
49
get
50
{
51
if
(
source
.Owner ==
null
)
52
{
53
throw
new
ArgumentException
(
System
.
SR
.
Format
(
System
.
SR
.
InvalidNullArgument
,
"source.Owner"
),
"source"
);
54
}
55
return
GetRelationship
(
source
);
56
}
57
set
58
{
59
if
(
source
.Owner ==
null
)
60
{
61
throw
new
ArgumentException
(
System
.
SR
.
Format
(
System
.
SR
.
InvalidNullArgument
,
"source.Owner"
),
"source"
);
62
}
63
SetRelationship
(
source
,
value
);
64
}
65
}
66
67
public
MemberRelationship
this
[
object
sourceOwner
,
MemberDescriptor
sourceMember
]
68
{
69
get
70
{
71
if
(
sourceOwner
==
null
)
72
{
73
throw
new
ArgumentNullException
(
"sourceOwner"
);
74
}
75
if
(
sourceMember
==
null
)
76
{
77
throw
new
ArgumentNullException
(
"sourceMember"
);
78
}
79
return
GetRelationship
(
new
MemberRelationship
(
sourceOwner
,
sourceMember
));
80
}
81
set
82
{
83
if
(
sourceOwner
==
null
)
84
{
85
throw
new
ArgumentNullException
(
"sourceOwner"
);
86
}
87
if
(
sourceMember
==
null
)
88
{
89
throw
new
ArgumentNullException
(
"sourceMember"
);
90
}
91
SetRelationship
(
new
MemberRelationship
(
sourceOwner
,
sourceMember
),
value
);
92
}
93
}
94
95
protected
virtual
MemberRelationship
GetRelationship
(
MemberRelationship
source
)
96
{
97
if
(
_relationships
.
TryGetValue
(
new
RelationshipEntry
(
source
),
out
var
value
) &&
value
._owner.IsAlive)
98
{
99
return
new
MemberRelationship
(
value
._owner.Target,
value
._member);
100
}
101
return
MemberRelationship
.
Empty
;
102
}
103
104
protected
virtual
void
SetRelationship
(
MemberRelationship
source
,
MemberRelationship
relationship
)
105
{
106
if
(!
relationship
.IsEmpty && !
SupportsRelationship
(
source
,
relationship
))
107
{
108
ThrowRelationshipNotSupported
(
source
,
relationship
);
109
}
110
_relationships
[
new
RelationshipEntry
(
source
)] =
new
RelationshipEntry
(
relationship
);
111
}
112
113
[
UnconditionalSuppressMessage
(
"ReflectionAnalysis"
,
"IL2026:RequiresUnreferencedCode"
, Justification =
"GetComponentName is only used to create a nice exception message, and has a fallback when null is returned."
)]
114
private
static
void
ThrowRelationshipNotSupported
(
MemberRelationship
source
,
MemberRelationship
relationship
)
115
{
116
string
text
=
TypeDescriptor
.
GetComponentName
(
source
.Owner);
117
string
text2
=
TypeDescriptor
.
GetComponentName
(
relationship
.Owner);
118
if
(
text
==
null
)
119
{
120
text
=
source
.Owner.ToString();
121
}
122
if
(
text2
==
null
)
123
{
124
text2
=
relationship
.Owner.ToString();
125
}
126
throw
new
ArgumentException
(
System
.
SR
.
Format
(
System
.
SR
.
MemberRelationshipService_RelationshipNotSupported
,
text
,
source
.Member.Name,
text2
,
relationship
.Member.Name));
127
}
128
129
public
abstract
bool
SupportsRelationship
(
MemberRelationship
source
,
MemberRelationship
relationship
);
130
}
System.ArgumentException
Definition
ArgumentException.cs:9
System.ArgumentNullException
Definition
ArgumentNullException.cs:10
System.Collections.Generic.Dictionary.TryGetValue
bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
Definition
Dictionary.cs:1419
System.Collections.Generic.Dictionary
Definition
Dictionary.cs:14
System.ComponentModel.Design.Serialization.MemberRelationshipService.ThrowRelationshipNotSupported
static void ThrowRelationshipNotSupported(MemberRelationship source, MemberRelationship relationship)
Definition
MemberRelationshipService.cs:114
System.ComponentModel.Design.Serialization.MemberRelationshipService.SetRelationship
virtual void SetRelationship(MemberRelationship source, MemberRelationship relationship)
Definition
MemberRelationshipService.cs:104
System.ComponentModel.Design.Serialization.MemberRelationshipService.GetRelationship
virtual MemberRelationship GetRelationship(MemberRelationship source)
Definition
MemberRelationshipService.cs:95
System.ComponentModel.Design.Serialization.MemberRelationshipService._relationships
readonly Dictionary< RelationshipEntry, RelationshipEntry > _relationships
Definition
MemberRelationshipService.cs:45
System.ComponentModel.Design.Serialization.MemberRelationshipService.SupportsRelationship
bool SupportsRelationship(MemberRelationship source, MemberRelationship relationship)
System.ComponentModel.Design.Serialization.MemberRelationshipService
Definition
MemberRelationshipService.cs:7
System.ComponentModel.MemberDescriptor
Definition
MemberDescriptor.cs:9
System.ComponentModel.TypeDescriptor.GetComponentName
static ? string GetComponentName(object component)
Definition
TypeDescriptor.cs:1509
System.ComponentModel.TypeDescriptor
Definition
TypeDescriptor.cs:12
System.SR.InvalidNullArgument
static string InvalidNullArgument
Definition
SR.cs:86
System.SR.Format
static string Format(string resourceFormat, object p1)
Definition
SR.cs:118
System.SR.MemberRelationshipService_RelationshipNotSupported
static string MemberRelationshipService_RelationshipNotSupported
Definition
SR.cs:130
System.SR
Definition
SR.cs:7
System.WeakReference
Definition
WeakReference.cs:77
System.Collections.Generic
Definition
IHashKeyCollection.cs:1
System.ComponentModel.Design.Serialization
Definition
DesignerSerializerAttribute.cs:1
System.Diagnostics.CodeAnalysis
Definition
AllowNullAttribute.cs:1
System.ExceptionArgument.text
@ text
System.ExceptionArgument.value
@ value
System.ExceptionArgument.source
@ source
System.ExceptionArgument.obj
@ obj
System
Definition
BlockingCollection.cs:8
System.ComponentModel.Design.Serialization.MemberRelationshipService.RelationshipEntry.GetHashCode
override int GetHashCode()
Definition
MemberRelationshipService.cs:39
System.ComponentModel.Design.Serialization.MemberRelationshipService.RelationshipEntry.RelationshipEntry
RelationshipEntry(MemberRelationship rel)
Definition
MemberRelationshipService.cs:16
System.ComponentModel.Design.Serialization.MemberRelationshipService.RelationshipEntry._hashCode
readonly int _hashCode
Definition
MemberRelationshipService.cs:14
System.ComponentModel.Design.Serialization.MemberRelationshipService.RelationshipEntry.Equals
override bool Equals([NotNullWhen(true)] object o)
Definition
MemberRelationshipService.cs:23
System.ComponentModel.Design.Serialization.MemberRelationshipService.RelationshipEntry.operator==
static bool operator==(RelationshipEntry re1, RelationshipEntry re2)
Definition
MemberRelationshipService.cs:28
System.ComponentModel.Design.Serialization.MemberRelationshipService.RelationshipEntry._owner
WeakReference _owner
Definition
MemberRelationshipService.cs:10
System.ComponentModel.Design.Serialization.MemberRelationshipService.RelationshipEntry._member
MemberDescriptor _member
Definition
MemberRelationshipService.cs:12
System.ComponentModel.Design.Serialization.MemberRelationshipService.RelationshipEntry
Definition
MemberRelationshipService.cs:9
System.ComponentModel.Design.Serialization.MemberRelationship.Empty
static readonly MemberRelationship Empty
Definition
MemberRelationship.cs:7
System.ComponentModel.Design.Serialization.MemberRelationship
Definition
MemberRelationship.cs:6
source
System.ComponentModel.TypeConverter
System.ComponentModel.Design.Serialization
MemberRelationshipService.cs
Generated by
1.10.0