[java] consider enum constants used in batch inspection when valueOf() is called (IDEA-293797)

GitOrigin-RevId: 787c7356063bfbc11bbdc751dba55dd76f142e84
This commit is contained in:
Bas Leijdekkers
2024-05-28 18:11:30 +02:00
committed by intellij-monorepo-bot
parent 362d0555e5
commit 32ee8e3135
5 changed files with 55 additions and 19 deletions

View File

@@ -272,6 +272,9 @@ public final class RefJavaUtilImpl extends RefJavaUtil {
}
}
}
else if (refResolved == null && psiResolved instanceof PsiMethod method) {
markEnumUsedIfValuesMethod(method, node);
}
if (psiResolved instanceof PsiMember psiMember) {
//TODO support kotlin
@@ -285,6 +288,27 @@ public final class RefJavaUtilImpl extends RefJavaUtil {
return true;
}
private void markEnumUsedIfValuesMethod(PsiMethod psiWhat, UExpression expression) {
//TODO support kotlin enums
final PsiClass containingClass = psiWhat.getContainingClass();
if (containingClass == null || !containingClass.isEnum()) {
return;
}
String methodName = psiWhat.getName();
if (!"values".equals(methodName) && !"valueOf".equals(methodName)) {
return;
}
for (PsiField enumConstant : containingClass.getFields()) {
if (enumConstant instanceof PsiEnumConstant) {
final RefJavaElementImpl enumConstantReference = (RefJavaElementImpl)refFrom.getRefManager().getReference(enumConstant);
if (enumConstantReference != null) {
refFrom.addOutReference(enumConstantReference);
enumConstantReference.markReferenced(refFrom, false, true, expression);
}
}
}
}
@Override
public boolean visitCallableReferenceExpression(@NotNull UCallableReferenceExpression methodRef) {
UExpression qualifierExpression = methodRef.getQualifierExpression();