Skip to content

Commit 6233657

Browse files
author
Stephane Landelle
committed
Lazy init Request cookies list, add set(Collection) method, close AsyncHttpClient#584
1 parent 186a9d0 commit 6233657

File tree

1 file changed

+40
-57
lines changed

1 file changed

+40
-57
lines changed

api/src/main/java/org/asynchttpclient/RequestBuilderBase.java

Lines changed: 40 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ private static final class RequestImpl implements Request {
5757
private InetAddress address;
5858
private InetAddress localAddress;
5959
private FluentCaseInsensitiveStringsMap headers;
60-
private Collection<Cookie> cookies;
60+
private ArrayList<Cookie> cookies;
6161
private byte[] byteData;
6262
private String stringData;
6363
private InputStream streamData;
@@ -227,10 +227,7 @@ public boolean hasHeaders() {
227227

228228
@Override
229229
public Collection<Cookie> getCookies() {
230-
if (cookies == null) {
231-
cookies = Collections.unmodifiableCollection(Collections.<Cookie> emptyList());
232-
}
233-
return cookies;
230+
return cookies != null ? Collections.unmodifiableCollection(cookies) : Collections.<Cookie> emptyList();
234231
}
235232

236233
@Override
@@ -460,16 +457,14 @@ public T addHeader(String name, String value) {
460457
}
461458

462459
public T setHeaders(FluentCaseInsensitiveStringsMap headers) {
463-
if (headers != null) {
460+
if (headers != null)
464461
request.headers = new FluentCaseInsensitiveStringsMap(headers);
465-
}
466462
return derived.cast(this);
467463
}
468464

469465
public T setHeaders(Map<String, Collection<String>> headers) {
470-
if (headers != null) {
466+
if (headers != null)
471467
request.headers = new FluentCaseInsensitiveStringsMap(headers);
472-
}
473468
return derived.cast(this);
474469
}
475470

@@ -478,20 +473,45 @@ public T setContentLength(int length) {
478473
return derived.cast(this);
479474
}
480475

476+
private void lazyInitCookies() {
477+
if (request.cookies == null)
478+
request.cookies = new ArrayList<Cookie>(3);
479+
}
480+
481481
public T addCookie(Cookie cookie) {
482-
if (request.cookies == null) {
483-
request.cookies = new ArrayList<Cookie>();
484-
}
482+
lazyInitCookies();
485483
request.cookies.add(cookie);
486484
return derived.cast(this);
487485
}
488486

489-
public void resetQueryParameters() {
490-
request.queryParams = null;
487+
public void resetCookies() {
488+
if (request.cookies != null)
489+
request.cookies.clear();
491490
}
492491

493-
public void resetCookies() {
494-
request.cookies.clear();
492+
public T addOrReplaceCookie(Cookie cookie) {
493+
String cookieKey = cookie.getName();
494+
boolean replace = false;
495+
int index = 0;
496+
lazyInitCookies();
497+
for (Cookie c : request.cookies) {
498+
if (c.getName().equals(cookieKey)) {
499+
replace = true;
500+
break;
501+
}
502+
503+
index++;
504+
}
505+
if (replace)
506+
request.cookies.set(index, cookie);
507+
else
508+
request.cookies.add(cookie);
509+
return derived.cast(this);
510+
}
511+
512+
513+
public void resetQueryParameters() {
514+
request.queryParams = null;
495515
}
496516

497517
public void resetParameters() {
@@ -544,28 +564,22 @@ public T setBody(BodyGenerator bodyGenerator) {
544564
}
545565

546566
public T addQueryParameter(String name, String value) {
547-
if (request.queryParams == null) {
567+
if (request.queryParams == null)
548568
request.queryParams = new FluentStringsMap();
549-
}
550569
request.queryParams.add(name, value);
551570
return derived.cast(this);
552571
}
553572

554573
public T setQueryParameters(FluentStringsMap parameters) {
555-
if (parameters == null) {
556-
request.queryParams = null;
557-
} else {
558-
request.queryParams = new FluentStringsMap(parameters);
559-
}
574+
request.queryParams = parameters != null? new FluentStringsMap(parameters) : null;
560575
return derived.cast(this);
561576
}
562577

563578
public T addParameter(String key, String value) {
564579
resetNonMultipartData();
565580
resetMultipartData();
566-
if (request.params == null) {
581+
if (request.params == null)
567582
request.params = new FluentStringsMap();
568-
}
569583
request.params.add(key, value);
570584
return derived.cast(this);
571585
}
@@ -587,9 +601,8 @@ public T setParameters(Map<String, Collection<String>> parameters) {
587601
public T addBodyPart(Part part) {
588602
resetParameters();
589603
resetNonMultipartData();
590-
if (request.parts == null) {
604+
if (request.parts == null)
591605
request.parts = new ArrayList<Part>();
592-
}
593606
request.parts.add(part);
594607
return derived.cast(this);
595608
}
@@ -686,39 +699,9 @@ private void computeRequestContentLength() {
686699
}
687700

688701
public Request build() {
689-
690702
executeSignatureCalculator();
691703
computeRequestCharset();
692704
computeRequestContentLength();
693-
694-
if (request.cookies != null) {
695-
request.cookies = Collections.unmodifiableCollection(request.cookies);
696-
}
697705
return request;
698706
}
699-
700-
public T addOrReplaceCookie(Cookie cookie) {
701-
String cookieKey = cookie.getName();
702-
boolean replace = false;
703-
int index = 0;
704-
if (request.cookies == null) {
705-
request.cookies = new ArrayList<Cookie>();
706-
request.cookies.add(cookie);
707-
return derived.cast(this);
708-
}
709-
for (Cookie c : request.cookies) {
710-
if (c.getName().equals(cookieKey)) {
711-
replace = true;
712-
break;
713-
}
714-
715-
index++;
716-
}
717-
if (replace) {
718-
((ArrayList<Cookie>) request.cookies).set(index, cookie);
719-
} else {
720-
request.cookies.add(cookie);
721-
}
722-
return derived.cast(this);
723-
}
724707
}

0 commit comments

Comments
 (0)