43 static int checkCount = 0; |
42 static int checkCount = 0; |
44 |
43 |
45 enum ReferenceKind { |
44 enum ReferenceKind { |
46 METHOD_REF("#Q##Gm"), |
45 METHOD_REF("#Q##Gm"), |
47 CONSTRUCTOR_REF("#Q##Gnew"), |
46 CONSTRUCTOR_REF("#Q##Gnew"), |
|
47 FALSE_REF("min < max"), |
48 ERR_SUPER("#Q##Gsuper"), |
48 ERR_SUPER("#Q##Gsuper"), |
49 ERR_METH0("#Q##Gm()"), |
49 ERR_METH0("#Q##Gm()"), |
50 ERR_METH1("#Q##Gm(X)"), |
50 ERR_METH1("#Q##Gm(X)"), |
51 ERR_CONSTR0("#Q##Gnew()"), |
51 ERR_CONSTR0("#Q##Gnew()"), |
52 ERR_CONSTR1("#Q##Gnew(X)"); |
52 ERR_CONSTR1("#Q##Gnew(X)"); |
74 default: return false; |
74 default: return false; |
75 } |
75 } |
76 } |
76 } |
77 } |
77 } |
78 |
78 |
|
79 enum ContextKind { |
|
80 ASSIGN("SAM s = #E;"), |
|
81 METHOD("m(#E, i);"); |
|
82 |
|
83 String contextTemplate; |
|
84 |
|
85 ContextKind(String contextTemplate) { |
|
86 this.contextTemplate = contextTemplate; |
|
87 } |
|
88 |
|
89 String contextString(ExprKind ek, ReferenceKind rk, QualifierKind qk, GenericKind gk, SubExprKind sk) { |
|
90 return contextTemplate.replaceAll("#E", ek.expressionString(rk, qk, gk, sk)); |
|
91 } |
|
92 } |
|
93 |
79 enum GenericKind { |
94 enum GenericKind { |
80 NONE(""), |
95 NONE(""), |
81 ONE("<X>"), |
96 ONE("<X>"), |
82 TWO("<X,Y>"); |
97 TWO("<X,Y>"); |
83 |
98 |
95 METHOD("m()"), |
110 METHOD("m()"), |
96 FIELD("a.f"), |
111 FIELD("a.f"), |
97 UBOUND_SIMPLE("A"), |
112 UBOUND_SIMPLE("A"), |
98 UNBOUND_GENERIC1("A<X>"), |
113 UNBOUND_GENERIC1("A<X>"), |
99 UNBOUND_GENERIC2("A<X, Y>"), |
114 UNBOUND_GENERIC2("A<X, Y>"), |
100 UNBOUND_GENERIC3("A<? extends X, ? super Y>"); |
115 UNBOUND_GENERIC3("A<? extends X, ? super Y>"), |
|
116 UNBOUND_GENERIC4("A<int[], short[][]>"), |
|
117 NESTED_GENERIC1("A<A<X,Y>, A<X,Y>>"), |
|
118 NESTED_GENERIC2("A<A<A<X,Y>,A<X,Y>>, A<A<X,Y>,A<X,Y>>>"); |
101 |
119 |
102 String qualifier; |
120 String qualifier; |
103 |
121 |
104 QualifierKind(String qualifier) { |
122 QualifierKind(String qualifier) { |
105 this.qualifier = qualifier; |
123 this.qualifier = qualifier; |
151 for (ReferenceKind rk : ReferenceKind.values()) { |
169 for (ReferenceKind rk : ReferenceKind.values()) { |
152 for (QualifierKind qk : QualifierKind.values()) { |
170 for (QualifierKind qk : QualifierKind.values()) { |
153 for (GenericKind gk : GenericKind.values()) { |
171 for (GenericKind gk : GenericKind.values()) { |
154 for (SubExprKind sk : SubExprKind.values()) { |
172 for (SubExprKind sk : SubExprKind.values()) { |
155 for (ExprKind ek : ExprKind.values()) { |
173 for (ExprKind ek : ExprKind.values()) { |
156 new MethodReferenceParserTest(rk, qk, gk, sk, ek).run(comp, fm); |
174 for (ContextKind ck : ContextKind.values()) { |
|
175 new MethodReferenceParserTest(rk, qk, gk, sk, ek, ck).run(comp, fm); |
|
176 } |
157 } |
177 } |
158 } |
178 } |
159 } |
179 } |
160 } |
180 } |
161 } |
181 } |
165 ReferenceKind rk; |
185 ReferenceKind rk; |
166 QualifierKind qk; |
186 QualifierKind qk; |
167 GenericKind gk; |
187 GenericKind gk; |
168 SubExprKind sk; |
188 SubExprKind sk; |
169 ExprKind ek; |
189 ExprKind ek; |
|
190 ContextKind ck; |
170 JavaSource source; |
191 JavaSource source; |
171 DiagnosticChecker diagChecker; |
192 DiagnosticChecker diagChecker; |
172 |
193 |
173 MethodReferenceParserTest(ReferenceKind rk, QualifierKind qk, GenericKind gk, SubExprKind sk, ExprKind ek) { |
194 MethodReferenceParserTest(ReferenceKind rk, QualifierKind qk, GenericKind gk, SubExprKind sk, ExprKind ek, ContextKind ck) { |
174 this.rk = rk; |
195 this.rk = rk; |
175 this.qk = qk; |
196 this.qk = qk; |
176 this.gk = gk; |
197 this.gk = gk; |
177 this.sk = sk; |
198 this.sk = sk; |
178 this.ek = ek; |
199 this.ek = ek; |
|
200 this.ck = ck; |
179 this.source = new JavaSource(); |
201 this.source = new JavaSource(); |
180 this.diagChecker = new DiagnosticChecker(); |
202 this.diagChecker = new DiagnosticChecker(); |
181 } |
203 } |
182 |
204 |
183 class JavaSource extends SimpleJavaFileObject { |
205 class JavaSource extends SimpleJavaFileObject { |
184 |
206 |
185 String template = "class Test {\n" + |
207 String template = "class Test {\n" + |
186 " SAM s = #E;\n" + |
208 " void test() {\n" + |
|
209 " #C\n" + |
|
210 " }" + |
187 "}"; |
211 "}"; |
188 |
212 |
189 String source; |
213 String source; |
190 |
214 |
191 public JavaSource() { |
215 public JavaSource() { |
192 super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE); |
216 super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE); |
193 source = template.replaceAll("#E", ek.expressionString(rk, qk, gk, sk)); |
217 source = template.replaceAll("#C", ck.contextString(ek, rk, qk, gk, sk)); |
194 } |
218 } |
195 |
219 |
196 @Override |
220 @Override |
197 public CharSequence getCharContent(boolean ignoreEncodingErrors) { |
221 public CharSequence getCharContent(boolean ignoreEncodingErrors) { |
198 return source; |
222 return source; |