mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-05 01:50:56 +07:00
check suspicious ConcurrentHashMap.contains (IDEA-124698)
This commit is contained in:
@@ -30,8 +30,9 @@ public class SuspiciousMethodCallUtil {
|
||||
GlobalSearchScope searchScope,
|
||||
List<PsiMethod> patternMethods,
|
||||
IntArrayList indices) {
|
||||
final JavaPsiFacade javaPsiFacade = JavaPsiFacade.getInstance(manager.getProject());
|
||||
final PsiClass
|
||||
collectionClass = JavaPsiFacade.getInstance(manager.getProject()).findClass(CommonClassNames.JAVA_UTIL_COLLECTION, searchScope);
|
||||
collectionClass = javaPsiFacade.findClass(CommonClassNames.JAVA_UTIL_COLLECTION, searchScope);
|
||||
PsiType[] javaLangObject = {PsiType.getJavaLangObject(manager, searchScope)};
|
||||
MethodSignature removeSignature = MethodSignatureUtil
|
||||
.createMethodSignature("remove", javaLangObject, PsiTypeParameter.EMPTY_ARRAY, PsiSubstitutor.EMPTY);
|
||||
@@ -43,7 +44,7 @@ public class SuspiciousMethodCallUtil {
|
||||
addMethod(contains, 0, patternMethods, indices);
|
||||
}
|
||||
|
||||
final PsiClass listClass = JavaPsiFacade.getInstance(manager.getProject()).findClass(CommonClassNames.JAVA_UTIL_LIST, searchScope);
|
||||
final PsiClass listClass = javaPsiFacade.findClass(CommonClassNames.JAVA_UTIL_LIST, searchScope);
|
||||
if (listClass != null) {
|
||||
MethodSignature indexofSignature = MethodSignatureUtil.createMethodSignature("indexOf", javaLangObject, PsiTypeParameter.EMPTY_ARRAY, PsiSubstitutor.EMPTY);
|
||||
PsiMethod indexof = MethodSignatureUtil.findMethodBySignature(listClass, indexofSignature, false);
|
||||
@@ -53,7 +54,7 @@ public class SuspiciousMethodCallUtil {
|
||||
addMethod(lastindexof, 0, patternMethods, indices);
|
||||
}
|
||||
|
||||
final PsiClass mapClass = JavaPsiFacade.getInstance(manager.getProject()).findClass(CommonClassNames.JAVA_UTIL_MAP, searchScope);
|
||||
final PsiClass mapClass = javaPsiFacade.findClass(CommonClassNames.JAVA_UTIL_MAP, searchScope);
|
||||
if (mapClass != null) {
|
||||
PsiMethod remove = MethodSignatureUtil.findMethodBySignature(mapClass, removeSignature, false);
|
||||
addMethod(remove, 0, patternMethods, indices);
|
||||
@@ -67,6 +68,13 @@ public class SuspiciousMethodCallUtil {
|
||||
PsiMethod containsValue = MethodSignatureUtil.findMethodBySignature(mapClass, containsValueSignature, false);
|
||||
addMethod(containsValue, 1, patternMethods, indices);
|
||||
}
|
||||
|
||||
final PsiClass concurrentMapClass = javaPsiFacade.findClass(CommonClassNames.JAVA_UTIL_CONCURRENT_HASH_MAP, searchScope);
|
||||
if (concurrentMapClass != null) {
|
||||
MethodSignature containsSignature = MethodSignatureUtil.createMethodSignature("contains", javaLangObject, PsiTypeParameter.EMPTY_ARRAY, PsiSubstitutor.EMPTY);
|
||||
PsiMethod contains = MethodSignatureUtil.findMethodBySignature(concurrentMapClass, containsSignature, false);
|
||||
addMethod(contains, 1, patternMethods, indices);
|
||||
}
|
||||
}
|
||||
|
||||
private static void addMethod(final PsiMethod patternMethod, int typeParamIndex, List<PsiMethod> patternMethods, IntArrayList indices) {
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
class Main<K, V> {
|
||||
void f(ConcurrentHashMap<K, V> map, K key){
|
||||
if (map.contains(<warning descr="Suspicious call to 'ConcurrentHashMap.contains'">key</warning>)) {
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,9 @@ package com.intellij.codeInspection;
|
||||
|
||||
import com.intellij.JavaTestUtil;
|
||||
import com.intellij.codeInspection.miscGenerics.SuspiciousCollectionsMethodCallsInspection;
|
||||
import com.intellij.testFramework.LightProjectDescriptor;
|
||||
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class SuspiciousCollectionMethodCallsTest extends LightCodeInsightFixtureTestCase {
|
||||
private final SuspiciousCollectionsMethodCallsInspection myTool = new SuspiciousCollectionsMethodCallsInspection();
|
||||
@@ -17,10 +19,17 @@ public class SuspiciousCollectionMethodCallsTest extends LightCodeInsightFixture
|
||||
myFixture.testHighlighting(getTestName(false) + ".java");
|
||||
}
|
||||
|
||||
public void testConcurrentHashMap() throws Exception { doTest(); }
|
||||
public void testUseDfa() throws Exception { doTest(); }
|
||||
public void testWildcard() throws Exception { doTest(); }
|
||||
public void testIgnoreConvertible() throws Exception {
|
||||
myTool.REPORT_CONVERTIBLE_METHOD_CALLS = false;
|
||||
doTest();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected LightProjectDescriptor getProjectDescriptor() {
|
||||
return JAVA_8;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,6 +58,7 @@ public interface CommonClassNames {
|
||||
@NonNls String JAVA_UTIL_MAP = "java.util.Map";
|
||||
@NonNls String JAVA_UTIL_MAP_ENTRY = "java.util.Map.Entry";
|
||||
@NonNls String JAVA_UTIL_HASH_MAP = "java.util.HashMap";
|
||||
@NonNls String JAVA_UTIL_CONCURRENT_HASH_MAP = "java.util.concurrent.ConcurrentHashMap";
|
||||
@NonNls String JAVA_UTIL_LIST = "java.util.List";
|
||||
@NonNls String JAVA_UTIL_ARRAY_LIST = "java.util.ArrayList";
|
||||
@NonNls String JAVA_UTIL_SET = "java.util.Set";
|
||||
|
||||
Reference in New Issue
Block a user