[java-inspections] IDEA-316983 creation of a multidimensional array

GitOrigin-RevId: 916115330d65d198259b3908ead1e0b0ccf309f5
This commit is contained in:
Mikhail Pyltsin
2023-04-04 17:35:27 +00:00
committed by intellij-monorepo-bot
parent 4b35adf956
commit 40348bbf27
2 changed files with 31 additions and 20 deletions
@@ -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 (<caret>int i = 0; i < n; ++i) test[i][i] = value;
return test;
}}
@@ -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);
}