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

Collapse All | Expand All

(-)a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullAnnotationTest.java (-1 / +278 lines)
Lines 52-58 Link Here
52
// Static initializer to specify tests subset using TESTS_* static variables
52
// Static initializer to specify tests subset using TESTS_* static variables
53
// All specified tests which do not belong to the class are skipped...
53
// All specified tests which do not belong to the class are skipped...
54
static {
54
static {
55
//		TESTS_NAMES = new String[] { "test_assignment_expression_1" };
55
//		TESTS_NAMES = new String[] { "testBug366003c" };
56
//		TESTS_NUMBERS = new int[] { 561 };
56
//		TESTS_NUMBERS = new int[] { 561 };
57
//		TESTS_RANGE = new int[] { 1, 2049 };
57
//		TESTS_RANGE = new int[] { 1, 2049 };
58
}
58
}
Lines 2763-2766 Link Here
2763
		"Dead code\n" + 
2763
		"Dead code\n" + 
2764
		"----------\n");
2764
		"----------\n");
2765
}
2765
}
2766
// Bug 366003 - CCE in ASTNode.resolveAnnotations(ASTNode.java:639) 
2767
// many syntax errors fixed, does not trigger CCE 
2768
public void testBug366003() {
2769
	runNegativeTestWithLibs(
2770
		new String[] {
2771
			"snippet/Bug366003.java",
2772
			"package snippet;\n" +
2773
			"public class Bug366003 {\n" + 
2774
			"    public void foo(@NonNull Object o1) {\n" + 
2775
			"        System.out.println(o1.toString()); // OK: o1 cannot be null\n" +
2776
			"    }         \n" + 
2777
			"    @NonNull Object bar(@Nullable String s1) {\n" +
2778
			"        foo(null); // cannot pass null argument\n" +
2779
			"        @NonNull String s= null; // cannot assign null value\n" +
2780
			"        @NonNull String t= s1; // cannot assign potentially null value\n" + 
2781
			"        return null; // cannot return null value\n" +
2782
			"    }\n" + 
2783
			"}\n" + 
2784
			"org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" + 
2785
			""
2786
		},
2787
		"----------\n" + 
2788
		"1. ERROR in snippet\\Bug366003.java (at line 3)\n" + 
2789
		"	public void foo(@NonNull Object o1) {\n" + 
2790
		"	                 ^^^^^^^\n" + 
2791
		"NonNull cannot be resolved to a type\n" + 
2792
		"----------\n" + 
2793
		"2. ERROR in snippet\\Bug366003.java (at line 6)\n" + 
2794
		"	@NonNull Object bar(@Nullable String s1) {\n" + 
2795
		"	 ^^^^^^^\n" + 
2796
		"NonNull cannot be resolved to a type\n" + 
2797
		"----------\n" + 
2798
		"3. ERROR in snippet\\Bug366003.java (at line 6)\n" + 
2799
		"	@NonNull Object bar(@Nullable String s1) {\n" + 
2800
		"	                     ^^^^^^^^\n" + 
2801
		"Nullable cannot be resolved to a type\n" + 
2802
		"----------\n" + 
2803
		"4. ERROR in snippet\\Bug366003.java (at line 8)\n" + 
2804
		"	@NonNull String s= null; // cannot assign null value\n" + 
2805
		"	 ^^^^^^^\n" + 
2806
		"NonNull cannot be resolved to a type\n" + 
2807
		"----------\n" + 
2808
		"5. ERROR in snippet\\Bug366003.java (at line 9)\n" + 
2809
		"	@NonNull String t= s1; // cannot assign potentially null value\n" + 
2810
		"	 ^^^^^^^\n" + 
2811
		"NonNull cannot be resolved to a type\n" + 
2812
		"----------\n" + 
2813
		"6. ERROR in snippet\\Bug366003.java (at line 12)\n" + 
2814
		"	}\n" + 
2815
		"	^\n" + 
2816
		"Syntax error on token \"}\", delete this token\n" + 
2817
		"----------\n" + 
2818
		"7. ERROR in snippet\\Bug366003.java (at line 13)\n" + 
2819
		"	org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" + 
2820
		"	^^^^^^^^^^^^^^^^\n" + 
2821
		"Syntax error on tokens, delete these tokens\n" + 
2822
		"----------\n" + 
2823
		"8. ERROR in snippet\\Bug366003.java (at line 13)\n" + 
2824
		"	org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" + 
2825
		"	            ^^^^\n" + 
2826
		"Syntax error, insert \"enum Identifier\" to complete EnumHeaderName\n" + 
2827
		"----------\n" + 
2828
		"9. ERROR in snippet\\Bug366003.java (at line 13)\n" + 
2829
		"	org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" + 
2830
		"	            ^^^^\n" + 
2831
		"Syntax error, insert \"EnumBody\" to complete EnumDeclaration\n" + 
2832
		"----------\n" + 
2833
		"10. ERROR in snippet\\Bug366003.java (at line 13)\n" + 
2834
		"	org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" + 
2835
		"	            ^^^^\n" + 
2836
		"Syntax error, insert \"}\" to complete ClassBody\n" + 
2837
		"----------\n" + 
2838
		"11. ERROR in snippet\\Bug366003.java (at line 13)\n" + 
2839
		"	org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" + 
2840
		"	                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
2841
		"Return type for the method is missing\n" + 
2842
		"----------\n" + 
2843
		"12. ERROR in snippet\\Bug366003.java (at line 13)\n" + 
2844
		"	org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" + 
2845
		"	                       ^^^^^^^\n" + 
2846
		"NonNull cannot be resolved to a type\n" + 
2847
		"----------\n" + 
2848
		"13. ERROR in snippet\\Bug366003.java (at line 13)\n" + 
2849
		"	org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" + 
2850
		"	                                                      ^^^^^^^^\n" + 
2851
		"Nullable cannot be resolved to a type\n" + 
2852
		"----------\n" + 
2853
		"14. ERROR in snippet\\Bug366003.java (at line 13)\n" + 
2854
		"	org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" + 
2855
		"	                                                                           ^\n" + 
2856
		"Syntax error, insert \";\" to complete ConstructorDeclaration\n" + 
2857
		"----------\n");
2858
}
2859
// Bug 366003 - CCE in ASTNode.resolveAnnotations(ASTNode.java:639) 
2860
// code is garbage, triggers CCE 
2861
public void testBug366003b() {
2862
	runNegativeTestWithLibs(
2863
		new String[] {
2864
			"snippet/Bug366003.java",
2865
			"package snippet;\n" +
2866
			"public class Bug366003 {\n" +
2867
			"    public void foo(@Blah Object o1) {        \n" +
2868
			"System.out.println(o1.toString()); // OK: o1 cannot be null     }         \n" +
2869
			"@Blah Object bar(@BlahBlah String s1) {         foo(null); // cannot pass\n" +
2870
			"null argument         @Blah String s= null; // cannot assign null value     \n" +
2871
			"    @Blah String t= s1; // cannot assign potentially null value         \n" +
2872
			"return null; // cannot return null value     }\n" +
2873
			"}\n" +
2874
			"\n" +
2875
			"org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" +
2876
			""
2877
		},
2878
		"----------\n" + 
2879
		"1. ERROR in snippet\\Bug366003.java (at line 3)\n" + 
2880
		"	public void foo(@Blah Object o1) {        \n" + 
2881
		"	                 ^^^^\n" + 
2882
		"Blah cannot be resolved to a type\n" + 
2883
		"----------\n" + 
2884
		"2. ERROR in snippet\\Bug366003.java (at line 4)\n" + 
2885
		"	System.out.println(o1.toString()); // OK: o1 cannot be null     }         \n" + 
2886
		"	                                 ^\n" + 
2887
		"Syntax error, insert \"}\" to complete MethodBody\n" + 
2888
		"----------\n" + 
2889
		"3. ERROR in snippet\\Bug366003.java (at line 5)\n" + 
2890
		"	@Blah Object bar(@BlahBlah String s1) {         foo(null); // cannot pass\n" + 
2891
		"	 ^^^^\n" + 
2892
		"Blah cannot be resolved to a type\n" + 
2893
		"----------\n" + 
2894
		"4. ERROR in snippet\\Bug366003.java (at line 5)\n" + 
2895
		"	@Blah Object bar(@BlahBlah String s1) {         foo(null); // cannot pass\n" + 
2896
		"	                  ^^^^^^^^\n" + 
2897
		"BlahBlah cannot be resolved to a type\n" + 
2898
		"----------\n" + 
2899
		"5. ERROR in snippet\\Bug366003.java (at line 6)\n" + 
2900
		"	null argument         @Blah String s= null; // cannot assign null value     \n" + 
2901
		"	^^^^\n" + 
2902
		"Syntax error on token \"null\", @ expected\n" + 
2903
		"----------\n" + 
2904
		"6. ERROR in snippet\\Bug366003.java (at line 11)\n" + 
2905
		"	org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" + 
2906
		"	^^^^^^^^^^^^^^^^\n" + 
2907
		"Syntax error on tokens, delete these tokens\n" + 
2908
		"----------\n" + 
2909
		"7. ERROR in snippet\\Bug366003.java (at line 11)\n" + 
2910
		"	org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" + 
2911
		"	            ^^^^\n" + 
2912
		"Syntax error, insert \"enum Identifier\" to complete EnumHeaderName\n" + 
2913
		"----------\n" + 
2914
		"8. ERROR in snippet\\Bug366003.java (at line 11)\n" + 
2915
		"	org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" + 
2916
		"	            ^^^^\n" + 
2917
		"Syntax error, insert \"EnumBody\" to complete EnumDeclaration\n" + 
2918
		"----------\n" + 
2919
		"9. ERROR in snippet\\Bug366003.java (at line 11)\n" + 
2920
		"	org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" + 
2921
		"	            ^^^^\n" + 
2922
		"Syntax error, insert \"}\" to complete ClassBody\n" + 
2923
		"----------\n" + 
2924
		"10. ERROR in snippet\\Bug366003.java (at line 11)\n" + 
2925
		"	org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" + 
2926
		"	                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
2927
		"Return type for the method is missing\n" + 
2928
		"----------\n" + 
2929
		"11. ERROR in snippet\\Bug366003.java (at line 11)\n" + 
2930
		"	org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" + 
2931
		"	                       ^^^^^^^\n" + 
2932
		"NonNull cannot be resolved to a type\n" + 
2933
		"----------\n" + 
2934
		"12. ERROR in snippet\\Bug366003.java (at line 11)\n" + 
2935
		"	org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" + 
2936
		"	                                                      ^^^^^^^^\n" + 
2937
		"Nullable cannot be resolved to a type\n" + 
2938
		"----------\n" + 
2939
		"13. ERROR in snippet\\Bug366003.java (at line 11)\n" + 
2940
		"	org.eclipse.User.User(@NonNull String name, int uid, @Nullable String email)\n" + 
2941
		"	                                                                           ^\n" + 
2942
		"Syntax error, insert \";\" to complete ConstructorDeclaration\n" + 
2943
		"----------\n");
2944
}
2945
// Bug 366003 - CCE in ASTNode.resolveAnnotations(ASTNode.java:639) 
2946
// minimal syntax error to trigger CCE 
2947
public void testBug366003c() {
2948
	runNegativeTestWithLibs(
2949
		new String[] {
2950
			"snippet/Bug366003.java",
2951
			"package snippet;\n" +
2952
			"public class Bug366003 {\n" +
2953
			"    void foo(Object o1) {\n" + 
2954
			"    }\n" + 
2955
			"org.User(@Bla String a)"
2956
		},
2957
		"----------\n" + 
2958
		"1. ERROR in snippet\\Bug366003.java (at line 5)\n" + 
2959
		"	org.User(@Bla String a)\n" + 
2960
		"	^^^\n" + 
2961
		"Syntax error on token \"org\", delete this token\n" + 
2962
		"----------\n" + 
2963
		"2. ERROR in snippet\\Bug366003.java (at line 5)\n" + 
2964
		"	org.User(@Bla String a)\n" + 
2965
		"	^^^\n" + 
2966
		"Syntax error, insert \"enum Identifier\" to complete EnumHeaderName\n" + 
2967
		"----------\n" + 
2968
		"3. ERROR in snippet\\Bug366003.java (at line 5)\n" + 
2969
		"	org.User(@Bla String a)\n" + 
2970
		"	^^^\n" + 
2971
		"Syntax error, insert \"EnumBody\" to complete EnumDeclaration\n" + 
2972
		"----------\n" + 
2973
		"4. ERROR in snippet\\Bug366003.java (at line 5)\n" + 
2974
		"	org.User(@Bla String a)\n" + 
2975
		"	^^^\n" + 
2976
		"Syntax error, insert \"}\" to complete ClassBody\n" + 
2977
		"----------\n" + 
2978
		"5. ERROR in snippet\\Bug366003.java (at line 5)\n" + 
2979
		"	org.User(@Bla String a)\n" + 
2980
		"	    ^^^^^^^^^^^^^^^^^^^\n" + 
2981
		"Return type for the method is missing\n" + 
2982
		"----------\n" + 
2983
		"6. ERROR in snippet\\Bug366003.java (at line 5)\n" + 
2984
		"	org.User(@Bla String a)\n" + 
2985
		"	          ^^^\n" + 
2986
		"Bla cannot be resolved to a type\n" + 
2987
		"----------\n" + 
2988
		"7. ERROR in snippet\\Bug366003.java (at line 5)\n" + 
2989
		"	org.User(@Bla String a)\n" + 
2990
		"	                      ^\n" + 
2991
		"Syntax error, insert \";\" to complete ConstructorDeclaration\n" + 
2992
		"----------\n");
2993
}
2994
public void testBug366003d() {
2995
	runNegativeTestWithLibs(
2996
		new String[] {
2997
			"snippet/Bug366003.java",
2998
			"package snippet;\n" +
2999
			"public class Bug366003 {\n" +
3000
			"    {\n" +
3001
			"        wrong\n" +
3002
			"        try {\n" +
3003
			"        } catch (@Bla String a) \n" +
3004
			"    }\n"
3005
		},
3006
		"----------\n" + 
3007
		"1. ERROR in snippet\\Bug366003.java (at line 5)\n" + 
3008
		"	org.User(@Bla String a)\n" + 
3009
		"	^^^\n" + 
3010
		"Syntax error on token \"org\", delete this token\n" + 
3011
		"----------\n" + 
3012
		"2. ERROR in snippet\\Bug366003.java (at line 5)\n" + 
3013
		"	org.User(@Bla String a)\n" + 
3014
		"	^^^\n" + 
3015
		"Syntax error, insert \"enum Identifier\" to complete EnumHeaderName\n" + 
3016
		"----------\n" + 
3017
		"3. ERROR in snippet\\Bug366003.java (at line 5)\n" + 
3018
		"	org.User(@Bla String a)\n" + 
3019
		"	^^^\n" + 
3020
		"Syntax error, insert \"EnumBody\" to complete EnumDeclaration\n" + 
3021
		"----------\n" + 
3022
		"4. ERROR in snippet\\Bug366003.java (at line 5)\n" + 
3023
		"	org.User(@Bla String a)\n" + 
3024
		"	^^^\n" + 
3025
		"Syntax error, insert \"}\" to complete ClassBody\n" + 
3026
		"----------\n" + 
3027
		"5. ERROR in snippet\\Bug366003.java (at line 5)\n" + 
3028
		"	org.User(@Bla String a)\n" + 
3029
		"	    ^^^^^^^^^^^^^^^^^^^\n" + 
3030
		"Return type for the method is missing\n" + 
3031
		"----------\n" + 
3032
		"6. ERROR in snippet\\Bug366003.java (at line 5)\n" + 
3033
		"	org.User(@Bla String a)\n" + 
3034
		"	          ^^^\n" + 
3035
		"Bla cannot be resolved to a type\n" + 
3036
		"----------\n" + 
3037
		"7. ERROR in snippet\\Bug366003.java (at line 5)\n" + 
3038
		"	org.User(@Bla String a)\n" + 
3039
		"	                      ^\n" + 
3040
		"Syntax error, insert \";\" to complete ConstructorDeclaration\n" + 
3041
		"----------\n");
3042
}
2766
}
3043
}
(-)a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java (+3 lines)
Lines 3943-3948 Link Here
3943
			arg.annotations = new Annotation[length],
