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

Collapse All | Expand All

(-)src/org/eclipse/jdt/core/tests/compiler/parser/StatementRecoveryTest_1_5.java (-2 / +2 lines)
Lines 611-617 Link Here
611
		"    super();\n" + 
611
		"    super();\n" + 
612
		"  }\n" + 
612
		"  }\n" + 
613
		"  void foo() {\n" + 
613
		"  void foo() {\n" + 
614
		"    @AnAnnotation class Y {\n" + 
614
		"    @AnAnnotation(name = $missing$) class Y {\n" + 
615
		"      Y() {\n" + 
615
		"      Y() {\n" + 
616
		"        super();\n" + 
616
		"        super();\n" + 
617
		"      }\n" + 
617
		"      }\n" + 
Lines 627-633 Link Here
627
		"  }\n" + 
627
		"  }\n" + 
628
		"  void foo() {\n" + 
628
		"  void foo() {\n" + 
629
		"    foo1();\n" + 
629
		"    foo1();\n" + 
630
		"    @AnAnnotation class Y {\n" + 
630
		"    @AnAnnotation(name = $missing$) class Y {\n" + 
631
		"      Y() {\n" + 
631
		"      Y() {\n" + 
632
		"        super();\n" + 
632
		"        super();\n" + 
633
		"      }\n" + 
633
		"      }\n" + 
(-)src/org/eclipse/jdt/core/tests/compiler/parser/AnnotationDietRecoveryTest.java (-10 / +145 lines)
Lines 919-925 Link Here
919
919
920
	String expectedDietUnitToString = 
920
	String expectedDietUnitToString = 
921
		"package a;\n" + 
921
		"package a;\n" + 
922
		"public @AnAnnotation @AnAnnotation2(name2) class X {\n" + 
922
		"public @AnAnnotation(name = $missing$) @AnAnnotation2(name2) class X {\n" + 
923
		"  public X() {\n" + 
923
		"  public X() {\n" + 
924
		"  }\n" + 
924
		"  }\n" + 
925
		"}\n";
925
		"}\n";
Lines 927-933 Link Here
927
	
927
	
928
	String expectedDietPlusBodyUnitToString = 
928
	String expectedDietPlusBodyUnitToString = 
929
		"package a;\n" + 
929
		"package a;\n" + 
930
		"public @AnAnnotation @AnAnnotation2(name2) class X {\n" + 
930
		"public @AnAnnotation(name = $missing$) @AnAnnotation2(name2) class X {\n" + 
931
		"  public X() {\n" + 
931
		"  public X() {\n" + 
932
		"    super();\n" + 
932
		"    super();\n" + 
933
		"  }\n" + 
933
		"  }\n" + 
Lines 965-978 Link Here
965
965
966
	String expectedDietUnitToString = 
966
	String expectedDietUnitToString = 
967
		"package a;\n" + 
967
		"package a;\n" + 
968
		"public @AnAnnotation(name) @AnAnnotation2 class X {\n" + 
968
		"public @AnAnnotation(name) @AnAnnotation2(name2 = $missing$) class X {\n" + 
969
		"  public X() {\n" + 
969
		"  public X() {\n" + 
970
		"  }\n" + 
970
		"  }\n" + 
971
		"}\n";
971
		"}\n";
972
	
972
	
973
	String expectedDietPlusBodyUnitToString = 
973
	String expectedDietPlusBodyUnitToString = 
974
		"package a;\n" + 
974
		"package a;\n" + 
975
		"public @AnAnnotation(name) @AnAnnotation2 class X {\n" + 
975
		"public @AnAnnotation(name) @AnAnnotation2(name2 = $missing$) class X {\n" + 
976
		"  public X() {\n" + 
976
		"  public X() {\n" + 
977
		"    super();\n" + 
977
		"    super();\n" + 
978
		"  }\n" + 
978
		"  }\n" + 
Lines 1059-1065 Link Here
1059
	String expectedDietUnitToString = 
1059
	String expectedDietUnitToString = 
1060
		"package a;\n" + 
1060
		"package a;\n" + 
1061
		"public class X {\n" + 
1061
		"public class X {\n" + 
1062
		"  @AnAnnotation int field;\n" + 
1062
		"  @AnAnnotation(name = $missing$) int field;\n" + 
1063
		"  public X() {\n" + 
1063
		"  public X() {\n" + 
1064
		"  }\n" + 
1064
		"  }\n" + 
1065
		"}\n";
1065
		"}\n";
Lines 1067-1073 Link Here
1067
	String expectedDietPlusBodyUnitToString = 
1067
	String expectedDietPlusBodyUnitToString = 
1068
		"package a;\n" + 
1068
		"package a;\n" + 
1069
		"public class X {\n" + 
1069
		"public class X {\n" + 
1070
		"  @AnAnnotation int field;\n" + 
1070
		"  @AnAnnotation(name = $missing$) int field;\n" + 
1071
		"  public X() {\n" + 
1071
		"  public X() {\n" + 
1072
		"    super();\n" + 
1072
		"    super();\n" + 
1073
		"  }\n" + 
1073
		"  }\n" + 
Lines 1160-1166 Link Here
1160
		"public class X {\n" + 
1160
		"public class X {\n" + 
1161
		"  public X() {\n" + 
1161
		"  public X() {\n" + 
1162
		"  }\n" + 
1162
		"  }\n" + 
1163
		"  @AnAnnotation void foo() {\n" + 
1163
		"  @AnAnnotation(name = $missing$) void foo() {\n" + 
1164
		"  }\n" + 
1164
		"  }\n" + 
1165
		"}\n";
1165
		"}\n";
1166
	
1166
	
Lines 1170-1176 Link Here
1170
		"  public X() {\n" + 
1170
		"  public X() {\n" + 
1171
		"    super();\n" + 
1171
		"    super();\n" + 
1172
		"  }\n" + 
1172
		"  }\n" + 
1173
		"  @AnAnnotation void foo() {\n" + 
1173
		"  @AnAnnotation(name = $missing$) void foo() {\n" + 
1174
		"  }\n" + 
1174
		"  }\n" + 
1175
		"}\n";
1175
		"}\n";
1176
1176
Lines 1641-1654 Link Here
1641
1641
1642
	String expectedDietUnitToString = 
1642
	String expectedDietUnitToString = 
1643
		"package a;\n" + 
1643
		"package a;\n" + 
1644
		"public @AnAnnotation1 class X {\n" + 
1644
		"public @AnAnnotation1(name = $missing$) class X {\n" + 
1645
		"  public X() {\n" + 
