Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 378024 | Differences between
and this patch

Collapse All | Expand All

(-)a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewriteTest.java (-7 / +1338 lines)
Lines 1537-1542 Link Here
1537
                "\n" + 
1537
                "\n" + 
1538
                "import java.util.*; // test\n" + 
1538
                "import java.util.*; // test\n" + 
1539
                "import java.util.Map.Entry;\n" + 
1539
                "import java.util.Map.Entry;\n" + 
1540
                "\n" +
1540
                "//comment 2\n" +
1541
                "//comment 2\n" +
1541
                "import java.util.Map.SomethingElse;\n" +
1542
                "import java.util.Map.SomethingElse;\n" +
1542
                "// commen 3\n" +
1543
                "// commen 3\n" +
Lines 2032-2042 Link Here
2032
                "package pack1;\n" + 
2033
                "package pack1;\n" + 
2033
                "\n" +
2034
                "\n" +
2034
                "// comment 1\n" +
2035
                "// comment 1\n" +
2035
				"/* lead 2*/" +
2036
				"/* lead 2*//* lead 1*/ import java.util.*; // test1\n" +
2036
				"import java.util.*;\n" + 
2037
				"// test2\n" +
2037
				"// test2\n" +
2038
				"/* lead 1*/ \n" +
2039
				"// test1\n" +
2040
				"/* lead 3*/ \n" +
2038
				"/* lead 3*/ \n" +
2041
				"// test3\n" +
2039
				"// test3\n" +
2042
				"// commen 3\n" +
2040
				"// commen 3\n" +
Lines 2096-2102 Link Here
2096
                "\n" + 
2094
                "\n" + 
2097
                "// comment 1\n" +
2095
                "// comment 1\n" +
2098
				"/* lead 1*/ " +
2096
				"/* lead 1*/ " +
2099
				"import java.util.Map.*;\n" + 
2097
				"import java.util.Map.*; " + 
2100
				"// test1\n" +
2098
				"// test1\n" +
2101
				"/* lead 2*/\n" +
2099
				"/* lead 2*/\n" +
2102
				"// test2\n" +
2100
				"// test2\n" +
Lines 2159-2168 Link Here
2159
                "// comment 1\n" +
2157
                "// comment 1\n" +
2160
                "/* lead 2*/import java.io.PrintWriter.*; // test2\n" +
2158
                "/* lead 2*/import java.io.PrintWriter.*; // test2\n" +
2161
                "\n" +
2159
                "\n" +
2162
                "/* lead 1*/ \n" +
2160
                "/* lead 1*/ " +
2161
                "import java.util.*;\n" + 
2163
                " // test1\n" +
2162
                " // test1\n" +
2164
                "// commen 3\n" +
2163
                "// commen 3\n" +
2165
                "import java.util.*;\n" + 
2166
                "\n" + 
2164
                "\n" + 
2167
                "public class C {\n" + 
2165
                "public class C {\n" + 
2168
                "    public static void main(String[] args) {\n" + 
2166
                "    public static void main(String[] args) {\n" + 
Lines 2177-2182 Link Here
2177
                "}");
2175
                "}");
2178
        assertEqualString(cu.getSource(), buf.toString());
2176
        assertEqualString(cu.getSource(), buf.toString());
2179
    }
2177
    }
2178
    
2179
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024
2180
    public void testBug378024() throws Exception {
2181
        IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null);
2182
        StringBuffer buf = new StringBuffer();
2183
        buf.append(
2184
                "package pack1;\n" + 
2185
                "\n" +
2186
                "// comment 1\n" +
2187
                "/*\n" +
2188
                " * keep me with List\n" +
2189
                " *\n" +
2190
                " */\n" +
2191
                "import java.awt.List;// test1\n" +
2192
                "/*\n" +
2193
                " * keep me with Serializable\n" +
2194
                " */\n" +
2195
                "import java.io.Serializable;// test2\n" +
2196
                "/*\n" +
2197
                " * keep me with HashMap\n" +
2198
                " */\n" +
2199
                "import java.util.HashMap;// test3\n" +
2200
                "// commen 3\n" + 
2201
                "\n" + 
2202
                "public class C implements Serializable{\n" + 
2203
                "    public static void main(String[] args) {\n" + 
2204
                "        List l = new List();\n" + 
2205
                "        Map e= null;\n" + 
2206
                "    }\n" + 
2207
                "}");
2208
        ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null);
2209
2210
        String[] order = new String[] { "java", "java.awt", "java.io", "java.util" };
2211
2212
        ImportRewrite imports= newImportsRewrite(cu, order, 2, 2, false);
2213
        imports.setUseContextToFilterImplicitImports(true);
2214
        imports.addImport("java.awt.List");
2215
        imports.addImport("java.io.Serializable");
2216
        imports.addImport("java.util.HashMap");
2217
2218
        apply(imports);
2219
2220
        buf = new StringBuffer();
2221
        buf.append(
2222
                "package pack1;\n" + 
2223
                "\n" +
2224
                "// comment 1\n" +
2225
                "/*\n" +
2226
                " * keep me with List\n" +
2227
                " *\n" +
2228
                " */\n" +
2229
                "import java.awt.List;// test1\n\n" +
2230
                "/*\n" +
2231
                " * keep me with Serializable\n" +
2232
                " */\n" +
2233
                "import java.io.Serializable;// test2\n\n" +
2234
                "/*\n" +
2235
                " * keep me with HashMap\n" +
2236
                " */\n" +
2237
                "import java.util.HashMap;// test3\n" +
2238
                "// commen 3\n" + 
2239
                "\n" + 
2240
                "public class C implements Serializable{\n" + 
2241
                "    public static void main(String[] args) {\n" + 
2242
                "        List l = new List();\n" + 
2243
                "        Map e= null;\n" + 
2244
                "    }\n" + 
2245
                "}");
2246
        assertEqualString(cu.getSource(), buf.toString());
2247
    }
2248
    
2249
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024
2250
    public void testBug378024b() throws Exception {
2251
        IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null);
2252
        StringBuffer buf = new StringBuffer();
2253
        buf.append(
2254
                "package pack1;\n" + 
2255
                "\n" +
2256
                "// comment 1\n" +
2257
                "/*\n" +
2258
                " * don't move me 1\n" +
2259
                " *\n" +
2260
                " */\n" +
2261
                "import java.awt.List;// test1\n" +
2262
                "/*\n" +
2263
                " * don't move me 2\n" +
2264
                " */\n" +
2265
                "import java.io.Serializable;// test2\n" +
2266
                "/*\n" +
2267
                " * don't move me 3\n" +
2268
                " */\n" +
2269
                "import java.util.HashMap;// test3\n" +
2270
                "// commen 3\n" + 
2271
                "\n" + 
2272
                "public class C implements Serializable{\n" + 
2273
                "    public static void main(String[] args) {\n" + 
2274
                "        List l = new List();\n" + 
2275
                "        Map e= null;\n" + 
2276
                "    }\n" + 
2277
                "}");
2278
        ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null);
2279
2280
        String[] order = new String[] { "java", "java.util", "com", "pack" };
2281
2282
        ImportRewrite imports= newImportsRewrite(cu, order, 1, 1, false);
2283
        imports.setUseContextToFilterImplicitImports(true);
2284
        imports.addImport("java.awt.List");
2285
        imports.addImport("java.io.Serializable");
2286
        imports.addImport("java.util.HashMap");
2287
2288
        apply(imports);
2289
2290
        buf = new StringBuffer();
2291
        buf.append(
2292
                "package pack1;\n" + 
2293
                "\n" +
2294
                "// comment 1\n" +
2295
                "/*\n" +
2296
                " * don't move me 1\n" +
2297
                " *\n" +
2298
                " */\n" +
2299
                "import java.awt.*;// test1\n" +
2300
                "/*\n" +
2301
                " * don't move me 2\n" +
2302
                " */\n" +
2303
                "import java.io.*;// test2\n" +
2304
                "\n" +
2305
                "/*\n" +
2306
                " * don't move me 3\n" +
2307
                " */\n" +
2308
                "import java.util.*;// test3\n" +
2309
                "// commen 3\n" + 
2310
                "\n" + 
2311
                "public class C implements Serializable{\n" + 
2312
                "    public static void main(String[] args) {\n" + 
2313
                "        List l = new List();\n" + 
2314
                "        Map e= null;\n" + 
2315
                "    }\n" + 
2316
                "}");
2317
        assertEqualString(cu.getSource(), buf.toString());
2318
    }
2319
    
2320
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024
2321
    // leading and trailing comments always move with imports. 
2322
    // comments in between stay where they are
2323
    public void testBug378024c() throws Exception {
2324
        IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null);
2325
        StringBuffer buf = new StringBuffer();