3943
			arg.annotations = new Annotation[length],
3944
			0,
3944
			0,
3945
			length);
3945
			length);
3946
		RecoveredType currentRecoveryType = this.currentRecoveryType();
3947
		if (currentRecoveryType != null)
3948
			currentRecoveryType.annotationsConsumed(arg.annotations);
3946
	}
3949
	}
3947
	pushOnAstStack(arg);
3950
	pushOnAstStack(arg);
3948
3951
(-)a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/RecoveredType.java (-1 / +18 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
 * Copyright (c) 2000, 2009 IBM Corporation and others.
2
 * Copyright (c) 2000, 2011 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 773-776 Link Here
773
		this.typeDeclaration.bodyEnd = end;
773
		this.typeDeclaration.bodyEnd = end;
774
	}
774
	}
775
}
775
}
776
public void annotationsConsumed(Annotation[] consumedAnnotations) {
777
	RecoveredAnnotation[] keep = new RecoveredAnnotation[this.pendingAnnotationCount];
778
	int numKeep = 0;
779
	outerLoop:
780
	for (int i = 0; i < this.pendingAnnotationCount; i++) {
781
		Annotation pendingAnnotationAST = this.pendingAnnotations[i].annotation;
782
		for (int j = 0; j < consumedAnnotations.length; j++) {
783
			if (consumedAnnotations[i] == pendingAnnotationAST)
784
				continue outerLoop;
785
		}
786
		keep[numKeep++] = this.pendingAnnotations[i];
787
	}
788
	if (numKeep != this.pendingAnnotationCount) {
789
		this.pendingAnnotations = keep;
790
		this.pendingAnnotationCount = numKeep;
791
	}
792
}
776
}
793
}

Return to bug 366003