1358 void checkAutoCloseable(DiagnosticPosition pos, Env<AttrContext> env, Type resource) { |
1358 void checkAutoCloseable(DiagnosticPosition pos, Env<AttrContext> env, Type resource) { |
1359 if (!resource.isErroneous() && |
1359 if (!resource.isErroneous() && |
1360 types.asSuper(resource, syms.autoCloseableType.tsym) != null && |
1360 types.asSuper(resource, syms.autoCloseableType.tsym) != null && |
1361 !types.isSameType(resource, syms.autoCloseableType)) { // Don't emit warning for AutoCloseable itself |
1361 !types.isSameType(resource, syms.autoCloseableType)) { // Don't emit warning for AutoCloseable itself |
1362 Symbol close = syms.noSymbol; |
1362 Symbol close = syms.noSymbol; |
1363 Filter<JCDiagnostic> prevDeferDiagsFilter = log.deferredDiagFilter; |
1363 Log.DiagnosticHandler discardHandler = new Log.DiscardDiagnosticHandler(log); |
1364 Queue<JCDiagnostic> prevDeferredDiags = log.deferredDiagnostics; |
|
1365 try { |
1364 try { |
1366 log.deferAll(); |
|
1367 log.deferredDiagnostics = ListBuffer.lb(); |
|
1368 close = rs.resolveQualifiedMethod(pos, |
1365 close = rs.resolveQualifiedMethod(pos, |
1369 env, |
1366 env, |
1370 resource, |
1367 resource, |
1371 names.close, |
1368 names.close, |
1372 List.<Type>nil(), |
1369 List.<Type>nil(), |
1373 List.<Type>nil()); |
1370 List.<Type>nil()); |
1374 } |
1371 } |
1375 finally { |
1372 finally { |
1376 log.deferredDiagFilter = prevDeferDiagsFilter; |
1373 log.popDiagnosticHandler(discardHandler); |
1377 log.deferredDiagnostics = prevDeferredDiags; |
|
1378 } |
1374 } |
1379 if (close.kind == MTH && |
1375 if (close.kind == MTH && |
1380 close.overrides(syms.autoCloseableClose, resource.tsym, types, true) && |
1376 close.overrides(syms.autoCloseableClose, resource.tsym, types, true) && |
1381 chk.isHandled(syms.interruptedExceptionType, types.memberType(resource, close).getThrownTypes()) && |
1377 chk.isHandled(syms.interruptedExceptionType, types.memberType(resource, close).getThrownTypes()) && |
1382 env.info.lint.isEnabled(LintCategory.TRY)) { |
1378 env.info.lint.isEnabled(LintCategory.TRY)) { |