TrackingRunner: added line number to the dump for more precise testdata

GitOrigin-RevId: ac8da6213d3e06974d589e36b90aabc64738d59e
This commit is contained in:
Tagir Valeev
2019-05-07 13:03:04 +03:00
committed by intellij-monorepo-bot
parent 0a6ca4e64d
commit b87b7c31c1
46 changed files with 159 additions and 157 deletions
@@ -162,6 +162,8 @@ public class TrackingRunner extends StandardDataFlowRunner {
Segment range = myTarget.getRange();
if (range != null) {
text = doc.getText(TextRange.create(range));
int lineNumber = doc.getLineNumber(range.getStartOffset());
text += "; line#" + (lineNumber + 1);
}
}
return StringUtil.repeat(" ", indent) + render(doc, parent) + (text == null ? "" : " (" + text + ")") + "\n" +
@@ -1,8 +1,8 @@
/*
Value is always false (x > 6 && y > 10)
Operand #1 of &&-chain is false (x > 6)
Left operand is 5 (x)
'x' was assigned to '5' (=)
Value is always false (x > 6 && y > 10; line#11)
Operand #1 of &&-chain is false (x > 6; line#11)
Left operand is 5 (x; line#11)
'x' was assigned to '5' (=; line#10)
*/
class Test {
@@ -1,13 +1,13 @@
/*
Value is always false (a > 5 && b < 0 && b > a)
Value is always false (a > 5 && b < 0 && b > a; line#15)
One of the following happens:
Operand #1 of &&-chain is false (a > 5)
or operand #2 of &&-chain is false (b < 0)
or operand #3 of &&-chain is false (b > a)
Left operand is <= -1 (b)
Range is known from line #15 (b < 0)
and right operand is >= 6 (a)
Range is known from line #15 (a > 5)
Operand #1 of &&-chain is false (a > 5; line#15)
or operand #2 of &&-chain is false (b < 0; line#15)
or operand #3 of &&-chain is false (b > a; line#15)
Left operand is <= -1 (b; line#15)
Range is known from line #15 (b < 0; line#15)
and right operand is >= 6 (a; line#15)
Range is known from line #15 (a > 5; line#15)
*/
class Test {
@@ -1,7 +1,7 @@
/*
Value is always true (s.length > 0)
Left operand is >= 1 (s.length)
Range is known from line #8 (s[0])
Value is always true (s.length > 0; line#10)
Left operand is >= 1 (s.length; line#10)
Range is known from line #8 (s[0]; line#8)
*/
class Test {
void test(String[] s) {
@@ -1,9 +1,9 @@
/*
Value is always false (s.length == list.size())
Left operand is >= 1 (s.length)
Range is known from line #12 (s[0])
and right operand is 0 (list.size())
Range is known from line #13 (list.isEmpty())
Value is always false (s.length == list.size(); line#15)
Left operand is >= 1 (s.length; line#15)
Range is known from line #12 (s[0]; line#12)
and right operand is 0 (list.size(); line#15)
Range is known from line #13 (list.isEmpty(); line#13)
*/
import java.util.List;
@@ -1,9 +1,9 @@
/*
Value is always false (foo == null)
'foo' was assigned (=)
Value is always false (foo == null; line#15)
'foo' was assigned (=; line#14)
One of the following happens:
Expression cannot be null as it's newly created object (new String("foo"))
or expression cannot be null as it's newly created object (new String("bar"))
Expression cannot be null as it's newly created object (new String("foo"); line#14)
or expression cannot be null as it's newly created object (new String("bar"); line#14)
*/
import org.jetbrains.annotations.Nullable;
@@ -1,10 +1,10 @@
/*
Value is always false (foo > 3)
Value is always false (foo > 3; line#16)
One of the following happens:
Left operand is 1 (foo)
'foo' was assigned (=)
or left operand is 2 (foo)
'foo' was assigned (=)
Left operand is 1 (foo; line#16)
'foo' was assigned (=; line#15)
or left operand is 2 (foo; line#16)
'foo' was assigned (=; line#15)
*/
import org.jetbrains.annotations.Nullable;
@@ -1,6 +1,6 @@
/*
Value is always true (b)
'b' was assigned to 'true' (=)
Value is always true (b; line#9)
'b' was assigned to 'true' (=; line#8)
*/
class Test {
@@ -1,7 +1,7 @@
/*
Value is always false (s == null)
's' was assigned (=)
's1' is known to be 'non-null' from line #8 (s1 == null)
Value is always false (s == null; line#10)
's' was assigned (=; line#9)
's1' is known to be 'non-null' from line #8 (s1 == null; line#8)
*/
class Test {
void test(String s, String s1) {
@@ -1,6 +1,6 @@
/*
Value is always true (b)
'b == true' was established from condition (!b)
Value is always true (b; line#11)
'b == true' was established from condition (!b; line#9)
*/
import org.jetbrains.annotations.NotNull;
@@ -1,10 +1,10 @@
/*
Value is always false (b4)
'b4' was assigned (=)
'b3' was assigned (=)
'b2' was assigned (=)
'b1' was assigned (=)
'b == false' was established from condition (b)
Value is always false (b4; line#18)
'b4' was assigned (=; line#17)
'b3' was assigned (=; line#16)
'b2' was assigned (=; line#15)
'b1' was assigned (=; line#14)
'b == false' was established from condition (b; line#13)
*/
import org.jetbrains.annotations.NotNull;
@@ -1,6 +1,6 @@
/*
Value is always false (b)
'b == false' was established from condition (!b)
Value is always false (b; line#8)
'b == false' was established from condition (!b; line#8)
*/
class Test {
void test(boolean b, int limit) {
@@ -1,6 +1,6 @@
/*
Value is always false (E.A == E.B)
Comparison arguments are different constants (==)
Value is always false (E.A == E.B; line#9)
Comparison arguments are different constants (==; line#9)
*/
class Test {
enum E {A, B, C}
@@ -1,6 +1,6 @@
/*
Value is always true (a == a)
Comparison arguments are the same (==)
Value is always true (a == a; line#7)
Comparison arguments are the same (==; line#7)
*/
class Test {
void test(int a) {
@@ -1,10 +1,10 @@
/*
Value is always false (x == null)
Value is always false (x == null; line#18)
One of the following happens:
'x' was assigned (=)
Expression cannot be null as it's newly created object (new Object())
or 'x' was assigned to '"foo"' (=)
Expression cannot be null as it's literal ("foo")
'x' was assigned (=; line#14)
Expression cannot be null as it's newly created object (new Object(); line#14)
or 'x' was assigned to '"foo"' (=; line#16)
Expression cannot be null as it's literal ("foo"; line#16)
*/
class Test {
@@ -1,11 +1,11 @@
/*
Value is always false (y == null)
'y' was assigned (=)
Value is always false (y == null; line#20)
'y' was assigned (=; line#19)
One of the following happens:
'x' was assigned (=)
Expression cannot be null as it's newly created object (new Object())
or 'x' was assigned to '"foo"' (=)
Expression cannot be null as it's literal ("foo")
'x' was assigned (=; line#15)
Expression cannot be null as it's newly created object (new Object(); line#15)
or 'x' was assigned to '"foo"' (=; line#17)
Expression cannot be null as it's literal ("foo"; line#17)
*/
class Test {
@@ -1,11 +1,11 @@
/*
Value is always true (j >= 0)
Left operand is >= 0 (j)
'j' was assigned (=)
Result of '+' is >= 0 (i + 1)
Left operand is in {-1..Integer.MAX_VALUE-1} (i)
'i' was assigned (=)
Value is in {-1..Integer.MAX_VALUE-1} (s.indexOf(' '))
Value is always true (j >= 0; line#15)
Left operand is >= 0 (j; line#15)
'j' was assigned (=; line#14)
Result of '+' is >= 0 (i + 1; line#14)
Left operand is in {-1..Integer.MAX_VALUE-1} (i; line#14)
'i' was assigned (=; line#13)
Value is in {-1..Integer.MAX_VALUE-1} (s.indexOf(' '); line#13)
*/
class Test {
@@ -1,7 +1,7 @@
/*
Value is always false (s instanceof String)
An object is known to be Number which is definitely incompatible with String (s)
Type of 's' is known from line #10 (s instanceof Number)
Value is always false (s instanceof String; line#12)
An object is known to be Number which is definitely incompatible with String (s; line#12)
Type of 's' is known from line #10 (s instanceof Number; line#10)
*/
import java.util.List;
@@ -1,7 +1,7 @@
/*
Value is always true (s instanceof RandomAccess)
An object is already known to be ArrayList which is a subtype of RandomAccess (s)
Type of 's' is known from line #12 (s instanceof ArrayList)
Value is always true (s instanceof RandomAccess; line#14)
An object is already known to be ArrayList which is a subtype of RandomAccess (s; line#14)
Type of 's' is known from line #12 (s instanceof ArrayList; line#12)
*/
import java.util.*;
@@ -1,7 +1,7 @@
/*
Value is always false (s instanceof Integer)
An object type is exactly String which is not a subtype of Integer (s)
Type of 's' is known from line #10 (s instanceof String)
Value is always false (s instanceof Integer; line#11)
An object type is exactly String which is not a subtype of Integer (s; line#11)
Type of 's' is known from line #10 (s instanceof String; line#10)
*/
import java.util.List;
@@ -1,7 +1,7 @@
/*
Value is always false (s instanceof String)
Value 's' is always 'null' (s)
's == null' was established from condition (s == null)
Value is always false (s instanceof String; line#10)
Value 's' is always 'null' (s; line#10)
's == null' was established from condition (s == null; line#10)
*/
import java.util.List;
@@ -1,7 +1,7 @@
/*
Value is always true (s instanceof String)
An object is already known to be String (s)
Type of 's' is known from line #10 ((String)s)
Value is always true (s instanceof String; line#13)
An object is already known to be String (s; line#13)
Type of 's' is known from line #10 ((String)s; line#10)
*/
import java.util.List;
@@ -1,7 +1,7 @@
/*
Value is always true (s instanceof CharSequence)
An object type is exactly String which is a subtype of CharSequence (s)
Type of 's' is known from line #10 (s instanceof String)
Value is always true (s instanceof CharSequence; line#11)
An object type is exactly String which is a subtype of CharSequence (s; line#11)
Type of 's' is known from line #10 (s instanceof String; line#10)
*/
import java.util.List;
@@ -1,6 +1,6 @@
/*
Value is always false (x % 10 == 15)
Result of '%' is in {-9..9} (x % 10)
Value is always false (x % 10 == 15; line#7)
Result of '%' is in {-9..9} (x % 10; line#7)
*/
class Test {
void test(int x) {
@@ -1,7 +1,7 @@
/*
Value is always false (s instanceof String)
An object is known to be not CharSequence which is a supertype of String (s)
Type of 's' is known from line #10 (s instanceof CharSequence)
Value is always false (s instanceof String; line#12)
An object is known to be not CharSequence which is a supertype of String (s; line#12)
Type of 's' is known from line #10 (s instanceof CharSequence; line#10)
*/
import java.util.List;
@@ -1,7 +1,7 @@
/*
Value is always false (s1 == null)
's1' was assigned (=)
Method 'trim' is externally annotated as 'non-null' (trim)
Value is always false (s1 == null; line#9)
's1' was assigned (=; line#8)
Method 'trim' is externally annotated as 'non-null' (trim; line#8)
*/
class Test {
void test(String s) {
@@ -1,7 +1,7 @@
/*
Value is always true ((s = new Object()) != null)
's' was assigned (=)
Expression cannot be null as it's newly created object (new Object())
Value is always true ((s = new Object()) != null; line#10)
's' was assigned (=; line#10)
Expression cannot be null as it's newly created object (new Object(); line#10)
*/
class Test {
@@ -1,7 +1,7 @@
/*
Value is always true (s != null)
's' was assigned (=)
Expression cannot be null as it's newly created object (new Object())
Value is always true (s != null; line#10)
's' was assigned (=; line#9)
Expression cannot be null as it's newly created object (new Object(); line#9)
*/
class Test {
@@ -1,6 +1,6 @@
/*
Value is always false (null == s)
Parameter 's' is annotated as 'non-null' (@NotNull)
Value is always false (null == s; line#9)
Parameter 's' is annotated as 'non-null' (@NotNull; line#8)
*/
import org.jetbrains.annotations.NotNull;
@@ -1,6 +1,6 @@
/*
Value is always true (null == s)
's' was assigned to 'null' (=)
Value is always true (null == s; line#10)
's' was assigned to 'null' (=; line#9)
*/
import org.jetbrains.annotations.NotNull;
@@ -1,7 +1,7 @@
/*
May be null (s)
's' was assigned (=)
Method 'loadString' is annotated as 'nullable' (@Nullable)
May be null (s; line#12)
's' was assigned (=; line#11)
Method 'loadString' is annotated as 'nullable' (@Nullable; line#15)
*/
import org.jetbrains.annotations.Nullable;
@@ -1,7 +1,7 @@
/*
May be null (s)
May be null (s; line#12)
An execution might exist where:
's' is known to be 'null' from line #9 (s == null)
's' is known to be 'null' from line #9 (s == null; line#9)
*/
class Test {
@@ -1,7 +1,7 @@
/*
May be null (foo)
'foo' was assigned (=)
Method 'getFoo' is annotated as 'nullable' (@Nullable)
May be null (foo; line#13)
'foo' was assigned (=; line#12)
Method 'getFoo' is annotated as 'nullable' (@Nullable; line#16)
*/
import org.jetbrains.annotations.Nullable;
@@ -1,6 +1,6 @@
/*
Value is always false (s == null)
's' is known to be 'non-null' from line #7 (null == s)
Value is always false (s == null; line#9)
's' is known to be 'non-null' from line #7 (null == s; line#7)
*/
class Test {
void test(String s) {
@@ -1,6 +1,6 @@
/*
Value is always false (s == null)
The 'instanceof' check implies non-nullity (s instanceof String)
Value is always false (s == null; line#8)
The 'instanceof' check implies non-nullity (s instanceof String; line#7)
*/
class Test {
void test(Object s) {
@@ -1,7 +1,7 @@
/*
Value is always false (s == s1)
's' is known to be 'non-null' from line #8 (null == s)
and 's1' was assigned to 'null' (=)
Value is always false (s == s1; line#10)
's' is known to be 'non-null' from line #8 (null == s; line#8)
and 's1' was assigned to 'null' (=; line#9)
*/
class Test {
void test(String s) {
@@ -1,8 +1,8 @@
/*
Value is always false (x * 2 == y * 2 + 1)
Result of '*' is even (x * 2)
and result of '+' is odd (y * 2 + 1)
Result of '*' is even (y * 2)
Value is always false (x * 2 == y * 2 + 1; line#9)
Result of '*' is even (x * 2; line#9)
and result of '+' is odd (y * 2 + 1; line#9)
Result of '*' is even (y * 2; line#9)
*/
class Test {
void test(int x, int y) {
@@ -1,19 +1,19 @@
/*
Value is always true (x || (a+b)+(c+d)==10)
Value is always true (x || (a+b)+(c+d)==10; line#22)
One of the following happens:
Operand #1 of ||-chain is true (x)
or operand #2 of ||-chain is true ((a+b)+(c+d)==10)
Result of '+' is 10 ((a+b)+(c+d))
Result of '+' is 3 (a+b)
Left operand is 1 (a)
'a' was assigned to '1' (=)
and right operand is 2 (b)
'b' was assigned to '2' (=)
and result of '+' is 7 (c+d)
Left operand is 3 (c)
'c' was assigned to '3' (=)
and right operand is 4 (d)
'd' was assigned to '4' (=)
Operand #1 of ||-chain is true (x; line#22)
or operand #2 of ||-chain is true ((a+b)+(c+d)==10; line#22)
Result of '+' is 10 ((a+b)+(c+d); line#22)
Result of '+' is 3 (a+b; line#22)
Left operand is 1 (a; line#22)
'a' was assigned to '1' (=; line#21)
and right operand is 2 (b; line#22)
'b' was assigned to '2' (=; line#21)
and result of '+' is 7 (c+d; line#22)
Left operand is 3 (c; line#22)
'c' was assigned to '3' (=; line#21)
and right operand is 4 (d; line#22)
'd' was assigned to '4' (=; line#21)
*/
class Test {
@@ -1,6 +1,6 @@
/*
Value is always true (x <= y)
Condition 'x <= y' was checked before (x > y)
Value is always true (x <= y; line#9)
Condition 'x <= y' was checked before (x > y; line#7)
*/
class Test {
void test(int x, int y) {
@@ -1,6 +1,6 @@
/*
Value is always true (x < y)
Condition 'x < y' was checked before (x > y)
Value is always true (x < y; line#13)
Condition 'x < y' was checked before (x > y; line#7)
*/
class Test {
void test(int x, int y) {
@@ -1,6 +1,6 @@
/*
Value is always false (s == null)
's' was dereferenced (s)
Value is always false (s == null; line#8)
's' was dereferenced (s; line#7)
*/
class Test {
void test(String s) {
@@ -1,6 +1,6 @@
/*
Value is always false (s.length() < 0)
String length is always non-negative (s.length())
Value is always false (s.length() < 0; line#7)
String length is always non-negative (s.length(); line#7)
*/
class Test {
void test(String s) {
@@ -1,7 +1,7 @@
/*
Value is always false (list == null)
'list' was assigned (=)
According to contract, method 'loadList' always returns 'new' value (loadList)
Value is always false (list == null; line#18)
'list' was assigned (=; line#17)
According to contract, method 'loadList' always returns 'new' value (loadList; line#17)
*/
import java.util.List;
@@ -1,7 +1,7 @@
/*
Cast may fail ((Integer)x)
An object type is exactly String which is not a subtype of Integer (x)
Type of 'x' is known from line #9 (x instanceof String)
Cast may fail ((Integer)x; line#10)
An object type is exactly String which is not a subtype of Integer (x; line#10)
Type of 'x' is known from line #9 (x instanceof String; line#9)
*/
class Test {
@@ -1,10 +1,10 @@
/*
Cast may fail ((Integer)x)
Cast may fail ((Integer)x; line#16)
An execution might exist where:
An object type is exactly Double which is not a subtype of Integer (x)
Type of 'x' is known from line #14 (x instanceof Double)
or an object type is exactly String which is not a subtype of Integer (x)
Type of 'x' is known from line #12 (x instanceof String)
An object type is exactly Double which is not a subtype of Integer (x; line#16)
Type of 'x' is known from line #14 (x instanceof Double; line#14)
or an object type is exactly String which is not a subtype of Integer (x; line#16)
Type of 'x' is known from line #12 (x instanceof String; line#12)
*/
class Test {
@@ -1,8 +1,8 @@
/*
Cast may fail ((Integer)x)
Cast may fail ((Integer)x; line#12)
An execution might exist where:
An object type is exactly String which is not a subtype of Integer (x)
Type of 'x' is known from line #10 (x instanceof String)
An object type is exactly String which is not a subtype of Integer (x; line#12)
Type of 'x' is known from line #10 (x instanceof String; line#10)
*/
class Test {