Skip to content

Commit affb876

Browse files
authored
Caching the length/size in a variable to avoid repeated calls in loops, which can slightly improve performance and readability. (#1820)
1 parent a39e5c4 commit affb876

8 files changed

Lines changed: 39 additions & 24 deletions

File tree

modules/spring-commons/src/main/java/io/restassured/module/spring/commons/HeaderHelper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,8 @@ private static List<Header> removeMergedHeadersIfNeeded(List<Header> headerList,
124124
String headerName = header.getName();
125125
if (headerConfig.shouldOverwriteHeaderWithName(headerName)) {
126126
int index = -1;
127-
for (int i = 0; i < filteredList.size(); i++) {
127+
int filteredListSize = filteredList.size();
128+
for (int i = 0; i < filteredListSize; i++) {
128129
Header filteredHeader = filteredList.get(i);
129130
if (filteredHeader.hasSameNameAs(header)) {
130131
index = i;

modules/spring-mock-mvc/src/main/java/io/restassured/module/mockmvc/util/ReflectionUtil.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,22 +51,25 @@ public static <T> T invokeConstructor(String className, Object... arguments) {
5151
}
5252

5353
public static Class<?>[] getArgumentTypes(Object[] arguments) {
54-
Class<?>[] argumentTypes = new Class[arguments.length];
55-
for (int i = 0; i < arguments.length; i++) {
54+
int argumentsLength = arguments.length;
55+
Class<?>[] argumentTypes = new Class[argumentsLength];
56+
for (int i = 0; i < argumentsLength; i++) {
5657
argumentTypes[i] = arguments[i].getClass();
5758
}
5859
return argumentTypes;
5960
}
6061

6162
private static Object getVarArgsArguments(Class<?>[] argumentTypes, Object[] arguments) {
62-
Class<?> argumentType = argumentTypes[argumentTypes.length - 1];
63+
int argumentTypesLength = argumentTypes.length;
64+
Class<?> argumentType = argumentTypes[argumentTypesLength - 1];
6365
if (argumentType.isArray()) {
6466
argumentType = argumentType.getComponentType();
6567
}
6668

67-
int numberOfVarArgParameters = arguments.length - argumentTypes.length + 1;
69+
int argumentsLength = arguments.length;
70+
int numberOfVarArgParameters = argumentsLength - argumentTypesLength + 1;
6871
Object varArgsArguments = Array.newInstance(argumentType, numberOfVarArgParameters);
69-
for (int j = 0, i = argumentTypes.length - 1; i < arguments.length; i++, j++) {
72+
for (int j = 0, i = argumentTypesLength - 1; i < argumentsLength; i++, j++) {
7073
Array.set(varArgsArguments, j, arguments[i]);
7174
}
7275
return varArgsArguments;

rest-assured-common/src/main/groovy/io/restassured/internal/common/assertion/AssertionSupport.groovy

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,16 @@ class AssertionSupport {
2929

3030
def static escapePath(key, PathFragmentEscaper... pathFragmentEscapers) {
3131
def pathFragments = key.split("(?<=\\')")
32-
for (int i = 0; i < pathFragments.size(); i++) {
32+
def pathFragmentsSize = pathFragments.size()
33+
for (int i = 0; i < pathFragmentsSize; i++) {
3334
String pathFragment = pathFragments[i]
3435
if (!pathFragment?.endsWith("'") || pathFragment?.contains("**")) {
3536
def dotFragments = pathFragment.split("\\.")
36-
for (int k = 0; k < dotFragments.size(); k++) {
37+
def dotFragmentsSize = dotFragments.size()
38+
for (int k = 0; k < dotFragmentsSize; k++) {
3739
String dotFragment = dotFragments[k]
38-
for (int j = 0; j < pathFragmentEscapers.length; j++) {
40+
def pathFragmentEscapersLength = pathFragmentEscapers.length
41+
for (int j = 0; j < pathFragmentEscapersLength; j++) {
3942
def escaper = pathFragmentEscapers[j]
4043
if (escaper.shouldEscape(dotFragment)) {
4144
dotFragments[k] = escaper.escape(dotFragments[k].trim())
@@ -135,12 +138,14 @@ class AssertionSupport {
135138
* Copied from Apache commons lang (String utils)
136139
*/
137140
private static boolean containsAny(String str, searchChars) {
138-
if (str == null || str.length() == 0 || searchChars == null || searchChars.isEmpty()) {
141+
def strLength = str.length()
142+
if (str == null || strLength == 0 || searchChars == null || searchChars.isEmpty()) {
139143
return false;
140144
}
141-
for (int i = 0; i < str.length(); i++) {
145+
for (int i = 0; i < strLength; i++) {
142146
char ch = str.charAt(i);
143-
for (int j = 0; j < searchChars.size(); j++) {
147+
def searchCharsSize = searchChars.size()
148+
for (int j = 0; j < searchCharsSize; j++) {
144149
if (searchChars[j] == ch) {
145150
return true;
146151
}

rest-assured/src/main/groovy/io/restassured/internal/MapCreator.groovy

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,24 +37,25 @@ class MapCreator {
3737
}
3838

3939
static Map<String, Object> createMapFromObjects(CollisionStrategy collisionStrategy, ... parameters) {
40-
if (parameters == null || parameters.length < 2) {
40+
def parametersLength = parameters.length
41+
if (parameters == null || parametersLength < 2) {
4142
throw new IllegalArgumentException("You must supply at least one key and one value.")
42-
} else if (parameters.length % 2 != 0 && parameters.length % 3 != 0) {
43+
} else if (parametersLength % 2 != 0 && parametersLength % 3 != 0) {
4344
throw new IllegalArgumentException("You must supply the same number of keys as values.")
4445
}
4546

4647
int step
47-
if (parameters.length >= 3 && isRestAssuredArguments(parameters[1]) && parameters[2] instanceof Matcher) {
48+
if (parametersLength >= 3 && isRestAssuredArguments(parameters[1]) && parameters[2] instanceof Matcher) {
4849
step = 3
49-
} else if (parameters.length % 2 != 0) {
50+
} else if (parametersLength % 2 != 0) {
5051
throw new IllegalArgumentException("You must supply the same number of keys as values.")
5152
} else {
5253
step = 2
5354
}
5455

5556
boolean argumentsDefined = step == 3
5657
Map<String, Object> map = new LinkedHashMap<String, Object>()
57-
for (int i = 0; i < parameters.length; i += step) {
58+
for (int i = 0; i < parametersLength; i += step) {
5859
def key = parameters[i]
5960
def args
6061
def val

rest-assured/src/main/groovy/io/restassured/internal/RequestSpecificationImpl.groovy

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1647,7 +1647,8 @@ class RequestSpecificationImpl implements FilterableRequestSpecification, Groovy
16471647
this.path = path
16481648
if (unnamedPathParams != null) {
16491649
def nullParamIndices = []
1650-
for (int i = 0; i < unnamedPathParams.length; i++) {
1650+
def unnamedPathParamsLength = unnamedPathParams.length
1651+
for (int i = 0; i < unnamedPathParamsLength; i++) {
16511652
if (unnamedPathParams[i] == null) {
16521653
nullParamIndices << i
16531654
}
@@ -1711,13 +1712,14 @@ class RequestSpecificationImpl implements FilterableRequestSpecification, Groovy
17111712
}
17121713

17131714
void buildUnnamedPathParameterTuples(Object[] unnamedPathParameterValues) {
1714-
if (unnamedPathParameterValues == null || unnamedPathParameterValues.length == 0) {
1715+
def unnamedPathParameterValuesLength = unnamedPathParameterValues.length
1716+
if (unnamedPathParameterValues == null || unnamedPathParameterValuesLength == 0) {
17151717
this.unnamedPathParamsTuples = new ArrayList<Tuple2<String, String>>()
17161718
} else {
17171719
// Undefined placeholders since named path params have precedence over unnamed
17181720
def keys = getUndefinedPathParamPlaceholders()
17191721
List<Tuple2<String, String>> list = new ArrayList<>()
1720-
for (int i = 0; i < unnamedPathParameterValues.length; i++) {
1722+
for (int i = 0; i < unnamedPathParameterValuesLength; i++) {
17211723
def val = serializeIfNeeded(unnamedPathParameterValues[i])
17221724
def key = i < keys.size() ? keys.get(i) : null
17231725
list.add(new Tuple2<String, String>(key, val))

rest-assured/src/main/java/io/restassured/internal/assertion/CookieMatcher.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ public static Cookies getCookies(List<String> headerWithCookieList) {
7676
headerWithCookieList.forEach(it -> {
7777
String[] cookieStrings = StringUtils.split(it, ";");
7878
Cookie.Builder cookieBuilder = null;
79-
for (int i = 0; i < cookieStrings.length; i++) {
79+
int cookieStringsLength = cookieStrings.length;
80+
for (int i = 0; i < cookieStringsLength; i++) {
8081
String part = cookieStrings[i];
8182
if (i == 0) {
8283
if (part.contains("=")) {

rest-assured/src/main/java/io/restassured/internal/print/RequestPrinter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@ private static void addMultiParts(FilterableRequestSpecification requestSpec, St
203203
if (multiParts.isEmpty()) {
204204
appendTwoTabs(builder).append(NONE).append(SystemUtils.LINE_SEPARATOR);
205205
} else {
206-
for (int i = 0; i < multiParts.size(); i++) {
206+
int multiPartsSize = multiParts.size();
207+
for (int i = 0; i < multiPartsSize; i++) {
207208
MultiPartSpecification multiPart = multiParts.get(i);
208209
if (i == 0) {
209210
appendTwoTabs(builder);

xml-path/src/main/groovy/io/restassured/internal/path/xml/XMLAssertion.groovy

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,11 @@ class XMLAssertion implements Assertion {
153153
}
154154

155155
private def handleList(List result) {
156-
if (result.size() == 1 && fragments[-1] != EXPLICIT_LIST_CONVERSION) {
156+
def resultSize = result.size()
157+
if (resultSize == 1 && fragments[-1] != EXPLICIT_LIST_CONVERSION) {
157158
return convertToJavaObject(result.get(0))
158159
} else {
159-
for (int i = 0; i < result.size(); i++) {
160+
for (int i = 0; i < resultSize; i++) {
160161
result.set(i, convertToJavaObject(result.get(i)))
161162
}
162163
}

0 commit comments

Comments
 (0)