2326
        buf.append(
2327
                "package pack1;\n" + 
2328
                "\n" +
2329
                "// comment 1\n" +
2330
                "/*\n" +
2331
                " * don't move me 1\n" +
2332
                " *\n" +
2333
                " */\n" +
2334
                "\n" +
2335
                "// lead 1\n" +
2336
                "import java.awt.List;// test1\n" +
2337
                "\n" +
2338
                "/*\n" +
2339
                " * don't move me 2\n" +
2340
                " */\n" +
2341
                "\n" +
2342
                "// lead 2\n" +
2343
                "import java.io.Serializable;// test2\n" +
2344
                "/*\n" +
2345
                " * don't move me 3\n" +
2346
                " */\n" +
2347
                "\n" +
2348
                "/*\n" +
2349
                " * don't move me 4\n" +
2350
                " */\n" +
2351
                "\n" +
2352
                "//lead 3\n" +
2353
                "import java.util.HashMap;// test3\n" +
2354
                "// commen 3\n" + 
2355
                "\n" + 
2356
                "public class C implements Serializable{\n" + 
2357
                "    public static void main(String[] args) {\n" + 
2358
                "        List l = new List();\n" + 
2359
                "        Map e= null;\n" + 
2360
                "    }\n" + 
2361
                "}");
2362
        ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null);
2363
2364
        String[] order = new String[] { "java", "java.util", "com", "pack" };
2365
2366
        ImportRewrite imports= newImportsRewrite(cu, order, 99, 99, false);
2367
        imports.setUseContextToFilterImplicitImports(true);
2368
        imports.addImport("java.awt.List");
2369
        imports.addImport("java.io.Serializable");
2370
        imports.addImport("java.util.HashMap");
2371
2372
        apply(imports);
2373
2374
        buf = new StringBuffer();
2375
        buf.append(
2376
                "package pack1;\n" + 
2377
                "\n" +
2378
                "// comment 1\n" +
2379
                "/*\n" +
2380
                " * don't move me 1\n" +
2381
                " *\n" +
2382
                " */\n" +
2383
                "\n" +
2384
                "// lead 1\n" +
2385
                "import java.awt.List;// test1\n" +
2386
                "\n" +
2387
                "//lead 3\n" +
2388
                "import java.util.HashMap;// test3\n" +
2389
                "// commen 3\n" + 
2390
                "/*\n" +
2391
                " * don't move me 2\n" +
2392
                " */\n" +
2393
                "// lead 2\n" +
2394
                "import java.io.Serializable;// test2\n" +
2395
                "/*\n" +
2396
                " * don't move me 3\n" +
2397
                " */\n" +
2398
                "/*\n" +
2399
                " * don't move me 4\n" +
2400
                " */\n" +
2401
                "public class C implements Serializable{\n" + 
2402
                "    public static void main(String[] args) {\n" + 
2403
                "        List l = new List();\n" + 
2404
                "        Map e= null;\n" + 
2405
                "    }\n" + 
2406
                "}");
2407
        assertEqualString(cu.getSource(), buf.toString());
2408
    }
2409
    
2410
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024
2411
    // leading and trailing comments always move with imports. 
2412
    // comments in between stay where they are
2413
    public void testBug378024c_1() throws Exception {
2414
        IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null);
2415
        StringBuffer buf = new StringBuffer();
2416
        buf.append(
2417
                "package pack1;\n" + 
2418
                "\n" +
2419
                "// comment 1\n" +
2420
                "/*\n" +
2421
                " * don't move me 1\n" +
2422
                " *\n" +
2423
                " */\n" +
2424
                "\n" +
2425
                "// lead 1\n" +
2426
                "import java.awt.List;// test1\n" +
2427
                "\n" +
2428
                "/*\n" +
2429
                " * don't move me 2\n" +
2430
                " */\n" +
2431
                "\n" +
2432
                "// lead 2\n" +
2433
                "import java.io.Serializable;// test2\n" +
2434
                "/*\n" +
2435
                " * don't move me 3\n" +
2436
                " */\n" +
2437
                "\n" +
2438
                "/*\n" +
2439
                " * don't move me 4\n" +
2440
                " */\n" +
2441
                "\n" +
2442
                "//lead 3\n" +
2443
                "import java.util.HashMap;// test3\n" +
2444
                "// commen 3\n" + 
2445
                "\n" + 
2446
                "public class C implements Serializable{\n" + 
2447
                "    public static void main(String[] args) {\n" + 
2448
                "        List l = new List();\n" + 
2449
                "        Map e= null;\n" + 
2450
                "    }\n" + 
2451
                "}");
2452
        ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null);
2453
2454
        String[] order = new String[] { "java", "com", "pack" };
2455
2456
        ImportRewrite imports= newImportsRewrite(cu, order, 99, 99, false);
2457
        imports.setUseContextToFilterImplicitImports(true);
2458
        imports.addImport("java.awt.List");
2459
        imports.addImport("java.io.Serializable");
2460
        imports.addImport("java.util.HashMap");
2461
2462
        apply(imports);
2463
2464
        buf = new StringBuffer();
2465
        buf.append(
2466
                "package pack1;\n" + 
2467
                "\n" +
2468
                "// comment 1\n" +
2469
                "/*\n" +
2470
                " * don't move me 1\n" +
2471
                " *\n" +
2472
                " */\n" +
2473
                "\n" +
2474
                "// lead 1\n" +
2475
                "import java.awt.List;// test1\n" +
2476
                "/*\n" +
2477
                " * don't move me 2\n" +
2478
                " */\n" +
2479
                "// lead 2\n" +
2480
                "import java.io.Serializable;// test2\n" +
2481
                "/*\n" +
2482
                " * don't move me 3\n" +
2483
                " */\n" +
2484
                "/*\n" +
2485
                " * don't move me 4\n" +
2486
                " */\n" +
2487
                "//lead 3\n" +
2488
                "import java.util.HashMap;// test3\n" +
2489
                "// commen 3\n" + 
2490
                "\n" + 
2491
                "public class C implements Serializable{\n" + 
2492
                "    public static void main(String[] args) {\n" + 
2493
                "        List l = new List();\n" + 
2494
                "        Map e= null;\n" + 
2495
                "    }\n" + 
2496
                "}");
2497
        assertEqualString(cu.getSource(), buf.toString());
2498
    }
2499
    
2500
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024
2501
    // leading and trailing comments always move with imports, even if they get folded. 
2502
    // comments in between stay where they are
2503
    public void testBug378024c_2() throws Exception {
2504
        IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null);
2505
        StringBuffer buf = new StringBuffer();
2506
        buf.append(
2507
                "package pack1;\n" + 
2508
                "\n" +
2509
                "// comment 1\n" +
2510
                "/*\n" +
2511
                " * don't move me 1\n" +
2512
                " *\n" +
2513
                " */\n" +
2514
                "\n" +
2515
                "// lead 1\n" +
2516
                "import java.awt.List;// test1\n" +
2517
                "\n" +
2518
                "/*\n" +
2519
                " * don't move me 2\n" +
2520
                " */\n" +
2521
                "\n" +
2522
                "// lead 2\n" +
2523
                "import java.io.Serializable;// test2\n" +
2524
                "/*\n" +
2525
                " * don't move me 3\n" +
2526
                " */\n" +
2527
                "\n" +
2528
                "/*\n" +
2529
                " * don't move me 4\n" +
2530
                " */\n" +
2531
                "\n" +
2532
                "//lead 3\n" +
2533
                "import java.util.HashMap;// test3\n" +
2534
                "// commen 3\n" + 
2535
                "\n" + 
2536
                "public class C implements Serializable{\n" + 
2537
                "    public static void main(String[] args) {\n" + 
2538
                "        List l = new List();\n" + 
2539
                "        Map e= null;\n" + 
2540
                "    }\n" + 
2541
                "}");
2542
        ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null);
2543
2544
        String[] order = new String[] { "java", "com", "pack" };
2545
2546
        ImportRewrite imports= newImportsRewrite(cu, order, 1, 1, false);
2547
        imports.setUseContextToFilterImplicitImports(true);
2548
        imports.addImport("java.awt.List");
2549
        imports.addImport("java.io.Serializable");
2550
        imports.addImport("java.util.HashMap");
2551
2552
        apply(imports);
2553
2554
        buf = new StringBuffer();
2555
        buf.append(
2556
                "package pack1;\n" + 
2557
                "\n" +
2558
                "// comment 1\n" +
2559
                "/*\n" +
2560
                " * don't move me 1\n" +
2561
                " *\n" +
2562
                " */\n" +
2563
                "\n" +
2564
                "// lead 1\n" +
2565
                "import java.awt.*;// test1\n" +
2566
                "/*\n" +
2567
                " * don't move me 2\n" +
2568
                " */\n" +
2569
                "// lead 2\n" +
2570
                "import java.io.*;// test2\n" +
2571
                "/*\n" +
2572
                " * don't move me 3\n" +
2573
                " */\n" +
2574
                "/*\n" +
2575
                " * don't move me 4\n" +
2576
                " */\n" +
2577
                "//lead 3\n" +
2578
                "import java.util.*;// test3\n" +
2579
                "// commen 3\n" + 
2580
                "\n" + 
2581
                "public class C implements Serializable{\n" + 
2582
                "    public static void main(String[] args) {\n" + 
2583
                "        List l = new List();\n" + 
2584
                "        Map e= null;\n" + 
2585
                "    }\n" + 
2586
                "}");
