diff --git a/jvm/jvm-analysis-api/src/com/intellij/codeInspection/blockingCallsDetection/PersistentStateChecker.java b/jvm/jvm-analysis-api/src/com/intellij/codeInspection/blockingCallsDetection/PersistentStateChecker.java deleted file mode 100644 index 8451546e809cd2c5de1b40a2c20ae1f8629837d1..0000000000000000000000000000000000000000 --- a/jvm/jvm-analysis-api/src/com/intellij/codeInspection/blockingCallsDetection/PersistentStateChecker.java +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.intellij.codeInspection.blockingCallsDetection; - -import org.jetbrains.annotations.ApiStatus; - -/** - * Marks extension points {@link BlockingMethodChecker} or {@link NonBlockingContextChecker} that uses externally stored settings - * and due to that can not be used in {@link com.intellij.psi.util.CachedValuesManager} - * <p> - * Likely for internal usage since third party extensions may not have access to inspection settings etc - */ -@ApiStatus.Experimental -public interface PersistentStateChecker { -} diff --git a/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/AnnotationBasedBlockingMethodChecker.java b/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/AnnotationBasedBlockingMethodChecker.java index 9a7c8e6c41fee278f943629f3fc39defeb3d1390..0ff780cff0e9a16dc4827244aaf4cdc64faa9be3 100644 --- a/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/AnnotationBasedBlockingMethodChecker.java +++ b/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/AnnotationBasedBlockingMethodChecker.java @@ -2,12 +2,15 @@ package com.intellij.codeInspection.blockingCallsDetection; import com.intellij.codeInsight.AnnotationUtil; -import com.intellij.psi.*; +import com.intellij.psi.JavaPsiFacade; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiMethod; import org.jetbrains.annotations.NotNull; import java.util.List; -public class AnnotationBasedBlockingMethodChecker implements BlockingMethodChecker, PersistentStateChecker { +public class AnnotationBasedBlockingMethodChecker implements BlockingMethodChecker { private final List<String> myBlockingAnnotations; @@ -25,11 +28,6 @@ public class AnnotationBasedBlockingMethodChecker implements BlockingMethodCheck @Override public boolean isMethodBlocking(@NotNull PsiMethod method) { - return hasAnnotation(method, myBlockingAnnotations); - } - - static boolean hasAnnotation(PsiModifierListOwner owner, List<String> annotationsFQNames) { - // AnnotationUtil#isAnnotated doesn't use caching inside - return AnnotationUtil.findAnnotation(owner, annotationsFQNames, false) != null; + return AnnotationUtil.findAnnotation(method, myBlockingAnnotations, false) != null; } } diff --git a/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/AnnotationBasedNonBlockingContextChecker.java b/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/AnnotationBasedNonBlockingContextChecker.java index 9cb654534333f5e34708621675e97e53c79ce888..cc36526f4967ae05e12ae8c6d2e35cdbf8269aa1 100644 --- a/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/AnnotationBasedNonBlockingContextChecker.java +++ b/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/AnnotationBasedNonBlockingContextChecker.java @@ -1,6 +1,7 @@ // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.codeInspection.blockingCallsDetection; +import com.intellij.codeInsight.AnnotationUtil; import com.intellij.psi.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.uast.UCallExpression; @@ -10,9 +11,7 @@ import org.jetbrains.uast.UastUtils; import java.util.List; -import static com.intellij.codeInspection.blockingCallsDetection.AnnotationBasedBlockingMethodChecker.hasAnnotation; - -public class AnnotationBasedNonBlockingContextChecker implements NonBlockingContextChecker, PersistentStateChecker { +public class AnnotationBasedNonBlockingContextChecker implements NonBlockingContextChecker { private final List<String> myNonBlockingAnnotations; @@ -37,6 +36,6 @@ public class AnnotationBasedNonBlockingContextChecker implements NonBlockingCont if (callingMethod == null) return false; PsiMethod psiCallingMethod = callingMethod.getJavaPsi(); - return hasAnnotation(psiCallingMethod, myNonBlockingAnnotations); + return AnnotationUtil.findAnnotation(psiCallingMethod, myNonBlockingAnnotations, false) != null; } } diff --git a/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/BlockingMethodInNonBlockingContextInspection.java b/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/BlockingMethodInNonBlockingContextInspection.java index 898fdc649f9dd071ddb9303fce5116e30a5ca6d8..7d6a6526e4909f94820498a68cff893e9e029329 100644 --- a/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/BlockingMethodInNonBlockingContextInspection.java +++ b/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/BlockingMethodInNonBlockingContextInspection.java @@ -17,9 +17,6 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiMethod; -import com.intellij.psi.util.CachedValueProvider; -import com.intellij.psi.util.CachedValuesManager; -import com.intellij.psi.util.PsiModificationTracker; import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; import one.util.streamex.StreamEx; @@ -32,8 +29,6 @@ import javax.swing.*; import java.awt.*; import java.util.Collections; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; public class BlockingMethodInNonBlockingContextInspection extends AbstractBaseUastLocalInspectionTool { @@ -130,14 +125,14 @@ public class BlockingMethodInNonBlockingContextInspection extends AbstractBaseUa private static class BlockingMethodInNonBlockingContextVisitor extends PsiElementVisitor { private final ProblemsHolder myHolder; - private final Map<Boolean, ? extends List<? extends BlockingMethodChecker>> myBlockingMethodCheckers; + private final List<? extends BlockingMethodChecker> myBlockingMethodCheckers; private final List<? extends NonBlockingContextChecker> myNonBlockingContextCheckers; BlockingMethodInNonBlockingContextVisitor(@NotNull ProblemsHolder holder, List<? extends BlockingMethodChecker> blockingMethodCheckers, List<? extends NonBlockingContextChecker> nonBlockingContextCheckers) { myHolder = holder; - this.myBlockingMethodCheckers = blockingMethodCheckers.stream().collect(Collectors.partitioningBy(checker -> checker instanceof PersistentStateChecker)); + this.myBlockingMethodCheckers = blockingMethodCheckers; this.myNonBlockingContextCheckers = nonBlockingContextCheckers; } @@ -152,10 +147,7 @@ public class BlockingMethodInNonBlockingContextInspection extends AbstractBaseUa PsiMethod referencedMethod = callExpression.resolve(); if (referencedMethod == null) return; - final boolean isBlockingCachedValue = queryCacheIfMethodIsBlocking(referencedMethod, myBlockingMethodCheckers.get(false)); - if (!isBlockingCachedValue && !queryProvidersIfMethodIsBlocking(referencedMethod, myBlockingMethodCheckers.get(true))) { - return; - } + if (!isMethodOrSupersBlocking(referencedMethod, myBlockingMethodCheckers)) return; PsiElement elementToHighLight = AnalysisUastUtil.getMethodIdentifierSourcePsi(callExpression); if (elementToHighLight == null) return; @@ -164,14 +156,8 @@ public class BlockingMethodInNonBlockingContextInspection extends AbstractBaseUa } } - private static boolean queryCacheIfMethodIsBlocking(PsiMethod referencedMethod, List<? extends BlockingMethodChecker> myBlockingMethodCheckers) { - return CachedValuesManager.getCachedValue(referencedMethod, () -> CachedValueProvider.Result.create( - queryProvidersIfMethodIsBlocking(referencedMethod, myBlockingMethodCheckers), - PsiModificationTracker.MODIFICATION_COUNT)); - } - - private static boolean queryProvidersIfMethodIsBlocking(PsiMethod referencedMethod, - List<? extends BlockingMethodChecker> blockingMethodCheckers) { + private static boolean isMethodOrSupersBlocking(PsiMethod referencedMethod, + List<? extends BlockingMethodChecker> blockingMethodCheckers) { return StreamEx.of(referencedMethod).append(referencedMethod.findDeepestSuperMethods()) .anyMatch(method -> isMethodBlocking(method, blockingMethodCheckers)); }