View | Details | Raw Unified | Return to bug 333428 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/jdt/text/tests/contentassist/CodeCompletionTest.java (-1 / +608 lines)
Lines 199-204 Link Here
199
199
200
		CompletionProposalCollector collector= createCollector(cu, offset);
200
		CompletionProposalCollector collector= createCollector(cu, offset);
201
		collector.setReplacementLength(0);
201
		collector.setReplacementLength(0);
202
		collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true);
202
203
203
		codeComplete(cu, offset, collector);
204
		codeComplete(cu, offset, collector);
204
205
Lines 489-494 Link Here
489
		assertEquals(buf.toString(), doc.get());
490
		assertEquals(buf.toString(), doc.get());
490
	}
491
	}
491
492
493
	public void testAnonymousTypeCompletion7() throws Exception {
494
		// bug 333428#c0 => button.addSelectionListener(new SelectionL
495
		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
496
497
		IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
498
		StringBuffer buf= new StringBuffer();
499
		buf.append("package test1;\n");
500
		buf.append("public class A {\n");
501
		buf.append("    public void foo(Runnable r) {\n");
502
		buf.append("    }\n");
503
		buf.append("    public void bar() {\n");
504
		buf.append("    	foo(new Runn\n");
505
		buf.append("    }\n");
506
		buf.append("}\n");
507
		String contents= buf.toString();
508
509
		ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null);
510
511
		String str= "foo(new Runn";
512
513
		int offset= contents.indexOf(str) + str.length();
514
515
		CompletionProposalCollector collector= createCollector(cu, offset);
516
		collector.setReplacementLength(0);
517
		collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true);
518
519
		codeComplete(cu, offset, collector);
520
521
		IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
522
523
		assertNumberOf("proposals", proposals.length, 1);
524
525
		IDocument doc= new Document(contents);
526
527
		proposals[0].apply(doc);
528
529
		buf= new StringBuffer();
530
		buf.append("package test1;\n");
531
		buf.append("public class A {\n");
532
		buf.append("    public void foo(Runnable r) {\n");
533
		buf.append("    }\n");
534
		buf.append("    public void bar() {\n");
535
		buf.append("    	foo(new Runnable() {\n");
536
		buf.append("            \n");
537
		buf.append("            public void run() {\n");
538
		buf.append("                //TODO\n");
539
		buf.append("                \n");
540
		buf.append("            }\n");
541
		buf.append("        });\n");
542
		buf.append("    }\n");
543
		buf.append("}\n");
544
		assertEquals(buf.toString(), doc.get());
545
	}
546
547
	public void testAnonymousTypeCompletion8() throws Exception {
548
		// bug 333428#c0 => button.addSelectionListener(new SelectionL)
549
		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
550
551
		IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
552
		StringBuffer buf= new StringBuffer();
553
		buf.append("package test1;\n");
554
		buf.append("public class A {\n");
555
		buf.append("    public void foo(Runnable r) {\n");
556
		buf.append("    }\n");
557
		buf.append("    public void bar() {\n");
558
		buf.append("    	foo(new Runn)\n");
559
		buf.append("    }\n");
560
		buf.append("}\n");
561
		String contents= buf.toString();
562
563
		ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null);
564
565
		String str= "foo(new Runn";
566
567
		int offset= contents.indexOf(str) + str.length();
568
569
		CompletionProposalCollector collector= createCollector(cu, offset);
570
		collector.setReplacementLength(0);
571
		collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true);
572
573
		codeComplete(cu, offset, collector);
574
575
		IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
576
577
		assertNumberOf("proposals", proposals.length, 1);
578
579
		IDocument doc= new Document(contents);
580
581
		proposals[0].apply(doc);
582
583
		buf= new StringBuffer();
584
		buf.append("package test1;\n");
585
		buf.append("public class A {\n");
586
		buf.append("    public void foo(Runnable r) {\n");
587
		buf.append("    }\n");
588
		buf.append("    public void bar() {\n");
589
		buf.append("    	foo(new Runnable() {\n");
590
		buf.append("            \n");
591
		buf.append("            public void run() {\n");
592
		buf.append("                //TODO\n");
