|
Lines 49-55
public NullReferenceTest(String name) {
Link Here
|
| 49 |
// Only the highest compliance level is run; add the VM argument |
49 |
// Only the highest compliance level is run; add the VM argument |
| 50 |
// -Dcompliance=1.4 (for example) to lower it if needed |
50 |
// -Dcompliance=1.4 (for example) to lower it if needed |
| 51 |
static { |
51 |
static { |
| 52 |
// TESTS_NAMES = new String[] { "testBug247564k_3" }; |
52 |
// TESTS_NAMES = new String[] { "testBug247564b_1" }; |
| 53 |
// TESTS_NUMBERS = new int[] { 561 }; |
53 |
// TESTS_NUMBERS = new int[] { 561 }; |
| 54 |
// TESTS_RANGE = new int[] { 1, 2049 }; |
54 |
// TESTS_RANGE = new int[] { 1, 2049 }; |
| 55 |
} |
55 |
} |
|
Lines 16562-16567
public void testBug247564b_9() {
Link Here
|
| 16562 |
JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); |
16562 |
JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); |
| 16563 |
} |
16563 |
} |
| 16564 |
|
16564 |
|
|
|
16565 |
// null analysis -- case for static final field initialized inside static block with different values |
| 16566 |
// check if the resetting works properly i.e. null status for constant fields should not be |
| 16567 |
// reset on method calls. |
| 16568 |
// Boundary condition: field <boundary> constant local |
| 16569 |
public void testBug247564b_10() { |
| 16570 |
Map compilerOptions = getCompilerOptions(); |
| 16571 |
compilerOptions.put(CompilerOptions.OPTION_ReportNonStaticAccessToStatic, CompilerOptions.IGNORE); |
| 16572 |
this.runNegativeTest( |
| 16573 |
false, |
| 16574 |
new String[] { |
| 16575 |
"X.java", |
| 16576 |
"public class X {\n" + |
| 16577 |
"Object field0, \n" + |
| 16578 |
"field1, field2, field3, field4, \n" + |
| 16579 |
"field5, field6, field7, field8, \n" + |
| 16580 |
"field9, field10, field11, field12, \n" + |
| 16581 |
"field13, field14, field15, field16, \n" + |
| 16582 |
"field17, field18, field19, field20, \n" + |
| 16583 |
"field21, field22, field23, field24, \n" + |
| 16584 |
"field25, field26, field27, field28, \n" + |
| 16585 |
"field29, field30, field31, field32, \n" + |
| 16586 |
"field33, field34, field35, field36, \n" + |
| 16587 |
"field37, field38, field39, field40, \n" + |
| 16588 |
"field41, field42, field43, field44, \n" + |
| 16589 |
"field45, field46, field47, field48, \n" + |
| 16590 |
"field49, field50, field51, field52, \n" + |
| 16591 |
"field53, field54, field55, field56, \n" + |
| 16592 |
"field57, field58, field59, field60, \n" + |
| 16593 |
"field61, field62, field63;\n" + |
| 16594 |
"static final Object static64 = null;\n" + |
| 16595 |
" void foo1(Object local65) {\n" + |
| 16596 |
" if (field63 == null) {\n" + |
| 16597 |
" field63.toString(); // report NPE\n" + |
| 16598 |
" }\n" + |
| 16599 |
" if (static64 == null) { // redundant\n" + |
| 16600 |
" static64.toString(); // report NPE\n" + |
| 16601 |
" }\n" + |
| 16602 |
" if (local65 == null) {\n" + |
| 16603 |
" local65.toString(); // report NPE\n" + |
| 16604 |
" }\n" + |
| 16605 |
" if (field63 == null) {\n" + |
| 16606 |
" this.toString();\n" + |
| 16607 |
" field63.toString();\n" + // wiped by method call |
| 16608 |
" }\n" + |
| 16609 |
" if (static64 == null) { // always false\n" + // because we're past static64.toString() |
| 16610 |
" this.toString(); // dead\n" + |
| 16611 |
" static64.toString();\n" + |
| 16612 |
" }\n" + |
| 16613 |
" if (local65 == null) { // alwayws false\n" + // because we're past local65.toString() |
| 16614 |
" this.toString(); // dead\n" + |
| 16615 |
" local65.toString();\n" + |
| 16616 |
" }\n" + |
| 16617 |
" }\n" + |
| 16618 |
"}\n"}, |
| 16619 |
null, |
| 16620 |
compilerOptions, |
| 16621 |
"----------\n" + |
| 16622 |
"1. ERROR in X.java (at line 22)\n" + |
| 16623 |
" field63.toString(); // report NPE\n" + |
| 16624 |
" ^^^^^^^\n" + |
| 16625 |
"Potential null pointer access: The field field63 may be null at this location\n" + |
| 16626 |
"----------\n" + |
| 16627 |
"2. ERROR in X.java (at line 24)\n" + |
| 16628 |
" if (static64 == null) { // redundant\n" + |
| 16629 |
" ^^^^^^^^\n" + |
| 16630 |
"Redundant null check: The field static64 can only be null at this location\n" + |
| 16631 |
"----------\n" + |
| 16632 |
"3. ERROR in X.java (at line 25)\n" + |
| 16633 |
" static64.toString(); // report NPE\n" + |
| 16634 |
" ^^^^^^^^\n" + |
| 16635 |
"Null pointer access: The field static64 can only be null at this location\n" + |
| 16636 |
"----------\n" + |
| 16637 |
"4. ERROR in X.java (at line 28)\n" + |
| 16638 |
" local65.toString(); // report NPE\n" + |
| 16639 |
" ^^^^^^^\n" + |
| 16640 |
"Null pointer access: The variable local65 can only be null at this location\n" + |
| 16641 |
"----------\n" + |
| 16642 |
"5. ERROR in X.java (at line 34)\n" + |
| 16643 |
" if (static64 == null) { // always false\n" + |
| 16644 |
" ^^^^^^^^\n" + |
| 16645 |
"Null comparison always yields false: The field static64 cannot be null at this location\n" + |
| 16646 |
"----------\n" + |
| 16647 |
"6. WARNING in X.java (at line 34)\n" + |
| 16648 |
" if (static64 == null) { // always false\n" + |
| 16649 |
" this.toString(); // dead\n" + |
| 16650 |
" static64.toString();\n" + |
| 16651 |
" }\n" + |
| 16652 |
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| 16653 |
"Dead code\n" + |
| 16654 |
"----------\n" + |
| 16655 |
"7. ERROR in X.java (at line 38)\n" + |
| 16656 |
" if (local65 == null) { // alwayws false\n" + |
| 16657 |
" ^^^^^^^\n" + |
| 16658 |
"Null comparison always yields false: The variable local65 cannot be null at this location\n" + |
| 16659 |
"----------\n" + |
| 16660 |
"8. WARNING in X.java (at line 38)\n" + |
| 16661 |
" if (local65 == null) { // alwayws false\n" + |
| 16662 |
" this.toString(); // dead\n" + |
| 16663 |
" local65.toString();\n" + |
| 16664 |
" }\n" + |
| 16665 |
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| 16666 |
"Dead code\n" + |
| 16667 |
"----------\n", |
| 16668 |
JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); |
| 16669 |
} |
| 16670 |
|
| 16671 |
// null analysis -- case for static final field initialized inside static block with different values |
| 16672 |
// check if the resetting works properly i.e. null status for constant fields should not be |
| 16673 |
// reset on method calls. |
| 16674 |
// Boundary condition: constant field <boundary> local |
| 16675 |
public void testBug247564b_11() { |
| 16676 |
Map compilerOptions = getCompilerOptions(); |
| 16677 |
compilerOptions.put(CompilerOptions.OPTION_ReportNonStaticAccessToStatic, CompilerOptions.IGNORE); |
| 16678 |
this.runNegativeTest( |
| 16679 |
false, |
| 16680 |
new String[] { |
| 16681 |
"X.java", |
| 16682 |
"public class X {\n" + |
| 16683 |
"Object field0, \n" + |
| 16684 |
"field1, field2, field3, field4, \n" + |
| 16685 |
"field5, field6, field7, field8, \n" + |
| 16686 |
"field9, field10, field11, field12, \n" + |
| 16687 |
"field13, field14, field15, field16, \n" + |
| 16688 |
"field17, field18, field19, field20, \n" + |
| 16689 |
"field21, field22, field23, field24, \n" + |
| 16690 |
"field25, field26, field27, field28, \n" + |
| 16691 |
"field29, field30, field31, field32, \n" + |
| 16692 |
"field33, field34, field35, field36, \n" + |
| 16693 |
"field37, field38, field39, field40, \n" + |
| 16694 |
"field41, field42, field43, field44, \n" + |
| 16695 |
"field45, field46, field47, field48, \n" + |
| 16696 |
"field49, field50, field51, field52, \n" + |
| 16697 |
"field53, field54, field55, field56, \n" + |
| 16698 |
"field57, field58, field59, field60, \n" + |
| 16699 |
"field61;\n" + |
| 16700 |
"static final Object static62 = null;\n" + |
| 16701 |
"Object field63;" + |
| 16702 |
" void foo1(Object local64) {\n" + |
| 16703 |
" if (static62 == null) { // redundant\n" + |
| 16704 |
" static62.toString(); // report NPE\n" + |
| 16705 |
" }\n" + |
| 16706 |
" if (field63 == null) {\n" + |
| 16707 |
" field63.toString(); // report NPE\n" + |
| 16708 |
" }\n" + |
| 16709 |
" if (local64 == null) {\n" + |
| 16710 |
" local64.toString(); // report NPE\n" + |
| 16711 |
" }\n" + |
| 16712 |
" if (static62 == null) { // always false\n" + // because we're past static64.toString() |
| 16713 |
" this.toString(); // dead\n" + |
| 16714 |
" static62.toString();\n" + |
| 16715 |
" }\n" + |
| 16716 |
" if (field63 == null) {\n" + |
| 16717 |
" this.toString(); //\n" + |
| 16718 |
" field63.toString();\n" + // wiped by method call |
| 16719 |
" }\n" + |
| 16720 |
" if (local64 == null) { // alwayws false\n" + // because we're past local64.toString() |
| 16721 |
" this.toString(); // dead\n" + |
| 16722 |
" local64.toString();\n" + |
| 16723 |
" }\n" + |
| 16724 |
" }\n" + |
| 16725 |
"}\n"}, |
| 16726 |
null, |
| 16727 |
compilerOptions, |
| 16728 |
"----------\n" + |
| 16729 |
"1. ERROR in X.java (at line 21)\n" + |
| 16730 |
" if (static62 == null) { // redundant\n" + |
| 16731 |
" ^^^^^^^^\n" + |
| 16732 |
"Redundant null check: The field static62 can only be null at this location\n" + |
| 16733 |
"----------\n" + |
| 16734 |
"2. ERROR in X.java (at line 22)\n" + |
| 16735 |
" static62.toString(); // report NPE\n" + |
| 16736 |
" ^^^^^^^^\n" + |
| 16737 |
"Null pointer access: The field static62 can only be null at this location\n" + |
| 16738 |
"----------\n" + |
| 16739 |
"3. ERROR in X.java (at line 25)\n" + |
| 16740 |
" field63.toString(); // report NPE\n" + |
| 16741 |
" ^^^^^^^\n" + |
| 16742 |
"Potential null pointer access: The field field63 may be null at this location\n" + |
| 16743 |
"----------\n" + |
| 16744 |
"4. ERROR in X.java (at line 28)\n" + |
| 16745 |
" local64.toString(); // report NPE\n" + |
| 16746 |
" ^^^^^^^\n" + |
| 16747 |
"Null pointer access: The variable local64 can only be null at this location\n" + |
| 16748 |
"----------\n" + |
| 16749 |
"5. ERROR in X.java (at line 30)\n" + |
| 16750 |
" if (static62 == null) { // always false\n" + |
| 16751 |
" ^^^^^^^^\n" + |
| 16752 |
"Null comparison always yields false: The field static62 cannot be null at this location\n" + |
| 16753 |
"----------\n" + |
| 16754 |
"6. WARNING in X.java (at line 30)\n" + |
| 16755 |
" if (static62 == null) { // always false\n" + |
| 16756 |
" this.toString(); // dead\n" + |
| 16757 |
" static62.toString();\n" + |
| 16758 |
" }\n" + |
| 16759 |
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| 16760 |
"Dead code\n" + |
| 16761 |
"----------\n" + |
| 16762 |
"7. ERROR in X.java (at line 38)\n" + |
| 16763 |
" if (local64 == null) { // alwayws false\n" + |
| 16764 |
" ^^^^^^^\n" + |
| 16765 |
"Null comparison always yields false: The variable local64 cannot be null at this location\n" + |
| 16766 |
"----------\n" + |
| 16767 |
"8. WARNING in X.java (at line 38)\n" + |
| 16768 |
" if (local64 == null) { // alwayws false\n" + |
| 16769 |
" this.toString(); // dead\n" + |
| 16770 |
" local64.toString();\n" + |
| 16771 |
" }\n" + |
| 16772 |
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| 16773 |
"Dead code\n" + |
| 16774 |
"----------\n", |
| 16775 |
JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); |
| 16776 |
} |
| 16777 |
|
| 16565 |
// null analysis -- fields in synchronized methods |
16778 |
// null analysis -- fields in synchronized methods |
| 16566 |
// check that null analysis for fields in synchronized methods |
16779 |
// check that null analysis for fields in synchronized methods |
| 16567 |
// behave as it does in ordinary methods. |
16780 |
// behave as it does in ordinary methods. |