View | Details | Raw Unified | Return to bug 247564 | Differences between
and this patch

Collapse All | Expand All

(-)a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullReferenceTest.java (-63 / +50 lines)
Lines 15533-15538 public void testBug247564a_3() { Link Here
15533
			"public class X {\n" +
15533
			"public class X {\n" +
15534
			"  Object o;\n" +
15534
			"  Object o;\n" +
15535
			"  void foo() {\n" +
15535
			"  void foo() {\n" +
15536
			"      o = null;\n" +
15536
			"  }\n" +
15537
			"  }\n" +
15537
			"  void foo1() {\n" + 
15538
			"  void foo1() {\n" + 
15538
			"	 o.toString();\n" +
15539
			"	 o.toString();\n" +
Lines 15580-15586 public void testBug247564a_5() { Link Here
15580
			"            if (field == null) { \n" +
15581
			"            if (field == null) { \n" +
15581
			"                field = new Object();\n" +
15582
			"                field = new Object();\n" +
15582
			"            }\n" +
15583
			"            }\n" +
15583
			"            field.toString(); //Pot. NPE\n" +
15584
			"            field.toString(); // Wrong outcome was: Pot. NPE\n" +
15584
			"            i--;\n" +
15585
			"            i--;\n" +
15585
			"        }\n" +
15586
			"        }\n" +
15586
			"    }\n" +
15587
			"    }\n" +
Lines 16005-16011 public void testBug247564b_4() { Link Here
16005
			"  }\n" +
16006
			"  }\n" +
16006
			"  void foo1() {\n" +
16007
			"  void foo1() {\n" +
16007
			"    if (o == null) {\n" +
16008
			"    if (o == null) {\n" +
16008
			"        o.toString(); // danger" +
16009
			"        o.toString(); // danger\n" +
16009
			"        return;\n" +
16010
			"        return;\n" +
16010
			"    }\n" +
16011
			"    }\n" +
16011
			"	 o.toString(); // safe\n" +
16012
			"	 o.toString(); // safe\n" +
Lines 16019-16029 public void testBug247564b_4() { Link Here
16019
			"}\n"},
16020
			"}\n"},
16020
			"----------\n" + 
16021
			"----------\n" + 
16021
			"1. ERROR in X.java (at line 13)\n" + 
16022
			"1. ERROR in X.java (at line 13)\n" + 
16022
			"	o.toString(); // danger        return;\n" + 
16023
			"	o.toString(); // danger\n" + 
16023
			"	^\n" + 
16024
			"	^\n" + 
16024
			"Null pointer access: The field o can only be null at this location\n" + 
16025
			"Null pointer access: The field o can only be null at this location\n" + 
16025
			"----------\n" + 
16026
			"----------\n" + 
16026
			"2. ERROR in X.java (at line 21)\n" + 
16027
			"2. ERROR in X.java (at line 22)\n" + 
16027
			"	o.toString(); // uncertain\n" + 
16028
			"	o.toString(); // uncertain\n" + 
16028
			"	^\n" + 
16029
			"	^\n" + 
16029
			"Potential null pointer access: The field o may be null at this location\n" + 
16030
			"Potential null pointer access: The field o may be null at this location\n" + 
Lines 16075-16081 public void testBug247564b_4_2() { Link Here
16075
			"  }\n" +
16076
			"  }\n" +
16076
			"  void foo1() {\n" +
16077
			"  void foo1() {\n" +
16077
			"    if (o == null) {\n" +
16078
			"    if (o == null) {\n" +
16078
			"        o.toString(); // danger" +
16079
			"        o.toString(); // danger\n" +
16079
			"        return;\n" +
16080
			"        return;\n" +
16080
			"    }\n" +
16081
			"    }\n" +
16081
			"	 o.toString(); // safe\n" +
16082
			"	 o.toString(); // safe\n" +
Lines 16089-16099 public void testBug247564b_4_2() { Link Here
16089
			"}\n"},
16090
			"}\n"},
16090
			"----------\n" + 
16091
			"----------\n" + 
16091
			"1. ERROR in X.java (at line 39)\n" + 
16092
			"1. ERROR in X.java (at line 39)\n" + 
16092
			"	o.toString(); // danger        return;\n" + 
16093
			"	o.toString(); // danger\n" + 
16093
			"	^\n" + 
16094
			"	^\n" + 
16094
			"Null pointer access: The field o can only be null at this location\n" + 
16095
			"Null pointer access: The field o can only be null at this location\n" + 
16095
			"----------\n" + 
16096
			"----------\n" + 
16096
			"2. ERROR in X.java (at line 47)\n" + 
16097
			"2. ERROR in X.java (at line 48)\n" + 
16097
			"	o.toString(); // uncertain\n" + 
16098
			"	o.toString(); // uncertain\n" + 
16098
			"	^\n" + 
16099
			"	^\n" + 
16099
			"Potential null pointer access: The field o may be null at this location\n" + 
16100
			"Potential null pointer access: The field o may be null at this location\n" + 
Lines 16128-16133 public void testBug247564b_5() { Link Here
16128
			"	 if (o == null) {\n" +	// don't know o's nullness, so silent
16129
			"	 if (o == null) {\n" +	// don't know o's nullness, so silent
16129
			"		o.toString();\n" + // report NPE
16130
			"		o.toString();\n" + // report NPE
16130
			"	 }\n" +
16131
			"	 }\n" +
16132
			"    local.toString();\n" + // try to diffuse status for o / o2
16131
			"	 o.toString();\n" +	// already reported NPE above. So silent. Same behaviour as 'local'
16133
			"	 o.toString();\n" +	// already reported NPE above. So silent. Same behaviour as 'local'
16132
			"	 if (o2 == null) {\n" + // report always false null check
16134
			"	 if (o2 == null) {\n" + // report always false null check
16133
			"		o2.toString();\n" + // dead code
16135
			"		o2.toString();\n" + // dead code
Lines 16151-16162 public void testBug247564b_5() { Link Here
16151
			"	^\n" + 
16153
			"	^\n" + 
16152
			"Null pointer access: The field o can only be null at this location\n" + 
16154
			"Null pointer access: The field o can only be null at this location\n" + 
16153
			"----------\n" + 
16155
			"----------\n" + 
16154
			"4. ERROR in X.java (at line 22)\n" + 
16156
			"4. ERROR in X.java (at line 23)\n" + 
16155
			"	if (o2 == null) {\n" + 
16157
			"	if (o2 == null) {\n" + 
16156
			"	    ^^\n" + 
16158
			"	    ^^\n" + 
16157
			"Null comparison always yields false: The field o2 cannot be null at this location\n" + 
16159
			"Null comparison always yields false: The field o2 cannot be null at this location\n" + 
16158
			"----------\n" + 
16160
			"----------\n" + 
16159
			"5. WARNING in X.java (at line 22)\n" + 
16161
			"5. WARNING in X.java (at line 23)\n" + 
16160
			"	if (o2 == null) {\n" + 
16162
			"	if (o2 == null) {\n" + 
16161
			"		o2.toString();\n" + 
16163
			"		o2.toString();\n" + 
16162
			"	 }\n" + 
16164
			"	 }\n" + 
Lines 16166-16174 public void testBug247564b_5() { Link Here
16166
	);
16168
	);
16167
}
16169
}
16168
16170
16169
//null analysis -- case for static final field initialized inside static block with different values
16171
// null analysis -- case for static final field initialized inside static block with different values
16170
//check if the resetting works properly i.e. null status for constant fields should not be 
16172
// check if the resetting works properly i.e. null status for constant fields should not be 
16171
//reset on method calls. This test is for constructors
16173
// reset on method calls. This test is for constructors
16172
public void testBug247564b_6() {
16174
public void testBug247564b_6() {
16173
	this.runNegativeTest(
16175
	this.runNegativeTest(
16174
		new String[] {
16176
		new String[] {
Lines 16193-16198 public void testBug247564b_6() { Link Here
16193
			"	 if (o == null) {\n" +	// don't know o's nullness, so silent
16195
			"	 if (o == null) {\n" +	// don't know o's nullness, so silent
16194
			"		o.toString();\n" + // report NPE
16196
			"		o.toString();\n" + // report NPE
16195
			"	 }\n" +
16197
			"	 }\n" +
16198
			"    local.toString();\n" + // try to diffuse status for o / o2
16196
			"	 o.toString();\n" +	// already reported NPE above. So silent. Same behaviour as 'local'
16199
			"	 o.toString();\n" +	// already reported NPE above. So silent. Same behaviour as 'local'
16197
			"	 if (o2 == null) {\n" + // report always false null check
16200
			"	 if (o2 == null) {\n" + // report always false null check
16198
			"		o2.toString();\n" + // dead code
16201
			"		o2.toString();\n" + // dead code
Lines 16216-16227 public void testBug247564b_6() { Link Here
16216
			"	^\n" + 
16219
			"	^\n" + 
16217
			"Null pointer access: The field o can only be null at this location\n" + 
16220
			"Null pointer access: The field o can only be null at this location\n" + 
16218
			"----------\n" + 
16221
			"----------\n" + 
16219
			"4. ERROR in X.java (at line 22)\n" + 
16222
			"4. ERROR in X.java (at line 23)\n" + 
16220
			"	if (o2 == null) {\n" + 
16223
			"	if (o2 == null) {\n" + 
16221
			"	    ^^\n" + 
16224
			"	    ^^\n" + 
16222
			"Null comparison always yields false: The field o2 cannot be null at this location\n" + 
16225
			"Null comparison always yields false: The field o2 cannot be null at this location\n" + 
16223
			"----------\n" + 
16226
			"----------\n" + 
16224
			"5. WARNING in X.java (at line 22)\n" + 
16227
			"5. WARNING in X.java (at line 23)\n" + 
16225
			"	if (o2 == null) {\n" + 
16228
			"	if (o2 == null) {\n" + 
16226
			"		o2.toString();\n" + 
16229
			"		o2.toString();\n" + 
16227
			"	 }\n" + 
16230
			"	 }\n" + 
Lines 16231-16239 public void testBug247564b_6() { Link Here
16231
	);
16234
	);
16232
}
16235
}
16233
16236
16234
//null analysis -- case for static final field initialized inside static block with different values
16237
// null analysis -- case for static final field initialized inside static block with different values
16235
//check if the resetting works properly i.e. null status for constant fields should not be 
16238
// check if the resetting works properly i.e. null status for constant fields should not be 
16236
//reset on method calls. This test is for constructors
16239
// reset on method calls. This test is for constructors
16237
public void testBug247564b_6_2() {
16240
public void testBug247564b_6_2() {
16238
	this.runNegativeTest(
16241
	this.runNegativeTest(
16239
		new String[] {
16242
		new String[] {
Lines 16284-16289 public void testBug247564b_6_2() { Link Here
16284
			"	 if (o == null) {\n" +	// don't know o's nullness, so silent
16287
			"	 if (o == null) {\n" +	// don't know o's nullness, so silent
16285
			"		o.toString();\n" + // report NPE
16288
			"		o.toString();\n" + // report NPE
16286
			"	 }\n" +
16289
			"	 }\n" +
16290
			"    local.toString();\n" + // try to diffuse status for o / o2
16287
			"	 o.toString();\n" +	// already reported NPE above. So silent. Same behaviour as 'local'
16291
			"	 o.toString();\n" +	// already reported NPE above. So silent. Same behaviour as 'local'
16288
			"	 if (o2 == null) {\n" + // report always false null check
16292
			"	 if (o2 == null) {\n" + // report always false null check
16289
			"		o2.toString();\n" + // dead code
16293
			"		o2.toString();\n" + // dead code
Lines 16307-16318 public void testBug247564b_6_2() { Link Here
16307
			"	^\n" + 
16311
			"	^\n" + 
16308
			"Null pointer access: The field o can only be null at this location\n" + 
16312
			"Null pointer access: The field o can only be null at this location\n" + 
16309
			"----------\n" + 
16313
			"----------\n" + 
16310
			"4. ERROR in X.java (at line 48)\n" + 
16314
			"4. ERROR in X.java (at line 49)\n" + 
16311
			"	if (o2 == null) {\n" + 
16315
			"	if (o2 == null) {\n" + 
16312
			"	    ^^\n" + 
16316
			"	    ^^\n" + 
16313
			"Null comparison always yields false: The field o2 cannot be null at this location\n" + 
16317
			"Null comparison always yields false: The field o2 cannot be null at this location\n" + 
16314
			"----------\n" + 
16318
			"----------\n" + 
16315
			"5. WARNING in X.java (at line 48)\n" + 
16319
			"5. WARNING in X.java (at line 49)\n" + 
16316
			"	if (o2 == null) {\n" + 
16320
			"	if (o2 == null) {\n" + 
16317
			"		o2.toString();\n" + 
16321
			"		o2.toString();\n" + 
16318
			"	 }\n" + 
16322
			"	 }\n" + 
Lines 16349-16354 public void testBug247564b_7() { Link Here
16349
			"	 if (o1 == null) {\n" +	// can't be null, was dereferenced in static initializer
16353
			"	 if (o1 == null) {\n" +	// can't be null, was dereferenced in static initializer
16350
			"		o1.toString();\n" + // dead
16354
			"		o1.toString();\n" + // dead
16351
			"	 }\n" +
16355
			"	 }\n" +
16356
			"    local.toString();\n" + // try to diffuse status for o1 / o2
16352
			"	 o1.toString();\n" +	// safe
16357
			"	 o1.toString();\n" +	// safe
16353
			"	 if (o2 == null) {\n" + // report always false null check
16358
			"	 if (o2 == null) {\n" + // report always false null check
16354
			"		o2.toString();\n" + // dead code
16359
			"		o2.toString();\n" + // dead code
Lines 16384-16395 public void testBug247564b_7() { Link Here
16384
			"	                ^^^^^^^^^^^^^^^^^^^^^^\n" + 
16389
			"	                ^^^^^^^^^^^^^^^^^^^^^^\n" + 
16385
			"Dead code\n" + 
16390
			"Dead code\n" + 
16386
			"----------\n" + 
16391
			"----------\n" + 
16387
			"6. ERROR in X.java (at line 22)\n" + 
16392
			"6. ERROR in X.java (at line 23)\n" + 
16388
			"	if (o2 == null) {\n" + 
16393
			"	if (o2 == null) {\n" + 
16389
			"	    ^^\n" + 
16394
			"	    ^^\n" + 
16390
			"Null comparison always yields false: The field o2 cannot be null at this location\n" + 
16395
			"Null comparison always yields false: The field o2 cannot be null at this location\n" + 
16391
			"----------\n" + 
16396
			"----------\n" + 
16392
			"7. WARNING in X.java (at line 22)\n" + 
16397
			"7. WARNING in X.java (at line 23)\n" + 
16393
			"	if (o2 == null) {\n" + 
16398
			"	if (o2 == null) {\n" + 
16394
			"		o2.toString();\n" + 
16399
			"		o2.toString();\n" + 
16395
			"	 }\n" + 
16400
			"	 }\n" + 
Lines 16447-16452 public void testBug247564b_8() { Link Here
16447
			"	 if (o1 == null) {\n" +	// report redundant null check
16452
			"	 if (o1 == null) {\n" +	// report redundant null check
16448
			"		o1.toString();\n" + // report NPE
16453
			"		o1.toString();\n" + // report NPE
16449
			"	 }\n" +
16454
			"	 }\n" +
16455
			"    local.toString();\n" + // try to diffuse status for o1 / o2
16450
			"	 o1.toString();\n" +	// already reported NPE above. So silent. Same behaviour as 'local'
16456
			"	 o1.toString();\n" +	// already reported NPE above. So silent. Same behaviour as 'local'
16451
			"	 if (o2 == null) {\n" + // report always false null check
16457
			"	 if (o2 == null) {\n" + // report always false null check
16452
			"		o2.toString();\n" + // dead code
16458
			"		o2.toString();\n" + // dead code
Lines 16477-16488 public void testBug247564b_8() { Link Here
16477
		"	^^\n" + 
16483
		"	^^\n" + 
16478
		"Null pointer access: The field o1 can only be null at this location\n" + 
16484
		"Null pointer access: The field o1 can only be null at this location\n" + 
16479
		"----------\n" + 
16485
		"----------\n" + 
16480
		"5. ERROR in X.java (at line 40)\n" + 
16486
		"5. ERROR in X.java (at line 41)\n" + 
16481
		"	if (o2 == null) {\n" + 
16487
		"	if (o2 == null) {\n" + 
16482
		"	    ^^\n" + 
16488
		"	    ^^\n" + 
16483
		"Null comparison always yields false: The field o2 cannot be null at this location\n" + 
16489
		"Null comparison always yields false: The field o2 cannot be null at this location\n" + 
16484
		"----------\n" + 
16490
		"----------\n" + 
16485
		"6. WARNING in X.java (at line 40)\n" + 
16491
		"6. WARNING in X.java (at line 41)\n" + 
16486
		"	if (o2 == null) {\n" + 
16492
		"	if (o2 == null) {\n" + 
16487
		"		o2.toString();\n" + 
16493
		"		o2.toString();\n" + 
16488
		"	 }\n" + 
16494
		"	 }\n" + 
Lines 16517-16522 public void testBug247564b_9() { Link Here
16517
			"	 if (o1 == null) {\n" +	// report redundant null check
16523
			"	 if (o1 == null) {\n" +	// report redundant null check
16518
			"		o1.toString();\n" + // report NPE
16524
			"		o1.toString();\n" + // report NPE
16519
			"	 }\n" +
16525
			"	 }\n" +
16526
			"    local.toString();\n" + // try to diffuse status for o1 / o2
16520
			"	 o1.toString();\n" +	// already reported NPE above. So silent. Same behaviour as 'local'
16527
			"	 o1.toString();\n" +	// already reported NPE above. So silent. Same behaviour as 'local'
16521
			"	 if (o2 == null) {\n" + // report always false null check
16528
			"	 if (o2 == null) {\n" + // report always false null check
16522
			"		o2.toString();\n" + // dead code
16529
			"		o2.toString();\n" + // dead code
Lines 16547-16558 public void testBug247564b_9() { Link Here
16547
		"	^^\n" + 
16554
		"	^^\n" + 
16548
		"Null pointer access: The field o1 can only be null at this location\n" + 
16555
		"Null pointer access: The field o1 can only be null at this location\n" + 
16549
		"----------\n" + 
16556
		"----------\n" + 
16550
		"5. ERROR in X.java (at line 18)\n" + 
16557
		"5. ERROR in X.java (at line 19)\n" + 
16551
		"	if (o2 == null) {\n" + 
16558
		"	if (o2 == null) {\n" + 
16552
		"	    ^^\n" + 
16559
		"	    ^^\n" + 
16553
		"Null comparison always yields false: The field o2 cannot be null at this location\n" + 
16560
		"Null comparison always yields false: The field o2 cannot be null at this location\n" + 
16554
		"----------\n" + 
16561
		"----------\n" + 
16555
		"6. WARNING in X.java (at line 18)\n" + 
16562
		"6. WARNING in X.java (at line 19)\n" + 
16556
		"	if (o2 == null) {\n" + 
16563
		"	if (o2 == null) {\n" + 
16557
		"		o2.toString();\n" + 
16564
		"		o2.toString();\n" + 
16558
		"	 }\n" + 
16565
		"	 }\n" + 
Lines 16812-16837 public void testBug247564d_1() { Link Here
16812
	);
16819
	);
16813
}
16820
}
16814
16821
16815
// null analysis -- test redundant instanceof warning for static final fields
16816
public void testBug247564e_1() {
16817
	this.runNegativeTest(
16818
		new String[] {
16819
			"X.java",
16820
			"public class X {\n" +
16821
			"  static final Object o = null;\n" +
16822
			"  void foo() {\n" +
16823
			"      if (o instanceof X) return;\n" +
16824
			"  }\n" +
16825
			"}"},
16826
		"----------\n" + 
16827
		"1. ERROR in X.java (at line 4)\n" + 
16828
		"	if (o instanceof X) return;\n" + 
16829
		"	    ^\n" + 
16830
		"instanceof always yields false: The field o can only be null at this location\n" + 
16831
		"----------\n",
16832
		JavacTestOptions.Excuse.EclipseWarningConfiguredAsError);
16833
}
16834
16835
// null analysis -- test potential null ptr access warning because of static field access through object returned by method call
16822
// null analysis -- test potential null ptr access warning because of static field access through object returned by method call
16836
public void testBug247564f() {
16823
public void testBug247564f() {
16837
	Map compilerOptions = getCompilerOptions();
16824
	Map compilerOptions = getCompilerOptions();
Lines 16935-16941 public void testBug247564g() { Link Here
16935
			"      if (this.field99 == null && this.field99.hashCode() == 0){}\n" +
16922
			"      if (this.field99 == null && this.field99.hashCode() == 0){}\n" +
16936
			"	   this.field98 = null;\n" +
16923
			"	   this.field98 = null;\n" +
16937
			"	}\n" +
16924
			"	}\n" +
16938
			"	if (this.field98.hashCode() == 0) {}\n" +	// should not complain
16925
			"	if (this.field98.hashCode() == 0) {}\n" +
16939
			"	this.field97 = null;\n" +
16926
			"	this.field97 = null;\n" +
16940
			"	if (this.field97.hashCode() == 0) {}\n" +
16927
			"	if (this.field97.hashCode() == 0) {}\n" +
16941
			"	if (this.field100.hashCode() == 0) {}\n" +
16928
			"	if (this.field100.hashCode() == 0) {}\n" +
Lines 16999-17005 public void testBug247564h() { Link Here
16999
}
16986
}
17000
16987
17001
// null analysis -- simple case for field for inner class
16988
// null analysis -- simple case for field for inner class
17002
// to make sure that id's of local variables in inner classes dotn conflict with those of fields.
16989
// to make sure that id's of local variables in inner classes don't conflict with those of fields.
17003
public void testBug247564h_1() {
16990
public void testBug247564h_1() {
17004
	this.runNegativeTest(
16991
	this.runNegativeTest(
17005
		new String[] {
16992
		new String[] {
Lines 17027-17033 public void testBug247564h_1() { Link Here
17027
}
17014
}
17028
17015
17029
// null analysis -- simple case for field for inner class
17016
// null analysis -- simple case for field for inner class
17030
// to make sure that id's of local variables in inner classes dotn conflict with those of fields.
17017
// to make sure that id's of local variables in inner classes don't conflict with those of fields.
17031
public void testBug247564h_2() {
17018
public void testBug247564h_2() {
17032
	this.runNegativeTest(
17019
	this.runNegativeTest(
17033
		new String[] {
17020
		new String[] {
Lines 17041-17054 public void testBug247564h_2() { Link Here
17041
			"	 class X2 {\n" +
17028
			"	 class X2 {\n" +
17042
			"	 	Object field4;\n" +
17029
			"	 	Object field4;\n" +
17043
			"	 	Object field5;\n" +
17030
			"	 	Object field5;\n" +
17044
			"	 void goo(Object var) {\n" +
17031
			"	    void goo(Object var) {\n" +
17045
			"    	if (var == null && field4.toString() == \"\"){}\n" +
17032
			"    	   if (var == null && field4.toString() == \"\"){}\n" +
17046
			"    	if (var == null && field5.toString() == \"\"){}\n" +
17033
			"    	   if (var == null && field5.toString() == \"\"){}\n" +
17047
			"    	if (field3 == null && field3.toString() == \"\"){}\n" +
17034
			"    	   if (field3 == null && field3.toString() == \"\"){}\n" +
17048
			"    	if (field3 == null && field1.toString() == \"\"){}\n" +
17035
			"    	   if (field3 == null && field1.toString() == \"\"){}\n" +
17049
			"    }\n" +
17036
			"       }\n" +
17050
			"    }\n" +
17037
			"    }\n" +
17051
			"  Object field22;\n" +
17038
			"    Object field22;\n" +
17052
			"  }\n" +
17039
			"  }\n" +
17053
			"}\n"},
17040
			"}\n"},
17054
		"----------\n" + 
17041
		"----------\n" + 
Lines 17085-17091 public void testBug247564i_1() { Link Here
17085
			"    	if (X.field0 == null && X.field0.toString() == \"\"){}\n" +   // warn
17072
			"    	if (X.field0 == null && X.field0.toString() == \"\"){}\n" +   // warn
17086
			"    	if (this.field0 == null && X.field0.toString() == \"\"){}\n" +   // warn
17073
			"    	if (this.field0 == null && X.field0.toString() == \"\"){}\n" +   // warn
17087
			"    	if (X.field0 == null && this.field0.toString() == \"\"){}\n" +   // warn
17074
			"    	if (X.field0 == null && this.field0.toString() == \"\"){}\n" +   // warn
17088
			"    	if (X.field0 == null && getX().field0.toString() == \"\"){}\n" +   // no warn
17075
			"    	if (X.field0 == null && getX().field0.toString() == \"\"){}\n" +   // no warn (diffused by getX() call)
17089
			"  }\n" +
17076
			"  }\n" +
17090
			"}\n" +
17077
			"}\n" +
17091
			"class Y{\n" +
17078
			"class Y{\n" +
Lines 17199-17207 public void testBug247564i_3() { Link Here
17199
			"  static Y getY(){ return new Y();}\n" +
17186
			"  static Y getY(){ return new Y();}\n" +
17200
			"  static X getX() { return new X();}\n" +
17187
			"  static X getX() { return new X();}\n" +
17201
			"  static class XInner{\n" +
17188
			"  static class XInner{\n" +
17202
			"   static Object xinnerfield;\n" +
17189
			"    static Object xinnerfield;\n" +
17203
			"   XInner getXInner() { return new XInner();\n}" +
17190
			"    XInner getXInner() { return new XInner();\n}" +
17204
			"   void goo(Object var) {\n" +
17191
			"    void goo(Object var) {\n" +
17205
			"    	if (new Y().getY().yField1 == null && field0.toString() == \"\"){}\n" +  // no warn
17192
			"    	if (new Y().getY().yField1 == null && field0.toString() == \"\"){}\n" +  // no warn
17206
			"    	if (getY().yField1 == null && field0.toString() == \"\"){}\n" +  // no warn
17193
			"    	if (getY().yField1 == null && field0.toString() == \"\"){}\n" +  // no warn
17207
			"    	if (new Y().getX().field0 == null && field0.toString() == \"\"){}\n" +   // warn
17194
			"    	if (new Y().getX().field0 == null && field0.toString() == \"\"){}\n" +   // warn
Lines 17223-17229 public void testBug247564i_3() { Link Here
17223
			"    	if (Y.xiny.field1 == null && Y.yField1.toString() == \"\"){}\n" +  // no warn
17210
			"    	if (Y.xiny.field1 == null && Y.yField1.toString() == \"\"){}\n" +  // no warn
17224
			"    	if (X.field0 == null && X.field0.toString() == \"\"){}\n" +   // warn
17211
			"    	if (X.field0 == null && X.field0.toString() == \"\"){}\n" +   // warn
17225
			"    	if (X.field0 == null && getX().field0.toString() == \"\"){}\n" +   // no warn
17212
			"    	if (X.field0 == null && getX().field0.toString() == \"\"){}\n" +   // no warn
17226
			"   }\n" +
17213
			"    }\n" +
17227
			"  }\n" +
17214
			"  }\n" +
17228
			"}\n" +
17215
			"}\n" +
17229
			"class Y{\n" +
17216
			"class Y{\n" +
Lines 17643-17649 public void testBug247564m() { Link Here
17643
	this.runNegativeTest(
17630
	this.runNegativeTest(
17644
		new String[] {
17631
		new String[] {
17645
			"X.java",
17632
			"X.java",
17646
			"class MyException extends Exception{}" +
17633
			"class MyException extends Exception{}\n" +
17647
			"public class X {\n" +
17634
			"public class X {\n" +
17648
			"  private Object f;\n" +
17635
			"  private Object f;\n" +
17649
			"	 void gooCalls() throws MyException{}\n" +
17636
			"	 void gooCalls() throws MyException{}\n" +
Lines 17660-17670 public void testBug247564m() { Link Here
17660
			"}\n"},
17647
			"}\n"},
17661
		"----------\n" + 
17648
		"----------\n" + 
17662
		"1. WARNING in X.java (at line 1)\n" + 
17649
		"1. WARNING in X.java (at line 1)\n" + 
17663
		"	class MyException extends Exception{}public class X {\n" + 
17650
		"	class MyException extends Exception{}\n" + 
17664
		"	      ^^^^^^^^^^^\n" + 
17651
		"	      ^^^^^^^^^^^\n" + 
17665
		"The serializable class MyException does not declare a static final serialVersionUID field of type long\n" + 
17652
		"The serializable class MyException does not declare a static final serialVersionUID field of type long\n" + 
17666
		"----------\n" + 
17653
		"----------\n" + 
17667
		"2. ERROR in X.java (at line 11)\n" + 
17654
		"2. ERROR in X.java (at line 12)\n" + 
17668
		"	f.toString();\n" + 
17655
		"	f.toString();\n" + 
17669
		"	^\n" + 
17656
		"	^\n" + 
17670
		"Potential null pointer access: The field f may be null at this location\n" + 
17657
		"Potential null pointer access: The field f may be null at this location\n" + 

Return to bug 247564