From 1ec6d3d0dd867f332fe683e06f00917bcd069104 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 16 Sep 2016 10:26:14 +0700 Subject: [PATCH] IDEA-161257 Map.computeIfAbsent: disable inspection if checked exception is thrown from lambda body --- .../Java8CollectionsApiInspection.java | 2 ++ .../beforeComputeIfAbsentChecked.java | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 java/java-tests/testData/inspection/java8CollectionsApi/beforeComputeIfAbsentChecked.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/java18api/Java8CollectionsApiInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/java18api/Java8CollectionsApiInspection.java index 03772bcdacfb..d861bd7ac5d1 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/java18api/Java8CollectionsApiInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/java18api/Java8CollectionsApiInspection.java @@ -15,6 +15,7 @@ */ package com.intellij.codeInspection.java18api; +import com.intellij.codeInsight.ExceptionUtil; import com.intellij.codeInsight.FileModificationService; import com.intellij.codeInsight.daemon.QuickFixBundle; import com.intellij.codeInsight.daemon.impl.analysis.HighlightControlFlowUtil; @@ -179,6 +180,7 @@ public class Java8CollectionsApiInspection extends BaseJavaBatchLocalInspectionT !equivalence.expressionsAreEquivalent(value, putArguments[1])) { return; } + if(!ExceptionUtil.getThrownCheckedExceptions(new PsiElement[] {lambdaCandidate}).isEmpty()) return; PsiElement[] varRefs = PsiTreeUtil.collectElements(lambdaCandidate, e -> e instanceof PsiReferenceExpression && ((PsiReferenceExpression)e) .resolve() instanceof PsiVariable); diff --git a/java/java-tests/testData/inspection/java8CollectionsApi/beforeComputeIfAbsentChecked.java b/java/java-tests/testData/inspection/java8CollectionsApi/beforeComputeIfAbsentChecked.java new file mode 100644 index 000000000000..2463a90692fb --- /dev/null +++ b/java/java-tests/testData/inspection/java8CollectionsApi/beforeComputeIfAbsentChecked.java @@ -0,0 +1,21 @@ +// "Replace with 'computeIfAbsent' method call" "false" +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class Main { + static class MyList extends ArrayList { + public MyList() throws Exception { + + } + } + + public void testMap(Map> map, String key, String value) throws Exception { + List list = map.get(key); + if(list == null) { + list = new MyList(); + map.put(key, list); + } + list.add(value); + } +} \ No newline at end of file