Bug 394726 - [pull up] Pull up adds redundant qualifier

- Add check to see if qualifier is needed or if the import is enough
- Add test cases

Change-Id: I62bf19c666aeb7d80e958defb9b523ab9a59ec9f
Signed-off-by: Kenneth Styrberg <kenneth@kean.nu>
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/in/p/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/in/p/A.java
new file mode 100644
index 0000000..fc5df27
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/in/p/A.java
@@ -0,0 +1,11 @@
+package p;
+
+import q.Asuper;
+
+public class A extends Asuper {
+
+	C c;
+
+	void m() { 
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/in/p/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/in/p/C.java
new file mode 100644
index 0000000..cca21a2
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/in/p/C.java
@@ -0,0 +1,4 @@
+package p;
+
+public class C {
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/in/q/Asuper.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/in/q/Asuper.java
new file mode 100644
index 0000000..7b8302a
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/in/q/Asuper.java
@@ -0,0 +1,4 @@
+package q;
+
+public class Asuper {
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/in/q/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/in/q/C.java
new file mode 100644
index 0000000..ebc356e
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/in/q/C.java
@@ -0,0 +1,4 @@
+package q;
+
+public class C {
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/out/p/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/out/p/A.java
new file mode 100644
index 0000000..b790dad
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/out/p/A.java
@@ -0,0 +1,9 @@
+package p;
+
+import q.Asuper;
+
+public class A extends Asuper {
+
+	void m() { 
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/out/p/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/out/p/C.java
new file mode 100644
index 0000000..cca21a2
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/out/p/C.java
@@ -0,0 +1,4 @@
+package p;
+
+public class C {
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/out/q/Asuper.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/out/q/Asuper.java
new file mode 100644
index 0000000..85dee15
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/out/q/Asuper.java
@@ -0,0 +1,8 @@
+package q;
+
+import p.C;
+
+public class Asuper {
+
+	C c;
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/out/q/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/out/q/C.java
new file mode 100644
index 0000000..ebc356e
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod1/out/q/C.java
@@ -0,0 +1,4 @@
+package q;
+
+public class C {
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/in/p/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/in/p/A.java
new file mode 100644
index 0000000..fc5df27
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/in/p/A.java
@@ -0,0 +1,11 @@
+package p;
+
+import q.Asuper;
+
+public class A extends Asuper {
+
+	C c;
+
+	void m() { 
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/in/p/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/in/p/C.java
new file mode 100644
index 0000000..cca21a2
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/in/p/C.java
@@ -0,0 +1,4 @@
+package p;
+
+public class C {
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/in/q/Asuper.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/in/q/Asuper.java
new file mode 100644
index 0000000..7f5206f
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/in/q/Asuper.java
@@ -0,0 +1,6 @@
+package q;
+
+public class Asuper {
+
+	C cc;
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/in/q/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/in/q/C.java
new file mode 100644
index 0000000..ebc356e
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/in/q/C.java
@@ -0,0 +1,4 @@
+package q;
+
+public class C {
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/out/p/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/out/p/A.java
new file mode 100644
index 0000000..b790dad
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/out/p/A.java
@@ -0,0 +1,9 @@
+package p;
+
+import q.Asuper;
+
+public class A extends Asuper {
+
+	void m() { 
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/out/p/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/out/p/C.java
new file mode 100644
index 0000000..cca21a2
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/out/p/C.java
@@ -0,0 +1,4 @@
+package p;
+
+public class C {
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/out/q/Asuper.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/out/q/Asuper.java
new file mode 100644
index 0000000..bcfc7cb
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/out/q/Asuper.java
@@ -0,0 +1,7 @@
+package q;
+
+public class Asuper {
+
+	C cc;
+	p.C c;
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/out/q/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/out/q/C.java
new file mode 100644
index 0000000..ebc356e
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod2/out/q/C.java
@@ -0,0 +1,4 @@
+package q;
+
+public class C {
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/in/p/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/in/p/A.java
new file mode 100644
index 0000000..fc5df27
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/in/p/A.java
@@ -0,0 +1,11 @@
+package p;
+
+import q.Asuper;
+
+public class A extends Asuper {
+
+	C c;
+
+	void m() { 
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/in/p/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/in/p/C.java
new file mode 100644
index 0000000..cca21a2
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/in/p/C.java
@@ -0,0 +1,4 @@
+package p;
+
+public class C {
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/in/q/Asuper.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/in/q/Asuper.java
new file mode 100644
index 0000000..dd46e8d
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/in/q/Asuper.java
@@ -0,0 +1,6 @@
+package q;
+
+public class Asuper {
+
+	q.C cc;
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/in/q/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/in/q/C.java
new file mode 100644
index 0000000..ebc356e
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/in/q/C.java
@@ -0,0 +1,4 @@
+package q;
+
+public class C {
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/out/p/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/out/p/A.java
new file mode 100644
index 0000000..b790dad
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/out/p/A.java
@@ -0,0 +1,9 @@
+package p;
+
+import q.Asuper;
+
+public class A extends Asuper {
+
+	void m() { 
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/out/p/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/out/p/C.java
new file mode 100644
index 0000000..cca21a2
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/out/p/C.java
@@ -0,0 +1,4 @@
+package p;
+
+public class C {
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/out/q/Asuper.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/out/q/Asuper.java
new file mode 100644
index 0000000..efd2b98
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/out/q/Asuper.java
@@ -0,0 +1,9 @@
+package q;
+
+import p.C;
+
+public class Asuper {
+
+	q.C cc;
+	C c;
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/out/q/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/out/q/C.java
new file mode 100644
index 0000000..ebc356e
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod3/out/q/C.java
@@ -0,0 +1,4 @@
+package q;
+
+public class C {
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/in/p/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/in/p/A.java
new file mode 100644
index 0000000..fc5df27
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/in/p/A.java
@@ -0,0 +1,11 @@
+package p;
+
+import q.Asuper;
+
+public class A extends Asuper {
+
+	C c;
+
+	void m() { 
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/in/p/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/in/p/C.java
new file mode 100644
index 0000000..cca21a2
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/in/p/C.java
@@ -0,0 +1,4 @@
+package p;
+
+public class C {
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/in/q/Asuper.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/in/q/Asuper.java
new file mode 100644
index 0000000..52f74ea
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/in/q/Asuper.java
@@ -0,0 +1,7 @@
+package q;
+
+public class Asuper {
+
+	C cc;
+	q.C ccc;
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/in/q/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/in/q/C.java
new file mode 100644
index 0000000..ebc356e
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/in/q/C.java
@@ -0,0 +1,4 @@
+package q;
+
+public class C {
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/out/p/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/out/p/A.java
new file mode 100644
index 0000000..b790dad
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/out/p/A.java
@@ -0,0 +1,9 @@
+package p;
+
+import q.Asuper;
+
+public class A extends Asuper {
+
+	void m() { 
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/out/p/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/out/p/C.java
new file mode 100644
index 0000000..cca21a2
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/out/p/C.java
@@ -0,0 +1,4 @@
+package p;
+
+public class C {
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/out/q/Asuper.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/out/q/Asuper.java
new file mode 100644
index 0000000..e7b71b8
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/out/q/Asuper.java
@@ -0,0 +1,8 @@
+package q;
+
+public class Asuper {
+
+	C cc;
+	q.C ccc;
+	p.C c;
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/out/q/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/out/q/C.java
new file mode 100644
index 0000000..ebc356e
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod4/out/q/C.java
@@ -0,0 +1,4 @@
+package q;
+
+public class C {
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PullUpTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PullUpTests.java
index be993dc..4c41d70 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PullUpTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PullUpTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2018 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -113,6 +113,43 @@
 		assertEqualLines(expected, actual);
 	}
 
+	private void fieldMethodHelper2(String[] fieldNames, String[] methodNames, String[][] signatures, boolean deleteAllInSourceType, boolean deleteAllMatchingMethods) throws Exception {
+		ICompilationUnit cuQ= createCUfromTestFile(getPackageQ(), "Asuper", "q/");
+		ICompilationUnit cuP= createCUfromTestFile(getPackageP(), "A", "p/");
+		createCUfromTestFile(getPackageP(), "C", "p/");
+		createCUfromTestFile(getPackageQ(), "C", "q/");
+
+		IType type= getType(cuP, "A");
+		IField[] fields= getFields(type, fieldNames);
+		IMethod[] methods= getMethods(type, methodNames, signatures);
+
+		PullUpRefactoringProcessor processor= createRefactoringProcessor(merge(methods, fields));
+
+		Refactoring ref= processor.getRefactoring();
+		RefactoringStatus checkInitialConditions= ref.checkInitialConditions(new NullProgressMonitor());
+		assertTrue("activation", checkInitialConditions.isOK());
+		setSuperclassAsTargetClass(processor);
+
+		if (deleteAllInSourceType) {
+			processor.setDeletedMethods(methods);
+		}
+		if (deleteAllMatchingMethods) {
+			processor.setDeletedMethods(getMethods(processor.getMatchingElements(new NullProgressMonitor(), false)));
+		}
+
+		RefactoringStatus checkInputResult= ref.checkFinalConditions(new NullProgressMonitor());
+		assertTrue("precondition was supposed to pass", !checkInputResult.hasError());
+		performChange(ref, false);
+
+		String expected= getFileContents(getOutputTestFileName("A", "p/"));
+		String actual= cuP.getSource();
+		assertEqualLines(expected, actual);
+
+		String expectedSuper= getFileContents(getOutputTestFileName("Asuper", "q/"));
+		String actualSuper= cuQ.getSource();
+		assertEqualLines(expectedSuper, actualSuper);
+	}
+
 	private IType[] getPossibleTargetClasses(PullUpRefactoringProcessor processor) throws JavaModelException {
 		return processor.getCandidateTypes(new RefactoringStatus(), new NullProgressMonitor());
 	}
@@ -1400,6 +1437,23 @@
 		fieldMethodHelper1(new String[]{"f"}, new String[]{"m"}, new String[][]{new String[0]}, true, false);
 	}
 
+	//---------------------------------------------------------
+	public void testFieldMethod1() throws Exception {
+		fieldMethodHelper2(new String[] { "c" }, new String[] {}, new String[][] { new String[0] }, true, false);
+	}
+
+	public void testFieldMethod2() throws Exception {
+		fieldMethodHelper2(new String[] { "c" }, new String[] {}, new String[][] { new String[0] }, true, false);
+	}
+
+	public void testFieldMethod3() throws Exception {
+		fieldMethodHelper2(new String[] { "c" }, new String[] {}, new String[][] { new String[0] }, true, false);
+	}
+
+	public void testFieldMethod4() throws Exception {
+		fieldMethodHelper2(new String[] { "c" }, new String[] {}, new String[][] { new String[0] }, true, false);
+	}
+
 	//----
 	public void testAddingRequiredMembers0() throws Exception{
 		String[] fieldNames= {};
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java
index adfe8fa..0c9ff99 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java
@@ -1188,25 +1188,40 @@
 										}
 										String sourcePackage= oldTypeBinding.getPackage() == null ? "" : oldTypeBinding.getPackage().getName(); //$NON-NLS-1$
 										String targetPackage= targetRewriter.getRoot().getPackage() == null ? "" : targetRewriter.getRoot().getPackage().getName().toString(); //$NON-NLS-1$
+										String targetTypeBinding= targetPackage + "." + oldTypeBinding.getName(); //$NON-NLS-1$
 
-										if (sourcePackage.isEmpty() ^ targetPackage.isEmpty()) {
-											// not one package can be default package, either none or both
-											status.merge(RefactoringStatus.createErrorStatus(Messages.format(RefactoringCoreMessages.PullUpRefactoring_moving_fromto_default_package,
-													new String[] { JavaElementLabels.getTextLabel(member, JavaElementLabels.ALL_FULLY_QUALIFIED) }), JavaStatusContext.create(member)));
-										}
-
-										if (!sourcePackage.isEmpty()) {
-											Name newName= rewrite.getAST().newName(sourcePackage);
-											SimpleName newSimpleName= rewrite.getAST().newSimpleName(oldTypeBinding.getName());
-											SimpleType newSimpleType= null;
-											if (targetPackage.equals(sourcePackage)) {
-												// if source type is in same package as target then we don't need the fully qualified name
-												newSimpleType= rewrite.getAST().newSimpleType(newSimpleName);
-											} else {
-												QualifiedName newQualifiedTypeName= rewrite.getAST().newQualifiedName(newName, newSimpleName);
-												newSimpleType= rewrite.getAST().newSimpleType(newQualifiedTypeName);
+										// Find the same type-name field but fully qualified. 
+										// In that case it won't shadow the pulled up field
+										boolean qualifiedTypeNameInTarget= true;
+										String sourceSignature= ((IField) member).getTypeSignature();
+										for (IField targetField : fDestinationType.getFields()) {
+											if (sourceSignature.equals(targetField.getTypeSignature())) {
+												qualifiedTypeNameInTarget= false;
+												break;
 											}
-											newField.setType(newSimpleType);
+										}
+										//check if same type name is accessible in new package (targetPackage + <type>)
+										IType findTargetType= target.getJavaProject().findType(targetTypeBinding);
+										if (!qualifiedTypeNameInTarget && findTargetType != null) {
+											if (sourcePackage.isEmpty() ^ targetPackage.isEmpty()) {
+												// not one package can be default package, either none or both
+												status.merge(RefactoringStatus.createErrorStatus(Messages.format(RefactoringCoreMessages.PullUpRefactoring_moving_fromto_default_package,
+														new String[] { JavaElementLabels.getTextLabel(member, JavaElementLabels.ALL_FULLY_QUALIFIED) }), JavaStatusContext.create(member)));
+											}
+
+											if (!sourcePackage.isEmpty()) {
+												Name newName= rewrite.getAST().newName(sourcePackage);
+												SimpleName newSimpleName= rewrite.getAST().newSimpleName(oldTypeBinding.getName());
+												SimpleType newSimpleType= null;
+												if (targetPackage.equals(sourcePackage)) {
+													// if source type is in same package as target then we don't need the fully qualified name
+													newSimpleType= rewrite.getAST().newSimpleType(newSimpleName);
+												} else {
+													QualifiedName newQualifiedTypeName= rewrite.getAST().newQualifiedName(newName, newSimpleName);
+													newSimpleType= rewrite.getAST().newSimpleType(newQualifiedTypeName);
+												}
+												newField.setType(newSimpleType);
+											}
 										}
 									}
 								}