88import com .sun .source .tree .TryTree ;
99import com .sun .source .util .TreeScanner ;
1010import java .util .ArrayList ;
11+ import java .util .Collections ;
1112import java .util .List ;
1213import javax .lang .model .type .TypeKind ;
1314import javax .lang .model .type .TypeMirror ;
1415import javax .lang .model .type .UnionType ;
16+ import org .checkerframework .checker .nullness .qual .Nullable ;
1517import org .checkerframework .framework .type .AnnotatedTypeMirror ;
1618import org .checkerframework .framework .type .AnnotatedTypeMirror .AnnotatedExecutableType ;
1719import org .checkerframework .javacutil .TreeUtils ;
@@ -31,14 +33,16 @@ private CheckedExceptionsUtil() {}
3133 */
3234 public static List <TypeMirror > thrownCheckedExceptions (
3335 LambdaExpressionTree lambda , Java8InferenceContext context ) {
34- return new CheckedExceptionVisitor (context ).scan (lambda , null );
36+ @ Nullable List <TypeMirror > result = new CheckedExceptionVisitor (context ).scan (lambda , null );
37+ return result != null ? result : Collections .emptyList ();
3538 }
3639
3740 /**
3841 * Helper class for gathering the types of checked exceptions in a lambda. See
3942 * https://docs.oracle.com/javase/specs/jls/se9/html/jls-11.html#jls-11.2.2
4043 */
41- private static class CheckedExceptionVisitor extends TreeScanner <List <TypeMirror >, Void > {
44+ private static class CheckedExceptionVisitor
45+ extends TreeScanner <@ Nullable List <TypeMirror >, Void > {
4246
4347 /** the context. */
4448 private final Java8InferenceContext context ;
@@ -70,7 +74,7 @@ public List<TypeMirror> visitThrow(ThrowTree node, Void aVoid) {
7074 if (result == null ) {
7175 result = new ArrayList <>();
7276 }
73- TypeMirror type = TreeUtils .typeOf (node );
77+ TypeMirror type = TreeUtils .typeOf (node . getExpression () );
7478 if (isCheckedException (type , context )) {
7579 result .add (type );
7680 }
@@ -171,15 +175,17 @@ private static boolean isCheckedException(TypeMirror type, Java8InferenceContext
171175 */
172176 public static List <AnnotatedTypeMirror > thrownCheckedExceptionsATM (
173177 LambdaExpressionTree lambda , Java8InferenceContext context ) {
174- return new CheckedExceptionATMVisitor (context ).scan (lambda , null );
178+ @ Nullable List <AnnotatedTypeMirror > result =
179+ new CheckedExceptionATMVisitor (context ).scan (lambda , null );
180+ return result != null ? result : Collections .emptyList ();
175181 }
176182
177183 /**
178184 * Helper class for gathering the types of checked exceptions in a lambda. See
179185 * https://docs.oracle.com/javase/specs/jls/se9/html/jls-11.html#jls-11.2.2
180186 */
181187 private static class CheckedExceptionATMVisitor
182- extends TreeScanner <List <AnnotatedTypeMirror >, Void > {
188+ extends TreeScanner <@ Nullable List <AnnotatedTypeMirror >, Void > {
183189
184190 /** The context. */
185191 private final Java8InferenceContext context ;
@@ -212,7 +218,7 @@ public List<AnnotatedTypeMirror> visitThrow(ThrowTree node, Void aVoid) {
212218 if (result == null ) {
213219 result = new ArrayList <>();
214220 }
215- AnnotatedTypeMirror type = context .typeFactory .getAnnotatedType (node );
221+ AnnotatedTypeMirror type = context .typeFactory .getAnnotatedType (node . getExpression () );
216222 if (isCheckedException (type , context )) {
217223 result .add (type );
218224 }
0 commit comments