mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-08-26 00:11:26 +07:00
dfa: exception handling reworked
no more gosub-return causing equal states differing by offset stack only don't visit outer finally without visiting inner one
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
public class Foo {
|
||||
Foo getFoo() { return <warning descr="'null' is returned by the method which isn't declared as @Nullable">null</warning>; }
|
||||
void foo() {
|
||||
try {
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo().getFoo();
|
||||
} finally {
|
||||
if (hashCode() == 2) {
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.lang.Throwable;
|
||||
import java.net.Socket;
|
||||
|
||||
public class Foo {
|
||||
void unchecked() {
|
||||
boolean b = true;
|
||||
try {
|
||||
try {
|
||||
System.out.println();
|
||||
} finally {
|
||||
b = false;
|
||||
}
|
||||
} finally {
|
||||
if (<warning descr="Condition 'b' is always 'false'">b</warning>) {
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void checked(boolean flag) throws Throwable {
|
||||
Throwable throwable = new Throwable();
|
||||
boolean b = true;
|
||||
try {
|
||||
if (flag) {
|
||||
try {
|
||||
throw throwable;
|
||||
} finally {
|
||||
b = false;
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
if (b) {
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void justReturn(boolean flag) throws Throwable {
|
||||
boolean b = true;
|
||||
try {
|
||||
try {
|
||||
return;
|
||||
} finally {
|
||||
b = false;
|
||||
}
|
||||
} finally {
|
||||
if (<warning descr="Condition 'b' is always 'false'">b</warning>) {
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -78,6 +78,7 @@ public class DataFlowInspectionTest extends LightCodeInsightFixtureTestCase {
|
||||
public void testNestedTryInWhileNotComplex() throws Throwable { doTest(); }
|
||||
public void testExceptionFromFinally() throws Throwable { doTest(); }
|
||||
public void testExceptionFromFinallyNesting() throws Throwable { doTest(); }
|
||||
public void testNestedFinally() { doTest(); }
|
||||
public void testFieldChangedBetweenSynchronizedBlocks() throws Throwable { doTest(); }
|
||||
|
||||
public void testGeneratedEquals() throws Throwable { doTest(); }
|
||||
@@ -291,6 +292,7 @@ public class DataFlowInspectionTest extends LightCodeInsightFixtureTestCase {
|
||||
public void testWhileNotComplex() { doTest(); }
|
||||
public void testManyDisjunctiveFieldAssignmentsInLoopNotComplex() { doTest(); }
|
||||
public void testManyContinuesNotComplex() { doTest(); }
|
||||
public void testFinallyNotComplex() { doTest(); }
|
||||
|
||||
public void testVariablesDiverge() { doTest(); }
|
||||
public void testMergeByNullability() { doTest(); }
|
||||
|
||||
Reference in New Issue
Block a user