2587
        assertEqualString(cu.getSource(), buf.toString());
2588
    }
2589
    
2590
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024
2591
    // not adding an import should preserve its comments and put them at the end.
2592
    public void testBug378024d() throws Exception {
2593
        IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null);
2594
        StringBuffer buf = new StringBuffer();
2595
        buf.append(
2596
                "package pack1;\n" + 
2597
                "\n" +
2598
                "// comment 1\n" +
2599
                "/*\n" +
2600
                " * don't move me 1\n" +
2601
                " *\n" +
2602
                " */\n" +
2603
                "\n" +
2604
                "// lead 1\n" +
2605
                "import java.awt.List;// test1\n" +
2606
                "\n" +
2607
                "/*\n" +
2608
                " * don't move me 2\n" +
2609
                " */\n" +
2610
                "\n" +
2611
                "// lead 2\n" +
2612
                "import java.io.Serializable;// test2\n" +
2613
                "/*\n" +
2614
                " * don't move me 3\n" +
2615
                " */\n" +
2616
                "\n" +
2617
                "/*\n" +
2618
                " * don't move me 4\n" +
2619
                " */\n" +
2620
                "\n" +
2621
                "//lead 3\n" +
2622
                "import java.util.HashMap;// test3\n" +
2623
                "// commen 3\n" + 
2624
                "\n" + 
2625
                "public class C implements Serializable{\n" + 
2626
                "    public static void main(String[] args) {\n" + 
2627
                "        List l = new List();\n" + 
2628
                "        Map e= null;\n" + 
2629
                "    }\n" + 
2630
                "}");
2631
        ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null);
2632
2633
        String[] order = new String[] { "java", "java.util", "com", "pack" };
2634
2635
        ImportRewrite imports= newImportsRewrite(cu, order, 1, 1, false);
2636
        imports.setUseContextToFilterImplicitImports(true);
2637
        imports.addImport("java.awt.List");
2638
        imports.addImport("java.util.HashMap");
2639
2640
        apply(imports);
2641
2642
        buf = new StringBuffer();
2643
        buf.append(
2644
                "package pack1;\n" + 
2645
                "\n" +
2646
                "// comment 1\n" +
2647
                "/*\n" +
2648
                " * don't move me 1\n" +
2649
                " *\n" +
2650
                " */\n" +
2651
                "\n" +
2652
                "// lead 1\n" +
2653
                "import java.awt.*;// test1\n" +
2654
                "\n" +
2655
                "//lead 3\n" +
2656
                "import java.util.*;// test3\n" +
2657
                "// commen 3\n" + 
2658
                "/*\n" +
2659
                " * don't move me 4\n" +
2660
                " */" +
2661
                "/*\n" +
2662
                " * don't move me 2\n" +
2663
                " */\n" +
2664
                "// lead 2\n" +
2665
                "// test2\n" +
2666
                "/*\n" +
2667
                " * don't move me 3\n" +
2668
                " */\n" +
2669
                "\n" +
2670
                "public class C implements Serializable{\n" + 
2671
                "    public static void main(String[] args) {\n" + 
2672
                "        List l = new List();\n" + 
2673
                "        Map e= null;\n" + 
2674
                "    }\n" + 
2675
                "}");
2676
        assertEqualString(cu.getSource(), buf.toString());
2677
    }
2678
    
2679
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024
2680
    // adding a new import should not disturb comments and import should be added in its group
2681
    public void testBug378024e() throws Exception {
2682
        IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null);
2683
        StringBuffer buf = new StringBuffer();
2684
        buf.append(
2685
                "package pack1;\n" + 
2686
                "\n" +
2687
                "// comment 1\n" +
2688
                "/*\n" +
2689
                " * don't move me 1\n" +
2690
                " *\n" +
2691
                " */\n" +
2692
                "\n" +
2693
                "// lead 1\n" +
2694
                "import java.awt.List;// test1\n" +
2695
                "\n" +
2696
                "/*\n" +
2697
                " * don't move me 2\n" +
2698
                " */\n" +
2699
                "\n" +
2700
                "// lead 2\n" +
2701
                "import java.io.Serializable;// test2\n" +
2702
                "/*\n" +
2703
                " * don't move me 3\n" +
2704
                " */\n" +
2705
                "\n" +
2706
                "/*\n" +
2707
                " * don't move me 4\n" +
2708
                " */\n" +
2709
                "\n" +
2710
                "//lead 3\n" +
2711
                "import java.util.HashMap;// test3\n" +
2712
                "// commen 3\n" + 
2713
                "\n" + 
2714
                "public class C implements Serializable{\n" + 
2715
                "    public static void main(String[] args) {\n" + 
2716
                "        List l = new List();\n" + 
2717
                "        Map e= null;\n" + 
2718
                "    }\n" + 
2719
                "}");
2720
        ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null);
2721
2722
        String[] order = new String[] { "java", "com", "pack" };
2723
2724
        ImportRewrite imports= newImportsRewrite(cu, order, 2, 2, false);
2725
        imports.setUseContextToFilterImplicitImports(true);
2726
        imports.addImport("java.awt.List");
2727
        imports.addImport("java.io.Serializable");
2728
        imports.addImport("java.io.PrintWriter");
2729
        imports.addImport("java.util.HashMap");
2730
2731
        apply(imports);
2732
2733
        buf = new StringBuffer();
2734
        buf.append(
2735
                "package pack1;\n" + 
2736
                "\n" +
2737
                "// comment 1\n" +
2738
                "/*\n" +
2739
                " * don't move me 1\n" +
2740
                " *\n" +
2741
                " */\n" +
2742
                "\n" +
2743
                "// lead 1\n" +
2744
                "import java.awt.List;// test1\n" +
2745
                "/*\n" +
2746
                " * don't move me 2\n" +
2747
                " */\n" +
2748
                "// lead 2\n" +
2749
                "import java.io.*;\n" +
2750
                "// test2\n" +
2751
                "/*\n" +
2752
                " * don't move me 3\n" +
2753
                " */\n" +
2754
                "/*\n" +
2755
                " * don't move me 4\n" +
2756
                " */\n" +
2757
                "//lead 3\n" +
2758
                "import java.util.HashMap;// test3\n" +
2759
                "// commen 3\n" + 
2760
                "\n" + 
2761
                "public class C implements Serializable{\n" + 
2762
                "    public static void main(String[] args) {\n" + 
2763
                "        List l = new List();\n" + 
2764
                "        Map e= null;\n" + 
2765
                "    }\n" + 
2766
                "}");
2767
        assertEqualString(cu.getSource(), buf.toString());
2768
    }
2769
    
2770
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024
2771
    // removing an import should preserve its comments at the end, and adding a new import should not disturb
2772
    // existing comments
2773
    public void testBug378024e_1() throws Exception {
2774
        IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null);
2775
        StringBuffer buf = new StringBuffer();
2776
        buf.append(
2777
                "package pack1;\n" + 
2778
                "\n" +
2779
                "// comment 1\n" +
2780
                "/*\n" +
2781
                " * don't move me 1\n" +
2782
                " *\n" +
2783
                " */\n" +
2784
                "\n" +
2785
                "// lead 1\n" +
2786
                "import java.awt.List;// test1\n" +
2787
                "\n" +
2788
                "/*\n" +
2789
                " * don't move me 2\n" +
2790
                " */\n" +
2791
                "\n" +
2792
                "// lead 2\n" +
2793
                "import java.io.Serializable;// test2\n" +
2794
                "/*\n" +
2795
                " * don't move me 3\n" +
2796
                " */\n" +
2797
                "\n" +
2798
                "/*\n" +
2799
                " * don't move me 4\n" +
2800
                " */\n" +
2801
                "\n" +
2802
                "//lead 3\n" +
2803
                "import java.util.HashMap;// test3\n" +
2804
                "// commen 3\n" + 
2805
                "\n" + 
2806
                "public class C implements Serializable{\n" + 
2807
                "    public static void main(String[] args) {\n" + 
2808
                "        List l = new List();\n" + 
2809
                "        Map e= null;\n" + 
2810
                "    }\n" + 
2811
                "}");
2812
        ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null);
2813
2814
        String[] order = new String[] { "java", "java.util", "com", "pack" };
2815
2816
        ImportRewrite imports= newImportsRewrite(cu, order, 2, 2, false);
2817
        imports.setUseContextToFilterImplicitImports(true);
2818
        imports.addImport("java.awt.List");
2819
        imports.addImport("java.io.PrintWriter");
2820
        imports.addImport("java.util.HashMap");
2821
2822
        apply(imports);
2823
2824
        buf = new StringBuffer();
