Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
小 白蛋
Intellij Community
Commits
7e54da80
Commit
7e54da80
authored
6 years ago
by
Nikita Katkov
Browse files
Options
Download
Email Patches
Plain Diff
removed caches from inspection
parent
7720a8c4
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
jvm/jvm-analysis-api/src/com/intellij/codeInspection/blockingCallsDetection/PersistentStateChecker.java
+0
-14
...ection/blockingCallsDetection/PersistentStateChecker.java
jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/AnnotationBasedBlockingMethodChecker.java
+6
-8
...gCallsDetection/AnnotationBasedBlockingMethodChecker.java
jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/AnnotationBasedNonBlockingContextChecker.java
+3
-4
...lsDetection/AnnotationBasedNonBlockingContextChecker.java
jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/BlockingMethodInNonBlockingContextInspection.java
+5
-19
...tection/BlockingMethodInNonBlockingContextInspection.java
with
14 additions
and
45 deletions
+14
-45
jvm/jvm-analysis-api/src/com/intellij/codeInspection/blockingCallsDetection/PersistentStateChecker.java
deleted
100644 → 0
+
0
-
14
View file @
7720a8c4
// 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
{
}
This diff is collapsed.
Click to expand it.
jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/AnnotationBasedBlockingMethodChecker.java
+
6
-
8
View file @
7e54da80
...
...
@@ -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
;
}
}
This diff is collapsed.
Click to expand it.
jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/AnnotationBasedNonBlockingContextChecker.java
+
3
-
4
View file @
7e54da80
// 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
has
Annotation
(
psiCallingMethod
,
myNonBlockingAnnotations
)
;
return
AnnotationUtil
.
find
Annotation
(
psiCallingMethod
,
myNonBlockingAnnotations
,
false
)
!=
null
;
}
}
This diff is collapsed.
Click to expand it.
jvm/jvm-analysis-impl/src/com/intellij/codeInspection/blockingCallsDetection/BlockingMethodInNonBlockingContextInspection.java
+
5
-
19
View file @
7e54da80
...
...
@@ -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
));
}
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Projects
Groups
Snippets
Help