diff --git a/docs/pages/pmd/rules/java/errorprone.md b/docs/pages/pmd/rules/java/errorprone.md
index 98ca28c032..173243fa7a 100644
--- a/docs/pages/pmd/rules/java/errorprone.md
+++ b/docs/pages/pmd/rules/java/errorprone.md
@@ -2790,7 +2790,7 @@ Avoid returning from a finally block, this can discard exceptions.
**This rule is defined by the following XPath expression:**
``` xpath
-//FinallyStatement//ReturnStatement
+//FinallyStatement//ReturnStatement except //FinallyStatement//(MethodDeclaration|LambdaExpression)//ReturnStatement
```
**Example(s):**
diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md
index d84371b973..74549e2297 100644
--- a/docs/pages/release_notes.md
+++ b/docs/pages/release_notes.md
@@ -18,11 +18,14 @@ This is a {{ site.pmd.release_type }} release.
* java-bestpractices
* [#658](https://github.com/pmd/pmd/issues/658): \[java] OneDeclarationPerLine: False positive for loops
+* java-errorprone
+ * [#1035](https://github.com/pmd/pmd/issues/1035): \[java] ReturnFromFinallyBlock: False positive on lambda expression in finally block
### API Changes
### External Contributions
+* [#1503](https://github.com/pmd/pmd/pull/1503): \[java] Fix for ReturnFromFinallyBlock false-positives - [RishabhDeep Singh](https://github.com/rishabhdeepsingh)
* [#1516](https://github.com/pmd/pmd/pull/1516): \[java] OneDeclarationPerLine: Don't report multiple variables in a for statement. - [Kris Scheibe](https://github.com/kris-scheibe)
* [#1521](https://github.com/pmd/pmd/pull/1521): \[java] Upgrade to ASM7 for JDK 11 support - [Mark Pritchard](https://github.com/markpritchard)
diff --git a/pmd-java/src/main/resources/category/java/errorprone.xml b/pmd-java/src/main/resources/category/java/errorprone.xml
index 93930f8694..bad84763b5 100644
--- a/pmd-java/src/main/resources/category/java/errorprone.xml
+++ b/pmd-java/src/main/resources/category/java/errorprone.xml
@@ -2666,8 +2666,9 @@ Avoid returning from a finally block, this can discard exceptions.
3
+
- //FinallyStatement//ReturnStatement
+ //FinallyStatement//ReturnStatement except //FinallyStatement//(MethodDeclaration|LambdaExpression)//ReturnStatement
diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/ReturnFromFinallyBlock.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/ReturnFromFinallyBlock.xml
index 6a0c3a8795..29eb774bb7 100644
--- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/ReturnFromFinallyBlock.xml
+++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/ReturnFromFinallyBlock.xml
@@ -4,9 +4,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd">
-
+ throw exception but return from finally
1
-
+ lots of returns
1
-
+ ok
0
+
+ #1035 [java] ReturnFromFinallyBlock: False positive on lambda expression in finally block
+ 0
+
+
+
+ Return from Lambda in Finally
+ 0
+ untracked = serviceExecutionTracker.untrackMatchingEntries(e -> {
+ ServiceExecutionIdentifiers ids = e.getIdentifiers();
+ Long execBqiId = (ids == null) ? null : ids.getBqiId();
+ return Objects.equals(bqiId, execBqiId);
+ });
+ untracked.forEach(e -> logger.info("overwriteLastBqi(bqId={}, bqiId={}) untracked {}", bqId, bqiId, e));
+ }
+ }
+}
+ ]]>
+
+
+ return from a lambda should not cause issues
+ 0
+ { return i + 1; }).forEach(i -> System.out.println(i));
+ }
+ }
+}
+ ]]>
+
+
+ Return in finally should give error but not in lambda
+ 1
+ { return i + 1; }).forEach(i -> System.out.println(i));
+ return "foo";
+ }
+ }
+}
+ ]]>
+
+
+ Return from anonyous class should not give any error
+ 0
+ () {
+ @Override
+ public Integer apply(Integer i) {
+ return i + 1;
+ }
+ }).forEach(i -> System.out.println(i));
+ }
+ }
+}
+ ]]>
+