Skip to content

Commit ac54900

Browse files
committed
8257401: Use switch expressions in jdk.internal.net.http and java.net.http
Reviewed-by: chegar, dfuchs, pconcannon
1 parent 86b6575 commit ac54900

17 files changed

+147
-269
lines changed

src/java.net.http/share/classes/jdk/internal/net/http/Http1HeaderParser.java

Lines changed: 16 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -116,42 +116,17 @@ boolean parse(ByteBuffer input) throws ProtocolException {
116116

117117
while (canContinueParsing(input)) {
118118
switch (state) {
119-
case INITIAL:
120-
state = State.STATUS_LINE;
121-
break;
122-
case STATUS_LINE:
123-
readResumeStatusLine(input);
124-
break;
125-
// fallthrough
126-
case STATUS_LINE_FOUND_CR:
127-
case STATUS_LINE_FOUND_LF:
128-
readStatusLineFeed(input);
129-
break;
130-
case STATUS_LINE_END:
131-
maybeStartHeaders(input);
132-
break;
133-
// fallthrough
134-
case STATUS_LINE_END_CR:
135-
case STATUS_LINE_END_LF:
136-
maybeEndHeaders(input);
137-
break;
138-
case HEADER:
139-
readResumeHeader(input);
140-
break;
141-
// fallthrough
142-
case HEADER_FOUND_CR:
143-
case HEADER_FOUND_LF:
144-
resumeOrLF(input);
145-
break;
146-
case HEADER_FOUND_CR_LF:
147-
resumeOrSecondCR(input);
148-
break;
149-
case HEADER_FOUND_CR_LF_CR:
150-
resumeOrEndHeaders(input);
151-
break;
152-
default:
153-
throw new InternalError(
154-
"Unexpected state: " + String.valueOf(state));
119+
case INITIAL -> state = State.STATUS_LINE;
120+
case STATUS_LINE -> readResumeStatusLine(input);
121+
case STATUS_LINE_FOUND_CR, STATUS_LINE_FOUND_LF -> readStatusLineFeed(input);
122+
case STATUS_LINE_END -> maybeStartHeaders(input);
123+
case STATUS_LINE_END_CR, STATUS_LINE_END_LF -> maybeEndHeaders(input);
124+
case HEADER -> readResumeHeader(input);
125+
case HEADER_FOUND_CR, HEADER_FOUND_LF -> resumeOrLF(input);
126+
case HEADER_FOUND_CR_LF -> resumeOrSecondCR(input);
127+
case HEADER_FOUND_CR_LF_CR -> resumeOrEndHeaders(input);
128+
129+
default -> throw new InternalError("Unexpected state: " + state);
155130
}
156131
}
157132

@@ -161,13 +136,11 @@ boolean parse(ByteBuffer input) throws ProtocolException {
161136
private boolean canContinueParsing(ByteBuffer buffer) {
162137
// some states don't require any input to transition
163138
// to the next state.
164-
switch (state) {
165-
case FINISHED: return false;
166-
case STATUS_LINE_FOUND_LF: return true;
167-
case STATUS_LINE_END_LF: return true;
168-
case HEADER_FOUND_LF: return true;
169-
default: return buffer.hasRemaining();
170-
}
139+
return switch (state) {
140+
case FINISHED -> false;
141+
case STATUS_LINE_FOUND_LF, STATUS_LINE_END_LF, HEADER_FOUND_LF -> true;
142+
default -> buffer.hasRemaining();
143+
};
171144
}
172145

173146
/**

src/java.net.http/share/classes/jdk/internal/net/http/Http1Response.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -576,11 +576,12 @@ private State advance(State previous) {
576576
}
577577

578578
Receiver<?> receiver(State state) {
579-
switch(state) {
580-
case READING_HEADERS: return headersReader;
581-
case READING_BODY: return bodyReader;
582-
default: return null;
583-
}
579+
return switch (state) {
580+
case READING_HEADERS -> headersReader;
581+
case READING_BODY -> bodyReader;
582+
583+
default -> null;
584+
};
584585

585586
}
586587

src/java.net.http/share/classes/jdk/internal/net/http/Http2Connection.java

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -866,20 +866,12 @@ private void handleConnectionFrame(Http2Frame frame)
866866
throws IOException
867867
{
868868
switch (frame.type()) {
869-
case SettingsFrame.TYPE:
870-
handleSettings((SettingsFrame)frame);
871-
break;
872-
case PingFrame.TYPE:
873-
handlePing((PingFrame)frame);
874-
break;
875-
case GoAwayFrame.TYPE:
876-
handleGoAway((GoAwayFrame)frame);
877-
break;
878-
case WindowUpdateFrame.TYPE:
879-
handleWindowUpdate((WindowUpdateFrame)frame);
880-
break;
881-
default:
882-
protocolError(ErrorFrame.PROTOCOL_ERROR);
869+
case SettingsFrame.TYPE -> handleSettings((SettingsFrame) frame);
870+
case PingFrame.TYPE -> handlePing((PingFrame) frame);
871+
case GoAwayFrame.TYPE -> handleGoAway((GoAwayFrame) frame);
872+
case WindowUpdateFrame.TYPE -> handleWindowUpdate((WindowUpdateFrame) frame);
873+
874+
default -> protocolError(ErrorFrame.PROTOCOL_ERROR);
883875
}
884876
}
885877

src/java.net.http/share/classes/jdk/internal/net/http/MultiExchange.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -476,13 +476,10 @@ private static boolean disableRetryConnect() {
476476
/** Returns true is given request has an idempotent method. */
477477
private static boolean isIdempotentRequest(HttpRequest request) {
478478
String method = request.method();
479-
switch (method) {
480-
case "GET" :
481-
case "HEAD" :
482-
return true;
483-
default :
484-
return false;
485-
}
479+
return switch (method) {
480+
case "GET", "HEAD" -> true;
481+
default -> false;
482+
};
486483
}
487484

488485
/** Returns true if the given request can be automatically retried. */

src/java.net.http/share/classes/jdk/internal/net/http/RedirectFilter.java

Lines changed: 18 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -74,19 +74,13 @@ public synchronized HttpRequestImpl response(Response r) throws IOException {
7474
}
7575

7676
private static String redirectedMethod(int statusCode, String orig) {
77-
switch (statusCode) {
78-
case 301:
79-
case 302:
80-
return orig.equals("POST") ? "GET" : orig;
81-
case 303:
82-
return "GET";
83-
case 307:
84-
case 308:
85-
return orig;
86-
default:
87-
// unexpected but return orig
88-
return orig;
89-
}
77+
return switch (statusCode) {
78+
case 301, 302 -> orig.equals("POST") ? "GET" : orig;
79+
case 303 -> "GET";
80+
case 307, 308 -> orig;
81+
82+
default -> orig; // unexpected but return orig
83+
};
9084
}
9185

9286
private static boolean isRedirecting(int statusCode) {
@@ -95,23 +89,16 @@ private static boolean isRedirecting(int statusCode) {
9589
// 309-399 Unassigned => don't follow
9690
// > 399: not a redirect code
9791
if (statusCode > 308) return false;
98-
switch (statusCode) {
92+
93+
return switch (statusCode) {
9994
// 300: MultipleChoice => don't follow
100-
case 300:
101-
return false;
10295
// 304: Not Modified => don't follow
103-
case 304:
104-
return false;
10596
// 305: Proxy Redirect => don't follow.
106-
case 305:
107-
return false;
10897
// 306: Unused => don't follow
109-
case 306:
110-
return false;
98+
case 300, 304, 305, 306 -> false;
11199
// 301, 302, 303, 307, 308: OK to follow.
112-
default:
113-
return true;
114-
}
100+
default -> true;
101+
};
115102
}
116103

117104
/**
@@ -158,16 +145,11 @@ private URI getRedirectedURI(HttpHeaders headers) {
158145
private boolean canRedirect(URI redir) {
159146
String newScheme = redir.getScheme();
160147
String oldScheme = uri.getScheme();
161-
switch (policy) {
162-
case ALWAYS:
163-
return true;
164-
case NEVER:
165-
return false;
166-
case NORMAL:
167-
return newScheme.equalsIgnoreCase(oldScheme)
168-
|| newScheme.equalsIgnoreCase("https");
169-
default:
170-
throw new InternalError();
171-
}
148+
return switch (policy) {
149+
case ALWAYS -> true;
150+
case NEVER -> false;
151+
case NORMAL -> newScheme.equalsIgnoreCase(oldScheme)
152+
|| newScheme.equalsIgnoreCase("https");
153+
};
172154
}
173155
}

src/java.net.http/share/classes/jdk/internal/net/http/Stream.java

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -451,18 +451,11 @@ void incoming(Http2Frame frame) throws IOException {
451451

452452
void otherFrame(Http2Frame frame) throws IOException {
453453
switch (frame.type()) {
454-
case WindowUpdateFrame.TYPE:
455-
incoming_windowUpdate((WindowUpdateFrame) frame);
456-
break;
457-
case ResetFrame.TYPE:
458-
incoming_reset((ResetFrame) frame);
459-
break;
460-
case PriorityFrame.TYPE:
461-
incoming_priority((PriorityFrame) frame);
462-
break;
463-
default:
464-
String msg = "Unexpected frame: " + frame.toString();
465-
throw new IOException(msg);
454+
case WindowUpdateFrame.TYPE -> incoming_windowUpdate((WindowUpdateFrame) frame);
455+
case ResetFrame.TYPE -> incoming_reset((ResetFrame) frame);
456+
case PriorityFrame.TYPE -> incoming_priority((PriorityFrame) frame);
457+
458+
default -> throw new IOException("Unexpected frame: " + frame.toString());
466459
}
467460
}
468461

src/java.net.http/share/classes/jdk/internal/net/http/common/SSLFlowDelegate.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1021,14 +1021,10 @@ private static String states(AtomicInteger state) {
10211021
StringBuilder sb = new StringBuilder();
10221022
int x = s & ~TASK_BITS;
10231023
switch (x) {
1024-
case NOT_HANDSHAKING:
1025-
sb.append(" NOT_HANDSHAKING ");
1026-
break;
1027-
case HANDSHAKING:
1028-
sb.append(" HANDSHAKING ");
1029-
break;
1030-
default:
1031-
throw new InternalError();
1024+
case NOT_HANDSHAKING -> sb.append(" NOT_HANDSHAKING ");
1025+
case HANDSHAKING -> sb.append(" HANDSHAKING ");
1026+
1027+
default -> throw new InternalError();
10321028
}
10331029
if ((s & DOING_TASKS) > 0)
10341030
sb.append("|DOING_TASKS");

src/java.net.http/share/classes/jdk/internal/net/http/frame/DataFrame.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,12 @@ int length() {
7171

7272
@Override
7373
public String flagAsString(int flag) {
74-
switch (flag) {
75-
case END_STREAM:
76-
return "END_STREAM";
77-
case PADDED:
78-
return "PADDED";
79-
}
80-
return super.flagAsString(flag);
74+
return switch (flag) {
75+
case END_STREAM -> "END_STREAM";
76+
case PADDED -> "PADDED";
77+
78+
default -> super.flagAsString(flag);
79+
};
8180
}
8281

8382
public List<ByteBuffer> getData() {

src/java.net.http/share/classes/jdk/internal/net/http/frame/FramesEncoder.java

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -59,30 +59,20 @@ public ByteBuffer encodeConnectionPreface(byte[] preface, SettingsFrame frame) {
5959
}
6060

6161
public List<ByteBuffer> encodeFrame(Http2Frame frame) {
62-
switch (frame.type()) {
63-
case DataFrame.TYPE:
64-
return encodeDataFrame((DataFrame) frame);
65-
case HeadersFrame.TYPE:
66-
return encodeHeadersFrame((HeadersFrame) frame);
67-
case PriorityFrame.TYPE:
68-
return encodePriorityFrame((PriorityFrame) frame);
69-
case ResetFrame.TYPE:
70-
return encodeResetFrame((ResetFrame) frame);
71-
case SettingsFrame.TYPE:
72-
return encodeSettingsFrame((SettingsFrame) frame);
73-
case PushPromiseFrame.TYPE:
74-
return encodePushPromiseFrame((PushPromiseFrame) frame);
75-
case PingFrame.TYPE:
76-
return encodePingFrame((PingFrame) frame);
77-
case GoAwayFrame.TYPE:
78-
return encodeGoAwayFrame((GoAwayFrame) frame);
79-
case WindowUpdateFrame.TYPE:
80-
return encodeWindowUpdateFrame((WindowUpdateFrame) frame);
81-
case ContinuationFrame.TYPE:
82-
return encodeContinuationFrame((ContinuationFrame) frame);
83-
default:
84-
throw new UnsupportedOperationException("Not supported frame "+frame.type()+" ("+frame.getClass().getName()+")");
85-
}
62+
return switch (frame.type()) {
63+
case DataFrame.TYPE -> encodeDataFrame((DataFrame) frame);
64+
case HeadersFrame.TYPE -> encodeHeadersFrame((HeadersFrame) frame);
65+
case PriorityFrame.TYPE -> encodePriorityFrame((PriorityFrame) frame);
66+
case ResetFrame.TYPE -> encodeResetFrame((ResetFrame) frame);
67+
case SettingsFrame.TYPE -> encodeSettingsFrame((SettingsFrame) frame);
68+
case PushPromiseFrame.TYPE -> encodePushPromiseFrame((PushPromiseFrame) frame);
69+
case PingFrame.TYPE -> encodePingFrame((PingFrame) frame);
70+
case GoAwayFrame.TYPE -> encodeGoAwayFrame((GoAwayFrame) frame);
71+
case WindowUpdateFrame.TYPE -> encodeWindowUpdateFrame((WindowUpdateFrame) frame);
72+
case ContinuationFrame.TYPE -> encodeContinuationFrame((ContinuationFrame) frame);
73+
74+
default -> throw new UnsupportedOperationException("Not supported frame " + frame.type() + " (" + frame.getClass().getName() + ")");
75+
};
8676
}
8777

8878
private static final int NO_FLAGS = 0;

src/java.net.http/share/classes/jdk/internal/net/http/frame/HeaderFrame.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,12 @@ public HeaderFrame(int streamid, int flags, List<ByteBuffer> headerBlocks) {
4949

5050
@Override
5151
public String flagAsString(int flag) {
52-
switch (flag) {
53-
case END_HEADERS:
54-
return "END_HEADERS";
55-
case END_STREAM:
56-
return "END_STREAM";
57-
}
58-
return super.flagAsString(flag);
52+
return switch (flag) {
53+
case END_HEADERS -> "END_HEADERS";
54+
case END_STREAM -> "END_STREAM";
55+
56+
default -> super.flagAsString(flag);
57+
};
5958
}
6059

6160

src/java.net.http/share/classes/jdk/internal/net/http/frame/HeadersFrame.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,13 @@ int length() {
7272

7373
@Override
7474
public String flagAsString(int flag) {
75-
switch (flag) {
76-
case END_STREAM:
77-
return "END_STREAM";
78-
case PADDED:
79-
return "PADDED";
80-
case PRIORITY:
81-
return "PRIORITY";
82-
}
83-
return super.flagAsString(flag);
75+
return switch (flag) {
76+
case END_STREAM -> "END_STREAM";
77+
case PADDED -> "PADDED";
78+
case PRIORITY -> "PRIORITY";
79+
80+
default -> super.flagAsString(flag);
81+
};
8482
}
8583

8684
public void setPadLength(int padLength) {

0 commit comments

Comments
 (0)