src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Infer.java
changeset 50218 0df902a00215
parent 49876 ac916fea6ec7
child 50564 ef7c4c77d9fa
equal deleted inserted replaced
50217:843fc56f4686 50218:0df902a00215
   258                         (!inferenceContext.inferencevars.contains(restype) || //no eager instantiation is required (as per 18.5.2)
   258                         (!inferenceContext.inferencevars.contains(restype) || //no eager instantiation is required (as per 18.5.2)
   259                                 !needsEagerInstantiation((UndetVar)inferenceContext.asUndetVar(restype), target.pt, inferenceContext));
   259                                 !needsEagerInstantiation((UndetVar)inferenceContext.asUndetVar(restype), target.pt, inferenceContext));
   260         }
   260         }
   261 
   261 
   262         private List<Type> roots(MethodType mt, DeferredAttrContext deferredAttrContext) {
   262         private List<Type> roots(MethodType mt, DeferredAttrContext deferredAttrContext) {
   263             ListBuffer<Type> roots = new ListBuffer<>();
       
   264             roots.add(mt.getReturnType());
       
   265             if (deferredAttrContext != null && deferredAttrContext.mode == AttrMode.CHECK) {
   263             if (deferredAttrContext != null && deferredAttrContext.mode == AttrMode.CHECK) {
   266                 roots.addAll(mt.getThrownTypes());
   264                 ListBuffer<Type> roots = new ListBuffer<>();
       
   265                 roots.add(mt.getReturnType());
   267                 for (DeferredAttr.DeferredAttrNode n : deferredAttrContext.deferredAttrNodes) {
   266                 for (DeferredAttr.DeferredAttrNode n : deferredAttrContext.deferredAttrNodes) {
   268                     roots.addAll(n.deferredStuckPolicy.stuckVars());
   267                     roots.addAll(n.deferredStuckPolicy.stuckVars());
   269                     roots.addAll(n.deferredStuckPolicy.depVars());
   268                     roots.addAll(n.deferredStuckPolicy.depVars());
   270                 }
   269                 }
   271             }
   270                 List<Type> thrownVars = deferredAttrContext.inferenceContext.inferencevars.stream()
   272             return roots.toList();
   271                                 .filter(tv -> (tv.tsym.flags() & Flags.THROWS) != 0).collect(List.collector());
       
   272                 List<Type> result = roots.toList();
       
   273                 result = result.appendList(thrownVars.diff(result));
       
   274                 return result;
       
   275             } else {
       
   276                 return List.of(mt.getReturnType());
       
   277             }
   273         }
   278         }
   274 
   279 
   275     /**
   280     /**
   276      * A partially infered method/constructor type; such a type can be checked multiple times
   281      * A partially infered method/constructor type; such a type can be checked multiple times
   277      * against different targets.
   282      * against different targets.