File tree 2 files changed +77
-6
lines changed
main/java/com/google/errorprone/bugpatterns
test/java/com/google/errorprone/bugpatterns
2 files changed +77
-6
lines changed Original file line number Diff line number Diff line change @@ -1675,12 +1675,13 @@ private static String transformReturnOrThrowBlock(
1675
1675
int offset = transformedBlockBuilder .length ();
1676
1676
transformedBlockBuilder .append (state .getSourceCode (), codeBlockStart , codeBlockEnd );
1677
1677
transformedBlockBuilder .append ("\n }" );
1678
- ReturnTree returnTree = (ReturnTree ) getLast (statements );
1679
- int start = getStartPosition (returnTree );
1680
- transformedBlockBuilder .replace (
1681
- offset + start - codeBlockStart ,
1682
- offset + start - codeBlockStart + "return" .length (),
1683
- "yield" );
1678
+ int start = getStartPosition (getLast (statements ));
1679
+ if (getLast (statements ) instanceof ReturnTree ) {
1680
+ transformedBlockBuilder .replace (
1681
+ offset + start - codeBlockStart ,
1682
+ offset + start - codeBlockStart + "return" .length (),
1683
+ "yield" );
1684
+ }
1684
1685
} else if (statements .size () == 1 && statements .get (0 ).getKind ().equals (RETURN )) {
1685
1686
// For "return x;", we want to take source starting after the "return"
1686
1687
int unused = extractLhsComments (caseTree , state , transformedBlockBuilder );
Original file line number Diff line number Diff line change @@ -2235,6 +2235,76 @@ public int foo(Side side) {
2235
2235
.doTest ();
2236
2236
}
2237
2237
2238
+ @ Test
2239
+ public void switchByEnum_multipleStatementsAndTheLastNotReturn_error () {
2240
+
2241
+ // Check correct generated code
2242
+ refactoringHelper
2243
+ .addInputLines (
2244
+ "Test.java" ,
2245
+ """
2246
+ class Test {
2247
+ enum Side {
2248
+ HEART,
2249
+ SPADE,
2250
+ DIAMOND,
2251
+ CLUB
2252
+ };
2253
+
2254
+ public Test(int foo) {}
2255
+
2256
+ public int invoke() {
2257
+ return 123;
2258
+ }
2259
+
2260
+ public int foo(Side side) {
2261
+ switch (side) {
2262
+ case HEART:
2263
+ case DIAMOND:
2264
+ return invoke();
2265
+ case SPADE:
2266
+ System.out.println("hello");
2267
+ throw new RuntimeException();
2268
+ default:
2269
+ throw new NullPointerException();
2270
+ }
2271
+ }
2272
+ }
2273
+ """ )
2274
+ .addOutputLines (
2275
+ "Test.java" ,
2276
+ """
2277
+ class Test {
2278
+ enum Side {
2279
+ HEART,
2280
+ SPADE,
2281
+ DIAMOND,
2282
+ CLUB
2283
+ };
2284
+
2285
+ public Test(int foo) {}
2286
+
2287
+ public int invoke() {
2288
+ return 123;
2289
+ }
2290
+
2291
+ public int foo(Side side) {
2292
+ return switch (side) {
2293
+ case HEART, DIAMOND -> invoke();
2294
+ case SPADE -> {
2295
+ System.out.println("hello");
2296
+ throw new RuntimeException();
2297
+ }
2298
+ default -> throw new NullPointerException();
2299
+ };
2300
+ }
2301
+ }
2302
+ """ )
2303
+ .setArgs ("-XepOpt:StatementSwitchToExpressionSwitch:EnableReturnSwitchConversion" )
2304
+ .setFixChooser (StatementSwitchToExpressionSwitchTest ::assertOneFixAndChoose )
2305
+ .doTest ();
2306
+ }
2307
+
2238
2308
@ Test
2239
2309
public void switchByEnum_returnSwitchWithShouldNeverHappen_error () {
2240
2310
You can’t perform that action at this time.
0 commit comments