Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Keller2015-03-05 20:52:37 +0000
committerMarkus Keller2015-03-05 20:52:37 +0000
commit26de20ae619c91a55a35147a34aba32ab3111d61 (patch)
treec3f489eed99f5db6fa2a73ec3cd21310c72432eb
parent1490ec2d61fb8e59c378e50775f4749531490d5f (diff)
downloadeclipse.jdt.core-26de20ae619c91a55a35147a34aba32ab3111d61.tar.gz
eclipse.jdt.core-26de20ae619c91a55a35147a34aba32ab3111d61.tar.xz
eclipse.jdt.core-26de20ae619c91a55a35147a34aba32ab3111d61.zip
Bug 459320: [ImportRewrite] adds import for declared package when pasting to CU outside of classpath
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewriteTest.java29
-rw-r--r--org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/imports/ImportRewriteConfiguration.java23
2 files changed, 49 insertions, 3 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewriteTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewriteTest.java
index e1d22922d3..f5c7ca01d7 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewriteTest.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewriteTest.java
@@ -18,8 +18,7 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.List;
-import junit.framework.Test;
-
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Platform;
@@ -49,6 +48,8 @@ import org.eclipse.text.edits.MultiTextEdit;
import org.eclipse.text.edits.TextEdit;
import org.osgi.service.prefs.BackingStoreException;
+import junit.framework.Test;
+
@SuppressWarnings({"rawtypes", "unchecked"})
public class ImportRewriteTest extends AbstractJavaModelTests {
@@ -1441,6 +1442,30 @@ public class ImportRewriteTest extends AbstractJavaModelTests {
expected.append("public class Clazz {}\n");
assertEqualString(cu.getSource(), expected.toString());
}
+
+ // https://bugs.eclipse.org/459320
+ public void testAddImportToCuNotOnClasspath() throws Exception {
+ StringBuffer contents = new StringBuffer();
+ contents.append("package pack1;\n");
+ contents.append("\n");
+ contents.append("public class Clazz {}\n");
+
+ createFolder("/P/alt-src/pack1/");
+ IFile clazz = createFile("/P/alt-src/pack1/Clazz.java", contents.toString());
+ ICompilationUnit cu = (ICompilationUnit) JavaCore.create(clazz);
+ cu.becomeWorkingCopy(null);
+
+ try {
+ ImportRewrite rewrite = newImportsRewrite(cu, new String[] {}, 999, 999, true);
+ rewrite.setUseContextToFilterImplicitImports(true);
+ rewrite.addImport("pack1.AnotherClass");
+ apply(rewrite);
+
+ assertEqualString(cu.getSource(), contents.toString());
+ } finally {
+ cu.discardWorkingCopy();
+ }
+ }
public void testAddImports1() throws Exception {
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/imports/ImportRewriteConfiguration.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/imports/ImportRewriteConfiguration.java
index c77fee8582..2055df1c3a 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/imports/ImportRewriteConfiguration.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/imports/ImportRewriteConfiguration.java
@@ -18,6 +18,9 @@ import java.util.List;
import java.util.Set;
import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IPackageDeclaration;
+import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.core.JavaProject;
/**
@@ -159,7 +162,25 @@ public final class ImportRewriteConfiguration {
implicitImportContainerNames.add("java.lang"); //$NON-NLS-1$
- String compilationUnitPackageName = compilationUnit.getParent().getElementName();
+ IJavaElement packageFragment = compilationUnit.getParent();
+ String compilationUnitPackageName = packageFragment.getElementName();
+ if (compilationUnitPackageName.isEmpty() && !packageFragment.exists() && compilationUnit.exists()) {
+ /*
+ * For a file outside of the build path, JavaCore#create(IFile) creates an
+ * ICompilationUnit with the file's parent folder as package fragment root, and a default package.
+ * That "wrong" package is problematic for the ImportRewrite, since it doesn't get filtered
+ * and eventually leads to unused import statements.
+ */
+ try {
+ IPackageDeclaration[] packageDeclarations = compilationUnit.getPackageDeclarations();
+ if (packageDeclarations.length > 0) {
+ implicitImportContainerNames.add(packageDeclarations[0].getElementName());
+ return implicitImportContainerNames;
+ }
+ } catch (JavaModelException e) {
+ // continue
+ }
+ }
implicitImportContainerNames.add(compilationUnitPackageName);
return implicitImportContainerNames;

Back to the top