From 7714c45437abf13ad477586353c0a4f70a6515bd Mon Sep 17 00:00:00 2001 From: Christopher Lambert Date: Thu, 30 Mar 2023 18:47:07 +0200 Subject: [PATCH] refactor simple onOverrideMayBeNullExpr handlers (#747) When `exprMayBeNull` is true, return immediately, to make clear that these handlers only support `false -> true` transitions Co-authored-by: Manu Sridharan --- .../nullaway/handlers/InferredJARModelsHandler.java | 12 ++++++++---- .../nullaway/handlers/OptionalEmptinessHandler.java | 7 +++++-- .../handlers/RestrictiveAnnotationHandler.java | 11 +++++++---- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/nullaway/src/main/java/com/uber/nullaway/handlers/InferredJARModelsHandler.java b/nullaway/src/main/java/com/uber/nullaway/handlers/InferredJARModelsHandler.java index cb97e88835..bd70059580 100644 --- a/nullaway/src/main/java/com/uber/nullaway/handlers/InferredJARModelsHandler.java +++ b/nullaway/src/main/java/com/uber/nullaway/handlers/InferredJARModelsHandler.java @@ -196,11 +196,15 @@ public boolean onOverrideMayBeNullExpr( @Nullable Symbol exprSymbol, VisitorState state, boolean exprMayBeNull) { - if (expr.getKind().equals(Tree.Kind.METHOD_INVOCATION) - && exprSymbol instanceof Symbol.MethodSymbol) { - return exprMayBeNull || isReturnAnnotatedNullable((Symbol.MethodSymbol) exprSymbol); + if (exprMayBeNull) { + return true; } - return exprMayBeNull; + if (expr.getKind() == Tree.Kind.METHOD_INVOCATION + && exprSymbol instanceof Symbol.MethodSymbol + && isReturnAnnotatedNullable((Symbol.MethodSymbol) exprSymbol)) { + return true; + } + return false; } private boolean isReturnAnnotatedNullable(Symbol.MethodSymbol methodSymbol) { diff --git a/nullaway/src/main/java/com/uber/nullaway/handlers/OptionalEmptinessHandler.java b/nullaway/src/main/java/com/uber/nullaway/handlers/OptionalEmptinessHandler.java index cff642ccbc..e5818854dc 100644 --- a/nullaway/src/main/java/com/uber/nullaway/handlers/OptionalEmptinessHandler.java +++ b/nullaway/src/main/java/com/uber/nullaway/handlers/OptionalEmptinessHandler.java @@ -87,12 +87,15 @@ public boolean onOverrideMayBeNullExpr( @Nullable Symbol exprSymbol, VisitorState state, boolean exprMayBeNull) { - if (expr.getKind().equals(Tree.Kind.METHOD_INVOCATION) + if (exprMayBeNull) { + return true; + } + if (expr.getKind() == Tree.Kind.METHOD_INVOCATION && exprSymbol instanceof Symbol.MethodSymbol && optionalIsGetCall((Symbol.MethodSymbol) exprSymbol, state.getTypes())) { return true; } - return exprMayBeNull; + return false; } @Override diff --git a/nullaway/src/main/java/com/uber/nullaway/handlers/RestrictiveAnnotationHandler.java b/nullaway/src/main/java/com/uber/nullaway/handlers/RestrictiveAnnotationHandler.java index 10520d9e35..8e6ac8ee64 100644 --- a/nullaway/src/main/java/com/uber/nullaway/handlers/RestrictiveAnnotationHandler.java +++ b/nullaway/src/main/java/com/uber/nullaway/handlers/RestrictiveAnnotationHandler.java @@ -76,13 +76,16 @@ public boolean onOverrideMayBeNullExpr( @Nullable Symbol exprSymbol, VisitorState state, boolean exprMayBeNull) { + if (exprMayBeNull) { + return true; + } Tree.Kind exprKind = expr.getKind(); if (exprSymbol != null - && (exprKind.equals(Tree.Kind.METHOD_INVOCATION) - || exprKind.equals(Tree.Kind.IDENTIFIER))) { - return exprMayBeNull || isSymbolRestrictivelyNullable(exprSymbol, state.context); + && (exprKind == Tree.Kind.METHOD_INVOCATION || exprKind == Tree.Kind.IDENTIFIER) + && isSymbolRestrictivelyNullable(exprSymbol, state.context)) { + return true; } - return exprMayBeNull; + return false; } @Nullable private CodeAnnotationInfo codeAnnotationInfo;