Bug 236473 - [move static members] problems with static imports
- fix ReferenceAnalyzer.visit(QualifiedName) to check for
a static import in which case always remove the old static
import and don't add a new static import
- add new test in MoveMembersTest
Change-Id: Ic88052b9f3aba4edf879711f06e4093baf25ffc7
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceAnalyzer.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceAnalyzer.java
index 0718be0..bfbc632 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceAnalyzer.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceAnalyzer.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2019 IBM Corporation and others.
+ * Copyright (c) 2000, 2021 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -98,11 +98,17 @@
public boolean visit(QualifiedName node) {
if (isMovedMember(node.resolveBinding())) {
if (node.getParent() instanceof ImportDeclaration) {
+ ImportDeclaration decl= (ImportDeclaration)node.getParent();
ITypeBinding typeBinding= node.resolveTypeBinding();
- if (typeBinding != null)
- fCuRewrite.getImportRewrite().removeImport(typeBinding.getQualifiedName());
- String imp= fCuRewrite.getImportRewrite().addImport(fTarget.getQualifiedName() + '.' + node.getName().getIdentifier());
- fCuRewrite.getImportRemover().registerAddedImport(imp);
+ if (decl.isStatic()) {
+ fCuRewrite.getImportRewrite().removeStaticImport(node.getFullyQualifiedName());
+ } else {
+
+ if (typeBinding != null)
+ fCuRewrite.getImportRewrite().removeImport(typeBinding.getQualifiedName());
+ String imp= fCuRewrite.getImportRewrite().addImport(fTarget.getQualifiedName() + '.' + node.getName().getIdentifier());
+ fCuRewrite.getImportRemover().registerAddedImport(imp);
+ }
} else {
rewrite(node, fTarget);
}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test63/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test63/in/A.java
new file mode 100644
index 0000000..9c4500c
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test63/in/A.java
@@ -0,0 +1,8 @@
+package p;
+
+public class A {
+
+ public static void m() {
+ }
+
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test63/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test63/in/B.java
new file mode 100644
index 0000000..60d735a
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test63/in/B.java
@@ -0,0 +1,10 @@
+package p;
+
+import static p.A.m;
+
+public class B {
+
+ public void foo() {
+ m();
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test63/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test63/out/A.java
new file mode 100644
index 0000000..e9f460b
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test63/out/A.java
@@ -0,0 +1,5 @@
+package p;
+
+public class A {
+
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test63/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test63/out/B.java
new file mode 100644
index 0000000..3c7e30d
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test63/out/B.java
@@ -0,0 +1,11 @@
+package p;
+
+public class B {
+
+ public void foo() {
+ B.m();
+ }
+
+ public static void m() {
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveMembersTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveMembersTests.java
index 6c7e7a5..933593c 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveMembersTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveMembersTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2020 IBM Corporation and others.
+ * Copyright (c) 2000, 2021 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -568,6 +568,12 @@
typeHelper_passing(new String[] { "SomeInner" });
}
+ @Test
+ public void test63() throws Exception { // test for Bug 236473
+ // Move a static method to a type that has a static import for it
+ methodHelper_passing(new String[] { "m" }, new String[][] { new String[0] });
+ }
+
//---
@Test
public void testFail0() throws Exception{