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

Print this page




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()) &&