1645
		"  public X() {\n" + 
1646
		"  }\n" + 
1646
		"  }\n" + 
1647
		"}\n";
1647
		"}\n";
1648
	
1648
	
1649
	String expectedDietPlusBodyUnitToString = 
1649
	String expectedDietPlusBodyUnitToString = 
1650
		"package a;\n" + 
1650
		"package a;\n" + 
1651
		"public @AnAnnotation1 class X {\n" + 
1651
		"public @AnAnnotation1(name = $missing$) class X {\n" + 
1652
		"  public X() {\n" + 
1652
		"  public X() {\n" + 
1653
		"    super();\n" + 
1653
		"    super();\n" + 
1654
		"  }\n" + 
1654
		"  }\n" + 
Lines 1774-1777 Link Here
1774
		expectedCompletionDietUnitToString,	
1774
		expectedCompletionDietUnitToString,	
1775
		testName);
1775
		testName);
1776
}
1776
}
1777
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=228464
1778
public void test0038() {
1779
1780
	String s = 
1781
		"package a;										\n"
1782
			+ "@AnAnnotation(name=)						\n"
1783
			+ "public class X {							\n"
1784
			+ "}										\n"; 	
1785
1786
	String expectedDietUnitToString = 
1787
		"package a;\n" + 
1788
		"public @AnAnnotation(name = $missing$) class X {\n" + 
1789
		"  public X() {\n" + 
1790
		"  }\n" + 
1791
		"}\n";
1792
	
1793
	
1794
	String expectedDietPlusBodyUnitToString = 
1795
		"package a;\n" + 
1796
		"public @AnAnnotation(name = $missing$) class X {\n" + 
1797
		"  public X() {\n" + 
1798
		"    super();\n" + 
1799
		"  }\n" + 
1800
		"}\n";
1801
1802
1803
	String expectedFullUnitToString = 
1804
		expectedDietUnitToString;
1805
	
1806
	String expectedCompletionDietUnitToString = 
1807
		"package a;\n" + 
1808
		"public class X {\n" + 
1809
		"  public X() {\n" + 
1810
		"  }\n" + 
1811
		"}\n";
1812
	
1813
	String testName = "<generic type recovery>";
1814
	checkParse(
1815
		s.toCharArray(),
1816
		expectedDietUnitToString,
1817
		expectedDietPlusBodyUnitToString,
1818
		expectedFullUnitToString,
1819
		expectedCompletionDietUnitToString,	
1820
		testName);
1821
}
1822
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=228464
1823
public void test0039() {
1824
1825
	String s = 
1826
		"package a;										\n"
1827
			+ "@AnAnnotation(name1=a,name2=)			\n"
1828
			+ "public class X {							\n"
1829
			+ "}										\n"; 	
1830
1831
	String expectedDietUnitToString = 
1832
		"package a;\n" + 
1833
		"public @AnAnnotation(name1 = a,name2 = $missing$) class X {\n" + 
1834
		"  public X() {\n" + 
1835
		"  }\n" + 
1836
		"}\n";
1837
	
1838
	
1839
	String expectedDietPlusBodyUnitToString = 
1840
		"package a;\n" + 
1841
		"public @AnAnnotation(name1 = a,name2 = $missing$) class X {\n" + 
1842
		"  public X() {\n" + 
1843
		"    super();\n" + 
1844
		"  }\n" + 
1845
		"}\n";
1846
1847
1848
	String expectedFullUnitToString = 
1849
		expectedDietUnitToString;
1850
	
1851
	String expectedCompletionDietUnitToString = 
1852
		"package a;\n" + 
1853
		"public class X {\n" + 
1854
		"  public X() {\n" + 
1855
		"  }\n" + 
1856
		"}\n";
1857
	
1858
	String testName = "<generic type recovery>";
1859
	checkParse(
1860
		s.toCharArray(),
1861
		expectedDietUnitToString,
1862
		expectedDietPlusBodyUnitToString,
1863
		expectedFullUnitToString,
1864
		expectedCompletionDietUnitToString,	
1865
		testName);
1866
}
1867
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=228464
1868
public void test0040() {
1869
1870
	String s = 
1871
		"package a;										\n"
1872
			+ "@AnAnnotation(name1=a,name2=,name3=c)	\n"
1873
			+ "public class X {							\n"
1874
			+ "}										\n"; 	
1875
1876
	String expectedDietUnitToString = 
1877
		"package a;\n" + 
1878
		"public @AnAnnotation(name1 = a,name2 = $missing$) class X {\n" + 
1879
		"  public X() {\n" + 
1880
		"  }\n" + 
1881
		"}\n";
1882
	
1883
	
1884
	String expectedDietPlusBodyUnitToString = 
1885
		"package a;\n" + 
1886
		"public @AnAnnotation(name1 = a,name2 = $missing$) class X {\n" + 
1887
		"  public X() {\n" + 
1888
		"    super();\n" + 
1889
		"  }\n" + 
1890
		"}\n";
1891
1892
1893
	String expectedFullUnitToString = 
1894
		expectedDietUnitToString;
1895
	
1896
	String expectedCompletionDietUnitToString = 
1897
		"package a;\n" + 
1898
		"public class X {\n" + 
1899
		"  public X() {\n" + 
1900
		"  }\n" + 
1901
		"}\n";
1902
	
1903
	String testName = "<generic type recovery>";
1904
	checkParse(
1905
		s.toCharArray(),
1906
		expectedDietUnitToString,
1907
		expectedDietPlusBodyUnitToString,
1908
		expectedFullUnitToString,
1909
		expectedCompletionDietUnitToString,	
1910
		testName);
1911
}
1777
}
1912
}
(-)model/org/eclipse/jdt/internal/core/LocalVariable.java (+5 lines)
Lines 24-29 Link Here
24
import org.eclipse.jdt.internal.compiler.ast.NullLiteral;
24
import org.eclipse.jdt.internal.compiler.ast.NullLiteral;
25
import org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference;
25
import org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference;
26
import org.eclipse.jdt.internal.compiler.ast.SingleNameReference;
26
import org.eclipse.jdt.internal.compiler.ast.SingleNameReference;
27
import org.eclipse.jdt.internal.compiler.parser.RecoveryScanner;
27
import org.eclipse.jdt.internal.core.util.MementoTokenizer;
28
import org.eclipse.jdt.internal.core.util.MementoTokenizer;
28
import org.eclipse.jdt.internal.core.util.Util;
29
import org.eclipse.jdt.internal.core.util.Util;
29
30
Lines 174-179 Link Here
174
			return new String(qualifiedName);		