2825
        buf.append(
2826
                "package pack1;\n" + 
2827
                "\n" +
2828
                "// comment 1\n" +
2829
                "/*\n" +
2830
                " * don't move me 1\n" +
2831
                " *\n" +
2832
                " */\n" +
2833
                "\n" +
2834
                "// lead 1\n" +
2835
                "import java.awt.List;// test1\n" +
2836
                "import java.io.PrintWriter;\n" +
2837
                "\n" +
2838
                "//lead 3\n" +
2839
                "import java.util.HashMap;// test3\n" +
2840
                "// commen 3\n" + 
2841
                "/*\n" +
2842
                " * don't move me 4\n" +
2843
                " */" +
2844
                "/*\n" +
2845
                " * don't move me 2\n" +
2846
                " */\n" +
2847
                "// lead 2\n" +
2848
                "// test2\n" +
2849
                "/*\n" +
2850
                " * don't move me 3\n" +
2851
                " */\n" +
2852
                "\n" + 
2853
                "public class C implements Serializable{\n" + 
2854
                "    public static void main(String[] args) {\n" + 
2855
                "        List l = new List();\n" + 
2856
                "        Map e= null;\n" + 
2857
                "    }\n" + 
2858
                "}");
2859
        assertEqualString(cu.getSource(), buf.toString());
2860
    }
2861
    
2862
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024
2863
    // folding imports because of a newly added import should preserve comments
2864
    public void testBug378024f() throws Exception {
2865
        IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null);
2866
        StringBuffer buf = new StringBuffer();
2867
        buf.append(
2868
                "package pack1;\n" + 
2869
                "\n" +
2870
                "// comment 1\n" +
2871
                "/*\n" +
2872
                " * don't move me 1\n" +
2873
                " *\n" +
2874
                " */\n" +
2875
                "\n" +
2876
                "// lead 1\n" +
2877
                "import java.awt.List;// test1\n" +
2878
                "\n" +
2879
                "/*\n" +
2880
                " * don't move me 2\n" +
2881
                " */\n" +
2882
                "\n" +
2883
                "// lead 2\n" +
2884
                "import java.io.Serializable;// test2\n" +
2885
                "/*\n" +
2886
                " * don't move me 3\n" +
2887
                " */\n" +
2888
                "\n" +
2889
                "/*\n" +
2890
                " * don't move me 4\n" +
2891
                " */\n" +
2892
                "\n" +
2893
                "//lead 3\n" +
2894
                "import java.util.HashMap;// test3\n" +
2895
                "// commen 3\n" + 
2896
                "\n" + 
2897
                "public class C implements Serializable{\n" + 
2898
                "    public static void main(String[] args) {\n" + 
2899
                "        List l = new List();\n" + 
2900
                "        Map e= null;\n" + 
2901
                "    }\n" + 
2902
                "}");
2903
        ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null);
2904
2905
        String[] order = new String[] { "java", "com", "pack" };
2906
2907
        ImportRewrite imports= newImportsRewrite(cu, order, 2, 2, false);
2908
        imports.setUseContextToFilterImplicitImports(true);
2909
        imports.addImport("java.awt.List");
2910
        imports.addImport("java.io.Serializable");
2911
        imports.addImport("java.io.PrintWriter");
2912
        imports.addImport("java.util.HashMap");
2913
2914
        apply(imports);
2915
2916
        buf = new StringBuffer();
2917
        buf.append(
2918
                "package pack1;\n" + 
2919
                "\n" +
2920
                "// comment 1\n" +
2921
                "/*\n" +
2922
                " * don't move me 1\n" +
2923
                " *\n" +
2924
                " */\n" +
2925
                "\n" +
2926
                "// lead 1\n" +
2927
                "import java.awt.List;// test1\n" +
2928
                "/*\n" +
2929
                " * don't move me 2\n" +
2930
                " */\n" +
2931
                "// lead 2\n" +
2932
                "import java.io.*;\n" +
2933
                "// test2\n" +
2934
                "/*\n" +
2935
                " * don't move me 3\n" +
2936
                " */\n" +
2937
                "/*\n" +
2938
                " * don't move me 4\n" +
2939
                " */\n" +
2940
                "//lead 3\n" +
2941
                "import java.util.HashMap;// test3\n" +
2942
                "// commen 3\n" + 
2943
                "\n" + 
2944
                "public class C implements Serializable{\n" + 
2945
                "    public static void main(String[] args) {\n" + 
2946
                "        List l = new List();\n" + 
2947
                "        Map e= null;\n" + 
2948
                "    }\n" + 
2949
                "}");
2950
        assertEqualString(cu.getSource(), buf.toString());
2951
    }
2952
    
2953
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024
2954
    // folding imports because of a newly added import should preserve comments
2955
    public void testBug378024f_1() throws Exception {
2956
        IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null);
2957
        StringBuffer buf = new StringBuffer();
2958
        buf.append(
2959
                "package pack1;\n" + 
2960
                "\n" +
2961
                "// comment 1\n" +
2962
                "/*\n" +
2963
                " * keep me with List\n" +
2964
                " *\n" +
2965
                " */\n" +
2966
                "\n" +
2967
                "// lead 1\n" +
2968
                "import java.awt.List;// test1\n" +
2969
                "\n" +
2970
                "/*\n" +
2971
                " * keep me with Serializable\n" +
2972
                " */\n" +
2973
                "\n" +
2974
                "// lead 2\n" +
2975
                "import java.io.Serializable;// test2\n" +
2976
                "/*\n" +
2977
                " * keep me with Serializable 2\n" +
2978
                " */\n" +
2979
                "\n" +
2980
                "// lead 3\n" +
2981
                "import java.io.PrintWriter;// test3\n" +
2982
                "/*\n" +
2983
                " * keep me with PrintWriter\n" +
2984
                " */\n" +
2985
                "\n" +
2986
                "/*\n" +
2987
                " * don't move me\n" +
2988
                " */\n" +
2989
                "\n" +
2990
                "//lead 4\n" +
2991
                "import java.util.HashMap;// test4\n" +
2992
                "// commen 3\n" + 
2993
                "\n" + 
2994
                "public class C implements Serializable{\n" + 
2995
                "    public static void main(String[] args) {\n" + 
2996
                "        List l = new List();\n" + 
2997
                "        Map e= null;\n" + 
2998
                "    }\n" + 
2999
                "}");
3000
        ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null);
3001
3002
        String[] order = new String[] { "java", "java.util", "com", "pack" };
3003
3004
        ImportRewrite imports= newImportsRewrite(cu, order, 2, 2, false);
3005
        imports.setUseContextToFilterImplicitImports(true);
3006
        imports.addImport("java.awt.List");
3007
        imports.addImport("java.io.Serializable");
3008
        imports.addImport("java.io.PrintWriter");
3009
        imports.addImport("java.util.HashMap");
3010
3011
        apply(imports);
3012
3013
        buf = new StringBuffer();
3014
        buf.append(
3015
                "package pack1;\n" + 
3016
                "\n" +
3017
                "// comment 1\n" +
3018
                "/*\n" +
3019
                " * keep me with List\n" +
3020
                " *\n" +
3021
                " */\n" +
3022
                "\n" +
3023
                "// lead 1\n" +
3024
                "import java.awt.List;// test1\n" +
3025
                "\n" +
3026
                "//lead 4\n" +
3027
                "import java.util.HashMap;// test4\n" +
3028
                "// commen 3\n" + 
3029
                "/*\n" +
3030
                " * keep me with Serializable\n" +
3031
                " */\n" +
3032
                "// lead 2\n" +
3033
                "// lead 3\n" +
3034
                "import java.io.*;// test3\n" +
3035
                "/*\n" +
3036
                " * keep me with PrintWriter\n" +
3037
                " */\n" +
3038
                "// test2\n" +
3039
                "/*\n" +
3040
                " * keep me with Serializable 2\n" +
3041
                " */\n" +
3042
                "/*\n" +
3043
                " * don't move me\n" +
3044
                " */\n" +
3045
                "public class C implements Serializable{\n" + 
3046
                "    public static void main(String[] args) {\n" + 
3047
                "        List l = new List();\n" + 
3048
                "        Map e= null;\n" + 
3049
                "    }\n" + 
3050
                "}");
3051
        assertEqualString(cu.getSource(), buf.toString());
3052
    }
3053
    
3054
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024
3055
    // Re-ordering imports and converting them to *
3056
    public void testBug378024g() throws Exception {
3057
        IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null);
3058
        StringBuffer buf = new StringBuffer();
3059
        buf.append(
3060
                "package pack1;\n" + 
3061
                "\n" +
3062
                "// comment 1\n" +
3063
                "/*\n" +
3064
                " * don't move me 1\n" +
3065
                " *\n" +
3066
                " */\n" +
3067
                "\n" +
3068
                "// lead 1\n" +
3069
                "import java.awt.List;// test1\n" +
3070
                "\n" +
3071
                "/*\n" +
3072
                " * don't move me 2\n" +
3073
                " */\n" +
3074
                "\n" +
3075
                "// lead 2\n" +
3076
                "import java.io.Serializable;// test2\n" +
3077
                "/*\n" +
3078
                " * don't move me 3\n" +
3079
                " */\n" +
3080
                "/*\n" +
3081
                " * don't move me 4\n" +
3082
                " */\n" +
3083
                "\n" +
3084
                "//lead 3\n" +
3085
                "import java.util.HashMap;// test3\n" +
3086
                "// commen 3\n" + 
3087
                "\n" + 
3088
                "public class C implements Serializable{\n" + 
3089
                "    public static void main(String[] args) {\n" + 
3090
                "        List l = new List();\n" + 
3091
                "        Map e= null;\n" + 
3092
                "    }\n" + 
3093
                "}");