593
		buf.append("                \n");
594
		buf.append("            }\n");
595
		buf.append("        });\n");
596
		buf.append("    }\n");
597
		buf.append("}\n");
598
		assertEquals(buf.toString(), doc.get());
599
	}
600
601
602
	public void testAnonymousTypeCompletion9() throws Exception {
603
		// bug 333428#c0 => button.addSelectionListener(new SelectionL);
604
		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
605
606
		IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
607
		StringBuffer buf= new StringBuffer();
608
		buf.append("package test1;\n");
609
		buf.append("public class A {\n");
610
		buf.append("    public void foo(Runnable r) {\n");
611
		buf.append("    }\n");
612
		buf.append("    public void bar() {\n");
613
		buf.append("    	foo(new Runn);\n");
614
		buf.append("    }\n");
615
		buf.append("}\n");
616
		String contents= buf.toString();
617
618
		ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null);
619
620
		String str= "foo(new Runn";
621
622
		int offset= contents.indexOf(str) + str.length();
623
624
		CompletionProposalCollector collector= createCollector(cu, offset);
625
		collector.setReplacementLength(0);
626
		collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true);
627
628
		codeComplete(cu, offset, collector);
629
630
		IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
631
632
		assertNumberOf("proposals", proposals.length, 1);
633
634
		IDocument doc= new Document(contents);
635
636
		proposals[0].apply(doc);
637
638
		buf= new StringBuffer();
639
		buf.append("package test1;\n");
640
		buf.append("public class A {\n");
641
		buf.append("    public void foo(Runnable r) {\n");
642
		buf.append("    }\n");
643
		buf.append("    public void bar() {\n");
644
		buf.append("    	foo(new Runnable() {\n");
645
		buf.append("            \n");
646
		buf.append("            public void run() {\n");
647
		buf.append("                //TODO\n");
648
		buf.append("                \n");
649
		buf.append("            }\n");
650
		buf.append("        });\n");
651
		buf.append("    }\n");
652
		buf.append("}\n");
653
		assertEquals(buf.toString(), doc.get());
654
	}
655
656
	public void testAnonymousTypeCompletion10() throws Exception {
657
		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
658
659
		IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
660
		StringBuffer buf= new StringBuffer();
661
		buf.append("package test1;\n");
662
		buf.append("public class A {\n");
663
		buf.append("    private Runnable jobs[] = {\n");
664
		buf.append("    new Runn\n");
665
		buf.append("    };\n");
666
		buf.append("}\n");
667
		String contents= buf.toString();
668
669
		ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null);
670
671
		String str= "new Runn";
672
673
		int offset= contents.indexOf(str) + str.length();
674
675
		CompletionProposalCollector collector= createCollector(cu, offset);
676
		collector.setReplacementLength(0);
677
		collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true);
678
679
		codeComplete(cu, offset, collector);
680
681
		IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
682
683
		assertNumberOf("proposals", proposals.length, 1);
684
685
		IDocument doc= new Document(contents);
686
687
		proposals[0].apply(doc);
688
689
		buf= new StringBuffer();
690
		buf.append("package test1;\n");
691
		buf.append("public class A {\n");
692
		buf.append("    private Runnable jobs[] = {\n");
693
		buf.append("    new Runnable() {\n");
694
		buf.append("        \n");
695
		buf.append("        public void run() {\n");
696
		buf.append("            //TODO\n");
697
		buf.append("            \n");
698
		buf.append("        }\n");
699
		buf.append("    }\n");
700
		buf.append("    };\n");
701
		buf.append("}\n");
702
		assertEquals(buf.toString(), doc.get());
703
	}
704
705
	
706
707
	public void testAnonymousTypeCompletion11() throws Exception {
708
		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
709
710
		IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
711
		StringBuffer buf= new StringBuffer();
712
		buf.append("package test1;\n");
713
		buf.append("public class A {\n");
714
		buf.append("    private Runnable jobs[] = {new Runn}\n");
715
		buf.append("}\n");
716
		String contents= buf.toString();
717
718
		ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null);
719
720
		String str= "new Runn";
