From 40348bbf275725bf1a986337d9d06963367c22d9 Mon Sep 17 00:00:00 2001 From: Mikhail Pyltsin Date: Tue, 4 Apr 2023 16:58:29 +0200 Subject: [PATCH] [java-inspections] IDEA-316983 creation of a multidimensional array GitOrigin-RevId: 916115330d65d198259b3908ead1e0b0ccf309f5 --- .../beforeMultiArray.java | 10 +++++ .../siyeh/ig/psiutils/IndexedContainer.java | 41 ++++++++++--------- 2 files changed, 31 insertions(+), 20 deletions(-) create mode 100644 java/java-tests/testData/inspection/explicitArrayFilling/beforeMultiArray.java diff --git a/java/java-tests/testData/inspection/explicitArrayFilling/beforeMultiArray.java b/java/java-tests/testData/inspection/explicitArrayFilling/beforeMultiArray.java new file mode 100644 index 000000000000..73cf4a1a893c --- /dev/null +++ b/java/java-tests/testData/inspection/explicitArrayFilling/beforeMultiArray.java @@ -0,0 +1,10 @@ +// "Replace loop with 'Arrays.fill()' method call" "false" +package pack; + +public class TableWrapper { + + public static double[][] diag(final int n, final double value) { + final double[][] test = new double[n][n]; + for (int i = 0; i < n; ++i) test[i][i] = value; + return test; + }} \ No newline at end of file diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/IndexedContainer.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/IndexedContainer.java index ab0beb953b4a..e53884d2e023 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/IndexedContainer.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/IndexedContainer.java @@ -121,26 +121,27 @@ public abstract class IndexedContainer { public static IndexedContainer arrayContainerWithBound(@NotNull PsiArrayAccessExpression arrayAccessExpression, @NotNull PsiExpression bound) { PsiExpression arrayExpression = arrayAccessExpression.getArrayExpression(); - if (arrayExpression instanceof PsiReferenceExpression reference && - reference.resolve() instanceof PsiVariable arrayVariable) { - PsiExpression initializer = arrayVariable.getInitializer(); - if (!(initializer instanceof PsiNewExpression newExpression)) { - return null; - } - PsiExpression[] dimensions = newExpression.getArrayDimensions(); - if (dimensions.length != 1) { - return null; - } - PsiExpression dimension = dimensions[0]; - PsiVariable dimensionVariable = ExpressionUtils.resolveVariable(dimension); - PsiVariable boundVariable = ExpressionUtils.resolveVariable(bound); - if (dimensionVariable == null || boundVariable == null || !dimensionVariable.isEquivalentTo(boundVariable)) { - return null; - } - if ((VariableAccessUtils.variableIsAssigned(dimensionVariable)) || - (VariableAccessUtils.variableIsAssigned(arrayVariable))) { - return null; - } + if (!(arrayExpression instanceof PsiReferenceExpression reference) || + !(reference.resolve() instanceof PsiVariable arrayVariable)) { + return null; + } + PsiExpression initializer = arrayVariable.getInitializer(); + if (!(initializer instanceof PsiNewExpression newExpression)) { + return null; + } + PsiExpression[] dimensions = newExpression.getArrayDimensions(); + if (dimensions.length != 1) { + return null; + } + PsiExpression dimension = dimensions[0]; + PsiVariable dimensionVariable = ExpressionUtils.resolveVariable(dimension); + PsiVariable boundVariable = ExpressionUtils.resolveVariable(bound); + if (dimensionVariable == null || boundVariable == null || !dimensionVariable.isEquivalentTo(boundVariable)) { + return null; + } + if ((VariableAccessUtils.variableIsAssigned(dimensionVariable)) || + (VariableAccessUtils.variableIsAssigned(arrayVariable))) { + return null; } return new ArrayIndexedContainer(arrayExpression); }