Java control flow: Don't allow extracting method if there's a potential side effect on the local variables in the case of exception thrown (IDEA-79444, IDEA-159916)

This commit is contained in:
Pavel Dolgov
2016-08-24 15:24:43 +03:00
parent 08a18bc8bd
commit 1a3605e4cb
23 changed files with 713 additions and 141 deletions
@@ -0,0 +1,29 @@
import org.jetbrains.annotations.NotNull;
class A {
static class ExceptionA extends Exception{ ExceptionA(){ super(); } }
static class ExceptionB extends Exception{ ExceptionB(){ super(); } }
void foo(boolean a, boolean b) {
String s = "";
try {
s = "a";
if (a) throw new ExceptionA();
s = newMethod(b);
System.out.println(s);
} catch (ExceptionA ea) {
throw new RuntimeException(s, ea);
} catch (ExceptionB eb) {
System.out.println(eb);
}
}
@NotNull
private String newMethod(boolean b) throws ExceptionB {
String s;
s = "b";
if (b) throw new ExceptionB();
s = "c";
return s;
}
}