721
722
		int offset= contents.indexOf(str) + str.length();
723
724
		CompletionProposalCollector collector= createCollector(cu, offset);
725
		collector.setReplacementLength(0);
726
		collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true);
727
728
		codeComplete(cu, offset, collector);
729
730
		IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
731
732
		assertNumberOf("proposals", proposals.length, 1);
733
734
		IDocument doc= new Document(contents);
735
736
		proposals[0].apply(doc);
737
738
		buf= new StringBuffer();
739
		buf.append("package test1;\n");
740
		buf.append("public class A {\n");
741
		buf.append("    private Runnable jobs[] = {new Runnable() {\n");
742
		buf.append("        \n");
743
		buf.append("        public void run() {\n");
744
		buf.append("            //TODO\n");
745
		buf.append("            \n");
746
		buf.append("        }\n");
747
		buf.append("    }};\n");
748
		buf.append("}\n");
749
		assertEquals(buf.toString(), doc.get());
750
	}
751
752
	public void testAnonymousTypeCompletion12() throws Exception {
753
		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
754
755
		IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
756
		StringBuffer buf= new StringBuffer();
757
		buf.append("package test1;\n");
758
		buf.append("public class A {\n");
759
		buf.append("    public void foo(Runnable r) {\n");
760
		buf.append("    }\n");
761
		buf.append("    public void bar() {\n");
762
		buf.append("    	foo(new Runn)\n");
763
		buf.append("    	System.out.println();\n");
764
		buf.append("    }\n");
765
		buf.append("}\n");
766
		String contents= buf.toString();
767
768
		ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null);
769
770
		String str= "foo(new Runn";
771
772
		int offset= contents.indexOf(str) + str.length();
773
774
		CompletionProposalCollector collector= createCollector(cu, offset);
775
		collector.setReplacementLength(0);
776
		collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true);
777
778
		codeComplete(cu, offset, collector);
779
780
		IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
781
782
		assertNumberOf("proposals", proposals.length, 1);
783
784
		IDocument doc= new Document(contents);
785
786
		proposals[0].apply(doc);
787
788
		buf= new StringBuffer();
789
		buf.append("package test1;\n");
790
		buf.append("public class A {\n");
791
		buf.append("    public void foo(Runnable r) {\n");
792
		buf.append("    }\n");
793
		buf.append("    public void bar() {\n");
794
		buf.append("    	foo(new Runnable() {\n");
795
		buf.append("            \n");
796
		buf.append("            public void run() {\n");
797
		buf.append("                //TODO\n");
798
		buf.append("                \n");
799
		buf.append("            }\n");
800
		buf.append("        });\n");
801
		buf.append("    	System.out.println();\n");
802
		buf.append("    }\n");
803
		buf.append("}\n");
804
		assertEquals(buf.toString(), doc.get());
805
	}
806
807
	public void testAnonymousTypeCompletion13() throws Exception {
808
		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
809
	
810
		IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
811
		StringBuffer buf= new StringBuffer();
812
		buf.append("package test1;\n");
813
		buf.append("public class A {\n");
814
		buf.append("    private void foo() {\n");
815
		buf.append("        bar(new Runnable());\n");
816
		buf.append("    }\n");
817
		buf.append("    void bar(Runnable rs) {}\n");
818
		buf.append("}\n");
819
		String contents= buf.toString();
820
	
821
		ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null);
822
	
823
		String str= "bar(new Runnable(";
824
	
825
		int offset= contents.indexOf(str) + str.length();
826
		System.out.println(contents.charAt(offset));
827
	
828
		CompletionProposalCollector collector= createCollector(cu, offset);
829
		collector.setReplacementLength(0);
830
		collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true);
831
	
832
		codeComplete(cu, offset, collector);
833
	
834
		IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
835
	
836
		assertNumberOf("proposals", proposals.length, 1);
837
	
838
		IDocument doc= new Document(contents);
839
	
840
		proposals[0].apply(doc);
841
	
842
		buf= new StringBuffer();
843
		buf.append("package test1;\n");
844
		buf.append("public class A {\n");
845
		buf.append("    private void foo() {\n");
