mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
moved to community
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
public class a {
|
||||
void f() {<caret>
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
0: EMPTY
|
||||
@@ -0,0 +1,10 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
public class a {
|
||||
void f() {<caret>
|
||||
int i = 0;
|
||||
if (i==0) {
|
||||
i = 5;
|
||||
i = 9;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
0: WRITE i
|
||||
1: READ i
|
||||
2: COND_GOTO [END] 5
|
||||
3: WRITE i
|
||||
4: WRITE i
|
||||
@@ -0,0 +1,17 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
|
||||
|
||||
public class d {
|
||||
void f(d[] aspects) {
|
||||
for (int i = 0; i < aspects.length; i++) {<caret>
|
||||
final int line;
|
||||
try {
|
||||
line = Integer.parseInt("2"); // /
|
||||
}
|
||||
catch (Exception e) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
0: EMPTY
|
||||
1: COND_THROW_TO 8
|
||||
2: EMPTY
|
||||
3: WRITE line
|
||||
4: COND_THROW_TO 8
|
||||
5: COND_THROW_TO 8
|
||||
6: COND_THROW_TO 8
|
||||
7: GOTO [END] 11
|
||||
8: WRITE e
|
||||
9: GOTO [END] 11
|
||||
10: GOTO [END] 11
|
||||
@@ -0,0 +1,11 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
|
||||
|
||||
public class a {
|
||||
int f(boolean b1, boolean b2) {<caret>
|
||||
while (b1 || b2) {
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
0: READ b1
|
||||
1: COND_GOTO [END] 4
|
||||
2: READ b2
|
||||
3: COND_GOTO [END] 6
|
||||
4: EMPTY
|
||||
5: GOTO [END] 0
|
||||
6: GOTO [END] 7 RETURN
|
||||
@@ -0,0 +1,11 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
|
||||
|
||||
public class a {
|
||||
int f(boolean b1, boolean b2) {<caret>
|
||||
do {
|
||||
} while (b1 || b2);
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
0: EMPTY
|
||||
1: READ b1
|
||||
2: COND_GOTO [END] 0
|
||||
3: READ b2
|
||||
4: COND_GOTO [END] 0
|
||||
5: GOTO [END] 6 RETURN
|
||||
@@ -0,0 +1,22 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import java.io.EOFException;
|
||||
|
||||
public class a {
|
||||
|
||||
int f(boolean b1, boolean b2) {<caret>
|
||||
|
||||
try {
|
||||
throw new IOException();
|
||||
} catch (EOFException eof) {
|
||||
eof.printStackTrace();
|
||||
} catch (IOException io) {
|
||||
io.printStackTrace();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
0: COND_THROW_TO 10
|
||||
1: COND_THROW_TO 6
|
||||
2: EMPTY
|
||||
3: COND_THROW_TO 10
|
||||
4: THROW_TO 6
|
||||
5: GOTO [END] 14
|
||||
6: WRITE io
|
||||
7: READ io
|
||||
8: EMPTY
|
||||
9: GOTO [END] 14
|
||||
10: WRITE eof
|
||||
11: READ eof
|
||||
12: EMPTY
|
||||
13: GOTO [END] 14
|
||||
14: GOTO [END] 15 RETURN
|
||||
@@ -0,0 +1,20 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
|
||||
|
||||
|
||||
public class B {
|
||||
protected Object invokeNext(Object mi)
|
||||
throws Exception
|
||||
{<caret>
|
||||
try {
|
||||
return this;
|
||||
} finally {
|
||||
try {
|
||||
} finally {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
0: COND_THROW_TO 9
|
||||
1: GOTO [END] 7 RETURN
|
||||
2: COND_THROW_TO 9
|
||||
3: COND_THROW_TO 9
|
||||
4: GOTO [END] 5
|
||||
5: CALL 11
|
||||
6: GOTO [END] 30
|
||||
7: CALL 11
|
||||
8: GOTO [END] 30 RETURN
|
||||
9: CALL 11
|
||||
10: GOTO [END] 29
|
||||
11: COND_THROW_TO 19
|
||||
12: EMPTY
|
||||
13: COND_THROW_TO 19
|
||||
14: GOTO [END] 15
|
||||
15: CALL 21
|
||||
16: GOTO [END] 26
|
||||
17: CALL 21
|
||||
18: GOTO [END] 27 RETURN
|
||||
19: CALL 21
|
||||
20: GOTO [END] 25
|
||||
21: GOTO [END] 23 RETURN
|
||||
22: RETURN FROM 21
|
||||
23: RETURN FROM 21 TO 18
|
||||
24: RETURN FROM 21 TO 20
|
||||
25: THROW_TO 30
|
||||
26: RETURN FROM 11
|
||||
27: RETURN FROM 11 TO 8
|
||||
28: RETURN FROM 11 TO 10
|
||||
29: THROW_TO 30
|
||||
@@ -0,0 +1,37 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
// SCR 12926
|
||||
|
||||
import java.rmi.RemoteException;
|
||||
|
||||
public class B {
|
||||
public Object show(Object obj)
|
||||
{
|
||||
try
|
||||
{
|
||||
throw new NullPointerException();
|
||||
}
|
||||
catch ( NullPointerException npe )
|
||||
{
|
||||
}
|
||||
finally
|
||||
{<caret>
|
||||
if ( obj != null )
|
||||
{
|
||||
try
|
||||
{
|
||||
throw new RemoteException();
|
||||
}
|
||||
catch ( RemoteException re )
|
||||
{
|
||||
System.out.println( re );
|
||||
}
|
||||
finally
|
||||
{
|
||||
obj = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
0: READ obj
|
||||
1: COND_GOTO [END] 27
|
||||
2: COND_THROW_TO 9
|
||||
3: COND_THROW_TO 20
|
||||
4: EMPTY
|
||||
5: THROW_TO 9
|
||||
6: COND_THROW_TO 20
|
||||
7: COND_THROW_TO 20
|
||||
8: GOTO [END] 16
|
||||
9: WRITE re
|
||||
10: COND_THROW_TO 20
|
||||
11: READ re
|
||||
12: EMPTY
|
||||
13: COND_THROW_TO 20
|
||||
14: COND_THROW_TO 20
|
||||
15: GOTO [END] 16
|
||||
16: CALL 22
|
||||
17: GOTO [END] 27
|
||||
18: CALL 22
|
||||
19: GOTO [END] 27 RETURN
|
||||
20: CALL 22
|
||||
21: GOTO [END] 26
|
||||
22: WRITE obj
|
||||
23: RETURN FROM 22
|
||||
24: RETURN FROM 22 TO 19
|
||||
25: RETURN FROM 22 TO 21
|
||||
26: THROW_TO 27
|
||||
@@ -0,0 +1,20 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
import java.io.IOException;
|
||||
|
||||
class TestIdea939 {
|
||||
public boolean test() throws IOException {<caret>
|
||||
try {
|
||||
return geta();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException();
|
||||
} finally {
|
||||
geta();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean geta() throws IOException {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
0: COND_THROW_TO 8
|
||||
1: COND_THROW_TO 19
|
||||
2: EMPTY
|
||||
3: COND_THROW_TO 8
|
||||
4: GOTO [END] 17 RETURN
|
||||
5: COND_THROW_TO 19
|
||||
6: COND_THROW_TO 19
|
||||
7: GOTO [END] 15
|
||||
8: WRITE e
|
||||
9: COND_THROW_TO 19
|
||||
10: EMPTY
|
||||
11: THROW_TO 19
|
||||
12: COND_THROW_TO 19
|
||||
13: COND_THROW_TO 19
|
||||
14: GOTO [END] 15
|
||||
15: CALL 21
|
||||
16: GOTO [END] 28
|
||||
17: CALL 21
|
||||
18: GOTO [END] 28 RETURN
|
||||
19: CALL 21
|
||||
20: GOTO [END] 27
|
||||
21: EMPTY
|
||||
22: COND_THROW_TO 26
|
||||
23: RETURN FROM 21
|
||||
24: RETURN FROM 21 TO 18
|
||||
25: RETURN FROM 21 TO 20
|
||||
26: RETURN FROM 21 TO 20
|
||||
27: THROW_TO 28
|
||||
@@ -0,0 +1,10 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
class TestForeach {
|
||||
{<caret>
|
||||
String[] args = new String[256];
|
||||
|
||||
for(String s : args) {
|
||||
foo(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
0: EMPTY
|
||||
1: WRITE args
|
||||
2: READ args
|
||||
3: COND_GOTO [END] 8
|
||||
4: WRITE s
|
||||
5: READ s
|
||||
6: EMPTY
|
||||
7: GOTO [END] 3
|
||||
@@ -0,0 +1,17 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
public class Outer {
|
||||
void f(OutputStream writer) { <caret>
|
||||
try {
|
||||
try {
|
||||
throw new IOException();
|
||||
} finally {
|
||||
writer.close();
|
||||
}
|
||||
}
|
||||
catch (IOException e) {
|
||||
e.hashCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
0: COND_THROW_TO 24
|
||||
1: COND_THROW_TO 24
|
||||
2: COND_THROW_TO 12
|
||||
3: EMPTY
|
||||
4: THROW_TO 24
|
||||
5: COND_THROW_TO 12
|
||||
6: COND_THROW_TO 12
|
||||
7: GOTO [END] 8
|
||||
8: CALL 14
|
||||
9: GOTO [END] 23
|
||||
10: CALL 14
|
||||
11: GOTO [END] 28 RETURN
|
||||
12: CALL 14
|
||||
13: GOTO [END] 22
|
||||
14: READ writer
|
||||
15: EMPTY
|
||||
16: COND_THROW_TO 21
|
||||
17: COND_THROW_TO 21
|
||||
18: RETURN FROM 14
|
||||
19: RETURN FROM 14 TO 11
|
||||
20: RETURN FROM 14 TO 13
|
||||
21: RETURN FROM 14 TO 24
|
||||
22: THROW_TO 28
|
||||
23: GOTO [END] 28
|
||||
24: WRITE e
|
||||
25: READ e
|
||||
26: EMPTY
|
||||
27: GOTO [END] 28
|
||||
@@ -0,0 +1,9 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
public class a {
|
||||
void f(int i) {<caret>
|
||||
while (i==0) {
|
||||
i = 5;
|
||||
if (i==3) break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
0: READ i
|
||||
1: COND_GOTO [END] 7
|
||||
2: WRITE i
|
||||
3: READ i
|
||||
4: COND_GOTO [END] 6
|
||||
5: GOTO [END] 7
|
||||
6: GOTO [END] 0
|
||||
@@ -0,0 +1,17 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
|
||||
public class a {
|
||||
void f(int i) throws Exception {<caret>
|
||||
i = 5;
|
||||
try {
|
||||
f(i);
|
||||
} catch (Exception e) {
|
||||
i = 0;
|
||||
}
|
||||
finally {
|
||||
i = 9;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
0: WRITE i
|
||||
1: COND_THROW_TO 13
|
||||
2: COND_THROW_TO 13
|
||||
3: COND_THROW_TO 23
|
||||
4: READ i
|
||||
5: EMPTY
|
||||
6: COND_THROW_TO 13
|
||||
7: COND_THROW_TO 13
|
||||
8: COND_THROW_TO 13
|
||||
9: COND_THROW_TO 23
|
||||
10: COND_THROW_TO 13
|
||||
11: COND_THROW_TO 23
|
||||
12: GOTO [END] 19
|
||||
13: WRITE e
|
||||
14: COND_THROW_TO 23
|
||||
15: WRITE i
|
||||
16: COND_THROW_TO 23
|
||||
17: COND_THROW_TO 23
|
||||
18: GOTO [END] 19
|
||||
19: CALL 25
|
||||
20: GOTO [END] 30
|
||||
21: CALL 25
|
||||
22: GOTO [END] 30 RETURN
|
||||
23: CALL 25
|
||||
24: GOTO [END] 29
|
||||
25: WRITE i
|
||||
26: RETURN FROM 25
|
||||
27: RETURN FROM 25 TO 22
|
||||
28: RETURN FROM 25 TO 24
|
||||
29: THROW_TO 30
|
||||
@@ -0,0 +1,11 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
|
||||
public class a {
|
||||
void f(int i) throws Exception {<caret>
|
||||
int k =0;
|
||||
switch (k) {
|
||||
//case 0:
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
0: WRITE k
|
||||
1: READ k
|
||||
2: GOTO [END] 3
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
|
||||
public class a {
|
||||
void f(int i) throws Exception {<caret>
|
||||
int k =0;
|
||||
switch (k) {
|
||||
case 0: k=0; break;
|
||||
case 1: k=1; break;
|
||||
default: k=9; break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
0: WRITE k
|
||||
1: READ k
|
||||
2: COND_GOTO [END] 5
|
||||
3: COND_GOTO [END] 7
|
||||
4: COND_GOTO [END] 9
|
||||
5: WRITE k
|
||||
6: GOTO [END] 11
|
||||
7: WRITE k
|
||||
8: GOTO [END] 11
|
||||
9: WRITE k
|
||||
10: GOTO [END] 11
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
|
||||
public class a {
|
||||
boolean c;
|
||||
void f(int i) throws Exception {<caret>
|
||||
for (int i=0; i<100; i++) {
|
||||
if (i==0) break;
|
||||
if (i==1) continue;
|
||||
c = !c;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
0: WRITE i
|
||||
1: READ i
|
||||
2: COND_GOTO [END] 14
|
||||
3: READ i
|
||||
4: COND_GOTO [END] 6
|
||||
5: GOTO [END] 14
|
||||
6: READ i
|
||||
7: COND_GOTO [END] 9
|
||||
8: GOTO [END] 11
|
||||
9: READ c
|
||||
10: WRITE c
|
||||
11: READ i
|
||||
12: WRITE i
|
||||
13: GOTO [END] 1
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
|
||||
public class a {
|
||||
boolean c;
|
||||
void f(int i) throws Exception {<caret>
|
||||
do {
|
||||
c=!c;
|
||||
} while (!c);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
0: READ c
|
||||
1: WRITE c
|
||||
2: READ c
|
||||
3: COND_GOTO [END] 0
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
|
||||
public class a {
|
||||
boolean c;
|
||||
void f(int i) throws Exception {<caret>
|
||||
do {
|
||||
if (c) break;
|
||||
c=!c;
|
||||
if (c) continue;
|
||||
} while (!c);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
0: READ c
|
||||
1: COND_GOTO [END] 3
|
||||
2: GOTO [END] 10
|
||||
3: READ c
|
||||
4: WRITE c
|
||||
5: READ c
|
||||
6: COND_GOTO [END] 8
|
||||
7: GOTO [END] 8
|
||||
8: READ c
|
||||
9: COND_GOTO [END] 0
|
||||
@@ -0,0 +1,20 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
|
||||
class ExceptionTestCase {
|
||||
|
||||
void cf1(int i) {<caret>
|
||||
Object o;
|
||||
try {
|
||||
o = new FileReader(""); //
|
||||
}
|
||||
catch (FileNotFoundException e) { //
|
||||
}
|
||||
finally {
|
||||
if (i==1) return;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
0: EMPTY
|
||||
1: COND_THROW_TO 9
|
||||
2: COND_THROW_TO 18
|
||||
3: COND_THROW_TO 9
|
||||
4: WRITE o
|
||||
5: COND_THROW_TO 9
|
||||
6: COND_THROW_TO 18
|
||||
7: COND_THROW_TO 18
|
||||
8: GOTO [END] 14
|
||||
9: WRITE e
|
||||
10: COND_THROW_TO 18
|
||||
11: EMPTY
|
||||
12: COND_THROW_TO 18
|
||||
13: GOTO [END] 14
|
||||
14: CALL 20
|
||||
15: GOTO [END] 27
|
||||
16: CALL 20
|
||||
17: GOTO [END] 27 RETURN
|
||||
18: CALL 20
|
||||
19: GOTO [END] 26
|
||||
20: READ i
|
||||
21: COND_GOTO [END] 23
|
||||
22: GOTO [END] 24 RETURN
|
||||
23: RETURN FROM 20
|
||||
24: RETURN FROM 20 TO 17
|
||||
25: RETURN FROM 20 TO 19
|
||||
26: THROW_TO 27
|
||||
@@ -0,0 +1,12 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
|
||||
class ExceptionTestCase {
|
||||
|
||||
public void ensureAllInvalidateTasksCompleted(boolean a, boolean b, boolean c) {<caret>
|
||||
final boolean doProgressThing;
|
||||
doProgressThing = c && a && b;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
0: EMPTY
|
||||
1: READ c
|
||||
2: COND_GOTO [END] 6
|
||||
3: READ a
|
||||
4: COND_GOTO [END] 6
|
||||
5: READ b
|
||||
6: WRITE doProgressThing
|
||||
@@ -0,0 +1,15 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
|
||||
class ExceptionTestCase {
|
||||
public String getIndexingLexer(final boolean file, boolean b1, boolean b2) {<caret>
|
||||
String highlighter;
|
||||
|
||||
if (file && b1 && b2) {
|
||||
highlighter = "then";
|
||||
}
|
||||
else {
|
||||
highlighter = "else";
|
||||
}
|
||||
return highlighter;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
0: EMPTY
|
||||
1: READ file
|
||||
2: COND_GOTO [END] 9
|
||||
3: READ b1
|
||||
4: COND_GOTO [ELSE] 9
|
||||
5: READ b2
|
||||
6: COND_GOTO [ELSE] 9
|
||||
7: WRITE highlighter
|
||||
8: GOTO [END] 10
|
||||
9: WRITE highlighter
|
||||
10: READ highlighter
|
||||
11: GOTO [END] 12 RETURN
|
||||
@@ -0,0 +1,9 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
|
||||
class c {
|
||||
String container;
|
||||
void f() {<caret>
|
||||
String parent;
|
||||
if (container == null && (parent = null) != null && parent != null) {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
0: EMPTY
|
||||
1: READ container
|
||||
2: COND_GOTO [END] 8
|
||||
3: WRITE parent
|
||||
4: COND_GOTO [END] 8
|
||||
5: READ parent
|
||||
6: COND_GOTO [END] 8
|
||||
7: EMPTY
|
||||
@@ -0,0 +1,10 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
|
||||
class ExceptionTestCase {
|
||||
void f(boolean a, boolean b) {<caret>
|
||||
int n;
|
||||
if ((a || a) && (n = 0) >= 2) {
|
||||
n++; //
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
0: EMPTY
|
||||
1: READ a
|
||||
2: COND_GOTO [END] 5
|
||||
3: READ a
|
||||
4: COND_GOTO [END] 9
|
||||
5: WRITE n
|
||||
6: COND_GOTO [END] 9
|
||||
7: READ n
|
||||
8: WRITE n
|
||||
@@ -0,0 +1,15 @@
|
||||
// LocalsOrMyInstanceFieldsControlFlowPolicy
|
||||
|
||||
class MyTest {
|
||||
void f(Object o, long childrenStamp, Object o2) {<caret>
|
||||
long currentStamp;
|
||||
if ((o instanceof String && childrenStamp != (currentStamp = 0))
|
||||
||
|
||||
(o2 instanceof Integer && childrenStamp != (currentStamp = 1))
|
||||
)
|
||||
{
|
||||
childrenStamp = currentStamp;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
0: EMPTY
|
||||
1: READ o
|
||||
2: COND_GOTO [END] 6
|
||||
3: READ childrenStamp
|
||||
4: WRITE currentStamp
|
||||
5: COND_GOTO [THEN] 11
|
||||
6: READ o2
|
||||
7: COND_GOTO [END] 13
|
||||
8: READ childrenStamp
|
||||
9: WRITE currentStamp
|
||||
10: COND_GOTO [END] 13
|
||||
11: READ currentStamp
|
||||
12: WRITE childrenStamp
|
||||
@@ -0,0 +1,94 @@
|
||||
package com.intellij.codeInsight.psi;
|
||||
|
||||
import com.intellij.openapi.application.ex.PathManagerEx;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiCodeBlock;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiJavaFile;
|
||||
import com.intellij.psi.controlFlow.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.testFramework.LightCodeInsightTestCase;
|
||||
import com.intellij.util.containers.IntArrayList;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* @author cdr
|
||||
* Date: Nov 25, 2002
|
||||
*/
|
||||
public class ControlFlowTest extends LightCodeInsightTestCase {
|
||||
@NonNls private static final String BASE_PATH = "/psi/controlFlow";
|
||||
|
||||
private static void doTestFor(final File file) throws Exception {
|
||||
String contents = StringUtil.convertLineSeparators(FileUtil.loadFile(file));
|
||||
configureFromFileText(file.getName(), contents);
|
||||
// extract factory policy class name
|
||||
Pattern pattern = Pattern.compile("^// (\\S*).*", Pattern.DOTALL);
|
||||
Matcher matcher = pattern.matcher(contents);
|
||||
assertTrue(matcher.matches());
|
||||
final String policyClassName = matcher.group(1);
|
||||
final ControlFlowPolicy policy;
|
||||
if ("LocalsOrMyInstanceFieldsControlFlowPolicy".equals(policyClassName)) {
|
||||
policy = LocalsOrMyInstanceFieldsControlFlowPolicy.getInstance();
|
||||
}
|
||||
else {
|
||||
policy = null;
|
||||
}
|
||||
|
||||
final int offset = getEditor().getCaretModel().getOffset();
|
||||
PsiElement element = getFile().findElementAt(offset);
|
||||
element = PsiTreeUtil.getParentOfType(element, PsiCodeBlock.class, false);
|
||||
assertTrue("Selected element: "+element, element instanceof PsiCodeBlock);
|
||||
|
||||
ControlFlow controlFlow = ControlFlowFactory.getInstance(getProject()).getControlFlow(element, policy);
|
||||
String result = controlFlow.toString().trim();
|
||||
|
||||
final String expectedFullPath = StringUtil.trimEnd(file.getPath(),".java") + ".txt";
|
||||
VirtualFile expectedFile = LocalFileSystem.getInstance().findFileByPath(expectedFullPath);
|
||||
String expected = new String(expectedFile.contentsToByteArray()).trim();
|
||||
expected = expected.replaceAll("\r","");
|
||||
assertEquals("Text mismatch (in file "+expectedFullPath+"):\n",expected, result);
|
||||
}
|
||||
|
||||
private static void doAllTests() throws Exception {
|
||||
final String testDirPath = PathManagerEx.getTestDataPath().replace(File.separatorChar, '/') + BASE_PATH;
|
||||
File testDir = new File(testDirPath);
|
||||
final File[] files = testDir.listFiles(new FilenameFilter() {
|
||||
@Override
|
||||
public boolean accept(File dir, String name) {
|
||||
return name.endsWith(".java");
|
||||
}
|
||||
});
|
||||
for (int i = 0; i < files.length; i++) {
|
||||
File file = files[i];
|
||||
doTestFor(file);
|
||||
|
||||
System.out.print((i+1)+" ");
|
||||
}
|
||||
}
|
||||
|
||||
public void test() throws Exception { doAllTests(); }
|
||||
|
||||
public void testMethodWithOnlyDoWhileStatementHasExitPoints() throws Exception {
|
||||
configureFromFileText("a.java", "public class Foo {\n" +
|
||||
" public void foo() {\n" +
|
||||
" boolean f;\n" +
|
||||
" do {\n" +
|
||||
" f = something();\n" +
|
||||
" } while (f);\n" +
|
||||
" }\n" +
|
||||
"}");
|
||||
final PsiCodeBlock body = ((PsiJavaFile)getFile()).getClasses()[0].getMethods()[0].getBody();
|
||||
ControlFlow flow = ControlFlowFactory.getInstance(getProject()).getControlFlow(body, new LocalsControlFlowPolicy(body), false);
|
||||
IntArrayList exitPoints = new IntArrayList();
|
||||
ControlFlowUtil.findExitPointsAndStatements(flow, 0, flow.getSize() -1 , exitPoints, ControlFlowUtil.DEFAULT_EXIT_STATEMENTS_CLASSES);
|
||||
assertEquals(1, exitPoints.size());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user