From 2ce491cf5fb48a4945ee60ff76a2e314cc528c38 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Tue, 20 Sep 2016 17:35:27 +0700 Subject: [PATCH] improve effectively final check in Java8CollectionsApiInspection (avoid collection creation) --- .../java18api/Java8CollectionsApiInspection.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) 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 87de9ca576a1..f9a2e8ff5141 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 @@ -183,11 +183,12 @@ public class Java8CollectionsApiInspection extends BaseJavaBatchLocalInspectionT return; } if(!ExceptionUtil.getThrownCheckedExceptions(new PsiElement[] {lambdaCandidate}).isEmpty()) return; - PsiElement[] varRefs = PsiTreeUtil.collectElements(lambdaCandidate, e -> e instanceof PsiReferenceExpression && - ((PsiReferenceExpression)e) - .resolve() instanceof PsiVariable); - if (!StreamEx.of(varRefs).select(PsiReferenceExpression.class).map(PsiReferenceExpression::resolve).select(PsiVariable.class) - .allMatch(var -> HighlightControlFlowUtil.isEffectivelyFinal(var, lambdaCandidate, null))) { + if(!PsiTreeUtil.processElements(lambdaCandidate, e -> { + if(!(e instanceof PsiReferenceExpression)) return true; + PsiElement element = ((PsiReferenceExpression)e).resolve(); + if(!(element instanceof PsiVariable)) return true; + return HighlightControlFlowUtil.isEffectivelyFinal((PsiVariable)element, lambdaCandidate, null); + })) { return; } holder.registerProblem(condition, QuickFixBundle.message("java.8.collections.api.inspection.description"),