3094
        ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null);
3095
3096
        String[] order = new String[] { "java", "java.awt", "java.util", "java.io", "com", "pack" };
3097
3098
        ImportRewrite imports= newImportsRewrite(cu, order, 1, 1, false);
3099
        imports.setUseContextToFilterImplicitImports(true);
3100
        imports.addImport("java.awt.List");
3101
        imports.addImport("java.io.Serializable");
3102
        imports.addImport("java.util.HashMap");
3103
3104
        apply(imports);
3105
3106
        StringBuffer buf2 = new StringBuffer();
3107
        buf2.append(
3108
                "package pack1;\n" + 
3109
                "\n" +
3110
                "// comment 1\n" +
3111
                "/*\n" +
3112
                " * don't move me 1\n" +
3113
                " *\n" +
3114
                " */\n" +
3115
                "\n" +
3116
                "// lead 1\n" +
3117
                "import java.awt.*;// test1\n" +
3118
                "\n" +
3119
                "//lead 3\n" +
3120
                "import java.util.*;// test3\n" +
3121
                "// commen 3\n" + 
3122
                "\n" +
3123
                "// lead 2\n" +
3124
                "import java.io.*;// test2\n" +
3125
                "/*\n" +
3126
                " * don't move me 3\n" +
3127
                " */\n" +
3128
                "/*\n" +
3129
                " * don't move me 4\n" +
3130
                " */\n" +
3131
                "/*\n" +
3132
                " * don't move me 2\n" +
3133
                " */\n" +
3134
                "public class C implements Serializable{\n" + 
3135
                "    public static void main(String[] args) {\n" + 
3136
                "        List l = new List();\n" + 
3137
                "        Map e= null;\n" + 
3138
                "    }\n" + 
3139
                "}");
3140
        assertEqualString(cu.getSource(), buf2.toString());
3141
    }
3142
    
3143
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024
3144
    // Preserve comments when imports are removed in case the restoring of imports is enabled
3145
    // This will test changes in org.eclipse.jdt.internal.core.dom.rewrite.ImportRewriteAnalyzer.removeImport(String, boolean)
3146
    public void testBug378024h() throws Exception {
3147
        IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null);
3148
        StringBuffer buf = new StringBuffer();
3149
        buf.append(
3150
                "package pack1;\n" + 
3151
                "\n" +
3152
                "// comment 1\n" +
3153
                "/*\n" +
3154
                " * don't move me 1\n" +
3155
                " *\n" +
3156
                " */\n" +
3157
                "\n" +
3158
                "// lead 1\n" +
3159
                "import java.awt.List;// test1\n" +
3160
                "\n" +
3161
                "/*\n" +
3162
                " * don't move me 2\n" +
3163
                " */\n" +
3164
                "\n" +
3165
                "// lead 2\n" +
3166
                "import java.io.Serializable;// test2\n" +
3167
                "/*\n" +
3168
                " * don't move me 3\n" +
3169
                " */\n" +
3170
                "\n" +
3171
                "/*\n" +
3172
                " * don't move me 4\n" +
3173
                " */\n" +
3174
                "\n" +
3175
                "//lead 3\n" +
3176
                "import java.util.HashMap;// test3\n" +
3177
                "// commen 3\n" + 
3178
                "\n" + 
3179
                "public class C implements Serializable{\n" + 
3180
                "    public static void main(String[] args) {\n" + 
3181
                "        Map e= null;\n" + 
3182
                "    }\n" + 
3183
                "}");
3184
        ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null);
3185
3186
        String[] order = new String[] { "java", "java.util", "com", "pack" };
3187
3188
        ImportRewrite imports= newImportsRewrite(cu, order, 99, 99, true);
3189
        imports.setUseContextToFilterImplicitImports(true);
3190
        imports.removeImport("java.awt.List");
3191
3192
        apply(imports);
3193
3194
        buf = new StringBuffer();
3195
        buf.append(
3196
                "package pack1;\n" + 
3197
                "\n" +
3198
                "// comment 1\n" +
3199
                "/*\n" +
3200
                " * don't move me 1\n" +
3201
                " *\n" +
3202
                " */\n" +
3203
                "\n" +
3204
                "// lead 1\n" +
3205
                "\n" +
3206
                "/*\n" +
3207
                " * don't move me 2\n" +
3208
                " */\n" +
3209
                "\n" +
3210
                "// lead 2\n" +
3211
                "import java.io.Serializable;// test2\n" +
3212
                "/*\n" +
3213
                " * don't move me 3\n" +
3214
                " */\n" +
3215
                "\n" +
3216
                "/*\n" +
3217
                " * don't move me 4\n" +
3218
                " */\n" +
3219
                "\n" +
3220
                "//lead 3\n" +
3221
                "import java.util.HashMap;// test3\n" +
3222
                "// commen 3\n" + 
3223
                "\n" + 
3224
                "public class C implements Serializable{\n" + 
3225
                "    public static void main(String[] args) {\n" + 
3226
                "        Map e= null;\n" + 
3227
                "    }\n" + 
3228
                "}");
3229
        assertEqualString(cu.getSource(), buf.toString());
3230
    }
3231
    
3232
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024
3233
    // Preserve comments when imports are removed in case the restoring of imports is enabled
3234
    public void testBug378024h_1() throws Exception {
3235
        IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null);
3236
        StringBuffer buf = new StringBuffer();
3237
        buf.append(
3238
                "package pack1;\n" + 
3239
                "\n" +
3240
                "// comment 1\n" +
3241
                "/*\n" +
3242
                " * don't move me 1\n" +
3243
                " *\n" +
3244
                " */\n" +
3245
                "// lead 1\n" +
3246
                "import java.awt.List;// test1\n" +
3247
                "/* i am with List */\n" +
3248
                "\n" +
3249
                "/*\n" +
3250
                " * don't move me 2\n" +
3251
                " */\n" +
3252
                "\n" +
3253
                "// lead 2\n" +
3254
                "import java.io.Serializable;// test2\n" +
3255
                "/*\n" +
3256
                " * don't move me 3\n" +
3257
                " */\n" +
3258
                "\n" +
3259
                "/*\n" +
3260
                " * don't move me 4\n" +
3261
                " */\n" +
3262
                "\n" +
3263
                "//lead 3\n" +
3264
                "import java.util.HashMap;// test3\n" +
3265
                "// commen 3\n" + 
3266
                "\n" + 
3267
                "public class C implements Serializable{\n" + 
3268
                "    public static void main(String[] args) {\n" + 
3269
                "        Map e= null;\n" + 
3270
                "    }\n" + 
3271
                "}");
3272
        ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null);
3273
3274
        String[] order = new String[] { "java", "java.util", "com", "pack" };
3275
3276
        ImportRewrite imports= newImportsRewrite(cu, order, 99, 99, true);
3277
        imports.setUseContextToFilterImplicitImports(true);
3278
        imports.removeImport("java.awt.List");
3279
        imports.addImport("java.util.List");
3280
3281
        apply(imports);
3282
3283
        buf = new StringBuffer();
3284
        buf.append(
3285
                "package pack1;\n" + 
3286
                "\n" +
3287
                "// comment 1\n" +
3288
                "/*\n" +
3289
                " * don't move me 1\n" +
3290
                " *\n" +
3291
                " */\n" +
3292
                "// lead 1\n" +
3293
                "/* i am with List */\n" +
3294
                "\n" +
3295
                "/*\n" +
3296
                " * don't move me 2\n" +
3297
                " */\n" +
3298
                "\n" +
3299
                "// lead 2\n" +
3300
                "import java.io.Serializable;// test2\n" +
3301
                "/*\n" +
3302
                " * don't move me 3\n" +
3303
                " */\n" +
3304
                "\n" +
3305
                "/*\n" +
3306
                " * don't move me 4\n" +
3307
                " */\n" +
3308
                "\n" +
3309
                "//lead 3\n" +
3310
                "import java.util.HashMap;// test3\n" +
3311
                "// commen 3\n" + 
3312
                "import java.util.List;\n" +                
3313
                "\n" + 
3314
                "public class C implements Serializable{\n" + 
3315
                "    public static void main(String[] args) {\n" + 
3316
                "        Map e= null;\n" + 
3317
                "    }\n" + 
3318
                "}");
3319
        assertEqualString(cu.getSource(), buf.toString());
3320
    }
3321
    
3322
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024
3323
    // Preserve comments when imports are unfolded.
3324
    public void testBug378024i() throws Exception {
3325
        IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null);
3326
        StringBuffer buf = new StringBuffer();
