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. |