Lines 53-59
Link Here
|
53 |
// Static initializer to specify tests subset using TESTS_* static variables |
53 |
// Static initializer to specify tests subset using TESTS_* static variables |
54 |
// All specified tests which do not belong to the class are skipped... |
54 |
// All specified tests which do not belong to the class are skipped... |
55 |
static { |
55 |
static { |
56 |
// TESTS_NAMES = new String[] { "test_default_nullness_014" }; |
56 |
// TESTS_NAMES = new String[] { "test_redundant_annotation_" }; |
57 |
// TESTS_NUMBERS = new int[] { 561 }; |
57 |
// TESTS_NUMBERS = new int[] { 561 }; |
58 |
// TESTS_RANGE = new int[] { 1, 2049 }; |
58 |
// TESTS_RANGE = new int[] { 1, 2049 }; |
59 |
} |
59 |
} |
Lines 2537-2542
Link Here
|
2537 |
" new C(null);\n" + |
2537 |
" new C(null);\n" + |
2538 |
" ^^^^\n" + |
2538 |
" ^^^^\n" + |
2539 |
"Type mismatch: required \'@NonNull Object\' but the provided value is null\n" + |
2539 |
"Type mismatch: required \'@NonNull Object\' but the provided value is null\n" + |
|
|
2540 |
"----------\n" + |
2541 |
"----------\n" + |
2542 |
"1. WARNING in p1\\C.java (at line 2)\n" + |
2543 |
" @org.eclipse.jdt.annotation.NonNullByDefault\n" + |
2544 |
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
2545 |
"Nullness default is redundant with a default specified for the enclosing package p1\n" + |
2540 |
"----------\n"); |
2546 |
"----------\n"); |
2541 |
} |
2547 |
} |
2542 |
// Bug 365836 - [compiler][null] Incomplete propagation of null defaults. |
2548 |
// Bug 365836 - [compiler][null] Incomplete propagation of null defaults. |
Lines 2654-2659
Link Here
|
2654 |
"Type mismatch: required \'@NonNull Object\' but the provided value is null\n" + |
2660 |
"Type mismatch: required \'@NonNull Object\' but the provided value is null\n" + |
2655 |
"----------\n"); |
2661 |
"----------\n"); |
2656 |
} |
2662 |
} |
|
|
2663 |
|
2664 |
// redundant default annotations - class vs. inner class |
2665 |
public void test_redundant_annotation_01() { |
2666 |
Map customOptions = getCompilerOptions(); |
2667 |
// customOptions.put(CompilerOptions.OPTION_ReportPotentialNullSpecViolation, JavaCore.ERROR); |
2668 |
runConformTestWithLibs( |
2669 |
new String[] { |
2670 |
"p2/Y.java", |
2671 |
"package p2;\n" + |
2672 |
"import org.eclipse.jdt.annotation.*;\n" + |
2673 |
"@NonNullByDefault\n" + |
2674 |
"public class Y {\n" + |
2675 |
" @NonNullByDefault class Inner {\n" + |
2676 |
" @NonNullByDefault class DeepInner {}\n" + |
2677 |
" }\n" + |
2678 |
" class Inner2 {\n" + |
2679 |
" @NonNullByDefault class DeepInner2 {\n" + |
2680 |
" }\n" + |
2681 |
" void foo() {\n" + |
2682 |
" @SuppressWarnings(\"unused\") @NonNullByDefault class Local {}\n" + |
2683 |
" }\n" + |
2684 |
" }\n" + |
2685 |
"}\n" + |
2686 |
"@NonNullByDefault class V {}\n", |
2687 |
"p3/package-info.java", |
2688 |
"@org.eclipse.jdt.annotation.NonNullByDefault package p3;\n", |
2689 |
"p3/Z.java", |
2690 |
"package p3;\n" + |
2691 |
"import org.eclipse.jdt.annotation.*;\n" + |
2692 |
"@NonNullByDefault\n" + |
2693 |
"public class Z {\n" + |
2694 |
"}\n" + |
2695 |
"class X {\n" + |
2696 |
" @NonNullByDefault class Inner {}\n" + |
2697 |
" class Inner2 {\n" + |
2698 |
" @NonNullByDefault class DeepInner {}\n" + |
2699 |
" }\n" + |
2700 |
"}\n" |
2701 |
}, |
2702 |
customOptions, |
2703 |
"----------\n" + |
2704 |
"1. WARNING in p2\\Y.java (at line 5)\n" + |
2705 |
" @NonNullByDefault class Inner {\n" + |
2706 |
" ^^^^^^^^^^^^^^^^^\n" + |
2707 |
"Nullness default is redundant with a default specified for the enclosing type Y\n" + |
2708 |
"----------\n" + |
2709 |
"2. WARNING in p2\\Y.java (at line 6)\n" + |
2710 |
" @NonNullByDefault class DeepInner {}\n" + |
2711 |
" ^^^^^^^^^^^^^^^^^\n" + |
2712 |
"Nullness default is redundant with a default specified for the enclosing type Y.Inner\n" + |
2713 |
"----------\n" + |
2714 |
"3. WARNING in p2\\Y.java (at line 9)\n" + |
2715 |
" @NonNullByDefault class DeepInner2 {\n" + |
2716 |
" ^^^^^^^^^^^^^^^^^\n" + |
2717 |
"Nullness default is redundant with a default specified for the enclosing type Y\n" + |
2718 |
"----------\n" + |
2719 |
"4. WARNING in p2\\Y.java (at line 12)\n" + |
2720 |
" @SuppressWarnings(\"unused\") @NonNullByDefault class Local {}\n" + |
2721 |
" ^^^^^^^^^^^^^^^^^\n" + |
2722 |
"Nullness default is redundant with a default specified for the enclosing type Y\n" + |
2723 |
"----------\n" + |
2724 |
"----------\n" + |
2725 |
"1. WARNING in p3\\Z.java (at line 3)\n" + |
2726 |
" @NonNullByDefault\n" + |
2727 |
" ^^^^^^^^^^^^^^^^^\n" + |
2728 |
"Nullness default is redundant with a default specified for the enclosing package p3\n" + |
2729 |
"----------\n" + |
2730 |
"2. WARNING in p3\\Z.java (at line 7)\n" + |
2731 |
" @NonNullByDefault class Inner {}\n" + |
2732 |
" ^^^^^^^^^^^^^^^^^\n" + |
2733 |
"Nullness default is redundant with a default specified for the enclosing package p3\n" + |
2734 |
"----------\n" + |
2735 |
"3. WARNING in p3\\Z.java (at line 9)\n" + |
2736 |
" @NonNullByDefault class DeepInner {}\n" + |
2737 |
" ^^^^^^^^^^^^^^^^^\n" + |
2738 |
"Nullness default is redundant with a default specified for the enclosing package p3\n" + |
2739 |
"----------\n"); |
2740 |
} |
2741 |
// redundant default annotations - class vs. method |
2742 |
public void test_redundant_annotation_02() { |
2743 |
Map customOptions = getCompilerOptions(); |
2744 |
runConformTestWithLibs( |
2745 |
new String[] { |
2746 |
"p2/Y.java", |
2747 |
"package p2;\n" + |
2748 |
"import org.eclipse.jdt.annotation.*;\n" + |
2749 |
"@NonNullByDefault\n" + |
2750 |
"public class Y {\n" + |
2751 |
" @NonNullByDefault void foo() {}\n" + |
2752 |
"}\n" + |
2753 |
"class Z {\n" + |
2754 |
" @NonNullByDefault void bar() {\n" + |
2755 |
" @NonNullByDefault @SuppressWarnings(\"unused\") class Zork {\n" + |
2756 |
" @NonNullByDefault void fubar() {}\n" + |
2757 |
" }\n" + |
2758 |
" }\n" + |
2759 |
" @NonNullByDefault void zink() {\n" + |
2760 |
" @SuppressWarnings(\"unused\") class Bork {\n" + |
2761 |
" @NonNullByDefault void jubar() {}\n" + |
2762 |
" }\n" + |
2763 |
" }\n" + |
2764 |
"}\n" |
2765 |
}, |
2766 |
customOptions, |
2767 |
"----------\n" + |
2768 |
"1. WARNING in p2\\Y.java (at line 5)\n" + |
2769 |
" @NonNullByDefault void foo() {}\n" + |
2770 |
" ^^^^^^^^^^^^^^^^^\n" + |
2771 |
"Nullness default is redundant with a default specified for the enclosing type Y\n" + |
2772 |
"----------\n" + |
2773 |
"2. WARNING in p2\\Y.java (at line 9)\n" + |
2774 |
" @NonNullByDefault @SuppressWarnings(\"unused\") class Zork {\n" + |
2775 |
" ^^^^^^^^^^^^^^^^^\n" + |
2776 |
"Nullness default is redundant with a default specified for the enclosing method bar()\n" + |
2777 |
"----------\n" + |
2778 |
"3. WARNING in p2\\Y.java (at line 10)\n" + |
2779 |
" @NonNullByDefault void fubar() {}\n" + |
2780 |
" ^^^^^^^^^^^^^^^^^\n" + |
2781 |
"Nullness default is redundant with a default specified for the enclosing type Zork\n" + |
2782 |
"----------\n" + |
2783 |
"4. WARNING in p2\\Y.java (at line 15)\n" + |
2784 |
" @NonNullByDefault void jubar() {}\n" + |
2785 |
" ^^^^^^^^^^^^^^^^^\n" + |
2786 |
"Nullness default is redundant with a default specified for the enclosing method zink()\n" + |
2787 |
"----------\n"); |
2788 |
} |
2789 |
//redundant default annotations - class vs. method - generics |
2790 |
public void test_redundant_annotation_02g() { |
2791 |
Map customOptions = getCompilerOptions(); |
2792 |
runConformTestWithLibs( |
2793 |
new String[] { |
2794 |
"p2/Y.java", |
2795 |
"package p2;\n" + |
2796 |
"import org.eclipse.jdt.annotation.*;\n" + |
2797 |
"@NonNullByDefault\n" + |
2798 |
"public class Y<TY> {\n" + |
2799 |
" @NonNullByDefault <TF> void foo(TF arg) {}\n" + |
2800 |
"}\n" + |
2801 |
"class Z {\n" + |
2802 |
" @NonNullByDefault <TB> void bar() {\n" + |
2803 |
" @NonNullByDefault @SuppressWarnings(\"unused\") class Zork {\n" + |
2804 |
" @NonNullByDefault void fubar(TB arg) {}\n" + |
2805 |
" }\n" + |
2806 |
" }\n" + |
2807 |
"}\n" |
2808 |
}, |
2809 |
customOptions, |
2810 |
"----------\n" + |
2811 |
"1. WARNING in p2\\Y.java (at line 5)\n" + |
2812 |
" @NonNullByDefault <TF> void foo(TF arg) {}\n" + |
2813 |
" ^^^^^^^^^^^^^^^^^\n" + |
2814 |
"Nullness default is redundant with a default specified for the enclosing type Y<TY>\n" + |
2815 |
"----------\n" + |
2816 |
"2. WARNING in p2\\Y.java (at line 9)\n" + |
2817 |
" @NonNullByDefault @SuppressWarnings(\"unused\") class Zork {\n" + |
2818 |
" ^^^^^^^^^^^^^^^^^\n" + |
2819 |
"Nullness default is redundant with a default specified for the enclosing method bar()\n" + |
2820 |
"----------\n" + |
2821 |
"3. WARNING in p2\\Y.java (at line 10)\n" + |
2822 |
" @NonNullByDefault void fubar(TB arg) {}\n" + |
2823 |
" ^^^^^^^^^^^^^^^^^\n" + |
2824 |
"Nullness default is redundant with a default specified for the enclosing type Zork\n" + |
2825 |
"----------\n"); |
2826 |
} |
2827 |
|
2828 |
// redundant default annotations - package / class / method vs global default |
2829 |
public void test_redundant_annotation_03() { |
2830 |
Map customOptions = getCompilerOptions(); |
2831 |
customOptions.put(JavaCore.COMPILER_NONNULL_IS_DEFAULT, JavaCore.ENABLED); |
2832 |
runConformTestWithLibs( |
2833 |
new String[] { |
2834 |
"p2/Y.java", |
2835 |
"package p2;\n" + |
2836 |
"import org.eclipse.jdt.annotation.*;\n" + |
2837 |
"@NonNullByDefault\n" + |
2838 |
"public class Y {\n" + |
2839 |
" @NonNullByDefault void foo() {}\n" + |
2840 |
"}\n" + |
2841 |
"class Z {\n" + |
2842 |
" @NonNullByDefault void bar() {}\n" + |
2843 |
"}\n", |
2844 |
"p3/package-info.java", |
2845 |
"@org.eclipse.jdt.annotation.NonNullByDefault package p3;\n" |
2846 |
}, |
2847 |
customOptions, |
2848 |
"----------\n" + |
2849 |
"1. WARNING in p2\\Y.java (at line 3)\n" + |
2850 |
" @NonNullByDefault\n" + |
2851 |
" ^^^^^^^^^^^^^^^^^\n" + |
2852 |
"Nullness default is redundant with the global default\n" + |
2853 |
"----------\n" + |
2854 |
"2. WARNING in p2\\Y.java (at line 5)\n" + |
2855 |
" @NonNullByDefault void foo() {}\n" + |
2856 |
" ^^^^^^^^^^^^^^^^^\n" + |
2857 |
"Nullness default is redundant with a default specified for the enclosing type Y\n" + |
2858 |
"----------\n" + |
2859 |
"3. WARNING in p2\\Y.java (at line 8)\n" + |
2860 |
" @NonNullByDefault void bar() {}\n" + |
2861 |
" ^^^^^^^^^^^^^^^^^\n" + |
2862 |
"Nullness default is redundant with the global default\n" + |
2863 |
"----------\n" + |
2864 |
"----------\n" + |
2865 |
"1. WARNING in p3\\package-info.java (at line 1)\n" + |
2866 |
" @org.eclipse.jdt.annotation.NonNullByDefault package p3;\n" + |
2867 |
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
2868 |
"Nullness default is redundant with the global default\n" + |
2869 |
"----------\n"); |
2870 |
} |
2871 |
|
2872 |
// contradictory null annotations |
2873 |
public void test_contradictory_annotations_01() { |
2874 |
Map customOptions = getCompilerOptions(); |
2875 |
runNegativeTestWithLibs( |
2876 |
new String[] { |
2877 |
"p2/Y.java", |
2878 |
"package p2;\n" + |
2879 |
"import org.eclipse.jdt.annotation.*;\n" + |
2880 |
"public class Y {\n" + |
2881 |
" void foo(@NonNull @Nullable Object o) {}\n" + |
2882 |
" @Nullable @NonNull Object bar() {\n" + |
2883 |
" @NonNull @Nullable Object o = null;\n" + |
2884 |
" return o;\n" + |
2885 |
" }\n" + |
2886 |
"}\n" + |
2887 |
"class Z {\n" + |
2888 |
" @NonNullByDefault void bar() {}\n" + |
2889 |
"}\n" |
2890 |
}, |
2891 |
customOptions, |
2892 |
"----------\n" + |
2893 |
"1. ERROR in p2\\Y.java (at line 4)\n" + |
2894 |
" void foo(@NonNull @Nullable Object o) {}\n" + |
2895 |
" ^^^^^^^^^\n" + |
2896 |
"Contradictory null specification; only one of @NonNull and @Nullable can be specified at any location\n" + |
2897 |
"----------\n" + |
2898 |
"2. ERROR in p2\\Y.java (at line 5)\n" + |
2899 |
" @Nullable @NonNull Object bar() {\n" + |
2900 |
" ^^^^^^^^\n" + |
2901 |
"Contradictory null specification; only one of @NonNull and @Nullable can be specified at any location\n" + |
2902 |
"----------\n" + |
2903 |
"3. ERROR in p2\\Y.java (at line 6)\n" + |
2904 |
" @NonNull @Nullable Object o = null;\n" + |
2905 |
" ^^^^^^^^^\n" + |
2906 |
"Contradictory null specification; only one of @NonNull and @Nullable can be specified at any location\n" + |
2907 |
"----------\n"); |
2908 |
} |
2909 |
|
2657 |
// a nonnull variable is dereferenced in a loop |
2910 |
// a nonnull variable is dereferenced in a loop |
2658 |
public void test_nonnull_var_in_constrol_structure_1() { |
2911 |
public void test_nonnull_var_in_constrol_structure_1() { |
2659 |
Map customOptions = getCompilerOptions(); |
2912 |
Map customOptions = getCompilerOptions(); |
Lines 2915-2921
Link Here
|
2915 |
customOptions, |
3168 |
customOptions, |
2916 |
""); |
3169 |
""); |
2917 |
} |
3170 |
} |
2918 |
// a nonnull variable is dereferenced method of a nested type |
3171 |
// a nonnull variable is dereferenced in a method of a nested type |
2919 |
public void test_nesting_1() { |
3172 |
public void test_nesting_1() { |
2920 |
Map customOptions = getCompilerOptions(); |
3173 |
Map customOptions = getCompilerOptions(); |
2921 |
// customOptions.put(CompilerOptions.OPTION_ReportPotentialNullSpecViolation, JavaCore.ERROR); |
3174 |
// customOptions.put(CompilerOptions.OPTION_ReportPotentialNullSpecViolation, JavaCore.ERROR); |
Lines 2924-2930
Link Here
|
2924 |
new String[] { |
3177 |
new String[] { |
2925 |
"X.java", |
3178 |
"X.java", |
2926 |
"import org.eclipse.jdt.annotation.*;\n" + |
3179 |
"import org.eclipse.jdt.annotation.*;\n" + |
2927 |
"@NonNullByDefault\n" + |
|
|
2928 |
"public class X {\n" + |
3180 |
"public class X {\n" + |
2929 |
" void print4(final String s1) {\n" + |
3181 |
" void print4(final String s1) {\n" + |
2930 |
" for (int i=0; i<3; i++)\n" + |
3182 |
" for (int i=0; i<3; i++)\n" + |
Lines 2959-2970
Link Here
|
2959 |
}, |
3211 |
}, |
2960 |
customOptions, |
3212 |
customOptions, |
2961 |
"----------\n" + |
3213 |
"----------\n" + |
2962 |
"1. ERROR in X.java (at line 16)\n" + |
3214 |
"1. ERROR in X.java (at line 15)\n" + |
2963 |
" print(s2);\n" + |
3215 |
" print(s2);\n" + |
2964 |
" ^^\n" + |
3216 |
" ^^\n" + |
2965 |
"Type mismatch: required \'@NonNull String\' but the provided value can be null\n" + |
3217 |
"Type mismatch: required \'@NonNull String\' but the provided value can be null\n" + |
2966 |
"----------\n" + |
3218 |
"----------\n" + |
2967 |
"2. ERROR in X.java (at line 25)\n" + |
3219 |
"2. ERROR in X.java (at line 24)\n" + |
2968 |
" @NonNull String s3R = s3;\n" + |
3220 |
" @NonNull String s3R = s3;\n" + |
2969 |
" ^^\n" + |
3221 |
" ^^\n" + |
2970 |
"Type mismatch: required \'@NonNull String\' but the provided value can be null\n" + |
3222 |
"Type mismatch: required \'@NonNull String\' but the provided value can be null\n" + |