test/tools/javac/resolve/ResolveHarness.java

changeset 1779
97a9b4b3e63a
parent 1466
b52a38d4536c
child 1875
f559ef7568ce
equal deleted inserted replaced
1778:58329d9f6b68 1779:97a9b4b3e63a
41 import java.util.ArrayList; 41 import java.util.ArrayList;
42 import java.util.Collections; 42 import java.util.Collections;
43 import java.util.HashMap; 43 import java.util.HashMap;
44 import java.util.HashSet; 44 import java.util.HashSet;
45 import java.util.List; 45 import java.util.List;
46 import java.util.Locale;
46 import java.util.Map; 47 import java.util.Map;
47 48
48 import javax.annotation.processing.AbstractProcessor; 49 import javax.annotation.processing.AbstractProcessor;
49 import javax.annotation.processing.RoundEnvironment; 50 import javax.annotation.processing.RoundEnvironment;
50 import javax.annotation.processing.SupportedAnnotationTypes; 51 import javax.annotation.processing.SupportedAnnotationTypes;
83 DiagnosticProcessor[] diagProcessors; 84 DiagnosticProcessor[] diagProcessors;
84 Map<ElementKey, Candidate> candidatesMap = new HashMap<ElementKey, Candidate>(); 85 Map<ElementKey, Candidate> candidatesMap = new HashMap<ElementKey, Candidate>();
85 Set<String> declaredKeys = new HashSet<>(); 86 Set<String> declaredKeys = new HashSet<>();
86 List<Diagnostic<? extends JavaFileObject>> diags = new ArrayList<>(); 87 List<Diagnostic<? extends JavaFileObject>> diags = new ArrayList<>();
87 List<ElementKey> seenCandidates = new ArrayList<>(); 88 List<ElementKey> seenCandidates = new ArrayList<>();
89 Map<String, String> predefTranslationMap = new HashMap<>();
88 90
89 protected ResolveHarness(JavaFileObject jfo) { 91 protected ResolveHarness(JavaFileObject jfo) {
90 this.jfo = jfo; 92 this.jfo = jfo;
91 this.diagProcessors = new DiagnosticProcessor[] { 93 this.diagProcessors = new DiagnosticProcessor[] {
92 new VerboseResolutionNoteProcessor(), 94 new VerboseResolutionNoteProcessor(),
93 new VerboseDeferredInferenceNoteProcessor(), 95 new VerboseDeferredInferenceNoteProcessor(),
94 new ErrorProcessor() 96 new ErrorProcessor()
95 }; 97 };
98 predefTranslationMap.put("+", "_plus");
99 predefTranslationMap.put("-", "_minus");
100 predefTranslationMap.put("~", "_not");
101 predefTranslationMap.put("++", "_plusplus");
102 predefTranslationMap.put("--", "_minusminus");
103 predefTranslationMap.put("!", "_bang");
104 predefTranslationMap.put("*", "_mul");
105 predefTranslationMap.put("/", "_div");
106 predefTranslationMap.put("%", "_mod");
107 predefTranslationMap.put("&", "_and");
108 predefTranslationMap.put("|", "_or");
109 predefTranslationMap.put("^", "_xor");
110 predefTranslationMap.put("<<", "_lshift");
111 predefTranslationMap.put(">>", "_rshift");
112 predefTranslationMap.put("<<<", "_lshiftshift");
113 predefTranslationMap.put(">>>", "_rshiftshift");
114 predefTranslationMap.put("<", "_lt");
115 predefTranslationMap.put(">", "_gt");
116 predefTranslationMap.put("<=", "_lteq");
117 predefTranslationMap.put(">=", "_gteq");
118 predefTranslationMap.put("==", "_eq");
119 predefTranslationMap.put("!=", "_neq");
120 predefTranslationMap.put("&&", "_andand");
121 predefTranslationMap.put("||", "_oror");
96 } 122 }
97 123
98 protected void check() throws Exception { 124 protected void check() throws Exception {
99 String[] options = { 125 String[] options = {
100 "-XDshouldStopPolicy=ATTR", 126 "-XDshouldStopPolicy=ATTR",
101 "-XDverboseResolution=success,failure,applicable,inapplicable,deferred-inference" 127 "-XDverboseResolution=success,failure,applicable,inapplicable,deferred-inference,predef"
102 }; 128 };
103 129
104 AbstractProcessor[] processors = { new ResolveCandidateFinder(), null }; 130 AbstractProcessor[] processors = { new ResolveCandidateFinder(), null };
105 131
106 @SuppressWarnings("unchecked") 132 @SuppressWarnings("unchecked")
221 } 247 }
222 248
223 @Override 249 @Override
224 void process(Diagnostic<? extends JavaFileObject> diagnostic) { 250 void process(Diagnostic<? extends JavaFileObject> diagnostic) {
225 Element siteSym = getSiteSym(diagnostic); 251 Element siteSym = getSiteSym(diagnostic);
226 if (siteSym.getAnnotation(TraceResolve.class) == null) { 252 if (siteSym.getSimpleName().length() != 0 &&
253 siteSym.getAnnotation(TraceResolve.class) == null) {
227 return; 254 return;
228 } 255 }
229 int candidateIdx = 0; 256 int candidateIdx = 0;
230 for (JCDiagnostic d : subDiagnostics(diagnostic)) { 257 for (JCDiagnostic d : subDiagnostics(diagnostic)) {
231 boolean isMostSpecific = candidateIdx++ == mostSpecific(diagnostic); 258 boolean isMostSpecific = candidateIdx++ == mostSpecific(diagnostic);
305 } 332 }
306 } 333 }
307 334
308 if (Arrays.asList(c.applicable()).contains(phase)) { //applicable 335 if (Arrays.asList(c.applicable()).contains(phase)) { //applicable
309 if (c.mostSpecific() != mostSpecific) { 336 if (c.mostSpecific() != mostSpecific) {
310 error("Invalid most specific value for method " + methodSym); 337 error("Invalid most specific value for method " + methodSym + " " + new ElementKey(methodSym).key);
311 } 338 }
312 MethodType mtype = getSig(diagnostic); 339 MethodType mtype = getSig(diagnostic);
313 if (mtype != null) { 340 if (mtype != null) {
314 checkSig(c, methodSym, mtype); 341 checkSig(c, methodSym, mtype);
315 } 342 }
442 return key.hashCode(); 469 return key.hashCode();
443 } 470 }
444 471
445 String computeKey(Element e) { 472 String computeKey(Element e) {
446 StringBuilder buf = new StringBuilder(); 473 StringBuilder buf = new StringBuilder();
447 while (e != null) { 474 if (predefTranslationMap.containsKey(e.getSimpleName().toString())) {
475 //predef element
476 buf.append("<predef>.");
477 String replacedName = predefTranslationMap.get(e.getSimpleName().toString());
478 buf.append(e.toString().replace(e.getSimpleName().toString(), replacedName));
479 } else if (e.getSimpleName().toString().startsWith("_")) {
480 buf.append("<predef>.");
448 buf.append(e.toString()); 481 buf.append(e.toString());
449 e = e.getEnclosingElement(); 482 } else {
450 } 483 while (e != null) {
451 buf.append(jfo.getName()); 484 buf.append(e.toString());
485 e = e.getEnclosingElement();
486 }
487 buf.append(jfo.getName());
488 }
452 return buf.toString(); 489 return buf.toString();
453 } 490 }
454 491
455 @Override 492 @Override
456 public String toString() { 493 public String toString() {

mercurial