1
1
using System ;
2
- using System . Collections . Generic ;
2
+ using System . Collections . Immutable ;
3
3
using System . Linq ;
4
4
using JsonApiDotNetCore . Configuration ;
5
5
using JsonApiDotNetCore . Resources . Annotations ;
@@ -23,10 +23,10 @@ public ResourceFieldChainResolver(IResourceContextProvider resourceContextProvid
23
23
/// <summary>
24
24
/// Resolves a chain of relationships that ends in a to-many relationship, for example: blogs.owner.articles.comments
25
25
/// </summary>
26
- public IReadOnlyCollection < ResourceFieldAttribute > ResolveToManyChain ( ResourceContext resourceContext , string path ,
26
+ public IImmutableList < ResourceFieldAttribute > ResolveToManyChain ( ResourceContext resourceContext , string path ,
27
27
Action < ResourceFieldAttribute , ResourceContext , string > validateCallback = null )
28
28
{
29
- var chain = new List < ResourceFieldAttribute > ( ) ;
29
+ ImmutableArray < ResourceFieldAttribute > . Builder chainBuilder = ImmutableArray . CreateBuilder < ResourceFieldAttribute > ( ) ;
30
30
31
31
string [ ] publicNameParts = path . Split ( "." ) ;
32
32
ResourceContext nextResourceContext = resourceContext ;
@@ -37,7 +37,7 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToManyChain(ResourceCo
37
37
38
38
validateCallback ? . Invoke ( relationship , nextResourceContext , path ) ;
39
39
40
- chain . Add ( relationship ) ;
40
+ chainBuilder . Add ( relationship ) ;
41
41
nextResourceContext = _resourceContextProvider . GetResourceContext ( relationship . RightType ) ;
42
42
}
43
43
@@ -46,8 +46,8 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToManyChain(ResourceCo
46
46
47
47
validateCallback ? . Invoke ( lastToManyRelationship , nextResourceContext , path ) ;
48
48
49
- chain . Add ( lastToManyRelationship ) ;
50
- return chain ;
49
+ chainBuilder . Add ( lastToManyRelationship ) ;
50
+ return chainBuilder . ToImmutable ( ) ;
51
51
}
52
52
53
53
/// <summary>
@@ -62,10 +62,10 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToManyChain(ResourceCo
62
62
/// articles.revisions.author
63
63
/// </example>
64
64
/// </summary>
65
- public IReadOnlyCollection < ResourceFieldAttribute > ResolveRelationshipChain ( ResourceContext resourceContext , string path ,
65
+ public IImmutableList < ResourceFieldAttribute > ResolveRelationshipChain ( ResourceContext resourceContext , string path ,
66
66
Action < RelationshipAttribute , ResourceContext , string > validateCallback = null )
67
67
{
68
- var chain = new List < ResourceFieldAttribute > ( ) ;
68
+ ImmutableArray < ResourceFieldAttribute > . Builder chainBuilder = ImmutableArray . CreateBuilder < ResourceFieldAttribute > ( ) ;
69
69
ResourceContext nextResourceContext = resourceContext ;
70
70
71
71
foreach ( string publicName in path . Split ( "." ) )
@@ -74,11 +74,11 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveRelationshipChain(Reso
74
74
75
75
validateCallback ? . Invoke ( relationship , nextResourceContext , path ) ;
76
76
77
- chain . Add ( relationship ) ;
77
+ chainBuilder . Add ( relationship ) ;
78
78
nextResourceContext = _resourceContextProvider . GetResourceContext ( relationship . RightType ) ;
79
79
}
80
80
81
- return chain ;
81
+ return chainBuilder . ToImmutable ( ) ;
82
82
}
83
83
84
84
/// <summary>
@@ -88,10 +88,10 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveRelationshipChain(Reso
88
88
/// </example>
89
89
/// <example>name</example>
90
90
/// </summary>
91
- public IReadOnlyCollection < ResourceFieldAttribute > ResolveToOneChainEndingInAttribute ( ResourceContext resourceContext , string path ,
91
+ public IImmutableList < ResourceFieldAttribute > ResolveToOneChainEndingInAttribute ( ResourceContext resourceContext , string path ,
92
92
Action < ResourceFieldAttribute , ResourceContext , string > validateCallback = null )
93
93
{
94
- var chain = new List < ResourceFieldAttribute > ( ) ;
94
+ ImmutableArray < ResourceFieldAttribute > . Builder chainBuilder = ImmutableArray . CreateBuilder < ResourceFieldAttribute > ( ) ;
95
95
96
96
string [ ] publicNameParts = path . Split ( "." ) ;
97
97
ResourceContext nextResourceContext = resourceContext ;
@@ -102,7 +102,7 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToOneChainEndingInAttr
102
102
103
103
validateCallback ? . Invoke ( toOneRelationship , nextResourceContext , path ) ;
104
104
105
- chain . Add ( toOneRelationship ) ;
105
+ chainBuilder . Add ( toOneRelationship ) ;
106
106
nextResourceContext = _resourceContextProvider . GetResourceContext ( toOneRelationship . RightType ) ;
107
107
}
108
108
@@ -111,8 +111,8 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToOneChainEndingInAttr
111
111
112
112
validateCallback ? . Invoke ( lastAttribute , nextResourceContext , path ) ;
113
113
114
- chain . Add ( lastAttribute ) ;
115
- return chain ;
114
+ chainBuilder . Add ( lastAttribute ) ;
115
+ return chainBuilder . ToImmutable ( ) ;
116
116
}
117
117
118
118
/// <summary>
@@ -124,10 +124,10 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToOneChainEndingInAttr
124
124
/// comments
125
125
/// </example>
126
126
/// </summary>
127
- public IReadOnlyCollection < ResourceFieldAttribute > ResolveToOneChainEndingInToMany ( ResourceContext resourceContext , string path ,
127
+ public IImmutableList < ResourceFieldAttribute > ResolveToOneChainEndingInToMany ( ResourceContext resourceContext , string path ,
128
128
Action < ResourceFieldAttribute , ResourceContext , string > validateCallback = null )
129
129
{
130
- var chain = new List < ResourceFieldAttribute > ( ) ;
130
+ ImmutableArray < ResourceFieldAttribute > . Builder chainBuilder = ImmutableArray . CreateBuilder < ResourceFieldAttribute > ( ) ;
131
131
132
132
string [ ] publicNameParts = path . Split ( "." ) ;
133
133
ResourceContext nextResourceContext = resourceContext ;
@@ -138,7 +138,7 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToOneChainEndingInToMa
138
138
139
139
validateCallback ? . Invoke ( toOneRelationship , nextResourceContext , path ) ;
140
140
141
- chain . Add ( toOneRelationship ) ;
141
+ chainBuilder . Add ( toOneRelationship ) ;
142
142
nextResourceContext = _resourceContextProvider . GetResourceContext ( toOneRelationship . RightType ) ;
143
143
}
144
144
@@ -148,8 +148,8 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToOneChainEndingInToMa
148
148
149
149
validateCallback ? . Invoke ( toManyRelationship , nextResourceContext , path ) ;
150
150
151
- chain . Add ( toManyRelationship ) ;
152
- return chain ;
151
+ chainBuilder . Add ( toManyRelationship ) ;
152
+ return chainBuilder . ToImmutable ( ) ;
153
153
}
154
154
155
155
/// <summary>
@@ -161,10 +161,10 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToOneChainEndingInToMa
161
161
/// author.address
162
162
/// </example>
163
163
/// </summary>
164
- public IReadOnlyCollection < ResourceFieldAttribute > ResolveToOneChainEndingInAttributeOrToOne ( ResourceContext resourceContext , string path ,
164
+ public IImmutableList < ResourceFieldAttribute > ResolveToOneChainEndingInAttributeOrToOne ( ResourceContext resourceContext , string path ,
165
165
Action < ResourceFieldAttribute , ResourceContext , string > validateCallback = null )
166
166
{
167
- var chain = new List < ResourceFieldAttribute > ( ) ;
167
+ ImmutableArray < ResourceFieldAttribute > . Builder chainBuilder = ImmutableArray . CreateBuilder < ResourceFieldAttribute > ( ) ;
168
168
169
169
string [ ] publicNameParts = path . Split ( "." ) ;
170
170
ResourceContext nextResourceContext = resourceContext ;
@@ -175,7 +175,7 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToOneChainEndingInAttr
175
175
176
176
validateCallback ? . Invoke ( toOneRelationship , nextResourceContext , path ) ;
177
177
178
- chain . Add ( toOneRelationship ) ;
178
+ chainBuilder . Add ( toOneRelationship ) ;
179
179
nextResourceContext = _resourceContextProvider . GetResourceContext ( toOneRelationship . RightType ) ;
180
180
}
181
181
@@ -191,8 +191,8 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToOneChainEndingInAttr
191
191
192
192
validateCallback ? . Invoke ( lastField , nextResourceContext , path ) ;
193
193
194
- chain . Add ( lastField ) ;
195
- return chain ;
194
+ chainBuilder . Add ( lastField ) ;
195
+ return chainBuilder . ToImmutable ( ) ;
196
196
}
197
197
198
198
private RelationshipAttribute GetRelationship ( string publicName , ResourceContext resourceContext , string path )
0 commit comments