3327
        buf.append(
3328
                "package pack1;\n" + 
3329
                "\n" +
3330
                "// comment 1\n" +
3331
                "/*\n" +
3332
                " * don't move me 1\n" +
3333
                " *\n" +
3334
                " */\n" +
3335
                "// lead 1\n" +
3336
                "import java.awt.*;// test1\n" +
3337
                "/* i am with List */\n" +
3338
                "\n" +
3339
                "/*\n" +
3340
                " * don't move me 2\n" +
3341
                " */\n" +
3342
                "\n" +
3343
                "// lead 2\n" +
3344
                "import java.io.*;// test2\n" +
3345
                "/*\n" +
3346
                " * don't move me 3\n" +
3347
                " */\n" +
3348
                "\n" +
3349
                "/*\n" +
3350
                " * don't move me 4\n" +
3351
                " */\n" +
3352
                "\n" +
3353
                "//lead 3\n" +
3354
                "import java.util.*;// test3\n" +
3355
                "// commen 3\n" + 
3356
                "\n" + 
3357
                "public class C implements Serializable{\n" + 
3358
                "    public static void main(String[] args) {\n" + 
3359
                "        HashMap e= null;\n" + 
3360
                "        PrintWriter p= null;\n" + 
3361
                "        List l= null;\n" + 
3362
                "    }\n" + 
3363
                "}");
3364
        ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null);
3365
3366
        String[] order = new String[] { "java", "com", "pack" };
3367
3368
        ImportRewrite imports= newImportsRewrite(cu, order, 99, 99, false);
3369
        imports.setUseContextToFilterImplicitImports(true);
3370
        imports.addImport("java.awt.List");
3371
        imports.addImport("java.io.PrintWriter");
3372
        imports.addImport("java.io.Serializable");
3373
        imports.addImport("java.util.HashMap");
3374
        imports.addImport("java.util.Map");
3375
        apply(imports);
3376
3377
        buf = new StringBuffer();
3378
        buf.append(
3379
                "package pack1;\n" + 
3380
                "\n" +
3381
                "// comment 1\n" +
3382
                "/*\n" +
3383
                " * don't move me 1\n" +
3384
                " *\n" +
3385
                " */\n" +
3386
                "// lead 1\n" +
3387
                "import java.awt.List;// test1\n" +
3388
                "/* i am with List */\n" +
3389
                "/*\n" +
3390
                " * don't move me 2\n" +
3391
                " */\n" +
3392
                "// lead 2\n" +
3393
                "import java.io.PrintWriter;// test2\n" +
3394
                "/*\n" +
3395
                " * don't move me 3\n" +
3396
                " */\n" +
3397
                "import java.io.Serializable;\n" +
3398
                "/*\n" +
3399
                " * don't move me 4\n" +
3400
                " */\n" +
3401
                "//lead 3\n" +
3402
                "import java.util.HashMap;// test3\n" +
3403
                "// commen 3\n" + 
3404
                "import java.util.Map;\n" +
3405
                "\n" + 
3406
                "public class C implements Serializable{\n" + 
3407
                "    public static void main(String[] args) {\n" + 
3408
                "        HashMap e= null;\n" + 
3409
                "        PrintWriter p= null;\n" + 
3410
                "        List l= null;\n" + 
3411
                "    }\n" + 
3412
                "}");
3413
        assertEqualString(cu.getSource(), buf.toString());
3414
    }
3415
    
3416
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378024
3417
    // Preserve comments when imports are folded but a member type import is present
3418
    public void testBug378024j() throws Exception {
3419
        IPackageFragment pack1 = this.sourceFolder.createPackageFragment("pack1", false, null);
3420
        StringBuffer buf = new StringBuffer();
3421
        buf.append(
3422
                "package pack1;\n" + 
3423
                "\n" +
3424
                "// comment 1\n" +
3425
                "/*\n" +
3426
                " * don't move me 1\n" +
3427
                " *\n" +
3428
                " */\n" +
3429
                "// lead 1\n" +
3430
                "import java.awt.List;// test1\n" +
3431
                "/* i am with List */\n" +
3432
                "\n" +
3433
                "/*\n" +
3434
                " * don't move me 2\n" +
3435
                " */\n" +
3436
                "\n" +
3437
                "//lead 3\n" +
3438
                "import java.util.HashMap;// test3\n" +
3439
                "/*\n" +
3440
                " * don't move me 3\n" +
3441
                " */\n" +
3442
                "\n" +
3443
                "/*keep me with Map.Entry*/\n" +
3444
                "import java.util.Map.Entry;// member type import\n" +
3445
                "/*keep me with Map.Entry 2*/\n" +
3446
                "\n" +
3447
                "/*\n" +
3448
                " * don't move me 4\n" +
3449
                " */\n" +
3450
                "\n" +
3451
                "// lead 2\n" +
3452
                "import java.io.Serializable;// test2\n" +
3453
                "// commen 3\n" +
3454
                "\n" + 
3455
                "public class C implements Serializable{\n" + 
3456
                "    public static void main(String[] args) {\n" + 
3457
                "        Map e= null;\n" + 
3458
                "    }\n" + 
3459
                "}");
3460
        ICompilationUnit cu = pack1.createCompilationUnit("C.java", buf.toString(), false, null);
3461
3462
        String[] order = new String[] { "java", "java.util", "com", "pack" };
3463
3464
        ImportRewrite imports= newImportsRewrite(cu, order, 1, 1, false);
3465
        imports.setUseContextToFilterImplicitImports(true);
3466
        imports.addImport("java.awt.List");
3467
        imports.addImport("java.util.HashMap");
3468
        imports.addImport("java.util.Map.Entry");
3469
        imports.addImport("java.io.Serializable");
3470
3471
        apply(imports);
3472
3473
        buf = new StringBuffer();
3474
        buf.append(
3475
                "package pack1;\n" + 
3476
                "\n" +
3477
                "// comment 1\n" +
3478
                "/*\n" +
3479
                " * don't move me 1\n" +
3480
                " *\n" +
3481
                " */\n" +
3482
                "// lead 1\n" +
3483
                "import java.awt.*;// test1\n" +
3484
                "/* i am with List */\n" +
3485
                "\n" +
3486
                "//lead 3\n" +
3487
                "import java.util.*;// test3\n" +
3488
                "/*\n" +
3489
                " * don't move me 3\n" +
3490
                " */\n" +
3491
                "/*keep me with Map.Entry*/\n" +
3492
                "import java.util.Map.Entry;// member type import\n" +
3493
                "/*keep me with Map.Entry 2*/\n" +
3494
                "/*\n" +
3495
                " * don't move me 2\n" +
3496
                " */" +
3497
                "/*\n" +
3498
                " * don't move me 4\n" +
3499
                " */\n" +
3500
                "// lead 2\n" +
3501
                "import java.io.*;// test2\n" +
3502
                "// commen 3\n" +
3503
                "\n" + 
3504
                "public class C implements Serializable{\n" + 
3505
                "    public static void main(String[] args) {\n" + 
3506
                "        Map e= null;\n" + 
3507
                "    }\n" + 
3508
                "}");
3509
        assertEqualString(cu.getSource(), buf.toString());
3510
    }
