From 0053cc6c7eee44f65e5cde761e06de4735b12569 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 23 Nov 2016 12:30:56 +0700 Subject: [PATCH] IDEA-164271 "Simplifiable conditional usage of Map.get()" doesn't recognize proper pattern with adding additional parentheses --- .../afterComputeIfAbsentSingleLineParens.java | 11 +++++++++++ .../beforeComputeIfAbsentSingleLineParens.java | 14 ++++++++++++++ .../src/com/siyeh/ig/psiutils/ExpressionUtils.java | 11 +++++++---- 3 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/inspection/java8MapGet/afterComputeIfAbsentSingleLineParens.java create mode 100644 java/java-tests/testData/inspection/java8MapGet/beforeComputeIfAbsentSingleLineParens.java diff --git a/java/java-tests/testData/inspection/java8MapGet/afterComputeIfAbsentSingleLineParens.java b/java/java-tests/testData/inspection/java8MapGet/afterComputeIfAbsentSingleLineParens.java new file mode 100644 index 000000000000..a6caf3d589d9 --- /dev/null +++ b/java/java-tests/testData/inspection/java8MapGet/afterComputeIfAbsentSingleLineParens.java @@ -0,0 +1,11 @@ +// "Replace with 'computeIfAbsent' method call" "true" +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class Main { + public void testMap(Map> map, String key, String value) { + List list = map.computeIfAbsent(key, k -> new ArrayList<>()); + list.add(value); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/java8MapGet/beforeComputeIfAbsentSingleLineParens.java b/java/java-tests/testData/inspection/java8MapGet/beforeComputeIfAbsentSingleLineParens.java new file mode 100644 index 000000000000..bf52bb8344fa --- /dev/null +++ b/java/java-tests/testData/inspection/java8MapGet/beforeComputeIfAbsentSingleLineParens.java @@ -0,0 +1,14 @@ +// "Replace with 'computeIfAbsent' method call" "true" +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class Main { + public void testMap(Map> map, String key, String value) { + List list = map.get(key); + if(list == null) { + map.put(key, (list = new ArrayList<>())); + } + list.add(value); + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java index 54c37628fb21..f29467b3c5c1 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java @@ -727,10 +727,13 @@ public class ExpressionUtils { if(element instanceof PsiExpressionStatement) { element = ((PsiExpressionStatement)element).getExpression(); } - if (element instanceof PsiAssignmentExpression) { - PsiAssignmentExpression assignment = (PsiAssignmentExpression)element; - if(assignment.getOperationTokenType().equals(JavaTokenType.EQ)) { - return assignment; + if (element instanceof PsiExpression) { + element = PsiUtil.skipParenthesizedExprDown((PsiExpression)element); + if (element instanceof PsiAssignmentExpression) { + PsiAssignmentExpression assignment = (PsiAssignmentExpression)element; + if(assignment.getOperationTokenType().equals(JavaTokenType.EQ)) { + return assignment; + } } } return null;