Skip to content

Commit 4cd18d8

Browse files
committed
Use switch expression where possible
1 parent 4e708e5 commit 4cd18d8

File tree

5 files changed

+61
-139
lines changed

5 files changed

+61
-139
lines changed

src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ArgTokenizer.java

Lines changed: 17 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ class ArgTokenizer {
4343
private final String prefix;
4444
private final int length;
4545
private int next = 0;
46-
private char buf[] = new char[20];
46+
private char[] buf = new char[20];
4747
private int mark;
4848

49-
private final byte ctype[] = new byte[256];
49+
private final byte[] ctype = new byte[256];
5050
private static final byte CT_ALPHA = 0;
5151
private static final byte CT_WHITESPACE = 1;
5252
private static final byte CT_QUOTE = 8;
@@ -258,24 +258,17 @@ private void quoteChar(int ch) {
258258
}
259259

260260
private int unicode2ctype(int c) {
261-
switch (c) {
262-
case 0x1680:
263-
case 0x180E:
264-
case 0x200A:
265-
case 0x202F:
266-
case 0x205F:
267-
case 0x3000:
268-
return CT_WHITESPACE;
269-
default:
270-
return CT_ALPHA;
271-
}
261+
return switch (c) {
262+
case 0x1680, 0x180E, 0x200A, 0x202F, 0x205F, 0x3000 -> CT_WHITESPACE;
263+
default -> CT_ALPHA;
264+
};
272265
}
273266

274267
/**
275268
* Parses the next token of this tokenizer.
276269
*/
277270
public void nextToken() {
278-
byte ct[] = ctype;
271+
byte[] ct = ctype;
279272
int c;
280273
int lctype;
281274
sval = null;
@@ -330,29 +323,16 @@ public void nextToken() {
330323
} else
331324
d = c2;
332325
} else {
333-
switch (c) {
334-
case 'a':
335-
c = 0x7;
336-
break;
337-
case 'b':
338-
c = '\b';
339-
break;
340-
case 'f':
341-
c = 0xC;
342-
break;
343-
case 'n':
344-
c = '\n';
345-
break;
346-
case 'r':
347-
c = '\r';
348-
break;
349-
case 't':
350-
c = '\t';
351-
break;
352-
case 'v':
353-
c = 0xB;
354-
break;
355-
}
326+
c = switch (c) {
327+
case 'a' -> 0x7;
328+
case 'b' -> '\b';
329+
case 'f' -> 0xC;
330+
case 'n' -> '\n';
331+
case 'r' -> '\r';
332+
case 't' -> '\t';
333+
case 'v' -> 0xB;
334+
default -> c;
335+
};
356336
d = read();
357337
}
358338
} else {

src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2802,14 +2802,11 @@ String[] allIds() {
28022802
*/
28032803
int order(String id) {
28042804
try {
2805-
switch (id.charAt(0)) {
2806-
case 's':
2807-
return Integer.parseInt(id.substring(1));
2808-
case 'e':
2809-
return 0x40000000 + Integer.parseInt(id.substring(1));
2810-
default:
2811-
return 0x20000000 + Integer.parseInt(id);
2812-
}
2805+
return switch (id.charAt(0)) {
2806+
case 's' -> Integer.parseInt(id.substring(1));
2807+
case 'e' -> 0x40000000 + Integer.parseInt(id.substring(1));
2808+
default -> 0x20000000 + Integer.parseInt(id);
2809+
};
28132810
} catch (Exception ex) {
28142811
return 0x60000000;
28152812
}

src/jdk.jshell/share/classes/jdk/internal/jshell/tool/Startup.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -230,17 +230,11 @@ static Startup unpack(String storedForm, MessageHandler mh) {
230230
} else if (all.length % 4 == 0) {
231231
List<StartupEntry> e = new ArrayList<>(all.length / 4);
232232
for (int i = 0; i < all.length; i += 4) {
233-
final boolean isBuiltIn;
234-
switch (all[i]) {
235-
case "*":
236-
isBuiltIn = true;
237-
break;
238-
case "-":
239-
isBuiltIn = false;
240-
break;
241-
default:
242-
throw new IllegalArgumentException("Unexpected StartupEntry kind: " + all[i]);
243-
}
233+
final boolean isBuiltIn = switch (all[i]) {
234+
case "*" -> true;
235+
case "-" -> false;
236+
default -> throw new IllegalArgumentException("Unexpected StartupEntry kind: " + all[i]);
237+
};
244238
String name = all[i + 1];
245239
String timeStamp = all[i + 2];
246240
String content = all[i + 3];

src/jdk.jshell/share/classes/jdk/jshell/Eval.java

Lines changed: 15 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@
7676
import com.sun.tools.javac.code.Symbol.TypeSymbol;
7777
import static jdk.internal.jshell.debug.InternalDebugControl.DBG_GEN;
7878
import static jdk.jshell.Snippet.Status.RECOVERABLE_DEFINED;
79-
import static jdk.jshell.Snippet.Status.RECOVERABLE_NOT_DEFINED;
8079
import static jdk.jshell.Snippet.Status.VALID;
8180
import static jdk.jshell.Util.DOIT_METHOD_NAME;
8281
import static jdk.jshell.Util.PREFIX_PATTERN;
@@ -370,32 +369,15 @@ private List<Snippet> processVariables(String userSource, List<? extends Tree> u
370369
winit = winit == null ? Wrap.rangeWrap(compileSource, rinit) : winit;
371370
nameMax = rinit.begin - 1;
372371
} else {
373-
String sinit;
374-
switch (typeName) {
375-
case "byte":
376-
case "short":
377-
case "int":
378-
sinit = "0";
379-
break;
380-
case "long":
381-
sinit = "0L";
382-
break;
383-
case "float":
384-
sinit = "0.0f";
385-
break;
386-
case "double":
387-
sinit = "0.0d";
388-
break;
389-
case "boolean":
390-
sinit = "false";
391-
break;
392-
case "char":
393-
sinit = "'\\u0000'";
394-
break;
395-
default:
396-
sinit = "null";
397-
break;
398-
}
372+
String sinit = switch (typeName) {
373+
case "byte", "short", "int" -> "0";
374+
case "long" -> "0L";
375+
case "float" -> "0.0f";
376+
case "double" -> "0.0d";
377+
case "boolean" -> "false";
378+
case "char" -> "'\\u0000'";
379+
default -> "null";
380+
};
399381
winit = Wrap.simpleWrap(sinit);
400382
subkind = SubKind.VAR_DECLARATION_SUBKIND;
401383
}
@@ -862,23 +844,12 @@ private List<Snippet> compileFailResult(DiagList diags, String userSource, Kind
862844

863845
// Install wrapper for query by SourceCodeAnalysis.wrapper
864846
String compileSource = Util.trimEnd(new MaskCommentsAndModifiers(userSource, true).cleared());
865-
OuterWrap outer;
866-
switch (probableKind) {
867-
case IMPORT:
868-
outer = state.outerMap.wrapImport(Wrap.simpleWrap(compileSource), snip);
869-
break;
870-
case EXPRESSION:
871-
outer = state.outerMap.wrapInTrialClass(Wrap.methodReturnWrap(compileSource));
872-
break;
873-
case VAR:
874-
case TYPE_DECL:
875-
case METHOD:
876-
outer = state.outerMap.wrapInTrialClass(Wrap.classMemberWrap(compileSource));
877-
break;
878-
default:
879-
outer = state.outerMap.wrapInTrialClass(Wrap.methodWrap(compileSource));
880-
break;
881-
}
847+
OuterWrap outer = switch (probableKind) {
848+
case IMPORT -> state.outerMap.wrapImport(Wrap.simpleWrap(compileSource), snip);
849+
case EXPRESSION -> state.outerMap.wrapInTrialClass(Wrap.methodReturnWrap(compileSource));
850+
case VAR, TYPE_DECL, METHOD -> state.outerMap.wrapInTrialClass(Wrap.classMemberWrap(compileSource));
851+
default -> state.outerMap.wrapInTrialClass(Wrap.methodWrap(compileSource));
852+
};
882853
snip.setOuterWrap(outer);
883854

884855
return singletonList(snip);

src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysisImpl.java

Lines changed: 19 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -275,19 +275,11 @@ private List<Suggestion> completionSuggestionsImpl(String code, int cursor, int[
275275
if (code.trim().isEmpty()) { //TODO: comment handling
276276
code += ";";
277277
}
278-
OuterWrap codeWrap;
279-
switch (guessKind(code)) {
280-
case IMPORT:
281-
codeWrap = proc.outerMap.wrapImport(Wrap.simpleWrap(code + "any.any"), null);
282-
break;
283-
case CLASS:
284-
case METHOD:
285-
codeWrap = proc.outerMap.wrapInTrialClass(Wrap.classMemberWrap(code));
286-
break;
287-
default:
288-
codeWrap = proc.outerMap.wrapInTrialClass(Wrap.methodWrap(code));
289-
break;
290-
}
278+
OuterWrap codeWrap = switch (guessKind(code)) {
279+
case IMPORT -> proc.outerMap.wrapImport(Wrap.simpleWrap(code + "any.any"), null);
280+
case CLASS, METHOD -> proc.outerMap.wrapInTrialClass(Wrap.classMemberWrap(code));
281+
default -> proc.outerMap.wrapInTrialClass(Wrap.methodWrap(code));
282+
};
291283
String requiredPrefix = identifier;
292284
return computeSuggestions(codeWrap, cursor, anchor).stream()
293285
.filter(s -> s.continuation().startsWith(requiredPrefix) && !s.continuation().equals(REPL_DOESNOTMATTER_CLASS_NAME))
@@ -502,23 +494,14 @@ private List<Suggestion> computeSuggestions(OuterWrap code, int cursor, int[] an
502494
addScopeElements(at, scope, IDENTITY, accept, smartFilter, result);
503495

504496
Tree parent = tp.getParentPath().getLeaf();
505-
switch (parent.getKind()) {
506-
case VARIABLE:
507-
accept = ((VariableTree)parent).getType() == tp.getLeaf() ?
508-
IS_VOID.negate() :
509-
TRUE;
510-
break;
511-
case PARAMETERIZED_TYPE: // TODO: JEP 218: Generics over Primitive Types
512-
case TYPE_PARAMETER:
513-
case CLASS:
514-
case INTERFACE:
515-
case ENUM:
516-
accept = FALSE;
517-
break;
518-
default:
519-
accept = TRUE;
520-
break;
521-
}
497+
accept = switch (parent.getKind()) {
498+
case VARIABLE -> ((VariableTree) parent).getType() == tp.getLeaf() ?
499+
IS_VOID.negate() :
500+
TRUE;
501+
case PARAMETERIZED_TYPE -> FALSE; // TODO: JEP 218: Generics over Primitive Types
502+
case TYPE_PARAMETER, CLASS, INTERFACE, ENUM -> FALSE;
503+
default -> TRUE;
504+
};
522505
addElements(primitivesOrVoid(at), accept, smartFilter, result);
523506
break;
524507
}
@@ -1103,15 +1086,12 @@ private List<TypeMirror> computeSmartTypesForExecutableType(AnalyzeTask at, Iter
11031086

11041087
private TypeMirror resultTypeOf(Element el) {
11051088
//TODO: should reflect the type of site!
1106-
switch (el.getKind()) {
1107-
case METHOD:
1108-
return ((ExecutableElement) el).getReturnType();
1109-
case CONSTRUCTOR:
1110-
case INSTANCE_INIT: case STATIC_INIT: //TODO: should be filtered out
1111-
return el.getEnclosingElement().asType();
1112-
default:
1113-
return el.asType();
1114-
}
1089+
return switch (el.getKind()) {
1090+
case METHOD -> ((ExecutableElement) el).getReturnType();
1091+
case CONSTRUCTOR, INSTANCE_INIT, STATIC_INIT -> //TODO: should be filtered out
1092+
el.getEnclosingElement().asType();
1093+
default -> el.asType();
1094+
};
11151095
}
11161096

11171097
private void addScopeElements(AnalyzeTask at, Scope scope, Function<Element, Iterable<? extends Element>> elementConvertor, Predicate<Element> filter, Predicate<Element> smartFilter, List<Suggestion> result) {

0 commit comments

Comments
 (0)