2180
3511
2181
	private void assertAddedAndRemoved(ImportRewrite imports, String[] expectedAdded, String[] expectedRemoved, String[] expectedAddedStatic, String[] expectedRemovedStatic) {
3512
	private void assertAddedAndRemoved(ImportRewrite imports, String[] expectedAdded, String[] expectedRemoved, String[] expectedAddedStatic, String[] expectedRemovedStatic) {
2182
		assertEqualStringsIgnoreOrder(imports.getAddedImports(), expectedAdded);
3513
		assertEqualStringsIgnoreOrder(imports.getAddedImports(), expectedAdded);
(-)a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java (-2 / +2 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
 * Copyright (c) 2000, 2011 IBM Corporation and others.
2
 * Copyright (c) 2000, 2012 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 1051-1057 Link Here
1051
			if (this.addedImports != null) {
1051
			if (this.addedImports != null) {
1052
				for (int i= 0; i < this.addedImports.size(); i++) {
1052
				for (int i= 0; i < this.addedImports.size(); i++) {
1053
					String curr= (String) this.addedImports.get(i);
1053
					String curr= (String) this.addedImports.get(i);
1054
					computer.addImport(curr.substring(1), STATIC_PREFIX == curr.charAt(0));
1054
					computer.addImport(curr.substring(1), STATIC_PREFIX == curr.charAt(0), usedAstRoot, this.restoreExistingImports);
1055
				}
1055
				}
1056
			}
1056
			}
1057
1057
(-)a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ImportRewriteAnalyzer.java (-15 / +124 lines)
Lines 270-282 Link Here
270
			int nextOffset= next.getStartPosition();
270
			int nextOffset= next.getStartPosition();
271
			int nextLength= next.getLength();
271
			int nextLength= next.getLength();
272
			int nextOffsetLine= root.getLineNumber(nextOffset);
272
			int nextOffsetLine= root.getLineNumber(nextOffset);
273
			int nextExtendedOffset = root.getExtendedStartPosition(next);
274
			int nextExtendedOffsetLine = root.getLineNumber(nextExtendedOffset);
273
275
274
			int extendedStart = root.getExtendedStartPosition(curr);
276
			int extendedStart = root.getExtendedStartPosition(curr);
277
			int extendedLength = root.getExtendedLength(curr);
275
			if (extendedStart < this.replaceRange.getOffset()) {
278
			if (extendedStart < this.replaceRange.getOffset()) {
276
				// don't touch the first comments before the start of import declarations
279
				// don't touch the first comments before the start of import declarations
280
				extendedLength -=  (currOffset - extendedStart);
277
				extendedStart = currOffset;
281
				extendedStart = currOffset;
278
			}
282
			}
279
			int extendedLength = root.getExtendedLength(curr);
283
			
280
			// if next import is on a different line, modify the end position to the next line begin offset
284
			// if next import is on a different line, modify the end position to the next line begin offset
281
			int nextLineOffset = nextOffset; // offset at the start of next line. Next import may not start here
285
			int nextLineOffset = nextOffset; // offset at the start of next line. Next import may not start here
282
			if (currEndLine < nextOffsetLine) {
286
			if (currEndLine < nextOffsetLine) {
Lines 314-319 Link Here
314
				nextOffset= root.getPosition(nextOffsetLine, 0);
318
				nextOffset= root.getPosition(nextOffsetLine, 0);
315
319
316
				currPackage= new PackageEntry(); // create a comment package entry for this
320
				currPackage= new PackageEntry(); // create a comment package entry for this
321
				currPackage.setGroupID(packName);
317
				this.packageEntries.add(currPackage);
322
				this.packageEntries.add(currPackage);
318
				currPackage.add(new ImportDeclEntry(packName.length(), null, false, new Region(nextLineOffset, nextOffset - nextLineOffset)));
323
				currPackage.add(new ImportDeclEntry(packName.length(), null, false, new Region(nextLineOffset, nextOffset - nextLineOffset)));
319
324
Lines 566-571 Link Here
566
		}
571
		}
567
		String groupId= null;
572
		String groupId= null;
568
		int longestPrefix= -1;
573
		int longestPrefix= -1;
574
		PackageEntry matchingCommentEntry = null;
569
		// find the matching group
575
		// find the matching group
570
		for (int i= 0; i < this.packageEntries.size(); i++) {
576
		for (int i= 0; i < this.packageEntries.size(); i++) {
571
			PackageEntry curr= (PackageEntry) this.packageEntries.get(i);
577
			PackageEntry curr= (PackageEntry) this.packageEntries.get(i);
Lines 573-580 Link Here
573
				String currGroup= curr.getGroupID();
579
				String currGroup= curr.getGroupID();
574
				if (currGroup != null && newName.startsWith(currGroup)) {
580
				if (currGroup != null && newName.startsWith(currGroup)) {
575
					int prefixLen= currGroup.length();
581
					int prefixLen= currGroup.length();
576
					if (prefixLen == newName.length()) {
582
					if (prefixLen == newName.length() && !curr.isComment()) {
577
						return curr; // perfect fit, use entry
583
						return curr; // perfect fit, use entry
584
					} else if (curr.isComment()) {
585
						matchingCommentEntry = curr; // may be the only fit if no actual import of this group is already present
586
						continue;
578
					}
587
					}
579
					if ((newName.charAt(prefixLen) == '.' || prefixLen == 0) && prefixLen > longestPrefix) {
588
					if ((newName.charAt(prefixLen) == '.' || prefixLen == 0) && prefixLen > longestPrefix) {
580
						longestPrefix= prefixLen;
589
						longestPrefix= prefixLen;
Lines 582-587 Link Here
582
					}
591
					}
583
				}
592
				}
584
			}
593
			}
594
		}
595
		if (matchingCommentEntry != null) {
596
			return matchingCommentEntry;
585
		}
597
		}
586
		PackageEntry bestMatch= null;
598
		PackageEntry bestMatch= null;
587
		PackageMatcher matcher= new PackageMatcher();
599
		PackageMatcher matcher= new PackageMatcher();
Lines 616-625 Link Here
616
		return qualifier.equals(packageName +'.' + mainTypeName);
628
		return qualifier.equals(packageName +'.' + mainTypeName);
617
	}
629
	}
618
630
619
	public void addImport(String fullTypeName, boolean isStatic) {
631
	public void addImport(String fullTypeName, boolean isStatic, CompilationUnit root, boolean restoreExistingImports) {
620
		String typeContainerName= getQualifier(fullTypeName, isStatic);
632
		String typeContainerName= getQualifier(fullTypeName, isStatic);
621
		ImportDeclEntry decl= new ImportDeclEntry(typeContainerName.length(), fullTypeName, isStatic, null);
633
		ImportDeclEntry decl;
634
		if (restoreExistingImports) {
635
			decl = new ImportDeclEntry(typeContainerName.length(), fullTypeName, isStatic, null);
636
		} else {
637
			decl = addImportDeclEntry(typeContainerName, fullTypeName, isStatic, root);
638
		}
622
		sortIn(typeContainerName, decl, isStatic);
639
		sortIn(typeContainerName, decl, isStatic);
640
	}
641
642
	/**
643
	 * adds the import entry, but if its an existing import entry then preserves the comments surrounding the import
644
	 */
645
	private ImportDeclEntry addImportDeclEntry(String containerName, String fullTypeName, boolean isStatic, CompilationUnit root) {
646
		List/*ImportDeclaration*/ decls= root.imports();
647
		if (decls.isEmpty() || this.preserveExistingCommentsRanges == null || this.preserveExistingCommentsRanges.length == 0) {
648
			return new ImportDeclEntry(containerName.length(), fullTypeName, isStatic, null);
649
		}
650
		IRegion precedingCommentRange = null;
651
		IRegion trailingCommentRange = null;
652
		int prevOffset = this.replaceRange.getOffset();  // will store offset of the previous import's extended end
653
		int numOfImports = decls.size();
654
		for (int i= 0; i < numOfImports; i++) {
655
			ImportDeclaration curr= (ImportDeclaration) decls.get(i);
656
			int currOffset= curr.getStartPosition();
657
			int currLength= curr.getLength();
658
			int currExtendedStart = root.getExtendedStartPosition(curr);
659
			int currExtendedLen = root.getExtendedLength(curr);
660
			String name= getFullName(curr);
661
			String packName= getQualifier(curr);
662
			if (packName.equals(containerName) && (name.equals(fullTypeName) || name.endsWith("*"))) {//$NON-NLS-1$
663
				int preserveCommentsLen = this.preserveExistingCommentsRanges.length;
664
				for (int j = 0; j < preserveCommentsLen; j++) {
665
					int offset = this.preserveExistingCommentsRanges[j].getOffset();
666
					boolean wasRangeUsed = false;
667
					int existingCommentLength = this.preserveExistingCommentsRanges[j].getLength();
668
					if (offset == currExtendedStart) {
669
						// comments belonging to this import's extended start
670
						precedingCommentRange = new Region(offset, existingCommentLength);	
671
						wasRangeUsed = true;
672
					} else if (offset < currExtendedStart && offset > prevOffset) {
673
						// comment between two imports but not inside either's extended ranges
674
						// to preserve the position of these comments add a dummy comment entry
675
						PackageEntry commentEntry = new PackageEntry(); // create a comment package entry for this
676
						commentEntry.setGroupID(packName);	// the comment should belong to the current group
677
						this.packageEntries.add(commentEntry);
678
						commentEntry.add(new ImportDeclEntry(packName.length(), null, false, new Region(offset, existingCommentLength)));
679
						wasRangeUsed = true;
680
					} else if ((currExtendedStart + currExtendedLen) != (currOffset + currLength)){
681
						if (offset == currOffset + currLength) {
682
							// comment is in the extended end of the import
683
							trailingCommentRange = new Region(offset, existingCommentLength);
684
							wasRangeUsed = true;
685
						} else if (offset > (currOffset + currLength)) {
686
							break;
687
						}
688
					}
689
					if (wasRangeUsed) {
690
						// remove this comment from preceedingCommnentRange array
691
						IRegion[] tempRegions = new IRegion[preserveCommentsLen = (preserveCommentsLen - 1)];
692
						System.arraycopy(this.preserveExistingCommentsRanges, 0, tempRegions, 0, j);
693
						System.arraycopy(this.preserveExistingCommentsRanges, j+1, tempRegions, j, tempRegions.length - j);
694
						this.preserveExistingCommentsRanges = tempRegions;
695
						j--;
696
					}
697
				}	
698
				return new ImportDeclEntry(containerName.length(), fullTypeName, isStatic, null, precedingCommentRange, trailingCommentRange);
699
			}
700
			prevOffset = currExtendedStart + currExtendedLen - 1;
701
		}
702
		return new ImportDeclEntry(containerName.length(), fullTypeName, isStatic, null);
623
	}
703
	}
624
704
625
	public boolean removeImport(String qualifiedName, boolean isStatic) {
705
	public boolean removeImport(String qualifiedName, boolean isStatic) {
Lines 758-763 Link Here
758
								stringsToInsert.add(lineDelim);
838
								stringsToInsert.add(lineDelim);
759
							}
839
							}
760
						}
840
						}
