src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java

changeset 1581
4ff468de829d
parent 1562
2154ed9ff6c8
child 1596
3a39d123d33a
equal deleted inserted replaced
1580:f6e667f52af4 1581:4ff468de829d
66 final Attr attr; 66 final Attr attr;
67 final Check chk; 67 final Check chk;
68 final JCDiagnostic.Factory diags; 68 final JCDiagnostic.Factory diags;
69 final Enter enter; 69 final Enter enter;
70 final Infer infer; 70 final Infer infer;
71 final Resolve rs;
71 final Log log; 72 final Log log;
72 final Symtab syms; 73 final Symtab syms;
73 final TreeMaker make; 74 final TreeMaker make;
74 final Types types; 75 final Types types;
75 76
85 attr = Attr.instance(context); 86 attr = Attr.instance(context);
86 chk = Check.instance(context); 87 chk = Check.instance(context);
87 diags = JCDiagnostic.Factory.instance(context); 88 diags = JCDiagnostic.Factory.instance(context);
88 enter = Enter.instance(context); 89 enter = Enter.instance(context);
89 infer = Infer.instance(context); 90 infer = Infer.instance(context);
91 rs = Resolve.instance(context);
90 log = Log.instance(context); 92 log = Log.instance(context);
91 syms = Symtab.instance(context); 93 syms = Symtab.instance(context);
92 make = TreeMaker.instance(context); 94 make = TreeMaker.instance(context);
93 types = Types.instance(context); 95 types = Types.instance(context);
94 Names names = Names.instance(context); 96 Names names = Names.instance(context);
461 */ 463 */
462 class StructuralStuckChecker extends TreeScanner implements DeferredTypeCompleter { 464 class StructuralStuckChecker extends TreeScanner implements DeferredTypeCompleter {
463 465
464 ResultInfo resultInfo; 466 ResultInfo resultInfo;
465 InferenceContext inferenceContext; 467 InferenceContext inferenceContext;
468 Env<AttrContext> env;
466 469
467 public Type complete(DeferredType dt, ResultInfo resultInfo, DeferredAttrContext deferredAttrContext) { 470 public Type complete(DeferredType dt, ResultInfo resultInfo, DeferredAttrContext deferredAttrContext) {
468 this.resultInfo = resultInfo; 471 this.resultInfo = resultInfo;
469 this.inferenceContext = deferredAttrContext.inferenceContext; 472 this.inferenceContext = deferredAttrContext.inferenceContext;
473 this.env = dt.env.dup(dt.tree, dt.env.info.dup());
470 dt.tree.accept(this); 474 dt.tree.accept(this);
471 dt.speculativeCache.put(deferredAttrContext.msym, stuckTree, deferredAttrContext.phase); 475 dt.speculativeCache.put(deferredAttrContext.msym, stuckTree, deferredAttrContext.phase);
472 return Type.noType; 476 return Type.noType;
473 } 477 }
474 478
509 if (inferenceContext.inferencevars.contains(pt)) { 513 if (inferenceContext.inferencevars.contains(pt)) {
510 //ok 514 //ok
511 return; 515 return;
512 } else { 516 } else {
513 try { 517 try {
514 //TODO: we should speculative determine if there's a match
515 //based on arity - if yes, method is applicable.
516 types.findDescriptorType(pt); 518 types.findDescriptorType(pt);
517 } catch (Types.FunctionDescriptorLookupError ex) { 519 } catch (Types.FunctionDescriptorLookupError ex) {
518 checkContext.report(null, ex.getDiagnostic()); 520 checkContext.report(null, ex.getDiagnostic());
521 }
522 JCExpression exprTree = (JCExpression)attribSpeculative(tree.getQualifierExpression(), env,
523 attr.memberReferenceQualifierResult(tree));
524 ListBuffer<Type> argtypes = ListBuffer.lb();
525 for (Type t : types.findDescriptorType(pt).getParameterTypes()) {
526 argtypes.append(syms.errType);
527 }
528 JCMemberReference mref2 = new TreeCopier<Void>(make).copy(tree);
529 mref2.expr = exprTree;
530 Pair<Symbol, ?> lookupRes =
531 rs.resolveMemberReference(tree, env, mref2, exprTree.type, tree.name, argtypes.toList(), null, true);
532 switch (lookupRes.fst.kind) {
533 //note: as argtypes are erroneous types, type-errors must
534 //have been caused by arity mismatch
535 case Kinds.ABSENT_MTH:
536 case Kinds.WRONG_MTH:
537 case Kinds.WRONG_MTHS:
538 case Kinds.STATICERR:
539 case Kinds.MISSING_ENCL:
540 checkContext.report(null, diags.fragment("incompatible.arg.types.in.mref"));
519 } 541 }
520 } 542 }
521 } 543 }
522 } 544 }
523 } 545 }

mercurial