test/tools/javac/lambda/MethodReferenceParserTest.java

changeset 1165
1ae5988e201b
parent 1150
e55270a7a022
child 1352
d4b3cb1ece84
equal deleted inserted replaced
1164:a7a2720c7897 1165:1ae5988e201b
22 */ 22 */
23 23
24 /* 24 /*
25 * @test 25 * @test
26 * @bug 7115052 26 * @bug 7115052
27 * @ignore 7120266
28 * @summary Add parser support for method references 27 * @summary Add parser support for method references
29 */ 28 */
30 29
31 import com.sun.source.util.JavacTask; 30 import com.sun.source.util.JavacTask;
32 import java.net.URI; 31 import java.net.URI;
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;

mercurial