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{