841
					} else if (lastPackage != null && lastPackage.isComment() && pack.isSameGroup(lastPackage)) {
842
						// the last pack may be a dummy for a comment which doesn't belong to any extended range
843
						stringsToInsert.add(lineDelim);
761
					}
844
					}
762
				}
845
				}
763
				lastPackage= pack;
846
				lastPackage= pack;
Lines 766-776 Link Here
766
				int threshold= isStatic ? this.staticImportOnDemandThreshold : this.importOnDemandThreshold;
849
				int threshold= isStatic ? this.staticImportOnDemandThreshold : this.importOnDemandThreshold;
767
850
768
				boolean doStarImport= pack.hasStarImport(threshold, onDemandConflicts);
851
				boolean doStarImport= pack.hasStarImport(threshold, onDemandConflicts);
852
				boolean allImportsAddedToStar = false;
769
				if (doStarImport && (pack.find("*") == null)) { //$NON-NLS-1$
853
				if (doStarImport && (pack.find("*") == null)) { //$NON-NLS-1$
770
					String[] imports = getNewImportStrings(buffer, pack, isStatic, lineDelim);
854
					String[] imports = getNewImportStrings(buffer, pack, isStatic, lineDelim);
771
					for (int j = 0, max = imports.length; j < max; j++) {
855
					for (int j = 0, max = imports.length; j < max; j++) {
772
						stringsToInsert.add(imports[j]);
856
						stringsToInsert.add(imports[j]);
773
					}
857
					}
858
					allImportsAddedToStar = true;
774
				}
859
				}
775
860
776
				for (int k= 0; k < nImports; k++) {
861
				for (int k= 0; k < nImports; k++) {
Lines 779-787 Link Here
779
864
780
					if (region == null) { // new entry
865
					if (region == null) { // new entry
781
						if (!doStarImport || currDecl.isOnDemand() || (onDemandConflicts != null && onDemandConflicts.contains(currDecl.getSimpleName()))) {
866
						if (!doStarImport || currDecl.isOnDemand() || (onDemandConflicts != null && onDemandConflicts.contains(currDecl.getSimpleName()))) {
782
							String str= getNewImportString(currDecl.getElementName(), isStatic, lineDelim);
867
							IRegion rangeBefore = currDecl.getPrecedingCommentRange();
868
							IRegion rangeAfter = currDecl.getTrailingCommentRange();
869
							if (rangeBefore != null) {
870
								stringsToInsert.add(buffer.getText(rangeBefore.getOffset(), rangeBefore.getLength()));
871
							}
872
							
873
							String trailingComment = null;
874
							if (rangeAfter != null) {
875
								trailingComment = buffer.getText(rangeAfter.getOffset(), rangeAfter.getLength());
876
							}
877
							String str= getNewImportString(currDecl.getElementName(), isStatic, trailingComment, lineDelim);
783
							stringsToInsert.add(str);
878
							stringsToInsert.add(str);
784
						} else if (doStarImport && !currDecl.isOnDemand()) {
879
						} else if (doStarImport && !currDecl.isOnDemand() && !allImportsAddedToStar) {
785
							String simpleName = currDecl.getTypeQualifiedName();
880
							String simpleName = currDecl.getTypeQualifiedName();
786
							if (simpleName.indexOf('.') != -1) {
881
							if (simpleName.indexOf('.') != -1) {
787
								String str= getNewImportString(currDecl.getElementName(), isStatic, lineDelim);
882
								String str= getNewImportString(currDecl.getElementName(), isStatic, lineDelim);
Lines 830-836 Link Here
830
925
831
			// insert back all existing imports comments since existing imports were not preserved
926
			// insert back all existing imports comments since existing imports were not preserved
832
			if (this.preserveExistingCommentsRanges != null) {
927
			if (this.preserveExistingCommentsRanges != null) {
833
				for (int i = 0, max = this.preserveExistingCommentsRanges.length; i < max; i++) {
928
				for (int i = 0, max = this.preserveExistingCommentsRanges.length; (i < max && this.preserveExistingCommentsRanges[i] != null); i++) {
834
					IRegion region = this.preserveExistingCommentsRanges[i];
929
					IRegion region = this.preserveExistingCommentsRanges[i];
835
					String text = buffer.getText(region.getOffset(), region.getLength());
930
					String text = buffer.getText(region.getOffset(), region.getLength());
836
					// remove preceding whitespaces
931
					// remove preceding whitespaces
Lines 1012-1017 Link Here
1012
		List allImports = new ArrayList();
1107
		List allImports = new ArrayList();
1013
		int nImports = packageEntry.getNumberOfImports();
1108
		int nImports = packageEntry.getNumberOfImports();
1014
		StringBuffer allComments = null;
1109
		StringBuffer allComments = null;
1110
		StringBuffer allCommentsLead = null;
1015
		for (int i= 0; i < nImports; i++) {
1111
		for (int i= 0; i < nImports; i++) {
1016
			ImportDeclEntry curr= packageEntry.getImportAt(i);
1112
			ImportDeclEntry curr= packageEntry.getImportAt(i);
1017
			String simpleName = curr.getTypeQualifiedName();
1113
			String simpleName = curr.getTypeQualifiedName();
Lines 1029-1056 Link Here
1029
				allImports.add(getNewImportString(curr.getElementName(), isStatic, trailingComment, lineDelim));
1125
				allImports.add(getNewImportString(curr.getElementName(), isStatic, trailingComment, lineDelim));
1030
			} else if (!isStarImportAdded) {
1126
			} else if (!isStarImportAdded) {
1031
				String starImportString= packageEntry.getName() + ".*"; //$NON-NLS-1$
1127
				String starImportString= packageEntry.getName() + ".*"; //$NON-NLS-1$
1032
				allImports.add(getNewImportString(starImportString, isStatic, lineDelim));
1128
				// collect all comments
1129
				IRegion rangeBefore = curr.getPrecedingCommentRange();
1130
				if (rangeBefore != null) {
1131
					allImports.add(buffer.getText(rangeBefore.getOffset(), rangeBefore.getLength()));
1132
				}
1133
				IRegion rangeAfter = curr.getTrailingCommentRange();
1134
				String trailComments = null;
1135
				if (rangeAfter != null) {
1136
					trailComments = buffer.getText(rangeAfter.getOffset(), rangeAfter.getLength());
1137
				}
1138
				allImports.add(getNewImportString(starImportString, isStatic, trailComments, lineDelim));
1033
				isStarImportAdded = true;
1139
				isStarImportAdded = true;
1034
			} else {
1140
			} else {
1035
				// collect all comments
1141
				// collect all comments
1036
				IRegion rangeBefore = curr.getPrecedingCommentRange();
1142
				IRegion rangeBefore = curr.getPrecedingCommentRange();
1037
				if (rangeBefore != null) {
1143
				if (rangeBefore != null) {
1038
					if (allComments == null) {
1144
					if (allCommentsLead == null) {
1039
						allComments = new StringBuffer();
1145
						allCommentsLead = new StringBuffer();
1040
					}
1146
					}
1041
					allComments.append(buffer.getText(rangeBefore.getOffset(), rangeBefore.getLength())).append(lineDelim);
1147
					allCommentsLead.append(buffer.getText(rangeBefore.getOffset(), rangeBefore.getLength()));
1042
				}
1148
				}
1043
				IRegion rangeAfter = curr.getTrailingCommentRange();
1149
				IRegion rangeAfter = curr.getTrailingCommentRange();
1044
				if (rangeAfter != null) {
1150
				if (rangeAfter != null) {
1045
					if (allComments == null) {
1151
					if (allComments == null) {
1046
						allComments = new StringBuffer();
1152
						allComments = new StringBuffer();
1047
					}
1153
					}
1048
					allComments.append(buffer.getText(rangeAfter.getOffset(), rangeAfter.getLength())).append(lineDelim);
1154
					allComments.append(buffer.getText(rangeAfter.getOffset(), rangeAfter.getLength()));
1049
				}
1155
				}
1050
			}
1156
			}
1051
		}
1157
		}
1158
		if (allCommentsLead != null) {
1159
			allImports.add(0, String.valueOf(allCommentsLead));
1160
		}
1052
		if (allComments != null) {
1161
		if (allComments != null) {
1053
			allImports.add(0, String.valueOf(allComments));
1162
			allImports.add(String.valueOf(allComments.append(lineDelim)));
1054
		}
1163
		}
1055
		return (String[]) allImports.toArray(new String[allImports.size()]);
1164
		return (String[]) allImports.toArray(new String[allImports.size()]);
1056
	}
1165
	}
Lines 1110-1117 Link Here
1110
		private IRegion sourceRange;
1219
		private IRegion sourceRange;
1111
		private final boolean isStatic;
1220
		private final boolean isStatic;
1112
		private int containerNameLength;
1221
		private int containerNameLength;
1113
		private IRegion precedingCommentRange;
1222
		IRegion precedingCommentRange;
1114
		private IRegion trailingCommentRange;
1223
		IRegion trailingCommentRange;
1115
1224
1116
		public ImportDeclEntry(
1225
		public ImportDeclEntry(
1117
				int containerNameLength,
1226
				int containerNameLength,

Return to bug 378024