846
		buf.append("        bar(new Runnable() {\n");
847
		buf.append("            \n");
848
		buf.append("            public void run() {\n");
849
		buf.append("                //TODO\n");
850
		buf.append("                \n");
851
		buf.append("            }\n");
852
		buf.append("        });\n");
853
		buf.append("    }\n");
854
		buf.append("    void bar(Runnable rs) {}\n");
855
		buf.append("}\n");
856
		assertEquals(buf.toString(), doc.get());
857
	}
858
	
859
	public void testAnonymousTypeCompletion14() throws Exception {
860
		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
861
	
862
		IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
863
		StringBuffer buf= new StringBuffer();
864
		buf.append("package test1;\n");
865
		buf.append("public class A {\n");
866
		buf.append("    private void foo() {\n");
867
		buf.append("        bar(new Runnable[] {\n");
868
		buf.append("                new Runnable(\n");
869
		buf.append("        });\n");
870
		buf.append("    }\n");
871
		buf.append("\n");
872
		buf.append("    void bar(Runnable[] rs) {\n");
873
		buf.append("    }\n");
874
		buf.append("}\n");
875
		String contents= buf.toString();
876
	
877
		ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null);
878
	
879
		String str= "  new Runnable(";
880
	
881
		int offset= contents.indexOf(str) + str.length();
882
		System.out.println(contents.charAt(offset));
883
	
884
		CompletionProposalCollector collector= createCollector(cu, offset);
885
		collector.setReplacementLength(0);
886
		collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true);
887
	
888
		codeComplete(cu, offset, collector);
889
	
890
		IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
891
	
892
		assertNumberOf("proposals", proposals.length, 1);
893
	
894
		IDocument doc= new Document(contents);
895
	
896
		proposals[0].apply(doc);
897
	
898
		buf= new StringBuffer();
899
		buf.append("package test1;\n");
900
		buf.append("public class A {\n");
901
		buf.append("    private void foo() {\n");
902
		buf.append("        bar(new Runnable[] {\n");
903
		buf.append("                new Runnable() {\n");
904
		buf.append("                    \n");
905
		buf.append("                    public void run() {\n");
906
		buf.append("                        //TODO\n");
907
		buf.append("                        \n");
908
		buf.append("                    }\n");
909
		buf.append("                }\n");
910
		buf.append("        });\n");
911
		buf.append("    }\n");
912
		buf.append("\n");
913
		buf.append("    void bar(Runnable[] rs) {\n");
914
		buf.append("    }\n");
915
		buf.append("}\n");
916
		assertEquals(buf.toString(), doc.get());
917
	}
918
	
919
	public void testAnonymousTypeCompletion15() throws Exception {
920
		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
921
	
922
		IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
923
		StringBuffer buf= new StringBuffer();
924
		buf.append("package test1;\n");
925
		buf.append("\n");
926
		buf.append("public class A {\n");
927
		buf.append("    public void foo(Runnable r) {\n");
928
		buf.append("    }\n");
929
		buf.append("\n");
930
		buf.append("    public void bar() {\n");
931
		buf.append("        foo(new Runna\n");
932
		buf.append("                );\n");
933
		buf.append("    }\n");
934
		buf.append("}\n");
935
		String contents= buf.toString();
936
	
937
		ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null);
938
	
939
		String str= "foo(new Runna";
940
	
941
		int offset= contents.indexOf(str) + str.length();
942
		System.out.println(contents.charAt(offset));
943
	
944
		CompletionProposalCollector collector= createCollector(cu, offset);
945
		collector.setReplacementLength(0);
946
		collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true);
947
	
948
		codeComplete(cu, offset, collector);
949
	
950
		IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
951
	
952
		assertNumberOf("proposals", proposals.length, 1);
953
	
954
		IDocument doc= new Document(contents);
955
	
956
		proposals[0].apply(doc);
957
	
958
		buf= new StringBuffer();
959
		buf.append("package test1;\n");
960
		buf.append("\n");
961
		buf.append("public class A {\n");
962
		buf.append("    public void foo(Runnable r) {\n");
963
		buf.append("    }\n");
964
		buf.append("\n");
