11using System ;
2- using System . Collections . Generic ;
2+ using System . Collections . Immutable ;
33using System . Linq ;
44using JsonApiDotNetCore . Configuration ;
55using JsonApiDotNetCore . Resources . Annotations ;
@@ -23,10 +23,10 @@ public ResourceFieldChainResolver(IResourceContextProvider resourceContextProvid
2323 /// <summary>
2424 /// Resolves a chain of relationships that ends in a to-many relationship, for example: blogs.owner.articles.comments
2525 /// </summary>
26- public IReadOnlyCollection < ResourceFieldAttribute > ResolveToManyChain ( ResourceContext resourceContext , string path ,
26+ public IImmutableList < ResourceFieldAttribute > ResolveToManyChain ( ResourceContext resourceContext , string path ,
2727 Action < ResourceFieldAttribute , ResourceContext , string > validateCallback = null )
2828 {
29- var chain = new List < ResourceFieldAttribute > ( ) ;
29+ ImmutableArray < ResourceFieldAttribute > . Builder chainBuilder = ImmutableArray . CreateBuilder < ResourceFieldAttribute > ( ) ;
3030
3131 string [ ] publicNameParts = path . Split ( "." ) ;
3232 ResourceContext nextResourceContext = resourceContext ;
@@ -37,7 +37,7 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToManyChain(ResourceCo
3737
3838 validateCallback ? . Invoke ( relationship , nextResourceContext , path ) ;
3939
40- chain . Add ( relationship ) ;
40+ chainBuilder . Add ( relationship ) ;
4141 nextResourceContext = _resourceContextProvider . GetResourceContext ( relationship . RightType ) ;
4242 }
4343
@@ -46,8 +46,8 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToManyChain(ResourceCo
4646
4747 validateCallback ? . Invoke ( lastToManyRelationship , nextResourceContext , path ) ;
4848
49- chain . Add ( lastToManyRelationship ) ;
50- return chain ;
49+ chainBuilder . Add ( lastToManyRelationship ) ;
50+ return chainBuilder . ToImmutable ( ) ;
5151 }
5252
5353 /// <summary>
@@ -62,10 +62,10 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToManyChain(ResourceCo
6262 /// articles.revisions.author
6363 /// </example>
6464 /// </summary>
65- public IReadOnlyCollection < ResourceFieldAttribute > ResolveRelationshipChain ( ResourceContext resourceContext , string path ,
65+ public IImmutableList < ResourceFieldAttribute > ResolveRelationshipChain ( ResourceContext resourceContext , string path ,
6666 Action < RelationshipAttribute , ResourceContext , string > validateCallback = null )
6767 {
68- var chain = new List < ResourceFieldAttribute > ( ) ;
68+ ImmutableArray < ResourceFieldAttribute > . Builder chainBuilder = ImmutableArray . CreateBuilder < ResourceFieldAttribute > ( ) ;
6969 ResourceContext nextResourceContext = resourceContext ;
7070
7171 foreach ( string publicName in path . Split ( "." ) )
@@ -74,11 +74,11 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveRelationshipChain(Reso
7474
7575 validateCallback ? . Invoke ( relationship , nextResourceContext , path ) ;
7676
77- chain . Add ( relationship ) ;
77+ chainBuilder . Add ( relationship ) ;
7878 nextResourceContext = _resourceContextProvider . GetResourceContext ( relationship . RightType ) ;
7979 }
8080
81- return chain ;
81+ return chainBuilder . ToImmutable ( ) ;
8282 }
8383
8484 /// <summary>
@@ -88,10 +88,10 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveRelationshipChain(Reso
8888 /// </example>
8989 /// <example>name</example>
9090 /// </summary>
91- public IReadOnlyCollection < ResourceFieldAttribute > ResolveToOneChainEndingInAttribute ( ResourceContext resourceContext , string path ,
91+ public IImmutableList < ResourceFieldAttribute > ResolveToOneChainEndingInAttribute ( ResourceContext resourceContext , string path ,
9292 Action < ResourceFieldAttribute , ResourceContext , string > validateCallback = null )
9393 {
94- var chain = new List < ResourceFieldAttribute > ( ) ;
94+ ImmutableArray < ResourceFieldAttribute > . Builder chainBuilder = ImmutableArray . CreateBuilder < ResourceFieldAttribute > ( ) ;
9595
9696 string [ ] publicNameParts = path . Split ( "." ) ;
9797 ResourceContext nextResourceContext = resourceContext ;
@@ -102,7 +102,7 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToOneChainEndingInAttr
102102
103103 validateCallback ? . Invoke ( toOneRelationship , nextResourceContext , path ) ;
104104
105- chain . Add ( toOneRelationship ) ;
105+ chainBuilder . Add ( toOneRelationship ) ;
106106 nextResourceContext = _resourceContextProvider . GetResourceContext ( toOneRelationship . RightType ) ;
107107 }
108108
@@ -111,8 +111,8 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToOneChainEndingInAttr
111111
112112 validateCallback ? . Invoke ( lastAttribute , nextResourceContext , path ) ;
113113
114- chain . Add ( lastAttribute ) ;
115- return chain ;
114+ chainBuilder . Add ( lastAttribute ) ;
115+ return chainBuilder . ToImmutable ( ) ;
116116 }
117117
118118 /// <summary>
@@ -124,10 +124,10 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToOneChainEndingInAttr
124124 /// comments
125125 /// </example>
126126 /// </summary>
127- public IReadOnlyCollection < ResourceFieldAttribute > ResolveToOneChainEndingInToMany ( ResourceContext resourceContext , string path ,
127+ public IImmutableList < ResourceFieldAttribute > ResolveToOneChainEndingInToMany ( ResourceContext resourceContext , string path ,
128128 Action < ResourceFieldAttribute , ResourceContext , string > validateCallback = null )
129129 {
130- var chain = new List < ResourceFieldAttribute > ( ) ;
130+ ImmutableArray < ResourceFieldAttribute > . Builder chainBuilder = ImmutableArray . CreateBuilder < ResourceFieldAttribute > ( ) ;
131131
132132 string [ ] publicNameParts = path . Split ( "." ) ;
133133 ResourceContext nextResourceContext = resourceContext ;
@@ -138,7 +138,7 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToOneChainEndingInToMa
138138
139139 validateCallback ? . Invoke ( toOneRelationship , nextResourceContext , path ) ;
140140
141- chain . Add ( toOneRelationship ) ;
141+ chainBuilder . Add ( toOneRelationship ) ;
142142 nextResourceContext = _resourceContextProvider . GetResourceContext ( toOneRelationship . RightType ) ;
143143 }
144144
@@ -148,8 +148,8 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToOneChainEndingInToMa
148148
149149 validateCallback ? . Invoke ( toManyRelationship , nextResourceContext , path ) ;
150150
151- chain . Add ( toManyRelationship ) ;
152- return chain ;
151+ chainBuilder . Add ( toManyRelationship ) ;
152+ return chainBuilder . ToImmutable ( ) ;
153153 }
154154
155155 /// <summary>
@@ -161,10 +161,10 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToOneChainEndingInToMa
161161 /// author.address
162162 /// </example>
163163 /// </summary>
164- public IReadOnlyCollection < ResourceFieldAttribute > ResolveToOneChainEndingInAttributeOrToOne ( ResourceContext resourceContext , string path ,
164+ public IImmutableList < ResourceFieldAttribute > ResolveToOneChainEndingInAttributeOrToOne ( ResourceContext resourceContext , string path ,
165165 Action < ResourceFieldAttribute , ResourceContext , string > validateCallback = null )
166166 {
167- var chain = new List < ResourceFieldAttribute > ( ) ;
167+ ImmutableArray < ResourceFieldAttribute > . Builder chainBuilder = ImmutableArray . CreateBuilder < ResourceFieldAttribute > ( ) ;
168168
169169 string [ ] publicNameParts = path . Split ( "." ) ;
170170 ResourceContext nextResourceContext = resourceContext ;
@@ -175,7 +175,7 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToOneChainEndingInAttr
175175
176176 validateCallback ? . Invoke ( toOneRelationship , nextResourceContext , path ) ;
177177
178- chain . Add ( toOneRelationship ) ;
178+ chainBuilder . Add ( toOneRelationship ) ;
179179 nextResourceContext = _resourceContextProvider . GetResourceContext ( toOneRelationship . RightType ) ;
180180 }
181181
@@ -191,8 +191,8 @@ public IReadOnlyCollection<ResourceFieldAttribute> ResolveToOneChainEndingInAttr
191191
192192 validateCallback ? . Invoke ( lastField , nextResourceContext , path ) ;
193193
194- chain . Add ( lastField ) ;
195- return chain ;
194+ chainBuilder . Add ( lastField ) ;
195+ return chainBuilder . ToImmutable ( ) ;
196196 }
197197
198198 private RelationshipAttribute GetRelationship ( string publicName , ResourceContext resourceContext , string path )
0 commit comments