Skip to content

Commit 09c1afd

Browse files
authored
Fix Unnecessary Array cleanup to remove unneeded imports (#2227)
- use ImportRemover in UnwrapNewArrayOperation.java - add new test to CleanUpTest1d5 - fixes #2222
1 parent b356cbc commit 09c1afd

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/UnwrapNewArrayOperation.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.eclipse.jdt.core.ICompilationUnit;
2424
import org.eclipse.jdt.core.dom.ASTNode;
2525
import org.eclipse.jdt.core.dom.ArrayCreation;
26+
import org.eclipse.jdt.core.dom.ArrayType;
2627
import org.eclipse.jdt.core.dom.ClassInstanceCreation;
2728
import org.eclipse.jdt.core.dom.CompilationUnit;
2829
import org.eclipse.jdt.core.dom.Expression;
@@ -37,6 +38,7 @@
3738
import org.eclipse.jdt.internal.corext.refactoring.nls.NLSLine;
3839
import org.eclipse.jdt.internal.corext.refactoring.nls.NLSScanner;
3940
import org.eclipse.jdt.internal.corext.refactoring.structure.CompilationUnitRewrite;
41+
import org.eclipse.jdt.internal.corext.refactoring.structure.ImportRemover;
4042

4143
/**
4244
* Unwrap a new array with initializer used as input for varargs and replace with initializer elements.
@@ -55,8 +57,10 @@ public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModelCore
5557
ASTRewrite rewrite= cuRewrite.getASTRewrite();
5658
List<Expression> expressionsInArray= node != null && node.getInitializer() != null && node.getInitializer().expressions() != null ?
5759
node.getInitializer().expressions() : Collections.EMPTY_LIST;
60+
ArrayType arrayType= node != null ? node.getType() : null;
5861
ICompilationUnit cu= cuRewrite.getCu();
5962
CompilationUnit root= cuRewrite.getRoot();
63+
ImportRemover remover= cuRewrite.getImportRemover();
6064

6165
boolean tagged= false;
6266
try {
@@ -138,6 +142,9 @@ public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModelCore
138142

139143
rewrite.replace(call, replacementNode, group);
140144
}
145+
if (arrayType != null) {
146+
remover.registerRemovedNode(arrayType);
147+
}
141148
}
142149
}
143150

org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d5.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3969,6 +3969,54 @@ public void foo() {
39693969
new HashSet<>(Arrays.asList(FixMessages.UnusedCodeFix_RemoveUnnecessaryArrayCreation_description)));
39703970
}
39713971

3972+
@Test
3973+
public void testUnnecessaryArrayIssue2222() throws Exception {
3974+
IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
3975+
String sample= """
3976+
package test1;
3977+
3978+
import java.util.ArrayList;
3979+
import java.util.List;
3980+
3981+
public class A {
3982+
public void foo1(ArrayList<String> x) {
3983+
B.blah(new List<String>[] { x });
3984+
}
3985+
}
3986+
""";
3987+
ICompilationUnit cu1= pack1.createCompilationUnit("A.java", sample, false, null);
3988+
3989+
String sample2= """
3990+
package test1;
3991+
3992+
import java.util.List;
3993+
3994+
public class B {
3995+
static public void blah(List ... y) {
3996+
}
3997+
}
3998+
""";
3999+
ICompilationUnit cu2= pack1.createCompilationUnit("B.java", sample2, false, null);
4000+
4001+
enable(CleanUpConstants.REMOVE_UNNECESSARY_ARRAY_CREATION);
4002+
4003+
sample= """
4004+
package test1;
4005+
4006+
import java.util.ArrayList;
4007+
4008+
public class A {
4009+
public void foo1(ArrayList<String> x) {
4010+
B.blah(x);
4011+
}
4012+
}
4013+
""";
4014+
String expected1= sample;
4015+
4016+
assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1, cu2 }, new String[] { expected1, sample2 },
4017+
new HashSet<>(Arrays.asList(FixMessages.UnusedCodeFix_RemoveUnnecessaryArrayCreation_description)));
4018+
}
4019+
39724020
@Test
39734021
public void testKeepArrayWithSingleArrayElement() throws Exception {
39744022
IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);

0 commit comments

Comments
 (0)