Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 224198 Details for
Bug 378024
Ordering of comments between imports not preserved
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
updated patch
clipboard.txt (text/plain), 72.21 KB, created by
Stephan Herrmann
on 2012-12-02 07:35:09 EST
(
hide
)
Description:
updated patch
Filename:
MIME Type:
Creator:
Stephan Herrmann
Created:
2012-12-02 07:35:09 EST
Size:
72.21 KB
patch
obsolete
>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 7d01596..8eaf042 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 >@@ -65,6 +65,10 @@ > } > > public static Test suite() { >+// System.err.println("Warning, only part of the ImportRewriteTest are being executed!"); >+// Suite suite = new Suite(ImportRewriteTest.class.getName()); >+// suite.addTest(new ImportRewriteTest("testRemoveImports1")); >+// return suite; > return allTests(); > } > >@@ -1913,6 +1917,7 @@ > "import java.util.Map.*;\n" + > "\n" + > "/* lead 2*/import java.io.PrintWriter.*; // test2\n" + >+ "\n" + > "/* lead 3*/ import java.util.Map.SomethingElse; // test3\n" + > "// commen 3\n" + > "\n" + >@@ -1973,6 +1978,7 @@ > "\n" + > "// comment 1\n" + > "/* lead 2*/import java.io.PrintWriter.*; // test2\n" + >+ "\n" + > "/* lead 1*/ import java.util.*; // test1\n" + > "import java.util.Map.*;\n" + > "/* lead 3*/ import java.util.Map.SomethingElse; // test3\n" + >@@ -2032,11 +2038,8 @@ > "package pack1;\n" + > "\n" + > "// comment 1\n" + >- "/* lead 2*/" + >- "import java.util.*;\n" + >+ "/* lead 2*//* lead 1*/ import java.util.*; // test1\n" + > "// test2\n" + >- "/* lead 1*/ \n" + >- "// test1\n" + > "/* lead 3*/ \n" + > "// test3\n" + > "// commen 3\n" + >@@ -2096,8 +2099,7 @@ > "\n" + > "// comment 1\n" + > "/* lead 1*/ " + >- "import java.util.Map.*;\n" + >- "// test1\n" + >+ "import java.util.Map.*; // test1\n" + > "/* lead 2*/\n" + > "// test2\n" + > "/* lead 3*/ \n" + >@@ -2159,10 +2161,9 @@ > "// comment 1\n" + > "/* lead 2*/import java.io.PrintWriter.*; // test2\n" + > "\n" + >- "/* lead 1*/ \n" + >+ "/* lead 1*/ import java.util.*;\n" + > " // test1\n" + > "// commen 3\n" + >- "import java.util.*;\n" + > "\n" + > "public class C {\n" + > " public static void main(String[] args) {\n" + >@@ -2178,6 +2179,1392 @@ > assertEqualString(cu.getSource(), buf.toString()); > } > >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=376930 >+ // separating comment should not prevent folding into *-import >+ public void testBug376930_5e() throws Exception { >+ IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null); >+ StringBuffer buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "import java.util.Map;\n" + >+ "/* comment leading Map.Entry */\n" + >+ "import java.util.Map.Entry;\n" + >+ "\n" + >+ "public class C {\n" + >+ " public static void main(String[] args) {\n" + >+ " HashMap h;\n" + >+ "\n" + >+ " Map.Entry e= null;\n" + >+ " Entry e2= null;\n" + >+ "\n" + >+ " }\n" + >+ "}"); >+ ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null); >+ >+ String[] order = new String[] { "java", "javax", "org", "com" }; >+ >+ ImportRewrite imports= newImportsRewrite(cu, order, 2, 2, true); >+ imports.setUseContextToFilterImplicitImports(true); >+ imports.addImport("java.util.HashMap"); >+ >+ apply(imports); >+ >+ buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "import java.util.*;\n" + >+ "/* comment leading Map.Entry */\n" + >+ "import java.util.Map.Entry;\n" + >+ "\n" + >+ "public class C {\n" + >+ " public static void main(String[] args) {\n" + >+ " HashMap h;\n" + >+ "\n" + >+ " Map.Entry e= null;\n" + >+ " Entry e2= null;\n" + >+ "\n" + >+ " }\n" + >+ "}"); >+ assertEqualString(cu.getSource(), buf.toString()); >+ } >+ >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024 >+ public void testBug378024() throws Exception { >+ IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null); >+ StringBuffer buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * keep me with List\n" + >+ " *\n" + >+ " */\n" + >+ "import java.awt.List;// test1\n" + >+ "/*\n" + >+ " * keep me with Serializable\n" + >+ " */\n" + >+ "import java.io.Serializable;// test2\n" + >+ "/*\n" + >+ " * keep me with HashMap\n" + >+ " */\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null); >+ >+ String[] order = new String[] { "java", "java.awt", "java.io", "java.util" }; >+ >+ ImportRewrite imports= newImportsRewrite(cu, order, 2, 2, false); >+ imports.setUseContextToFilterImplicitImports(true); >+ imports.addImport("java.awt.List"); >+ imports.addImport("java.io.Serializable"); >+ imports.addImport("java.util.HashMap"); >+ >+ apply(imports); >+ >+ buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * keep me with List\n" + >+ " *\n" + >+ " */\n" + >+ "import java.awt.List;// test1\n\n" + >+ "/*\n" + >+ " * keep me with Serializable\n" + >+ " */\n" + >+ "import java.io.Serializable;// test2\n\n" + >+ "/*\n" + >+ " * keep me with HashMap\n" + >+ " */\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ assertEqualString(cu.getSource(), buf.toString()); >+ } >+ >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024 >+ public void testBug378024b() throws Exception { >+ IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null); >+ StringBuffer buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "import java.awt.List;// test1\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "import java.io.Serializable;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null); >+ >+ String[] order = new String[] { "java", "java.util", "com", "pack" }; >+ >+ ImportRewrite imports= newImportsRewrite(cu, order, 1, 1, false); >+ imports.setUseContextToFilterImplicitImports(true); >+ imports.addImport("java.awt.List"); >+ imports.addImport("java.io.Serializable"); >+ imports.addImport("java.util.HashMap"); >+ >+ apply(imports); >+ >+ buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "import java.awt.*;// test1\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "import java.io.*;// test2\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "import java.util.*;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ assertEqualString(cu.getSource(), buf.toString()); >+ } >+ >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024 >+ // leading and trailing comments always move with imports. >+ // comments in between stay where they are >+ public void testBug378024c() throws Exception { >+ IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null); >+ StringBuffer buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "\n" + >+ "// lead 2\n" + >+ "import java.io.Serializable;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null); >+ >+ String[] order = new String[] { "java", "java.util", "com", "pack" }; >+ >+ ImportRewrite imports= newImportsRewrite(cu, order, 99, 99, false); >+ imports.setUseContextToFilterImplicitImports(true); >+ imports.addImport("java.awt.List"); >+ imports.addImport("java.io.Serializable"); >+ imports.addImport("java.util.HashMap"); >+ >+ apply(imports); >+ >+ buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "// lead 2\n" + >+ "import java.io.Serializable;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ assertEqualString(cu.getSource(), buf.toString()); >+ } >+ >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024 >+ // leading and trailing comments always move with imports. >+ // comments in between stay where they are >+ public void testBug378024c_1() throws Exception { >+ IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null); >+ StringBuffer buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "\n" + >+ "// lead 2\n" + >+ "import java.io.Serializable;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null); >+ >+ String[] order = new String[] { "java", "com", "pack" }; >+ >+ ImportRewrite imports= newImportsRewrite(cu, order, 99, 99, false); >+ imports.setUseContextToFilterImplicitImports(true); >+ imports.addImport("java.awt.List"); >+ imports.addImport("java.io.Serializable"); >+ imports.addImport("java.util.HashMap"); >+ >+ apply(imports); >+ >+ buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "// lead 2\n" + >+ "import java.io.Serializable;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ assertEqualString(cu.getSource(), buf.toString()); >+ } >+ >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024 >+ // leading and trailing comments always move with imports, even if they get folded. >+ // comments in between stay where they are >+ public void testBug378024c_2() throws Exception { >+ IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null); >+ StringBuffer buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "\n" + >+ "// lead 2\n" + >+ "import java.io.Serializable;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null); >+ >+ String[] order = new String[] { "java", "com", "pack" }; >+ >+ ImportRewrite imports= newImportsRewrite(cu, order, 1, 1, false); >+ imports.setUseContextToFilterImplicitImports(true); >+ imports.addImport("java.awt.List"); >+ imports.addImport("java.io.Serializable"); >+ imports.addImport("java.util.HashMap"); >+ >+ apply(imports); >+ >+ buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.*;// test1\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "// lead 2\n" + >+ "import java.io.*;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "//lead 3\n" + >+ "import java.util.*;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ assertEqualString(cu.getSource(), buf.toString()); >+ } >+ >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024 >+ // not adding an import should preserve its comments and put them at the end. >+ public void testBug378024d() throws Exception { >+ IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null); >+ StringBuffer buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "\n" + >+ "// lead 2\n" + >+ "import java.io.Serializable;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null); >+ >+ String[] order = new String[] { "java", "java.util", "com", "pack" }; >+ >+ ImportRewrite imports= newImportsRewrite(cu, order, 1, 1, false); >+ imports.setUseContextToFilterImplicitImports(true); >+ imports.addImport("java.awt.List"); >+ imports.addImport("java.util.HashMap"); >+ >+ apply(imports); >+ >+ buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.*;// test1\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.*;// test3\n" + >+ "// commen 3\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "// lead 2\n" + >+ "// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ assertEqualString(cu.getSource(), buf.toString()); >+ } >+ >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024 >+ // adding a new import should not disturb comments and import should be added in its group >+ public void testBug378024e() throws Exception { >+ IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null); >+ StringBuffer buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "\n" + >+ "// lead 2\n" + >+ "import java.io.Serializable;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null); >+ >+ String[] order = new String[] { "java", "com", "pack" }; >+ >+ ImportRewrite imports= newImportsRewrite(cu, order, 2, 2, false); >+ imports.setUseContextToFilterImplicitImports(true); >+ imports.addImport("java.awt.List"); >+ imports.addImport("java.io.Serializable"); >+ imports.addImport("java.io.PrintWriter"); >+ imports.addImport("java.util.HashMap"); >+ >+ apply(imports); >+ >+ buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "// lead 2\n" + >+ "import java.io.*;\n" + >+ "// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ assertEqualString(cu.getSource(), buf.toString()); >+ } >+ >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024 >+ // removing an import should preserve its comments at the end, and adding a new import should not disturb >+ // existing comments >+ public void testBug378024e_1() throws Exception { >+ IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null); >+ StringBuffer buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "\n" + >+ "// lead 2\n" + >+ "import java.io.Serializable;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null); >+ >+ String[] order = new String[] { "java", "java.util", "com", "pack" }; >+ >+ ImportRewrite imports= newImportsRewrite(cu, order, 2, 2, false); >+ imports.setUseContextToFilterImplicitImports(true); >+ imports.addImport("java.awt.List"); >+ imports.addImport("java.io.PrintWriter"); >+ imports.addImport("java.util.HashMap"); >+ >+ apply(imports); >+ >+ buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "import java.io.PrintWriter;\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "// lead 2\n" + >+ "// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ assertEqualString(cu.getSource(), buf.toString()); >+ } >+ >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024 >+ // folding imports because of a newly added import should preserve comments >+ public void testBug378024f() throws Exception { >+ IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null); >+ StringBuffer buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "\n" + >+ "// lead 2\n" + >+ "import java.io.Serializable;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null); >+ >+ String[] order = new String[] { "java", "com", "pack" }; >+ >+ ImportRewrite imports= newImportsRewrite(cu, order, 2, 2, false); >+ imports.setUseContextToFilterImplicitImports(true); >+ imports.addImport("java.awt.List"); >+ imports.addImport("java.io.Serializable"); >+ imports.addImport("java.io.PrintWriter"); >+ imports.addImport("java.util.HashMap"); >+ >+ apply(imports); >+ >+ buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "// lead 2\n" + >+ "import java.io.*;\n" + >+ "// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ assertEqualString(cu.getSource(), buf.toString()); >+ } >+ >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024 >+ // folding imports because of a newly added import should preserve comments >+ public void testBug378024f_1() throws Exception { >+ IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null); >+ StringBuffer buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * keep me with List\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "\n" + >+ "/*\n" + >+ " * keep me with Serializable\n" + >+ " */\n" + >+ "\n" + >+ "// lead 2\n" + >+ "import java.io.Serializable;// test2\n" + >+ "/*\n" + >+ " * keep me with Serializable 2\n" + >+ " */\n" + >+ "\n" + >+ "// lead 3\n" + >+ "import java.io.PrintWriter;// test3\n" + >+ "/*\n" + >+ " * keep me with PrintWriter\n" + >+ " */\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me\n" + >+ " */\n" + >+ "\n" + >+ "//lead 4\n" + >+ "import java.util.HashMap;// test4\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null); >+ >+ String[] order = new String[] { "java", "java.util", "com", "pack" }; >+ >+ ImportRewrite imports= newImportsRewrite(cu, order, 2, 2, false); >+ imports.setUseContextToFilterImplicitImports(true); >+ imports.addImport("java.awt.List"); >+ imports.addImport("java.io.Serializable"); >+ imports.addImport("java.io.PrintWriter"); >+ imports.addImport("java.util.HashMap"); >+ >+ apply(imports); >+ >+ buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * keep me with List\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "\n" + >+ "//lead 4\n" + >+ "import java.util.HashMap;// test4\n" + >+ "// commen 3\n" + >+ "/*\n" + >+ " * keep me with Serializable\n" + >+ " */\n" + >+ "// lead 2\n" + >+ "// lead 3\n" + >+ "import java.io.*;// test3\n" + >+ "/*\n" + >+ " * keep me with PrintWriter\n" + >+ " */\n" + >+ "// test2\n" + >+ "/*\n" + >+ " * keep me with Serializable 2\n" + >+ " */\n" + >+ "/*\n" + >+ " * don't move me\n" + >+ " */\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ assertEqualString(cu.getSource(), buf.toString()); >+ } >+ >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024 >+ // Re-ordering imports and converting them to * >+ public void testBug378024g() throws Exception { >+ IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null); >+ StringBuffer buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "\n" + >+ "// lead 2\n" + >+ "import java.io.Serializable;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null); >+ >+ String[] order = new String[] { "java", "java.awt", "java.util", "java.io", "com", "pack" }; >+ >+ ImportRewrite imports= newImportsRewrite(cu, order, 1, 1, false); >+ imports.setUseContextToFilterImplicitImports(true); >+ imports.addImport("java.awt.List"); >+ imports.addImport("java.io.Serializable"); >+ imports.addImport("java.util.HashMap"); >+ >+ apply(imports); >+ >+ StringBuffer buf2 = new StringBuffer(); >+ buf2.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.*;// test1\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.*;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "// lead 2\n" + >+ "import java.io.*;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " List l = new List();\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ assertEqualString(cu.getSource(), buf2.toString()); >+ } >+ >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024 >+ // Preserve comments when imports are removed in case the restoring of imports is enabled >+ // This will test changes in org.eclipse.jdt.internal.core.dom.rewrite.ImportRewriteAnalyzer.removeImport(String, boolean) >+ public void testBug378024h() throws Exception { >+ IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null); >+ StringBuffer buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "\n" + >+ "// lead 2\n" + >+ "import java.io.Serializable;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null); >+ >+ String[] order = new String[] { "java", "java.util", "com", "pack" }; >+ >+ ImportRewrite imports= newImportsRewrite(cu, order, 99, 99, true); >+ imports.setUseContextToFilterImplicitImports(true); >+ imports.removeImport("java.awt.List"); >+ >+ apply(imports); >+ >+ buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "\n" + >+ "// lead 1\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "\n" + >+ "// lead 2\n" + >+ "import java.io.Serializable;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ assertEqualString(cu.getSource(), buf.toString()); >+ } >+ >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024 >+ // Preserve comments when imports are removed in case the restoring of imports is enabled >+ public void testBug378024h_1() throws Exception { >+ IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null); >+ StringBuffer buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "/* i am with List */\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "\n" + >+ "// lead 2\n" + >+ "import java.io.Serializable;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null); >+ >+ String[] order = new String[] { "java", "java.util", "com", "pack" }; >+ >+ ImportRewrite imports= newImportsRewrite(cu, order, 99, 99, true); >+ imports.setUseContextToFilterImplicitImports(true); >+ imports.removeImport("java.awt.List"); >+ imports.addImport("java.util.List"); >+ >+ apply(imports); >+ >+ buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "// lead 1\n" + >+ "/* i am with List */\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "\n" + >+ "// lead 2\n" + >+ "import java.io.Serializable;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "import java.util.List;\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ assertEqualString(cu.getSource(), buf.toString()); >+ } >+ >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024 >+ // Preserve comments when imports are unfolded. >+ public void testBug378024i() throws Exception { >+ IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null); >+ StringBuffer buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "// lead 1\n" + >+ "import java.awt.*;// test1\n" + >+ "/* i am with List */\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "\n" + >+ "// lead 2\n" + >+ "import java.io.*;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.*;// test3\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " HashMap e= null;\n" + >+ " PrintWriter p= null;\n" + >+ " List l= null;\n" + >+ " }\n" + >+ "}"); >+ ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null); >+ >+ String[] order = new String[] { "java", "com", "pack" }; >+ >+ ImportRewrite imports= newImportsRewrite(cu, order, 99, 99, false); >+ imports.setUseContextToFilterImplicitImports(true); >+ imports.addImport("java.awt.List"); >+ imports.addImport("java.io.PrintWriter"); >+ imports.addImport("java.io.Serializable"); >+ imports.addImport("java.util.HashMap"); >+ imports.addImport("java.util.Map"); >+ apply(imports); >+ >+ buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "/* i am with List */\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "// lead 2\n" + >+ "import java.io.PrintWriter;// test2\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "import java.io.Serializable;\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "// commen 3\n" + >+ "import java.util.Map;\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " HashMap e= null;\n" + >+ " PrintWriter p= null;\n" + >+ " List l= null;\n" + >+ " }\n" + >+ "}"); >+ assertEqualString(cu.getSource(), buf.toString()); >+ } >+ >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024 >+ // Preserve comments when imports are folded but a member type import is present >+ public void testBug378024j() throws Exception { >+ IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null); >+ StringBuffer buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "// lead 1\n" + >+ "import java.awt.List;// test1\n" + >+ "/* i am with List */\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.HashMap;// test3\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "\n" + >+ "/*keep me with Map.Entry*/\n" + >+ "import java.util.Map.Entry;// member type import\n" + >+ "/*keep me with Map.Entry 2*/\n" + >+ "\n" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "\n" + >+ "// lead 2\n" + >+ "import java.io.Serializable;// test2\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null); >+ >+ String[] order = new String[] { "java", "java.util", "com", "pack" }; >+ >+ ImportRewrite imports= newImportsRewrite(cu, order, 1, 1, false); >+ imports.setUseContextToFilterImplicitImports(true); >+ imports.addImport("java.awt.List"); >+ imports.addImport("java.util.HashMap"); >+ imports.addImport("java.util.Map.Entry"); >+ imports.addImport("java.io.Serializable"); >+ >+ apply(imports); >+ >+ buf = new StringBuffer(); >+ buf.append( >+ "package pack1;\n" + >+ "\n" + >+ "// comment 1\n" + >+ "/*\n" + >+ " * don't move me 1\n" + >+ " *\n" + >+ " */\n" + >+ "// lead 1\n" + >+ "import java.awt.*;// test1\n" + >+ "/* i am with List */\n" + >+ "\n" + >+ "//lead 3\n" + >+ "import java.util.*;// test3\n" + >+ "/*\n" + >+ " * don't move me 3\n" + >+ " */\n" + >+ "/*keep me with Map.Entry*/\n" + >+ "import java.util.Map.Entry;// member type import\n" + >+ "/*keep me with Map.Entry 2*/\n" + >+ "/*\n" + >+ " * don't move me 2\n" + >+ " */" + >+ "/*\n" + >+ " * don't move me 4\n" + >+ " */\n" + >+ "// lead 2\n" + >+ "import java.io.*;// test2\n" + >+ "// commen 3\n" + >+ "\n" + >+ "public class C implements Serializable{\n" + >+ " public static void main(String[] args) {\n" + >+ " Map e= null;\n" + >+ " }\n" + >+ "}"); >+ assertEqualString(cu.getSource(), buf.toString()); >+ } >+ > private void assertAddedAndRemoved(ImportRewrite imports, String[] expectedAdded, String[] expectedRemoved, String[] expectedAddedStatic, String[] expectedRemovedStatic) { > assertEqualStringsIgnoreOrder(imports.getAddedImports(), expectedAdded); > assertEqualStringsIgnoreOrder(imports.getAddedStaticImports(), expectedAddedStatic); >diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java >index c668049..f758926 100644 >--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java >+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2000, 2011 IBM Corporation and others. >+ * Copyright (c) 2000, 2012 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -1051,7 +1051,7 @@ > if (this.addedImports != null) { > for (int i= 0; i < this.addedImports.size(); i++) { > String curr= (String) this.addedImports.get(i); >- computer.addImport(curr.substring(1), STATIC_PREFIX == curr.charAt(0)); >+ computer.addImport(curr.substring(1), STATIC_PREFIX == curr.charAt(0), usedAstRoot, this.restoreExistingImports); > } > } > >diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ImportRewriteAnalyzer.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ImportRewriteAnalyzer.java >index 563ab90..d3cba8f 100644 >--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ImportRewriteAnalyzer.java >+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ImportRewriteAnalyzer.java >@@ -272,11 +272,13 @@ > int nextOffsetLine= root.getLineNumber(nextOffset); > > int extendedStart = root.getExtendedStartPosition(curr); >+ int extendedLength = root.getExtendedLength(curr); > if (extendedStart < this.replaceRange.getOffset()) { > // don't touch the first comments before the start of import declarations >+ extendedLength -= (currOffset - extendedStart); > extendedStart = currOffset; > } >- int extendedLength = root.getExtendedLength(curr); >+ > // if next import is on a different line, modify the end position to the next line begin offset > int nextLineOffset = nextOffset; // offset at the start of next line. Next import may not start here > if (currEndLine < nextOffsetLine) { >@@ -313,9 +315,10 @@ > if (currEndLine < nextOffsetLine) { > nextOffset= root.getPosition(nextOffsetLine, 0); > >- currPackage= new PackageEntry(); // create a comment package entry for this >- this.packageEntries.add(currPackage); >- currPackage.add(new ImportDeclEntry(packName.length(), null, false, new Region(nextLineOffset, nextOffset - nextLineOffset))); >+ int length = nextOffset - nextLineOffset; >+ if (length > 2) { // valid comment has at least two chars >+ currPackage.add(new ImportDeclEntry(packName.length(), null, false, new Region(nextLineOffset, length))); >+ } > > currOffset= nextOffset; > } >@@ -566,6 +569,7 @@ > } > String groupId= null; > int longestPrefix= -1; >+ PackageEntry matchingCommentEntry = null; > // find the matching group > for (int i= 0; i < this.packageEntries.size(); i++) { > PackageEntry curr= (PackageEntry) this.packageEntries.get(i); >@@ -573,8 +577,11 @@ > String currGroup= curr.getGroupID(); > if (currGroup != null && newName.startsWith(currGroup)) { > int prefixLen= currGroup.length(); >- if (prefixLen == newName.length()) { >+ if (prefixLen == newName.length() && !curr.isComment()) { > return curr; // perfect fit, use entry >+ } else if (curr.isComment()) { >+ matchingCommentEntry = curr; // may be the only fit if no actual import of this group is already present >+ continue; > } > if ((newName.charAt(prefixLen) == '.' || prefixLen == 0) && prefixLen > longestPrefix) { > longestPrefix= prefixLen; >@@ -582,6 +589,9 @@ > } > } > } >+ } >+ if (matchingCommentEntry != null) { >+ return matchingCommentEntry; > } > PackageEntry bestMatch= null; > PackageMatcher matcher= new PackageMatcher(); >@@ -616,10 +626,78 @@ > return qualifier.equals(packageName +'.' + mainTypeName); > } > >- public void addImport(String fullTypeName, boolean isStatic) { >+ public void addImport(String fullTypeName, boolean isStatic, CompilationUnit root, boolean restoreExistingImports) { > String typeContainerName= getQualifier(fullTypeName, isStatic); >- ImportDeclEntry decl= new ImportDeclEntry(typeContainerName.length(), fullTypeName, isStatic, null); >+ ImportDeclEntry decl; >+ if (restoreExistingImports) { >+ decl = new ImportDeclEntry(typeContainerName.length(), fullTypeName, isStatic, null); >+ } else { >+ decl = addImportDeclEntry(typeContainerName, fullTypeName, isStatic, root); >+ } > sortIn(typeContainerName, decl, isStatic); >+ } >+ >+ /** >+ * adds the import entry, but if its an existing import entry then preserves the comments surrounding the import >+ */ >+ private ImportDeclEntry addImportDeclEntry(String containerName, String fullTypeName, boolean isStatic, CompilationUnit root) { >+ List/*ImportDeclaration*/ decls= root.imports(); >+ if (decls.isEmpty() || this.preserveExistingCommentsRanges == null || this.preserveExistingCommentsRanges.length == 0) { >+ return new ImportDeclEntry(containerName.length(), fullTypeName, isStatic, null); >+ } >+ IRegion precedingCommentRange = null; >+ IRegion trailingCommentRange = null; >+ int prevOffset = this.replaceRange.getOffset(); // will store offset of the previous import's extended end >+ int numOfImports = decls.size(); >+ for (int i= 0; i < numOfImports; i++) { >+ ImportDeclaration curr= (ImportDeclaration) decls.get(i); >+ int currOffset= curr.getStartPosition(); >+ int currLength= curr.getLength(); >+ int currExtendedStart = root.getExtendedStartPosition(curr); >+ int currExtendedLen = root.getExtendedLength(curr); >+ String name= getFullName(curr); >+ String packName= getQualifier(curr); >+ if (packName.equals(containerName) && (name.equals(fullTypeName) || name.endsWith("*"))) {//$NON-NLS-1$ >+ int preserveCommentsLen = this.preserveExistingCommentsRanges.length; >+ for (int j = 0; j < preserveCommentsLen; j++) { >+ int offset = this.preserveExistingCommentsRanges[j].getOffset(); >+ boolean wasRangeUsed = false; >+ int existingCommentLength = this.preserveExistingCommentsRanges[j].getLength(); >+ if (offset == currExtendedStart) { >+ // comments belonging to this import's extended start >+ precedingCommentRange = new Region(offset, existingCommentLength); >+ wasRangeUsed = true; >+ } else if (offset < currExtendedStart && offset > prevOffset) { >+ // comment between two imports but not inside either's extended ranges >+ // to preserve the position of these comments add a dummy comment entry >+ PackageEntry commentEntry = new PackageEntry(); // create a comment package entry for this >+ commentEntry.setGroupID(packName); // the comment should belong to the current group >+ this.packageEntries.add(commentEntry); >+ commentEntry.add(new ImportDeclEntry(packName.length(), null, false, new Region(offset, existingCommentLength))); >+ wasRangeUsed = true; >+ } else if ((currExtendedStart + currExtendedLen) != (currOffset + currLength)){ >+ if (offset == currOffset + currLength) { >+ // comment is in the extended end of the import >+ trailingCommentRange = new Region(offset, existingCommentLength); >+ wasRangeUsed = true; >+ } else if (offset > (currOffset + currLength)) { >+ break; >+ } >+ } >+ if (wasRangeUsed) { >+ // remove this comment from preserveExistingCommentsRanges array >+ IRegion[] tempRegions = new IRegion[--preserveCommentsLen]; >+ System.arraycopy(this.preserveExistingCommentsRanges, 0, tempRegions, 0, j); >+ System.arraycopy(this.preserveExistingCommentsRanges, j+1, tempRegions, j, tempRegions.length - j); >+ this.preserveExistingCommentsRanges = tempRegions; >+ j--; >+ } >+ } >+ return new ImportDeclEntry(containerName.length(), fullTypeName, isStatic, null, precedingCommentRange, trailingCommentRange); >+ } >+ prevOffset = currExtendedStart + currExtendedLen - 1; >+ } >+ return new ImportDeclEntry(containerName.length(), fullTypeName, isStatic, null); > } > > public boolean removeImport(String qualifiedName, boolean isStatic) { >@@ -748,16 +826,15 @@ > continue; > } > >- if (spacesBetweenGroups > 0) { >+ if (spacesBetweenGroups > 0 && lastPackage != null) { > // add a space between two different groups by looking at the two adjacent imports >- if (lastPackage != null && !pack.isComment() && !pack.isSameGroup(lastPackage)) { >- ImportDeclEntry last= lastPackage.getImportAt(lastPackage.getNumberOfImports() - 1); >- ImportDeclEntry first= pack.getImportAt(0); >- if (!lastPackage.isComment() && (last.isNew() || first.isNew())) { >- for (int k= spacesBetweenGroups; k > 0; k--) { >- stringsToInsert.add(lineDelim); >- } >+ if (!lastPackage.isComment() && !pack.isComment() && !pack.isSameGroup(lastPackage)) { >+ for (int k= spacesBetweenGroups; k > 0; k--) { >+ stringsToInsert.add(lineDelim); > } >+ } else if (lastPackage.isComment() && pack.isSameGroup(lastPackage)) { >+ // the last pack may be a dummy for a comment which doesn't belong to any extended range >+ stringsToInsert.add(lineDelim); > } > } > lastPackage= pack; >@@ -766,22 +843,36 @@ > int threshold= isStatic ? this.staticImportOnDemandThreshold : this.importOnDemandThreshold; > > boolean doStarImport= pack.hasStarImport(threshold, onDemandConflicts); >+ boolean allImportsAddedToStar = false; > if (doStarImport && (pack.find("*") == null)) { //$NON-NLS-1$ > String[] imports = getNewImportStrings(buffer, pack, isStatic, lineDelim); > for (int j = 0, max = imports.length; j < max; j++) { > stringsToInsert.add(imports[j]); > } >+ allImportsAddedToStar = true; // may still need to handle onDemandConflicts below > } > > for (int k= 0; k < nImports; k++) { > ImportDeclEntry currDecl= pack.getImportAt(k); > IRegion region= currDecl.getSourceRange(); >- >+ boolean isConflict = !currDecl.isComment() && onDemandConflicts != null && onDemandConflicts.contains(currDecl.getSimpleName()); >+ boolean addRegularToStar = doStarImport && !currDecl.isOnDemand(); >+ > if (region == null) { // new entry >- if (!doStarImport || currDecl.isOnDemand() || (onDemandConflicts != null && onDemandConflicts.contains(currDecl.getSimpleName()))) { >- String str= getNewImportString(currDecl.getElementName(), isStatic, lineDelim); >+ if (!addRegularToStar || isConflict) { >+ IRegion rangeBefore = currDecl.getPrecedingCommentRange(); >+ IRegion rangeAfter = currDecl.getTrailingCommentRange(); >+ if (rangeBefore != null) { >+ stringsToInsert.add(buffer.getText(rangeBefore.getOffset(), rangeBefore.getLength())); >+ } >+ >+ String trailingComment = null; >+ if (rangeAfter != null) { >+ trailingComment = buffer.getText(rangeAfter.getOffset(), rangeAfter.getLength()); >+ } >+ String str= getNewImportString(currDecl.getElementName(), isStatic, trailingComment, lineDelim); > stringsToInsert.add(str); >- } else if (doStarImport && !currDecl.isOnDemand()) { >+ } else if (addRegularToStar && !allImportsAddedToStar) { > String simpleName = currDecl.getTypeQualifiedName(); > if (simpleName.indexOf('.') != -1) { > String str= getNewImportString(currDecl.getElementName(), isStatic, lineDelim); >@@ -790,7 +881,7 @@ > } > } > } >- } else if (!doStarImport || currDecl.isOnDemand() || onDemandConflicts == null || onDemandConflicts.contains(currDecl.getSimpleName())) { >+ } else if (!addRegularToStar || isConflict) { > int offset= region.getOffset(); > IRegion rangeBefore = currDecl.getPrecedingCommentRange(); > if (rangeBefore != null && currPos > rangeBefore.getOffset()) { >@@ -803,7 +894,7 @@ > removeAndInsertNew(buffer, currPos, offset, stringsToInsert, resEdit); > stringsToInsert.clear(); > currPos= offset + region.getLength(); >- } else if (doStarImport && !currDecl.isOnDemand()) { >+ } else if (addRegularToStar && !allImportsAddedToStar && !currDecl.isComment()) { > String simpleName = currDecl.getTypeQualifiedName(); > if (simpleName.indexOf('.') != -1) { > IRegion rangeBefore = currDecl.getPrecedingCommentRange(); >@@ -830,7 +921,7 @@ > > // insert back all existing imports comments since existing imports were not preserved > if (this.preserveExistingCommentsRanges != null) { >- for (int i = 0, max = this.preserveExistingCommentsRanges.length; i < max; i++) { >+ for (int i = 0, max = this.preserveExistingCommentsRanges.length; (i < max && this.preserveExistingCommentsRanges[i] != null); i++) { > IRegion region = this.preserveExistingCommentsRanges[i]; > String text = buffer.getText(region.getOffset(), region.getLength()); > // remove preceding whitespaces >@@ -1012,11 +1103,10 @@ > List allImports = new ArrayList(); > int nImports = packageEntry.getNumberOfImports(); > StringBuffer allComments = null; >+ StringBuffer allCommentsLead = null; > for (int i= 0; i < nImports; i++) { > ImportDeclEntry curr= packageEntry.getImportAt(i); >- String simpleName = curr.getTypeQualifiedName(); >- if (simpleName.indexOf('.') != -1) { >- // member type imports - we preserve it >+ if (curr.isComment()) { > IRegion rangeBefore = curr.getPrecedingCommentRange(); > if (rangeBefore != null) { > allImports.add(buffer.getText(rangeBefore.getOffset(), rangeBefore.getLength())); >@@ -1026,31 +1116,61 @@ > if (rangeAfter != null) { > trailingComment = buffer.getText(rangeAfter.getOffset(), rangeAfter.getLength()); > } >- allImports.add(getNewImportString(curr.getElementName(), isStatic, trailingComment, lineDelim)); >- } else if (!isStarImportAdded) { >- String starImportString= packageEntry.getName() + ".*"; //$NON-NLS-1$ >- allImports.add(getNewImportString(starImportString, isStatic, lineDelim)); >- isStarImportAdded = true; >- } else { >- // collect all comments >- IRegion rangeBefore = curr.getPrecedingCommentRange(); >- if (rangeBefore != null) { >- if (allComments == null) { >- allComments = new StringBuffer(); >- } >- allComments.append(buffer.getText(rangeBefore.getOffset(), rangeBefore.getLength())).append(lineDelim); >+ if (trailingComment != null) { >+ allImports.add(buffer.getText(rangeAfter.getOffset(), rangeAfter.getLength())); > } >- IRegion rangeAfter = curr.getTrailingCommentRange(); >- if (rangeAfter != null) { >- if (allComments == null) { >- allComments = new StringBuffer(); >+ } else { >+ String simpleName = curr.getTypeQualifiedName(); >+ if (simpleName.indexOf('.') != -1) { >+ // member type imports - we preserve it >+ IRegion rangeBefore = curr.getPrecedingCommentRange(); >+ if (rangeBefore != null) { >+ allImports.add(buffer.getText(rangeBefore.getOffset(), rangeBefore.getLength())); > } >- allComments.append(buffer.getText(rangeAfter.getOffset(), rangeAfter.getLength())).append(lineDelim); >+ IRegion rangeAfter = curr.getTrailingCommentRange(); >+ String trailingComment = null; >+ if (rangeAfter != null) { >+ trailingComment = buffer.getText(rangeAfter.getOffset(), rangeAfter.getLength()); >+ } >+ allImports.add(getNewImportString(curr.getElementName(), isStatic, trailingComment, lineDelim)); >+ } else if (!isStarImportAdded) { >+ String starImportString= packageEntry.getName() + ".*"; //$NON-NLS-1$ >+ // collect all comments >+ IRegion rangeBefore = curr.getPrecedingCommentRange(); >+ if (rangeBefore != null) { >+ allImports.add(buffer.getText(rangeBefore.getOffset(), rangeBefore.getLength())); >+ } >+ IRegion rangeAfter = curr.getTrailingCommentRange(); >+ String trailComments = null; >+ if (rangeAfter != null) { >+ trailComments = buffer.getText(rangeAfter.getOffset(), rangeAfter.getLength()); >+ } >+ allImports.add(getNewImportString(starImportString, isStatic, trailComments, lineDelim)); >+ isStarImportAdded = true; >+ } else { >+ // collect all comments >+ IRegion rangeBefore = curr.getPrecedingCommentRange(); >+ if (rangeBefore != null) { >+ if (allCommentsLead == null) { >+ allCommentsLead = new StringBuffer(); >+ } >+ allCommentsLead.append(buffer.getText(rangeBefore.getOffset(), rangeBefore.getLength())); >+ } >+ IRegion rangeAfter = curr.getTrailingCommentRange(); >+ if (rangeAfter != null) { >+ if (allComments == null) { >+ allComments = new StringBuffer(); >+ } >+ allComments.append(buffer.getText(rangeAfter.getOffset(), rangeAfter.getLength())); >+ } > } > } > } >+ if (allCommentsLead != null) { >+ allImports.add(0, String.valueOf(allCommentsLead)); >+ } > if (allComments != null) { >- allImports.add(0, String.valueOf(allComments)); >+ allImports.add(String.valueOf(allComments.append(lineDelim))); > } > return (String[]) allImports.toArray(new String[allImports.size()]); > } >@@ -1110,8 +1230,8 @@ > private IRegion sourceRange; > private final boolean isStatic; > private int containerNameLength; >- private IRegion precedingCommentRange; >- private IRegion trailingCommentRange; >+ IRegion precedingCommentRange; >+ IRegion trailingCommentRange; > > public ImportDeclEntry( > int containerNameLength, >@@ -1371,10 +1491,14 @@ > for (int i= 0; i < nImports; i++) { > ImportDeclEntry curr= getImportAt(i); > buf.append(" "); //$NON-NLS-1$ >- if (curr.isStatic()) { >- buf.append("static "); //$NON-NLS-1$ >+ if (curr.isComment()) { >+ buf.append("comment"); //$NON-NLS-1$ >+ } else { >+ if (curr.isStatic()) { >+ buf.append("static "); //$NON-NLS-1$ >+ } >+ buf.append(curr.getTypeQualifiedName()); > } >- buf.append(curr.getTypeQualifiedName()); > if (curr.isNew()) { > buf.append(" (new)"); //$NON-NLS-1$ > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 378024
:
219961
|
224197
| 224198 |
224199