Fixes according to review IDEA-CR-43084

This commit is contained in:
Olga Klisho
2019-02-12 16:35:53 +07:00
committed by Tagir Valeev
parent 6c3b4d8db3
commit a3b4e36288
6 changed files with 27 additions and 12 deletions
@@ -6,18 +6,19 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.containers.ContainerUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.InspectionGadgetsFix;
import com.siyeh.ig.PsiReplacementUtil;
import com.siyeh.ig.psiutils.ExpressionUtils;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author okli
@@ -101,10 +102,7 @@ public class ArrayCanBeReplacedWithEnumValuesInspection extends BaseInspection {
return;
}
final List<String> enumValues = Stream.of(initClass.getFields())
.filter(ev -> ev instanceof PsiEnumConstant)
.map(ev -> ev.getName())
.collect(Collectors.toList());
final List<PsiEnumConstant> enumValues = ContainerUtil.filterIsInstance(Arrays.asList(initClass.getFields()), PsiEnumConstant.class);
final PsiExpression[] initializers = expression.getInitializers();
if (enumValues.size() != initializers.length) {
@@ -112,11 +110,7 @@ public class ArrayCanBeReplacedWithEnumValuesInspection extends BaseInspection {
}
for (int i = 0; i < initializers.length; i++) {
if (!(initializers[i] instanceof PsiReferenceExpression &&
enumValues.get(i).equals(((PsiReferenceExpression)initializers[i]).getReferenceName()) &&
initExprType.equals(initializers[i].getType()))) {
return;
}
if (!ExpressionUtils.isReferenceTo(initializers[i], enumValues.get(i))) return;
}
final PsiElement parent = expression.getParent();
@@ -2,5 +2,6 @@
<html>
<body>
Reports arrays of enum constants which may be replaced with <code>EnumType.values()</code>.
<p><small>New in 2019.1</small></p>
</body>
</html>
@@ -8,4 +8,4 @@ class ErrorInMultiDArray {
public enum TestEnum {
ONE, TWO, THREE;
}
}}
@@ -0,0 +1,9 @@
class Parentheses {
void test() {
X[] constants = X.values();
}
enum X {
A, B, C
}
}
@@ -0,0 +1,9 @@
class Parentheses {
void test() {
X[] constants = {(<caret>X.A), (X.B), (X.C)};
}
enum X {
A, B, C
}
}
@@ -27,6 +27,8 @@ public class ArrayCanBeReplacedWithEnumValuesFixTest extends IGQuickFixesTestCas
public void testFooInit() {assertQuickfixNotAvailable();}
public void testOuterEnumUse() {doTest("TestEnum");}
public void testParentheses() {doTest("X");}