965
		buf.append("    public void bar() {\n");
966
		buf.append("        foo(new Runnable() {\n");
967
		buf.append("            \n");
968
		buf.append("            public void run() {\n");
969
		buf.append("                //TODO\n");
970
		buf.append("                \n");
971
		buf.append("            }\n");
972
		buf.append("        }\n");
973
		buf.append("                );\n");
974
		buf.append("    }\n");
975
		buf.append("}\n");
976
		assertEquals(buf.toString(), doc.get());
977
	}
978
	
979
	public void testAnonymousTypeCompletion16() throws Exception {
980
		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
981
	
982
		IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
983
		StringBuffer buf= new StringBuffer();
984
		buf.append("package test1;\n");
985
		buf.append("\n");
986
		buf.append("public class A {\n");
987
		buf.append("    public void foo(Runnable r) {\n");
988
		buf.append("    }\n");
989
		buf.append("\n");
990
		buf.append("    public void bar() {\n");
991
		buf.append("        foo(new Runna\n");
992
		buf.append("                )\n");
993
		buf.append("    }\n");
994
		buf.append("}\n");
995
		String contents= buf.toString();
996
	
997
		ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null);
998
	
999
		String str= "foo(new Runna";
1000
	
1001
		int offset= contents.indexOf(str) + str.length();
1002
		System.out.println(contents.charAt(offset));
1003
	
1004
		CompletionProposalCollector collector= createCollector(cu, offset);
1005
		collector.setReplacementLength(0);
1006
		collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true);
1007
	
1008
		codeComplete(cu, offset, collector);
1009
	
1010
		IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
1011
	
1012
		assertNumberOf("proposals", proposals.length, 1);
1013
	
1014
		IDocument doc= new Document(contents);
1015
	
1016
		proposals[0].apply(doc);
1017
	
1018
		buf= new StringBuffer();
1019
		buf.append("package test1;\n");
1020
		buf.append("\n");
1021
		buf.append("public class A {\n");
1022
		buf.append("    public void foo(Runnable r) {\n");
1023
		buf.append("    }\n");
1024
		buf.append("\n");
1025
		buf.append("    public void bar() {\n");
1026
		buf.append("        foo(new Runnable() {\n");
1027
		buf.append("            \n");
1028
		buf.append("            public void run() {\n");
1029
		buf.append("                //TODO\n");
1030
		buf.append("                \n");
1031
		buf.append("            }\n");
1032
		buf.append("        }\n");
1033
		buf.append("                );\n");
1034
		buf.append("    }\n");
1035
		buf.append("}\n");
1036
		assertEquals(buf.toString(), doc.get());
1037
	}
1038
	
1039
	public void testAnonymousTypeCompletion17() throws Exception {
1040
		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
1041
	
1042
		IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
1043
		StringBuffer buf= new StringBuffer();
1044
		buf.append("package test1;\n");
1045
		buf.append("\n");
1046
		buf.append("public class A {\n");
1047
		buf.append("    public void foo(Runnable r) {\n");
1048
		buf.append("    }\n");
1049
		buf.append("\n");
1050
		buf.append("    public void bar() {\n");
1051
		buf.append("        foo(new Runna\n");
1052
		buf.append("                ;\n");
1053
		buf.append("    }\n");
1054
		buf.append("}\n");
1055
		String contents= buf.toString();
1056
	
1057
		ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null);
1058
	
1059
		String str= "foo(new Runna";
1060
	
1061
		int offset= contents.indexOf(str) + str.length();
1062
		System.out.println(contents.charAt(offset));
1063
	
1064
		CompletionProposalCollector collector= createCollector(cu, offset);
1065
		collector.setReplacementLength(0);
1066
		collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true);
1067
	
1068
		codeComplete(cu, offset, collector);
1069
	
1070
		IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
1071
	
1072
		assertNumberOf("proposals", proposals.length, 1);
1073
	
1074
		IDocument doc= new Document(contents);
1075
	
1076
		proposals[0].apply(doc);
1077
	
1078
		buf= new StringBuffer();
1079
		buf.append("package test1;\n");
1080
		buf.append("\n");
