Skip to content

Commit 159b99f

Browse files
author
Bart Koelman
committed
Changed PaginationQueryStringValueExpression.Elements type from IReadOnlyCollection to IImmutableList
1 parent 8dddf5c commit 159b99f

File tree

6 files changed

+22
-20
lines changed

6 files changed

+22
-20
lines changed

src/JsonApiDotNetCore/CollectionExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public static bool IsNullOrEmpty<T>(this IEnumerable<T> source)
1919
return !source.Any();
2020
}
2121

22-
public static int FindIndex<T>(this IList<T> source, Predicate<T> match)
22+
public static int FindIndex<T>(this IReadOnlyList<T> source, Predicate<T> match)
2323
{
2424
ArgumentGuard.NotNull(source, nameof(source));
2525
ArgumentGuard.NotNull(match, nameof(match));

src/JsonApiDotNetCore/Queries/Expressions/PaginationQueryStringValueExpression.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using System;
2-
using System.Collections.Generic;
2+
using System.Collections.Immutable;
33
using System.Linq;
44
using JetBrains.Annotations;
55

@@ -11,9 +11,9 @@ namespace JsonApiDotNetCore.Queries.Expressions
1111
[PublicAPI]
1212
public class PaginationQueryStringValueExpression : QueryExpression
1313
{
14-
public IReadOnlyCollection<PaginationElementQueryStringValueExpression> Elements { get; }
14+
public IImmutableList<PaginationElementQueryStringValueExpression> Elements { get; }
1515

16-
public PaginationQueryStringValueExpression(IReadOnlyCollection<PaginationElementQueryStringValueExpression> elements)
16+
public PaginationQueryStringValueExpression(IImmutableList<PaginationElementQueryStringValueExpression> elements)
1717
{
1818
ArgumentGuard.NotNullNorEmpty(elements, nameof(elements));
1919

src/JsonApiDotNetCore/Queries/Expressions/QueryExpressionRewriter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ public override QueryExpression PaginationQueryStringValue(PaginationQueryString
244244
{
245245
if (expression != null)
246246
{
247-
IReadOnlyCollection<PaginationElementQueryStringValueExpression> newElements = VisitSequence(expression.Elements, argument);
247+
IImmutableList<PaginationElementQueryStringValueExpression> newElements = VisitList(expression.Elements, argument);
248248

249249
var newExpression = new PaginationQueryStringValueExpression(newElements);
250250
return newExpression.Equals(expression) ? expression : newExpression;

src/JsonApiDotNetCore/Queries/Internal/Parsing/PaginationParser.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Collections.Generic;
32
using System.Collections.Immutable;
43
using System.Linq;
54
using JetBrains.Annotations;
@@ -39,20 +38,21 @@ public PaginationQueryStringValueExpression Parse(string source, ResourceContext
3938

4039
protected PaginationQueryStringValueExpression ParsePagination()
4140
{
42-
var elements = new List<PaginationElementQueryStringValueExpression>();
41+
ImmutableArray<PaginationElementQueryStringValueExpression>.Builder elementsBuilder =
42+
ImmutableArray.CreateBuilder<PaginationElementQueryStringValueExpression>();
4343

4444
PaginationElementQueryStringValueExpression element = ParsePaginationElement();
45-
elements.Add(element);
45+
elementsBuilder.Add(element);
4646

4747
while (TokenStack.Any())
4848
{
4949
EatSingleCharacterToken(TokenKind.Comma);
5050

5151
element = ParsePaginationElement();
52-
elements.Add(element);
52+
elementsBuilder.Add(element);
5353
}
5454

55-
return new PaginationQueryStringValueExpression(elements);
55+
return new PaginationQueryStringValueExpression(elementsBuilder.ToImmutable());
5656
}
5757

5858
protected PaginationElementQueryStringValueExpression ParsePaginationElement()

src/JsonApiDotNetCore/QueryStrings/Internal/PaginationQueryStringParameterReader.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
using System;
21
using System.Collections.Generic;
2+
using System.Collections.Immutable;
33
using System.Linq;
44
using JetBrains.Annotations;
55
using JsonApiDotNetCore.Configuration;
@@ -123,15 +123,15 @@ public virtual IReadOnlyCollection<ExpressionInScope> GetConstraints()
123123
var context = new PaginationContext();
124124

125125
foreach (PaginationElementQueryStringValueExpression element in _pageSizeConstraint?.Elements ??
126-
Array.Empty<PaginationElementQueryStringValueExpression>())
126+
ImmutableArray<PaginationElementQueryStringValueExpression>.Empty)
127127
{
128128
MutablePaginationEntry entry = context.ResolveEntryInScope(element.Scope);
129129
entry.PageSize = element.Value == 0 ? null : new PageSize(element.Value);
130130
entry.HasSetPageSize = true;
131131
}
132132

133133
foreach (PaginationElementQueryStringValueExpression element in _pageNumberConstraint?.Elements ??
134-
Array.Empty<PaginationElementQueryStringValueExpression>())
134+
ImmutableArray<PaginationElementQueryStringValueExpression>.Empty)
135135
{
136136
MutablePaginationEntry entry = context.ResolveEntryInScope(element.Scope);
137137
entry.PageNumber = new PageNumber(element.Value);

src/JsonApiDotNetCore/Serialization/Building/LinkBuilder.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Collections.Immutable;
34
using System.Linq;
45
using JetBrains.Annotations;
56
using JsonApiDotNetCore.Configuration;
@@ -141,7 +142,7 @@ private string CalculatePageSizeValue(PageSize topPageSize, ResourceContext requ
141142

142143
private string ChangeTopPageSize(string pageSizeParameterValue, PageSize topPageSize, ResourceContext requestContext)
143144
{
144-
IList<PaginationElementQueryStringValueExpression> elements = ParsePageSizeExpression(pageSizeParameterValue, requestContext);
145+
IImmutableList<PaginationElementQueryStringValueExpression> elements = ParsePageSizeExpression(pageSizeParameterValue, requestContext);
145146
int elementInTopScopeIndex = elements.FindIndex(expression => expression.Scope == null);
146147

147148
if (topPageSize != null)
@@ -150,18 +151,18 @@ private string ChangeTopPageSize(string pageSizeParameterValue, PageSize topPage
150151

151152
if (elementInTopScopeIndex != -1)
152153
{
153-
elements[elementInTopScopeIndex] = topPageSizeElement;
154+
elements = elements.SetItem(elementInTopScopeIndex, topPageSizeElement);
154155
}
155156
else
156157
{
157-
elements.Insert(0, topPageSizeElement);
158+
elements = elements.Insert(0, topPageSizeElement);
158159
}
159160
}
160161
else
161162
{
162163
if (elementInTopScopeIndex != -1)
163164
{
164-
elements.RemoveAt(elementInTopScopeIndex);
165+
elements = elements.RemoveAt(elementInTopScopeIndex);
165166
}
166167
}
167168

@@ -171,17 +172,18 @@ private string ChangeTopPageSize(string pageSizeParameterValue, PageSize topPage
171172
return parameterValue == string.Empty ? null : parameterValue;
172173
}
173174

174-
private IList<PaginationElementQueryStringValueExpression> ParsePageSizeExpression(string pageSizeParameterValue, ResourceContext requestResource)
175+
private IImmutableList<PaginationElementQueryStringValueExpression> ParsePageSizeExpression(string pageSizeParameterValue,
176+
ResourceContext requestResource)
175177
{
176178
if (pageSizeParameterValue == null)
177179
{
178-
return new List<PaginationElementQueryStringValueExpression>();
180+
return ImmutableArray<PaginationElementQueryStringValueExpression>.Empty;
179181
}
180182

181183
var parser = new PaginationParser(_resourceContextProvider);
182184
PaginationQueryStringValueExpression paginationExpression = parser.Parse(pageSizeParameterValue, requestResource);
183185

184-
return paginationExpression.Elements.ToList();
186+
return paginationExpression.Elements;
185187
}
186188

187189
private string GetLinkForPagination(int pageOffset, string pageSizeValue)

0 commit comments

Comments
 (0)