175
			return new String(qualifiedName);		
175
		} else if (expression instanceof SingleNameReference) {
176
		} else if (expression instanceof SingleNameReference) {
176
			char[] simpleName = ((SingleNameReference) expression).token;
177
			char[] simpleName = ((SingleNameReference) expression).token;
178
			if (simpleName == RecoveryScanner.FAKE_IDENTIFIER) {
179
				memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
180
				return null;
181
			}
177
			memberValuePair.valueKind = IMemberValuePair.K_SIMPLE_NAME;
182
			memberValuePair.valueKind = IMemberValuePair.K_SIMPLE_NAME;
178
			return new String(simpleName);		
183
			return new String(simpleName);		
179
		} else if (expression instanceof ArrayInitializer) {
184
		} else if (expression instanceof ArrayInitializer) {
(-)model/org/eclipse/jdt/internal/core/CompilationUnitStructureRequestor.java (+5 lines)
Lines 31-36 Link Here
31
import org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference;
31
import org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference;
32
import org.eclipse.jdt.internal.compiler.ast.SingleNameReference;
32
import org.eclipse.jdt.internal.compiler.ast.SingleNameReference;
33
import org.eclipse.jdt.internal.compiler.parser.Parser;
33
import org.eclipse.jdt.internal.compiler.parser.Parser;
34
import org.eclipse.jdt.internal.compiler.parser.RecoveryScanner;
34
import org.eclipse.jdt.internal.compiler.util.HashtableOfObject;
35
import org.eclipse.jdt.internal.compiler.util.HashtableOfObject;
35
import org.eclipse.jdt.internal.core.util.ReferenceInfoAdapter;
36
import org.eclipse.jdt.internal.core.util.ReferenceInfoAdapter;
36
import org.eclipse.jdt.internal.core.util.Util;
37
import org.eclipse.jdt.internal.core.util.Util;
Lines 664-669 Link Here
664
		return new String(qualifiedName);		
665
		return new String(qualifiedName);		
665
	} else if (expression instanceof SingleNameReference) {
666
	} else if (expression instanceof SingleNameReference) {
666
		char[] simpleName = ((SingleNameReference) expression).token;
667
		char[] simpleName = ((SingleNameReference) expression).token;
668
		if (simpleName == RecoveryScanner.FAKE_IDENTIFIER) {
669
			memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
670
			return null;
671
		}
667
		memberValuePair.valueKind = IMemberValuePair.K_SIMPLE_NAME;
672
		memberValuePair.valueKind = IMemberValuePair.K_SIMPLE_NAME;
668
		return new String(simpleName);		
673
		return new String(simpleName);		
669
	} else if (expression instanceof ArrayInitializer) {
674
	} else if (expression instanceof ArrayInitializer) {
(-)compiler/org/eclipse/jdt/internal/compiler/parser/RecoveredAnnotation.java (-16 / +58 lines)
Lines 17-22 Link Here
17
import org.eclipse.jdt.internal.compiler.ast.MemberValuePair;
17
import org.eclipse.jdt.internal.compiler.ast.MemberValuePair;
18
import org.eclipse.jdt.internal.compiler.ast.NormalAnnotation;
18
import org.eclipse.jdt.internal.compiler.ast.NormalAnnotation;
19
import org.eclipse.jdt.internal.compiler.ast.SingleMemberAnnotation;
19
import org.eclipse.jdt.internal.compiler.ast.SingleMemberAnnotation;
20
import org.eclipse.jdt.internal.compiler.ast.SingleNameReference;
20
import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
21
import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
21
import org.eclipse.jdt.internal.compiler.ast.TypeReference;
22
import org.eclipse.jdt.internal.compiler.ast.TypeReference;
22
23
Lines 29-34 Link Here
29
	private int identifierPtr;
30
	private int identifierPtr;
30
	private int identifierLengthPtr;
31
	private int identifierLengthPtr;
31
	private int sourceStart;
32
	private int sourceStart;
33
	public boolean hasPendingMemberValueName;
34
	public int memberValuPairEqualEnd = -1;
32
	public Annotation annotation;
35
	public Annotation annotation;
33
36
34
	public RecoveredAnnotation(int identifierPtr, int identifierLengthPtr, int sourceStart, RecoveredElement parent, int bracketBalance) {
37
	public RecoveredAnnotation(int identifierPtr, int identifierLengthPtr, int sourceStart, RecoveredElement parent, int bracketBalance) {
Lines 69-100 Link Here
69
			
72
			
70
			boolean needUpdateRParenPos = false;
73
			boolean needUpdateRParenPos = false;
71
			
74
			
75
			MemberValuePair pendingMemberValueName = null;
76
			if (this.hasPendingMemberValueName && this.identifierPtr < parser.identifierPtr) {
77
				char[] memberValueName = parser.identifierStack[this.identifierPtr + 1];
78
				
79
				long pos = parser.identifierPositionStack[this.identifierPtr + 1];
80
				int start = (int) (pos >>> 32);
81
				int end = (int)pos;
82
				int valueEnd = this.memberValuPairEqualEnd > -1 ? this.memberValuPairEqualEnd : end;
83
				
84
				SingleNameReference fakeExpression = new SingleNameReference(RecoveryScanner.FAKE_IDENTIFIER, (((long) valueEnd + 1) << 32) + (valueEnd));
85
				pendingMemberValueName = new MemberValuePair(memberValueName, start, end, fakeExpression);
86
			}
72
			parser.identifierPtr = this.identifierPtr;
87
			parser.identifierPtr = this.identifierPtr;
73
			parser.identifierLengthPtr = this.identifierLengthPtr;
88
			parser.identifierLengthPtr = this.identifierLengthPtr;
74
			TypeReference typeReference = parser.getAnnotationType();
89
			TypeReference typeReference = parser.getAnnotationType();
75
			
90
			
76
			switch (this.kind) {
91
			switch (this.kind) {
77
				case NORMAL:
92
				case NORMAL:
78
					MemberValuePair[] memberValuePairs = null;
79
					if (parser.astPtr > -1 && parser.astStack[parser.astPtr] instanceof MemberValuePair) {
93
					if (parser.astPtr > -1 && parser.astStack[parser.astPtr] instanceof MemberValuePair) {
94
						MemberValuePair[] memberValuePairs = null;
95
						
80
						int argLength = parser.astLengthStack[parser.astLengthPtr];
96
						int argLength = parser.astLengthStack[parser.astLengthPtr];
81
						int argStart = parser.astPtr - argLength + 1;
97
						int argStart = parser.astPtr - argLength + 1;
82
						
98
						
83
						if (argLength > 0) {
99
						if (argLength > 0) {
84
							System.arraycopy(parser.astStack, argStart, memberValuePairs = new MemberValuePair[argLength], 0, argLength);
100
							int annotationEnd;
85
							parser.astLengthPtr--;
101
							if (pendingMemberValueName != null) {
86
							parser.astPtr -= argLength;
102
								memberValuePairs = new MemberValuePair[argLength + 1];
87
							
103
								
88
							MemberValuePair lastMemberValuePair = memberValuePairs[memberValuePairs.length - 1];
104
								System.arraycopy(parser.astStack, argStart, memberValuePairs, 0, argLength);
89
							
105
								parser.astLengthPtr--;
90
							NormalAnnotation normalAnnotation = new NormalAnnotation(typeReference, this.sourceStart);
106
								parser.astPtr -= argLength;
91
							normalAnnotation.memberValuePairs = memberValuePairs;
107
								
92
							normalAnnotation.declarationSourceEnd =
108
								memberValuePairs[argLength] = pendingMemberValueName;
93
								lastMemberValuePair.value != null
109
								
110
								annotationEnd = pendingMemberValueName.sourceEnd;
111
							} else {
112
								memberValuePairs = new MemberValuePair[argLength];
113
								
114
								System.arraycopy(parser.astStack, argStart, memberValuePairs, 0, argLength);
115
								parser.astLengthPtr--;
116
								parser.astPtr -= argLength;
117
								
118
								MemberValuePair lastMemberValuePair = memberValuePairs[memberValuePairs.length - 1];
119
								
120
								annotationEnd = 
121
									lastMemberValuePair.value != null
94
										? lastMemberValuePair.value instanceof Annotation
122
										? lastMemberValuePair.value instanceof Annotation
95
												? ((Annotation)lastMemberValuePair.value).declarationSourceEnd
123
												? ((Annotation)lastMemberValuePair.value).declarationSourceEnd
96
												: lastMemberValuePair.value.sourceEnd
124
												: lastMemberValuePair.value.sourceEnd
97
										: lastMemberValuePair.sourceEnd;
125
										: lastMemberValuePair.sourceEnd;
126
							}
127
							
128
							NormalAnnotation normalAnnotation = new NormalAnnotation(typeReference, this.sourceStart);
129
							normalAnnotation.memberValuePairs = memberValuePairs;
130
							normalAnnotation.declarationSourceEnd = annotationEnd;
98
							normalAnnotation.bits |= ASTNode.IsRecovered;
131
							normalAnnotation.bits |= ASTNode.IsRecovered;
99
							
132
							
100
							annot = normalAnnotation;
133
							annot = normalAnnotation;
Lines 122-132 Link Here
122
			}
155
			}
123
			
156
			
124
			if (!needUpdateRParenPos) {
157
			if (!needUpdateRParenPos) {
125
				MarkerAnnotation markerAnnotation = new MarkerAnnotation(typeReference, this.sourceStart);
158
				if (pendingMemberValueName != null) {
126
				markerAnnotation.declarationSourceEnd = markerAnnotation.sourceEnd;
159
					NormalAnnotation normalAnnotation = new NormalAnnotation(typeReference, this.sourceStart);
127
				markerAnnotation.bits |= ASTNode.IsRecovered;
160
					normalAnnotation.memberValuePairs = new MemberValuePair[]{pendingMemberValueName};
128
				
161
					normalAnnotation.declarationSourceEnd = pendingMemberValueName.value.sourceEnd;
129
				annot = markerAnnotation;
162
					normalAnnotation.bits |= ASTNode.IsRecovered;
163
					
164
					annot = normalAnnotation;
165
				} else {
166
					MarkerAnnotation markerAnnotation = new MarkerAnnotation(typeReference, this.sourceStart);
167
					markerAnnotation.declarationSourceEnd = markerAnnotation.sourceEnd;
168
					markerAnnotation.bits |= ASTNode.IsRecovered;
169
					
170
					annot = markerAnnotation;
171
				}
130
			}
172
			}
131
			
173
			
132
			parser.currentElement = this.addAnnotation(annot, this.identifierPtr);
174
			parser.currentElement = this.addAnnotation(annot, this.identifierPtr);
(-)compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java (-4 / +18 lines)
Lines 3046-3052 Link Here
3046
}
3046
}
3047
protected void consumeEnterMemberValue() {
3047
protected void consumeEnterMemberValue() {
3048
	// EnterMemberValue ::= $empty
3048
	// EnterMemberValue ::= $empty
3049
	// do nothing by default
3049
	if (this.currentElement != null && this.currentElement instanceof RecoveredAnnotation) {
3050
		RecoveredAnnotation recoveredAnnotation = (RecoveredAnnotation)this.currentElement;
3051
		recoveredAnnotation.hasPendingMemberValueName = true;
3052
	}
3050
}
3053
}
3051
protected void consumeEnterMemberValueArrayInitializer() {
3054
protected void consumeEnterMemberValueArrayInitializer() {
3052
	// EnterMemberValueArrayInitializer ::= $empty
3055
	// EnterMemberValueArrayInitializer ::= $empty
Lines 3541-3547 Link Here
3541
}
3544
}
3542
protected void consumeExitMemberValue() {
3545
protected void consumeExitMemberValue() {
3543
	// ExitMemberValue ::= $empty
3546
	// ExitMemberValue ::= $empty
3544
	// do nothing by default
3547
	if (this.currentElement != null && this.currentElement instanceof RecoveredAnnotation) {
3548
		RecoveredAnnotation recoveredAnnotation = (RecoveredAnnotation)this.currentElement;
3549
		recoveredAnnotation.hasPendingMemberValueName = false;
3550
		recoveredAnnotation.memberValuPairEqualEnd = -1;
3551
	}
3545
}
3552
}
3546
protected void consumeExitTryBlock() {
3553
protected void consumeExitTryBlock() {
3547
	//ExitTryBlock ::= $empty
3554
	//ExitTryBlock ::= $empty
Lines 7613-7622 Link Here
7613
			break;
7620
			break;
7614
		case TokenNameELLIPSIS :
7621
		case TokenNameELLIPSIS :
7615
			pushOnIntStack(this.scanner.currentPosition - 1);
7622
			pushOnIntStack(this.scanner.currentPosition - 1);
7616
			break;			
7623
			break;
7624
		case TokenNameEQUAL  :
7625
			if (this.currentElement != null && this.currentElement instanceof RecoveredAnnotation) {
7626
				RecoveredAnnotation recoveredAnnotation = (RecoveredAnnotation) this.currentElement;
7627
				if (recoveredAnnotation.memberValuPairEqualEnd == -1) {
7628
					recoveredAnnotation.memberValuPairEqualEnd = this.scanner.currentPosition - 1;
7629
				}
7630
			}
7631
			break;
7617
			//  case TokenNameCOMMA :
7632
			//  case TokenNameCOMMA :
7618
			//  case TokenNameCOLON  :
7633
			//  case TokenNameCOLON  :
7619
			//  case TokenNameEQUAL  :
7620
			//  case TokenNameLBRACKET  :
7634
			//  case TokenNameLBRACKET  :
7621
			//  case TokenNameDOT :
7635
			//  case TokenNameDOT :
7622
			//  case TokenNameERROR :
7636
			//  case TokenNameERROR :
(-)dom/org/eclipse/jdt/core/dom/ASTConverter.java (-3 / +18 lines)
Lines 39-44 Link Here
39
import org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference;
39
import org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference;
40
import org.eclipse.jdt.internal.compiler.ast.QualifiedAllocationExpression;
40
import org.eclipse.jdt.internal.compiler.ast.QualifiedAllocationExpression;
41
import org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference;
41
import org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference;
42
import org.eclipse.jdt.internal.compiler.ast.SingleNameReference;
42
import org.eclipse.jdt.internal.compiler.ast.SingleTypeReference;
43
import org.eclipse.jdt.internal.compiler.ast.SingleTypeReference;
43
import org.eclipse.jdt.internal.compiler.ast.StringLiteralConcatenation;
44
import org.eclipse.jdt.internal.compiler.ast.StringLiteralConcatenation;
44
import org.eclipse.jdt.internal.compiler.ast.TypeReference;
45
import org.eclipse.jdt.internal.compiler.ast.TypeReference;
Lines 2081-2086 Link Here
2081
		start = memberValuePair.sourceStart;
2082
		start = memberValuePair.sourceStart;
2082
		end = value.getStartPosition() + value.getLength() - 1;
2083
		end = value.getStartPosition() + value.getLength() - 1;
2083
		pair.setSourceRange(start, end - start + 1);
2084
		pair.setSourceRange(start, end - start + 1);
2085
		
2086
		if (memberValuePair.value instanceof SingleNameReference &&
2087
				((SingleNameReference)memberValuePair.value).token == RecoveryScanner.FAKE_IDENTIFIER) {
2088
			pair.setFlags(pair.getFlags() | ASTNode.RECOVERED);
2089
		}
2090
		
2084
		if (this.resolveBindings) {
2091
		if (this.resolveBindings) {
2085
			recordNodes(simpleName, memberValuePair);
2092
			recordNodes(simpleName, memberValuePair);
2086
			recordNodes(pair, memberValuePair);
2093
			recordNodes(pair, memberValuePair);
Lines 2116-2129 Link Here
2116
	public NormalAnnotation convert(org.eclipse.jdt.internal.compiler.ast.NormalAnnotation annotation) {
2123
	public NormalAnnotation convert(org.eclipse.jdt.internal.compiler.ast.NormalAnnotation annotation) {
2117
		final NormalAnnotation normalAnnotation = new NormalAnnotation(this.ast);
2124
		final NormalAnnotation normalAnnotation = new NormalAnnotation(this.ast);
2118
		setTypeNameForAnnotation(annotation, normalAnnotation);
2125
		setTypeNameForAnnotation(annotation, normalAnnotation);
2126
		
2127
		int start = annotation.sourceStart;
2128
		int end = annotation.declarationSourceEnd;
2129
		
2119
		org.eclipse.jdt.internal.compiler.ast.MemberValuePair[] memberValuePairs = annotation.memberValuePairs;
2130
		org.eclipse.jdt.internal.compiler.ast.MemberValuePair[] memberValuePairs = annotation.memberValuePairs;
2120
		if (memberValuePairs != null) {
2131
		if (memberValuePairs != null) {
2121
			for (int i = 0, max = memberValuePairs.length; i < max; i++) {
2132
			for (int i = 0, max = memberValuePairs.length; i < max; i++) {
2122
				normalAnnotation.values().add(convert(memberValuePairs[i]));
2133
				MemberValuePair memberValuePair = convert(memberValuePairs[i]);
2134
				int memberValuePairEnd = memberValuePair.getStartPosition() + memberValuePair.getLength() - 1;
2135
				if (end == memberValuePairEnd) {
2136
					normalAnnotation.setFlags(normalAnnotation.getFlags() | ASTNode.RECOVERED);
2137
				}
2138
				normalAnnotation.values().add(memberValuePair);
2123
			}
2139
			}
2124
		}
2140
		}
2125
		int start = annotation.sourceStart;
2141
		
2126
		int end = annotation.declarationSourceEnd;
2127
		normalAnnotation.setSourceRange(start, end - start + 1);
2142
		normalAnnotation.setSourceRange(start, end - start + 1);
2128
		if (this.resolveBindings) {
2143
		if (this.resolveBindings) {
2129
			recordNodes(normalAnnotation, annotation);
2144
			recordNodes(normalAnnotation, annotation);
(-)src/org/eclipse/jdt/core/tests/dom/ASTConverterBugsTestJLS3.java (-28 / +30 lines)
Lines 441-447 Link Here
441
	ASTResult result = this.buildMarkedAST(
441
	ASTResult result = this.buildMarkedAST(
442
			"/Converter15/src/a/X.java",
442
			"/Converter15/src/a/X.java",
443
			"package a;\n" +
443
			"package a;\n" +
444
			"[*1*]@AnAnnotation[*1*](value=)\n" +
444
			"[*1*]@AnAnnotation(value=[*1*])\n" +
445
			"[*2*]@AnAnnotation2(value=\"b\")[*2*]\n" +
445
			"[*2*]@AnAnnotation2(value=\"b\")[*2*]\n" +
446
			"[*3*]public[*3*] class X {\n" +
446
			"[*3*]public[*3*] class X {\n" +
447
			"}\n");
447
			"}\n");
Lines 449-459 Link Here
449
	assertASTResult(
449
	assertASTResult(
450
			"===== AST =====\n" + 
450
			"===== AST =====\n" + 
451
			"package a;\n" + 
451
			"package a;\n" + 
452
			"[*1*]@AnAnnotation[*1*] [*2*]@AnAnnotation2(value=\"b\")[*2*] [*3*]public[*3*] class X {\n" + 
452
			"[*1*]@AnAnnotation(value=$missing$)[*1*] [*2*]@AnAnnotation2(value=\"b\")[*2*] [*3*]public[*3*] class X {\n" + 
453
			"}\n" + 
453
			"}\n" + 
454
			"\n" + 
454
			"\n" + 
455
			"===== Details =====\n" + 
455
			"===== Details =====\n" + 
456
			"1:MARKER_ANNOTATION,[11,13],,,[ANNOTATION,La/X;@La/AnAnnotation;,]\n" + 
456
			"1:NORMAL_ANNOTATION,[11,20],,RECOVERED,[ANNOTATION,La/X;@La/AnAnnotation;,]\n" + 
457
			"2:NORMAL_ANNOTATION,[33,25],,,[ANNOTATION,La/X;@La/AnAnnotation2;,]\n" + 
457
			"2:NORMAL_ANNOTATION,[33,25],,,[ANNOTATION,La/X;@La/AnAnnotation2;,]\n" + 
458
			"3:MODIFIER,[59,6],,,[N/A]\n" + 
458
			"3:MODIFIER,[59,6],,,[N/A]\n" + 
459
			"===== Problems =====\n" + 
459
			"===== Problems =====\n" + 
Lines 486-504 Link Here
486
			"/Converter15/src/a/X.java",
486
			"/Converter15/src/a/X.java",
487
			"package a;\n" +
487
			"package a;\n" +
488
			"[*1*]@AnAnnotation(value=\"a\")[*1*]\n" +
488
			"[*1*]@AnAnnotation(value=\"a\")[*1*]\n" +
489
			"[*2*]@AnAnnotation2[*2*](value=)\n" +
489
			"[*2*]@AnAnnotation2(value=[*2*])\n" +
490
			"[*3*]public[*3*] class X {\n" +
490
			"[*3*]public[*3*] class X {\n" +
491
			"}\n");
491
			"}\n");
492
	
492
	
493
	assertASTResult(
493
	assertASTResult(
494
			"===== AST =====\n" + 
494
			"===== AST =====\n" + 
495
			"package a;\n" + 
495
			"package a;\n" + 
496
			"[*1*]@AnAnnotation(value=\"a\")[*1*] [*2*]@AnAnnotation2[*2*] [*3*]public[*3*] class X {\n" + 
496
			"[*1*]@AnAnnotation(value=\"a\")[*1*] [*2*]@AnAnnotation2(value=$missing$)[*2*] [*3*]public[*3*] class X {\n" + 
497
			"}\n" + 
497
			"}\n" + 
498
			"\n" + 
498
			"\n" + 
499
			"===== Details =====\n" + 
499
			"===== Details =====\n" + 
500
			"1:NORMAL_ANNOTATION,[11,24],,,[ANNOTATION,La/X;@La/AnAnnotation;,]\n" + 
500
			"1:NORMAL_ANNOTATION,[11,24],,,[ANNOTATION,La/X;@La/AnAnnotation;,]\n" + 
501
			"2:MARKER_ANNOTATION,[36,14],,,[ANNOTATION,La/X;@La/AnAnnotation2;,]\n" + 
501
			"2:NORMAL_ANNOTATION,[36,21],,RECOVERED,[ANNOTATION,La/X;@La/AnAnnotation2;,]\n" + 
502
			"3:MODIFIER,[59,6],,,[N/A]\n" + 
502
			"3:MODIFIER,[59,6],,,[N/A]\n" + 
503
			"===== Problems =====\n" + 
503
			"===== Problems =====\n" + 
504
			"1. ERROR in /Converter15/src/a/X.java (at line 3)\n" + 
504
			"1. ERROR in /Converter15/src/a/X.java (at line 3)\n" + 
Lines 529-548 Link Here
529
	ASTResult result = this.buildMarkedAST(
529
	ASTResult result = this.buildMarkedAST(
530
			"/Converter15/src/a/X.java",
530
			"/Converter15/src/a/X.java",
531
			"package a;\n" +
531
			"package a;\n" +
532
			"[*1*]@AnAnnotation[*1*](value=)\n" +
532
			"[*1*]@AnAnnotation(value=[*1*])\n" +
533
			"[*2*]@AnAnnotation2[*2*](value=)\n" +
533
			"[*2*]@AnAnnotation2(value=[*2*])\n" +
534
			"[*3*]public[*3*] class X {\n" +
534
			"[*3*]public[*3*] class X {\n" +
535
			"}\n");
535
			"}\n");
536
	
536
	
537
	assertASTResult(
537
	assertASTResult(
538
			"===== AST =====\n" + 
538
			"===== AST =====\n" + 
539
			"package a;\n" + 
539
			"package a;\n" + 
540
			"[*1*]@AnAnnotation[*1*] [*2*]@AnAnnotation2[*2*] [*3*]public[*3*] class X {\n" + 
540
			"[*1*]@AnAnnotation(value=$missing$)[*1*] [*2*]@AnAnnotation2(value=$missing$)[*2*] [*3*]public[*3*] class X {\n" + 
541
			"}\n" + 
541
			"}\n" + 
542
			"\n" + 
542
			"\n" + 
543
			"===== Details =====\n" + 
543
			"===== Details =====\n" + 
544
			"1:MARKER_ANNOTATION,[11,13],,,[ANNOTATION,La/X;@La/AnAnnotation;,]\n" + 
544
			"1:NORMAL_ANNOTATION,[11,20],,RECOVERED,[ANNOTATION,La/X;@La/AnAnnotation;,]\n" + 
545
			"2:MARKER_ANNOTATION,[33,14],,,[ANNOTATION,La/X;@La/AnAnnotation2;,]\n" + 
545
			"2:NORMAL_ANNOTATION,[33,21],,RECOVERED,[ANNOTATION,La/X;@La/AnAnnotation2;,]\n" + 
546
			"3:MODIFIER,[56,6],,,[N/A]\n" + 
546
			"3:MODIFIER,[56,6],,,[N/A]\n" + 
547
			"===== Problems =====\n" + 
547
			"===== Problems =====\n" + 
548
			"1. ERROR in /Converter15/src/a/X.java (at line 2)\n" + 
548
			"1. ERROR in /Converter15/src/a/X.java (at line 2)\n" + 
Lines 579-585 Link Here
579
			"package a;\n" +
579
			"package a;\n" +
580
			"public class X {\n" +
580
			"public class X {\n" +
581
			"  public void foo(){\n" +
581
			"  public void foo(){\n" +
582
			"    [*1*]@AnAnnotation[*1*](value=)\n" +
582
			"    [*1*]@AnAnnotation(value=[*1*])\n" +
583
			"    [*2*]@AnAnnotation2(value=\"b\")[*2*]\n" +
583
			"    [*2*]@AnAnnotation2(value=\"b\")[*2*]\n" +
584
			"    class Y {}\n" +
584
			"    class Y {}\n" +
585
			"  }\n" +
585
			"  }\n" +
Lines 590-602 Link Here
590
			"package a;\n" + 
590
			"package a;\n" + 
591
			"public class X {\n" + 
591
			"public class X {\n" + 
592
			"  public void foo(){\n" + 
592
			"  public void foo(){\n" + 
593
			"[*1*]@AnAnnotation[*1*] [*2*]@AnAnnotation2(value=\"b\")[*2*] class Y {\n" + 
593
			"[*1*]@AnAnnotation(value=$missing$)[*1*] [*2*]@AnAnnotation2(value=\"b\")[*2*] class Y {\n" + 
594
			"    }\n" + 
594
			"    }\n" + 
595
			"  }\n" + 
595
			"  }\n" + 
596
			"}\n" + 
596
			"}\n" + 
597
			"\n" + 
597
			"\n" + 
598
			"===== Details =====\n" + 
598
			"===== Details =====\n" + 
599
			"1:MARKER_ANNOTATION,[53,13],,,[ANNOTATION,La/X$115$Y;@La/AnAnnotation;,]\n" + 
599
			"1:NORMAL_ANNOTATION,[53,20],,RECOVERED,[ANNOTATION,La/X$115$Y;@La/AnAnnotation;,]\n" + 
600
			"2:NORMAL_ANNOTATION,[79,25],,,[ANNOTATION,La/X$115$Y;@La/AnAnnotation2;,]\n" + 
600
			"2:NORMAL_ANNOTATION,[79,25],,,[ANNOTATION,La/X$115$Y;@La/AnAnnotation2;,]\n" + 
601
			"===== Problems =====\n" + 
601
			"===== Problems =====\n" + 
602
			"1. ERROR in /Converter15/src/a/X.java (at line 4)\n" + 
602
			"1. ERROR in /Converter15/src/a/X.java (at line 4)\n" + 
Lines 705-724 Link Here
705
	ASTResult result = this.buildMarkedAST(
705
	ASTResult result = this.buildMarkedAST(
706
			"/Converter15/src/a/X.java",
706
			"/Converter15/src/a/X.java",
707
			"package a;\n" +
707
			"package a;\n" +
708
			"[*1*][*2*]@AnAnnotation[*2*]([*3*]name1=[*3*])\n" +
708
			"[*1*][*2*]@AnAnnotation([*3*]name1=[*3*][*2*])\n" +
709
			"public class X {\n" +
709
			"public class X {\n" +
710
			"}[*1*]\n");
710
			"}[*1*]\n");
711
	
711
	
712
	assertASTResult(
712
	assertASTResult(
713
			"===== AST =====\n" + 
713
			"===== AST =====\n" + 
714
			"package a;\n" + 
714
			"package a;\n" + 
715
			"[*1*][*2*]@AnAnnotation[*2*] public class X {\n" + 
715
			"[*1*][*2*]@AnAnnotation([*3*]name1=$missing$[*3*])[*2*] public class X {\n" + 
716
			"}[*1*]\n" + 
716
			"}[*1*]\n" + 
717
			"\n" + 
717
			"\n" + 
718
			"===== Details =====\n" + 
718
			"===== Details =====\n" + 
719
			"1:TYPE_DECLARATION,[11,40],,MALFORMED|RECOVERED,[TYPE,La/X;,]\n" + 
719
			"1:TYPE_DECLARATION,[11,40],,MALFORMED,[TYPE,La/X;,]\n" + 
720
			"2:MARKER_ANNOTATION,[11,13],,,[ANNOTATION,La/X;@La/AnAnnotation;,]\n" + 
720
			"2:NORMAL_ANNOTATION,[11,20],,RECOVERED,[ANNOTATION,La/X;@La/AnAnnotation;,]\n" + 
721
			"3:No corresponding node\n" + 
721
			"3:MEMBER_VALUE_PAIR,[25,6],,RECOVERED,[N/A]\n" + 
722
			"===== Problems =====\n" + 
722
			"===== Problems =====\n" + 
723
			"1. ERROR in /Converter15/src/a/X.java (at line 2)\n" + 
723
			"1. ERROR in /Converter15/src/a/X.java (at line 2)\n" + 
724
			"	@AnAnnotation(name1=)\n" + 
724
			"	@AnAnnotation(name1=)\n" + 
Lines 831-849 Link Here
831
	ASTResult result = this.buildMarkedAST(
831
	ASTResult result = this.buildMarkedAST(
832
			"/Converter15/src/a/X.java",
832
			"/Converter15/src/a/X.java",
833
			"package a;\n" +
833
			"package a;\n" +
834
			"[*1*][*2*]@AnAnnotation[*2*](value=@AnAnnotation2(value=))\n" +
834
			"[*1*][*2*]@AnAnnotation(value=[*2*][*3*]@AnAnnotation2(value=[*3*]))\n" +
835
			"public class X {\n" +
835
			"public class X {\n" +
836
			"}[*1*]\n");
836
			"}[*1*]\n");
837
	
837
	
838
	assertASTResult(
838
	assertASTResult(
839
			"===== AST =====\n" + 
839
			"===== AST =====\n" + 
840
			"package a;\n" + 
840
			"package a;\n" + 
841
			"[*1*][*2*]@AnAnnotation[*2*] public class X {\n" + 
841
			"[*1*][*2*]@AnAnnotation(value=$missing$)[*2*] public class X {\n" + 
842
			"}[*1*]\n" + 
842
			"}[*1*]\n" + 
843
			"\n" + 
843
			"\n" + 
844
			"===== Details =====\n" + 
844
			"===== Details =====\n" + 
845
			"1:TYPE_DECLARATION,[11,62],,MALFORMED|RECOVERED,[TYPE,La/X;,]\n" + 
845
			"1:TYPE_DECLARATION,[11,62],,MALFORMED|RECOVERED,[TYPE,La/X;,]\n" + 
846
			"2:MARKER_ANNOTATION,[11,13],,,[ANNOTATION,La/X;@La/AnAnnotation;,]\n" + 
846
			"2:NORMAL_ANNOTATION,[11,20],,RECOVERED,[ANNOTATION,La/X;@La/AnAnnotation;,]\n" + 
847
			"3:No corresponding node\n" + 
847
			"===== Problems =====\n" + 
848
			"===== Problems =====\n" + 
848
			"1. ERROR in /Converter15/src/a/X.java (at line 2)\n" + 
849
			"1. ERROR in /Converter15/src/a/X.java (at line 2)\n" + 
849
			"	@AnAnnotation(value=@AnAnnotation2(value=))\n" + 
850
			"	@AnAnnotation(value=@AnAnnotation2(value=))\n" + 
Lines 874-894 Link Here
874
	ASTResult result = this.buildMarkedAST(
875
	ASTResult result = this.buildMarkedAST(
875
			"/Converter15/src/a/X.java",
876
			"/Converter15/src/a/X.java",
876
			"package a;\n" +
877
			"package a;\n" +
877
			"[*1*][*2*]@AnAnnotation[*2*](value1=,[*3*]value=[*4*]@AnAnnotation2(value=\"b\")[*4*][*3*])\n" +
878
			"[*1*][*2*]@AnAnnotation([*3*]value1=[*3*][*2*],[*4*]value=[*5*]@AnAnnotation2(value=\"b\")[*5*][*4*])\n" +
878
			"public class X {\n" +
879
			"public class X {\n" +
879
			"}[*1*]\n");
880
			"}[*1*]\n");
880
	
881
	
881
	assertASTResult(
882
	assertASTResult(
882
			"===== AST =====\n" + 
883
			"===== AST =====\n" + 
883
			"package a;\n" + 
884
			"package a;\n" + 
884
			"[*1*][*2*]@AnAnnotation[*2*] [*4*]@AnAnnotation2(value=\"b\")[*4*] public class X {\n" + 
885
			"[*1*][*2*]@AnAnnotation([*3*]value1=$missing$[*3*])[*2*] [*5*]@AnAnnotation2(value=\"b\")[*5*] public class X {\n" + 
885
			"}[*1*]\n" + 
886
			"}[*1*]\n" + 
886
			"\n" + 
887
			"\n" + 
887
			"===== Details =====\n" + 
888
			"===== Details =====\n" + 
888
			"1:TYPE_DECLARATION,[11,73],,MALFORMED|RECOVERED,[TYPE,La/X;,]\n" + 
889
			"1:TYPE_DECLARATION,[11,73],,MALFORMED,[TYPE,La/X;,]\n" + 
889
			"2:MARKER_ANNOTATION,[11,13],,,[ANNOTATION,La/X;@La/AnAnnotation;,]\n" + 
890
			"2:NORMAL_ANNOTATION,[11,21],,RECOVERED,[ANNOTATION,La/X;@La/AnAnnotation;,]\n" + 
890
			"4:NORMAL_ANNOTATION,[39,25],,,[ANNOTATION,La/X;@La/AnAnnotation2;,]\n" + 
891
			"3:MEMBER_VALUE_PAIR,[25,7],,RECOVERED,[N/A]\n" + 
891
			"3:No corresponding node\n" + 
892
			"5:NORMAL_ANNOTATION,[39,25],,,[ANNOTATION,La/X;@La/AnAnnotation2;,]\n" + 
893
			"4:No corresponding node\n" + 
892
			"===== Problems =====\n" + 
894
			"===== Problems =====\n" + 
893
			"1. ERROR in /Converter15/src/a/X.java (at line 2)\n" + 
895
			"1. ERROR in /Converter15/src/a/X.java (at line 2)\n" + 
894
			"	@AnAnnotation(value1=,value=@AnAnnotation2(value=\"b\"))\n" + 
896
			"	@AnAnnotation(value1=,value=@AnAnnotation2(value=\"b\"))\n" + 
(-)src/org/eclipse/jdt/core/tests/model/CompilationUnitTests.java (-1 / +16 lines)
Lines 823-829 Link Here
823
		"@MyAnnot([unknown]{<null>})\n",
823
		"@MyAnnot([unknown]{<null>})\n",
824
		annotations);
824
		annotations);
825
}
825
}
826
826
/*
827
 * Ensure that the recovered annotation is correct
828
 * (regression test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=228464 )
829
 */
830
public void testAnnotations27() throws CoreException {
831
	createWorkingCopy(
832
		"package p;\n" +
833
		"@MyAnnot(name=)\n" +
834
		"public class Y {\n" +
835
		"}"
836
	);
837
	IAnnotation[] annotations = this.workingCopy.getType("Y").getAnnotations();
838
	assertAnnotationsEqual(
839
		"@MyAnnot(name=<null>)\n",
840
		annotations);
841
}
827
/*
842
/*
828
 * Ensures that getFullyQualifiedName() behaves correctly for a top level source type
843
 * Ensures that getFullyQualifiedName() behaves correctly for a top level source type
829
 */
844
 */
(-)src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java (+33 lines)
Lines 10003-10008 Link Here
10003
}
10003
}
10004
10004
10005
/**
10005
/**
10006
 * @bug 228464: Annotation.getMemberValuePairs() empty for single attribute with empty value
10007
 * @test Ensure that annotation are correctly recovered
10008
 * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=228464"
10009
 */
10010
public void testBug228464() throws CoreException {
10011
	workingCopies = new ICompilationUnit[1];
10012
	workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/Test.java",
10013
		"public class Test {\n" + 
10014
		"    void m() {\n" + 
10015
		"        @TestAnnotation(name=) Test iii;\n" + 
10016
				"    }\n" + 
10017
		"\n" + 
10018
		"}\n"
10019
	);
10020
	this.resultCollector.showSelection = true;
10021
	IType type = workingCopies[0].getType("Test");
10022
	search(type, REFERENCES, getJavaSearchWorkingCopiesScope());
10023
	
10024
	IAnnotation[] annotations = new IAnnotation[0];
10025
	if (resultCollector.match != null &&
10026
			resultCollector.match instanceof ReferenceMatch) {
10027
		IJavaElement element = ((ReferenceMatch)resultCollector.match).getLocalElement();
10028
		if (element instanceof ILocalVariable) {
10029
			annotations = ((ILocalVariable)element).getAnnotations();
10030
		}
10031
	}
10032
	
10033
	assertAnnotationsEqual(
10034
		"@TestAnnotation(name=<null>)\n",
10035
		annotations);
10036
}
10037
10038
/**
10006
 * @bug 228852: classes opened via Open Type not found
10039
 * @bug 228852: classes opened via Open Type not found
10007
 * @test Ensure that types found in an internal jar exist when using a workspace scope
10040
 * @test Ensure that types found in an internal jar exist when using a workspace scope
10008
 * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=228852"
10041
 * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=228852"

Return to bug 228464