1081
		buf.append("public class A {\n");
1082
		buf.append("    public void foo(Runnable r) {\n");
1083
		buf.append("    }\n");
1084
		buf.append("\n");
1085
		buf.append("    public void bar() {\n");
1086
		buf.append("        foo(new Runnable() {\n");
1087
		buf.append("            \n");
1088
		buf.append("            public void run() {\n");
1089
		buf.append("                //TODO\n");
1090
		buf.append("                \n");
1091
		buf.append("            }\n");
1092
		buf.append("        })\n");
1093
		buf.append("                ;\n");
1094
		buf.append("    }\n");
1095
		buf.append("}\n");
1096
		assertEquals(buf.toString(), doc.get());
1097
	}
1098
492
	public void testAnonymousTypeCompletionBug280801() throws Exception {
1099
	public void testAnonymousTypeCompletionBug280801() throws Exception {
493
		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
1100
		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
494
1101
Lines 627-633 Link Here
627
		buf.append("                //TODO\n");
1234
		buf.append("                //TODO\n");
628
		buf.append("                \n");
1235
		buf.append("                \n");
629
		buf.append("            }\n");
1236
		buf.append("            }\n");
630
		buf.append("        })\n");
1237
		buf.append("        });\n");
631
		buf.append("    }\n");
1238
		buf.append("    }\n");
632
		buf.append("}\n");
1239
		buf.append("}\n");
633
		assertEquals("", buf.toString(), doc.get());
1240
		assertEquals("", buf.toString(), doc.get());
(-)ui/org/eclipse/jdt/internal/ui/text/java/AnonymousTypeCompletionProposal.java (-16 / +95 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
 * Copyright (c) 2000, 2011 IBM Corporation and others.
2
 * Copyright (c) 2000, 2014 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 71-76 Link Here
71
import org.eclipse.jdt.internal.ui.dialogs.OverrideMethodDialog;
71
import org.eclipse.jdt.internal.ui.dialogs.OverrideMethodDialog;
72
import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
72
import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
73
import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
73
import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
74
import org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner;
75
import org.eclipse.jdt.internal.ui.text.Symbols;
74
76
75
77
76
public class AnonymousTypeCompletionProposal extends JavaTypeCompletionProposal implements ICompletionProposalExtension4 {
78
public class AnonymousTypeCompletionProposal extends JavaTypeCompletionProposal implements ICompletionProposalExtension4 {
Lines 82-88 Link Here
82
	private int fContextInformationPosition;
84
	private int fContextInformationPosition;
83
85
84
	private ImportRewrite fImportRewrite;
86
	private ImportRewrite fImportRewrite;
85
87
	
88
	private final String SEMICOLON= ";"; //$NON-NLS-1$
89
	private final String ESCAPE_CHAR= "\r"; //$NON-NLS-1$
86
90
87
	public AnonymousTypeCompletionProposal(IJavaProject jproject, ICompilationUnit cu, JavaContentAssistInvocationContext invocationContext, int start, int length, String constructorCompletion, StyledString displayName, String declarationSignature, IType superType, int relevance) {
91
	public AnonymousTypeCompletionProposal(IJavaProject jproject, ICompilationUnit cu, JavaContentAssistInvocationContext invocationContext, int start, int length, String constructorCompletion, StyledString displayName, String declarationSignature, IType superType, int relevance) {
88
		super(constructorCompletion, cu, start, length, null, displayName, relevance, null, invocationContext);
92
		super(constructorCompletion, cu, start, length, null, displayName, relevance, null, invocationContext);
Lines 371-377 Link Here
371
		if (newBody == null)
375
		if (newBody == null)
372
			return false;
376
			return false;
373
377
374
		CompletionProposal coreProposal= ((MemberProposalInfo)getProposalInfo()).fProposal;
378
		CompletionProposal coreProposal= ((MemberProposalInfo) getProposalInfo()).fProposal;
375
		boolean isAnonymousConstructorInvoc= coreProposal.getKind() == CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION;
379
		boolean isAnonymousConstructorInvoc= coreProposal.getKind() == CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION;
376
380
377
		boolean replacementStringEndsWithParentheses= isAnonymousConstructorInvoc || getReplacementString().endsWith(")"); //$NON-NLS-1$
381
		boolean replacementStringEndsWithParentheses= isAnonymousConstructorInvoc || getReplacementString().endsWith(")"); //$NON-NLS-1$
Lines 392-412 Link Here
392
		options.put(DefaultCodeFormatterConstants.FORMATTER_INDENT_EMPTY_LINES, DefaultCodeFormatterConstants.TRUE);
396
		options.put(DefaultCodeFormatterConstants.FORMATTER_INDENT_EMPTY_LINES, DefaultCodeFormatterConstants.TRUE);
393
		String replacementString= CodeFormatterUtil.format(CodeFormatter.K_EXPRESSION, buf.toString(), 0, lineDelim, options);
397
		String replacementString= CodeFormatterUtil.format(CodeFormatter.K_EXPRESSION, buf.toString(), 0, lineDelim, options);
394
398
395
		int lineEndOffset= lineInfo.getOffset() + lineInfo.getLength();
399
		JavaHeuristicScanner scanner= new JavaHeuristicScanner(document);
400
		IRegion region= scanner.findSurroundingBlock(lineInfo.getOffset());
401
		int surroundingBlockBound= region.getOffset() + region.getLength();
396
402
397
		int p= offset;
403
		int p= offset;
398
		char ch= document.getChar(p);
404
		char ch= document.getChar(p);
399
		while (p < lineEndOffset) {
405
		while (p < surroundingBlockBound) {
400
			if (ch == '(' || ch == ')' || ch == ';' || ch == ',')
406
			if (ch == '(' || ch == ')' || ch == ';' || ch == ',')
401
				break;
407
				break;
402
			ch= document.getChar(++p);
408
			ch= document.getChar(++p);
403
		}
409
		}
404
410
405
		if (ch != ';' && ch != ',' && ch != ')')
411
		String closingString= getMatchingClosingSymbols(document, offset, lineInfo.getOffset(), lineInfo.getLength());
412
		if (closingString.length() != 0 && !ESCAPE_CHAR.equals(closingString)) {
413
			if (ch != ';' && ch != ',' && ch != ')') {
414
				replacementString= replacementString + closingString + ';';
415
			} else {
416
				replacementString= replacementString + closingString;
417
			}
418
		}
419
		if (closingString.length() == 0 && ch != ';' && ch != ',' && ch != ')' && ch != '}')
406
			replacementString= replacementString + ';';
420
			replacementString= replacementString + ';';
407
421
408
		replacementString= Strings.changeIndent(replacementString, 0, project, CodeFormatterUtil.createIndentString(indent, project), lineDelim);
422
		replacementString= Strings.changeIndent(replacementString, 0, project, CodeFormatterUtil.createIndentString(indent, project), lineDelim);
409
		
423
410
		int beginIndex= replacementString.indexOf('(');
424
		int beginIndex= replacementString.indexOf('(');
411
		if (!isAnonymousConstructorInvoc)
425
		if (!isAnonymousConstructorInvoc)
412
			beginIndex++;
426
			beginIndex++;
Lines 417-434 Link Here
417
			// Keep existing code
431
			// Keep existing code
418
			int endPos= pos;
432
			int endPos= pos;
419
			ch= document.getChar(endPos);
433
			ch= document.getChar(endPos);
434
			int lineEndOffset= lineInfo.getOffset() + lineInfo.getLength();
420
			while (endPos < lineEndOffset && ch != '(' && ch != ')' && ch != ';' && ch != ',' && !Character.isWhitespace(ch))
435
			while (endPos < lineEndOffset && ch != '(' && ch != ')' && ch != ';' && ch != ',' && !Character.isWhitespace(ch))
421
				ch= document.getChar(++endPos);
436
				ch= document.getChar(++endPos);
422
437
423
			int keepLength= endPos - pos;
438
		}
424
			if (keepLength > 0) {
439
		setCursorPosition(replacementString.length());
425
				String keepStr= document.get(pos, keepLength);
426
				replacementString= replacementString + keepStr;
427
				setCursorPosition(replacementString.length() - keepLength);
428
			}
429
		} else
430
			setCursorPosition(replacementString.length());
431
		
432
		setReplacementString(replacementString);
440
		setReplacementString(replacementString);
433
441
434
		if (pos < document.getLength() && document.getChar(pos) == ')') {
442
		if (pos < document.getLength() && document.getChar(pos) == ')') {
Lines 441-446 Link Here
441
		return false;
449
		return false;
442
	}
450
	}
443
451
452
	private String getMatchingClosingSymbols(IDocument doc, int currentOffset, int lineOffset, int bound) throws BadLocationException {
453
		String lineUnderModification= doc.get(lineOffset, bound);
454
		char[] charArray= lineUnderModification.toCharArray();
455
		String returnChar= ""; //$NON-NLS-1$
456
		JavaHeuristicScanner scanner= new JavaHeuristicScanner(doc);
457
		IRegion region= scanner.findSurroundingBlock(lineOffset);
458
		int surroundingBlockBound= region.getOffset() + region.getLength();
459
460
		for (int i= 0; i < charArray.length; i++) {
461
			char c= charArray[i];
462
			if (c == '(' || c == '{') {
463
				char closingChar= getClosingChar(c);
464
				if (c == '(' && lineOffset + i + 1 == currentOffset)
465
					continue;
466
				int scanForward= scanner.findClosingPeer(lineOffset + i + 1, surroundingBlockBound, c, closingChar);
467
				if (scanForward == -1) {
468
					returnChar= closingChar + returnChar;
469
				}
470
			}
471
		}
472
473
		int nextToken1= scanner.nextToken(currentOffset, surroundingBlockBound);
474
		if (nextToken1 != -1) {
475
			int position= scanner.getPosition();
476
			// make sure we do not set the bound more than the document length
477
			if (surroundingBlockBound + 1 < doc.getLength())
478
				surroundingBlockBound++;
479
			int nextToken2= scanner.nextToken(position, surroundingBlockBound);
480
			if (nextToken2 != -1) {
481
				//  e.g. foo(new Run|, null) or new Run|; or Runnable run= new Runnable(|); or Runnable jobs[] = {new Run|};
482
				if (Symbols.TokenCOMMA == nextToken1 || Symbols.TokenSEMICOLON == nextToken1 ||
483
						((Symbols.TokenRBRACE == nextToken1 || Symbols.TokenRPAREN == nextToken1) && Symbols.TokenSEMICOLON == nextToken2) ||
484
						(Symbols.TokenRBRACE == nextToken1 && Symbols.TokenRPAREN == nextToken2)) {
485
					// No need to append semicolon as the code already has a ';' or ','
486
					return returnChar.length() != 0 ? returnChar : ESCAPE_CHAR;
487
				}
488
489
				if (Symbols.TokenRBRACE == nextToken1 && Symbols.TokenRPAREN == nextToken2) {
490
					return ESCAPE_CHAR;
491
				}
492
493
				// e.g. Runnable jobs[] = {new Runn}
494
				// We have to append semicolon, but not as part of the replacement string.
495
				if (Symbols.TokenRBRACE == nextToken1) {
496
					doc.replace(position, 0, SEMICOLON);
497
					return ESCAPE_CHAR;
498
				}
499
			}
500
501
			// We have to append semicolon, but not as part of the replacement string.
502
			if (Symbols.TokenRPAREN == nextToken1 && !lineUnderModification.trim().endsWith(SEMICOLON)) {
503
				doc.replace(position, 0, SEMICOLON);
504
				return ESCAPE_CHAR;
505
			}
506
		}
507
		return returnChar;
508
	}
509
510
	private char getClosingChar(char c) {
511
		switch (c) {
512
			case '(':
513
				return ')';
514
515
			case '{':
516
				return '}';
517
518
			default:
519
				return '\0';
520
		}
521
	}
522
444
	/*
523
	/*
445
	 * @see ICompletionProposalExtension#getContextInformationPosition()
524
	 * @see ICompletionProposalExtension#getContextInformationPosition()
446
	 * @since 3.4
525
	 * @since 3.4

Return to bug 333428