mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-206125 refactoring enum values highlighted as used in case its class is @EnumSource value
GitOrigin-RevId: 0e7567f2a12efc80780f7a293fe0ecc30c6b7617
This commit is contained in:
committed by
intellij-monorepo-bot
parent
0c17ceb518
commit
ca2ab3483c
@@ -77,7 +77,6 @@
|
||||
<testDiscoveryProducer implementation="com.intellij.execution.testDiscovery.LocalTestDiscoveryProducer"/>
|
||||
<testDiscoveryProducer implementation="com.intellij.execution.testDiscovery.IntellijTestDiscoveryProducer"/>
|
||||
<implicitUsageProvider implementation="com.intellij.execution.junit2.inspection.JUnitImplicitUsageProvider"/>
|
||||
<implicitUsageProvider implementation="com.intellij.execution.junit2.inspection.JunitEnumSourceImplicitUsageProvider"/>
|
||||
<predefinedMigrationMapProvider implementation="com.intellij.execution.junit2.refactoring.JUnit5Migration"/>
|
||||
<psi.referenceContributor implementation="com.intellij.execution.junit.codeInsight.references.JUnitReferenceContributor"/>
|
||||
|
||||
|
||||
+41
-3
@@ -3,9 +3,14 @@ package com.intellij.execution.junit2.inspection;
|
||||
|
||||
import com.intellij.codeInsight.AnnotationUtil;
|
||||
import com.intellij.codeInsight.daemon.ImplicitUsageProvider;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiField;
|
||||
import com.intellij.psi.PsiParameter;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.PsiEnumConstantImpl;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.LocalSearchScope;
|
||||
import com.intellij.psi.search.PsiSearchHelper;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
import com.intellij.psi.search.searches.ReferencesSearch;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
@@ -13,6 +18,7 @@ import java.util.List;
|
||||
|
||||
public class JUnitImplicitUsageProvider implements ImplicitUsageProvider {
|
||||
private static final String MOCK = "org.mockito.Mock";
|
||||
private static final String ENUM_SOURCE = "org.junit.jupiter.params.provider.EnumSource";
|
||||
private static final List<String> INJECTED_FIELD_ANNOTATIONS = Arrays.asList(
|
||||
MOCK,
|
||||
"org.mockito.Spy",
|
||||
@@ -22,6 +28,38 @@ public class JUnitImplicitUsageProvider implements ImplicitUsageProvider {
|
||||
|
||||
@Override
|
||||
public boolean isImplicitUsage(@NotNull PsiElement element) {
|
||||
if (element instanceof PsiEnumConstantImpl) {
|
||||
PsiClass psiClass = ((PsiEnumConstantImpl)element).getContainingClass();
|
||||
String className = psiClass != null ? psiClass.getName() : null;
|
||||
if (className == null) return false;
|
||||
SearchScope useScope = psiClass.getUseScope();
|
||||
|
||||
if (!(useScope instanceof LocalSearchScope)) {
|
||||
PsiSearchHelper searchHelper = PsiSearchHelper.getInstance(psiClass.getProject());
|
||||
PsiSearchHelper.SearchCostResult cheapEnough = searchHelper.isCheapEnoughToSearch(className, (GlobalSearchScope)useScope, null,
|
||||
null);
|
||||
if (cheapEnough == PsiSearchHelper.SearchCostResult.ZERO_OCCURRENCES ||
|
||||
cheapEnough == PsiSearchHelper.SearchCostResult.TOO_MANY_OCCURRENCES) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return ReferencesSearch.search(psiClass, useScope, false)
|
||||
.anyMatch(reference -> {
|
||||
PsiElement referenceElement = reference.getElement();
|
||||
return isReferencedInsideEnumSourceAnnotation(referenceElement);
|
||||
});
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean isReferencedInsideEnumSourceAnnotation(PsiElement referenceElement) {
|
||||
PsiAnnotation annotation = PsiTreeUtil.getParentOfType(referenceElement, PsiAnnotation.class);
|
||||
if (annotation != null) {
|
||||
String annotationName = annotation.getQualifiedName();
|
||||
if (ENUM_SOURCE.equals(annotationName) && annotation.getAttributes().size() == 1) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
-67
@@ -1,67 +0,0 @@
|
||||
// Copyright 2000-2020 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.execution.junit2.inspection;
|
||||
|
||||
import com.intellij.codeInsight.daemon.ImplicitUsageProvider;
|
||||
import com.intellij.psi.PsiAnnotation;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.impl.source.PsiEnumConstantImpl;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.LocalSearchScope;
|
||||
import com.intellij.psi.search.PsiSearchHelper;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
import com.intellij.psi.search.searches.ReferencesSearch;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class JunitEnumSourceImplicitUsageProvider implements ImplicitUsageProvider {
|
||||
|
||||
private static final String ENUM_SOURCE = "org.junit.jupiter.params.provider.EnumSource";
|
||||
|
||||
@Override
|
||||
public boolean isImplicitUsage(@NotNull PsiElement element) {
|
||||
if (element instanceof PsiEnumConstantImpl) {
|
||||
PsiClass psiClass = ((PsiEnumConstantImpl)element).getContainingClass();
|
||||
String className = psiClass != null ? psiClass.getName() : null;
|
||||
if (className == null) return false;
|
||||
SearchScope useScope = psiClass.getUseScope();
|
||||
|
||||
if (!(useScope instanceof LocalSearchScope)) {
|
||||
PsiSearchHelper searchHelper = PsiSearchHelper.getInstance(psiClass.getProject());
|
||||
PsiSearchHelper.SearchCostResult cheapEnough = searchHelper.isCheapEnoughToSearch(className, (GlobalSearchScope)useScope, null,
|
||||
null);
|
||||
if (cheapEnough == PsiSearchHelper.SearchCostResult.ZERO_OCCURRENCES ||
|
||||
cheapEnough == PsiSearchHelper.SearchCostResult.TOO_MANY_OCCURRENCES) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return ReferencesSearch.search(psiClass, useScope, false)
|
||||
.anyMatch(reference -> {
|
||||
PsiElement referenceElement = reference.getElement();
|
||||
return isReferencedInsideEnumSourceAnnotation(referenceElement);
|
||||
});
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean isReferencedInsideEnumSourceAnnotation(PsiElement referenceElement) {
|
||||
PsiAnnotation annotation = PsiTreeUtil.getParentOfType(referenceElement, PsiAnnotation.class);
|
||||
if (annotation != null) {
|
||||
String annotationName = annotation.getQualifiedName();
|
||||
if (ENUM_SOURCE.equals(annotationName) && annotation.getAttributes().size() == 1) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isImplicitRead(@NotNull PsiElement element) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isImplicitWrite(@NotNull PsiElement element) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user