1129 }
1130 if (c.param.sym.kind == Kinds.VAR) {
1131 c.param.sym.setData(ElementKind.EXCEPTION_PARAMETER);
1132 }
1133 chk.checkType(c.param.vartype.pos(),
1134 chk.checkClassType(c.param.vartype.pos(), ctype),
1135 syms.throwableType);
1136 attribStat(c.body, catchEnv);
1137 catchEnv.info.scope.leave();
1138 }
1139
1140 // Attribute finalizer
1141 if (tree.finalizer != null) attribStat(tree.finalizer, localEnv);
1142
1143 localEnv.info.scope.leave();
1144 result = null;
1145 }
1146
1147 void checkAutoCloseable(DiagnosticPosition pos, Env<AttrContext> env, Type resource) {
1148 if (!resource.isErroneous() &&
1149 types.asSuper(resource, syms.autoCloseableType.tsym) != null) {
1150 Symbol close = syms.noSymbol;
1151 boolean prevDeferDiags = log.deferDiagnostics;
1152 Queue<JCDiagnostic> prevDeferredDiags = log.deferredDiagnostics;
1153 try {
1154 log.deferDiagnostics = true;
1155 log.deferredDiagnostics = ListBuffer.lb();
1156 close = rs.resolveQualifiedMethod(pos,
1157 env,
1158 resource,
1159 names.close,
1160 List.<Type>nil(),
1161 List.<Type>nil());
1162 }
1163 finally {
1164 log.deferDiagnostics = prevDeferDiags;
1165 log.deferredDiagnostics = prevDeferredDiags;
1166 }
1167 if (close.kind == MTH &&
1168 close.overrides(syms.autoCloseableClose, resource.tsym, types, true) &&
1169 chk.isHandled(syms.interruptedExceptionType, types.memberType(resource, close).getThrownTypes()) &&
|
1129 }
1130 if (c.param.sym.kind == Kinds.VAR) {
1131 c.param.sym.setData(ElementKind.EXCEPTION_PARAMETER);
1132 }
1133 chk.checkType(c.param.vartype.pos(),
1134 chk.checkClassType(c.param.vartype.pos(), ctype),
1135 syms.throwableType);
1136 attribStat(c.body, catchEnv);
1137 catchEnv.info.scope.leave();
1138 }
1139
1140 // Attribute finalizer
1141 if (tree.finalizer != null) attribStat(tree.finalizer, localEnv);
1142
1143 localEnv.info.scope.leave();
1144 result = null;
1145 }
1146
1147 void checkAutoCloseable(DiagnosticPosition pos, Env<AttrContext> env, Type resource) {
1148 if (!resource.isErroneous() &&
1149 types.asSuper(resource, syms.autoCloseableType.tsym) != null &&
1150 !types.isSameType(resource, syms.autoCloseableType)) { // Don't emit warning for AutoCloseable itself
1151 Symbol close = syms.noSymbol;
1152 boolean prevDeferDiags = log.deferDiagnostics;
1153 Queue<JCDiagnostic> prevDeferredDiags = log.deferredDiagnostics;
1154 try {
1155 log.deferDiagnostics = true;
1156 log.deferredDiagnostics = ListBuffer.lb();
1157 close = rs.resolveQualifiedMethod(pos,
1158 env,
1159 resource,
1160 names.close,
1161 List.<Type>nil(),
1162 List.<Type>nil());
1163 }
1164 finally {
1165 log.deferDiagnostics = prevDeferDiags;
1166 log.deferredDiagnostics = prevDeferredDiags;
1167 }
1168 if (close.kind == MTH &&
1169 close.overrides(syms.autoCloseableClose, resource.tsym, types, true) &&
1170 chk.isHandled(syms.interruptedExceptionType, types.memberType(resource, close).getThrownTypes()) &&
|