IDEA-136189 "Code completion" proposes to extend the class of the same class
[idea/community.git] / java / java-tests / testSrc / com / intellij / codeInsight / completion / NormalCompletionTest.groovy
1 /*
2  * Copyright 2000-2014 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.codeInsight.completion
17 import com.intellij.JavaTestUtil
18 import com.intellij.codeInsight.CodeInsightSettings
19 import com.intellij.codeInsight.lookup.Lookup
20 import com.intellij.codeInsight.lookup.LookupElement
21 import com.intellij.codeInsight.lookup.LookupElementPresentation
22 import com.intellij.codeInsight.lookup.LookupManager
23 import com.intellij.codeInsight.lookup.impl.LookupImpl
24 import com.intellij.lang.java.JavaLanguage
25 import com.intellij.openapi.actionSystem.IdeActions
26 import com.intellij.psi.PsiDocumentManager
27 import com.intellij.psi.PsiMethod
28 import com.intellij.psi.codeStyle.CodeStyleSettingsManager
29 import com.intellij.psi.codeStyle.CommonCodeStyleSettings
30 import com.siyeh.ig.style.UnqualifiedFieldAccessInspection
31
32 public class NormalCompletionTest extends LightFixtureCompletionTestCase {
33   @Override
34   protected String getBasePath() {
35     return JavaTestUtil.getRelativeJavaTestDataPath() + "/codeInsight/completion/normal/";
36   }
37
38   public void testSimple() throws Exception {
39     configureByFile("Simple.java");
40     assertStringItems("_local1", "_local2", "_field", "_method", "_baseField", "_baseMethod");
41   }
42
43   public void testCastToPrimitive1() throws Exception {
44     configureByFile("CastToPrimitive1.java");
45
46     for (final LookupElement item : myItems) {
47       if (item.getLookupString().equals("int")) return;
48     }
49     assertTrue(false);
50   }
51
52   public void testCastToPrimitive2() throws Exception {
53     configureByFile("CastToPrimitive2.java");
54
55     for (final LookupElement item : myItems) {
56       if (item.getLookupString().equals("int")) return;
57     }
58     assertTrue(false);
59   }
60
61   public void testCastToPrimitive3() throws Exception {
62     configureByFile("CastToPrimitive3.java");
63
64     for (final LookupElement item : myItems) {
65       if (item.getLookupString().equals("int")) return;
66     }
67     assertTrue(false);
68   }
69
70   public void testWriteInInvokeLater() throws Exception {
71     configureByFile("WriteInInvokeLater.java");
72   }
73
74   public void testQualifiedNew1() throws Exception {
75     configure()
76     assertStringItems "IInner", "Inner"
77   }
78
79   public void testQualifiedNew2() throws Exception {
80     configure()
81     assertStringItems "AnInner", "Inner"
82   }
83
84   public void testKeywordsInName() throws Exception {
85     doTest 'a\n'
86   }
87
88   public void testSimpleVariable() throws Exception { doTest('\n') }
89
90   public void testTypeParameterItemPresentation() {
91     configure()
92     LookupElementPresentation presentation = renderElement(myItems[0])
93     assert "Param" == presentation.itemText
94     assert presentation.tailText == " (type parameter of Foo)"
95     assert !presentation.typeText
96     assert !presentation.icon
97     assert !presentation.itemTextBold
98
99     presentation = renderElement(myItems[1])
100     assert "Param2" == presentation.itemText
101     assert presentation.tailText == " (type parameter of goo)"
102   }
103   
104   public void testDisplayDefaultValueInAnnotationMethods() {
105     configure()
106     LookupElementPresentation presentation = renderElement(myItems[0])
107     assert "myBool" == presentation.itemText
108     assert presentation.tailText == " default false"
109     assert presentation.tailFragments[0].grayed
110     assert !presentation.typeText
111     assert !presentation.itemTextBold
112
113     presentation = renderElement(myItems[1])
114     assert "myString" == presentation.itemText
115     assert presentation.tailText == ' default "unknown"'
116   }
117
118   public void testMethodItemPresentation() {
119     configure()
120     LookupElementPresentation presentation = renderElement(myItems[0])
121     assert "equals" == presentation.itemText
122     assert "(Object anObject)" == presentation.tailText
123     assert "boolean" == presentation.typeText
124
125     assert !presentation.tailGrayed
126     assert presentation.itemTextBold
127   }
128
129   private LookupElementPresentation renderElement(LookupElement element) {
130     return LookupElementPresentation.renderElement(element)
131   }
132
133   public void testFieldItemPresentationGenerics() {
134     configure()
135     LookupElementPresentation presentation = renderElement(myItems[0])
136     assert "target" == presentation.itemText
137     assert !presentation.tailText
138     assert "String" == presentation.typeText
139   }
140
141   public void testMethodItemPresentationGenerics() {
142     configure()
143     LookupElementPresentation presentation = renderElement(myItems[0])
144     assert "add" == presentation.itemText
145     assert "(int index, String element)" == presentation.tailText
146     assert "void" == presentation.typeText
147
148     presentation = renderElement(myItems[1])
149     assert "(String o)" == presentation.tailText
150     assert "boolean" == presentation.typeText
151
152     assert !presentation.tailGrayed
153     assert presentation.itemTextBold
154   }
155
156   public void testPreferLongerNamesOption() throws Exception {
157     configureByFile("PreferLongerNamesOption.java");
158
159     assertEquals(3, myItems.length);
160     assertEquals("abcdEfghIjk", myItems[0].getLookupString());
161     assertEquals("efghIjk", myItems[1].getLookupString());
162     assertEquals("ijk", myItems[2].getLookupString());
163
164     LookupManager.getInstance(getProject()).hideActiveLookup();
165
166     CodeStyleSettingsManager.getSettings(getProject()).PREFER_LONGER_NAMES = false;
167     try{
168       configureByFile("PreferLongerNamesOption.java");
169
170       assertEquals(3, myItems.length);
171       assertEquals("ijk", myItems[0].getLookupString());
172       assertEquals("efghIjk", myItems[1].getLookupString());
173       assertEquals("abcdEfghIjk", myItems[2].getLookupString());
174     }
175     finally{
176       CodeStyleSettingsManager.getSettings(getProject()).PREFER_LONGER_NAMES = true;
177     }
178   }
179
180   public void testSCR7208() throws Exception {
181     configureByFile("SCR7208.java");
182   }
183
184   public void testProtectedFromSuper() throws Exception {
185     configureByFile("ProtectedFromSuper.java");
186     Arrays.sort(myItems);
187     assertTrue("Exception not found", Arrays.binarySearch(myItems, "xxx") > 0);
188   }
189
190   public void testBeforeInitialization() throws Exception {
191     configureByFile("BeforeInitialization.java");
192     assertNotNull(myItems);
193     assertTrue(myItems.length > 0);
194   }
195
196   public void testProtectedFromSuper2() throws Exception {
197
198     configureByFile("ProtectedFromSuper.java");
199     Arrays.sort(myItems);
200     assertTrue("Exception not found", Arrays.binarySearch(myItems, "xxx") > 0);
201   }
202
203   public void testClassLiteralInArrayAnnoInitializer() throws Throwable { doTest(); }
204   public void testClassLiteralInArrayAnnoInitializer2() throws Throwable { doTest(); }
205
206   public void testReferenceParameters() throws Exception {
207     configureByFile("ReferenceParameters.java");
208     assertNotNull(myItems);
209     myFixture.assertPreferredCompletionItems 0, 'AAAA', 'AAAB'
210   }
211
212   @Override
213   protected void tearDown() throws Exception {
214     CodeInsightSettings.instance.AUTOCOMPLETE_ON_CODE_COMPLETION = true
215     CodeInsightSettings.instance.COMPLETION_CASE_SENSITIVE = CodeInsightSettings.FIRST_LETTER
216     super.tearDown()
217   }
218
219   public void testConstructorName1() throws Exception{
220     CodeInsightSettings.getInstance().AUTOCOMPLETE_ON_CODE_COMPLETION = false
221     configure();
222     assert 'ABCDE' in myFixture.lookupElementStrings
223   }
224
225   public void testConstructorName2() throws Exception{
226     CodeInsightSettings.getInstance().AUTOCOMPLETE_ON_CODE_COMPLETION = false
227     configure();
228     assert 'ABCDE' in myFixture.lookupElementStrings
229   }
230
231   public void testObjectsInThrowsBlock() throws Exception {
232     configureByFile("InThrowsCompletion.java");
233     assert "C" == myFixture.lookupElementStrings[0]
234     assert "B" in myFixture.lookupElementStrings
235   }
236
237   public void testAnnoParameterValue() throws Exception {
238     configure()
239     def strings = myFixture.lookupElementStrings
240     assert 'AssertionError' in strings
241     assert !('enum' in strings)
242     assert !('final' in strings)
243     assert !('equals' in strings)
244     assert !('new' in strings)
245     assert !('null' in strings)
246     assert !('public' in strings)
247     assert !('super' in strings)
248     assert !('null' in strings)
249   }
250
251   public void testAfterInstanceof() throws Exception {
252     configureByFile("AfterInstanceof.java");
253     assert "A" in myFixture.lookupElementStrings
254   }
255
256   public void testAfterCast1() throws Exception {
257     configureByFile("AfterCast1.java");
258
259     assertNotNull(myItems);
260     assertEquals(2, myItems.length);
261   }
262
263   public void testAfterCast2() throws Exception {
264     configureByFile("AfterCast2.java");
265     checkResultByFile("AfterCast2-result.java");
266   }
267
268   public void testMethodCallForTwoLevelSelection() throws Exception {
269     configureByFile("MethodLookup.java");
270     assertEquals(2, myItems.length);
271   }
272
273   public void testMethodCallBeforeAnotherStatementWithParen() throws Exception {
274     configureByFile("MethodLookup2.java");
275     checkResultByFile("MethodLookup2_After.java");
276   }
277
278   public void testMethodCallBeforeAnotherStatementWithParen2() throws Exception {
279     codeStyleSettings.METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE = true;
280     configureByFile("MethodLookup2.java");
281     checkResultByFile("MethodLookup2_After2.java");
282   }
283
284   public void testSwitchEnumLabel() throws Exception {
285     configureByFile("SwitchEnumLabel.java");
286     assertEquals(3, myItems.length);
287   }
288
289   public void testMethodInAnnotation() throws Exception {
290     configureByFile("Annotation.java");
291     checkResultByFile("Annotation_after.java");
292   }
293
294   public void testMethodInAnnotation2() throws Exception {
295     configureByFile("Annotation2.java");
296     checkResultByFile("Annotation2_after.java");
297   }
298
299   public void testMethodInAnnotation3() throws Exception {
300     configureByFile("Annotation3.java");
301     checkResultByFile("Annotation3_after.java");
302   }
303
304   public void testMethodInAnnotation5() throws Exception {
305     configureByFile("Annotation5.java");
306     checkResultByFile("Annotation5_after.java");
307   }
308
309   public void testMethodInAnnotation7() throws Exception {
310     configureByFile("Annotation7.java");
311     selectItem(myItems[0]);
312     checkResultByFile("Annotation7_after.java");
313   }
314
315   public void testEnumInAnnotation() throws Exception {
316     configureByFile("Annotation4.java");
317     checkResultByFile("Annotation4_after.java");
318   }
319
320   public void testSecondAttribute() throws Exception {
321     configureByFile("Annotation6.java");
322     checkResultByFile("Annotation6_after.java");
323   }
324
325   public void testIDEADEV6408() throws Exception {
326     configureByFile("IDEADEV6408.java");
327     assertFirstStringItems "boolean", "byte"
328   }
329
330   public void testMethodWithLeftParTailType() throws Exception {
331     configureByFile("MethodWithLeftParTailType.java");
332     type('(');
333     checkResultByFile("MethodWithLeftParTailType_after.java");
334
335     configureByFile("MethodWithLeftParTailType2.java");
336     type('(');
337     checkResultByFile("MethodWithLeftParTailType2_after.java");
338   }
339
340   public void testSuperErasure() throws Exception {
341     configureByFile("SuperErasure.java");
342     checkResultByFile("SuperErasure_after.java");
343   }
344
345   public void testMethodWithLeftParTailTypeNoPairBrace() throws Exception {
346     final boolean old = CodeInsightSettings.getInstance().AUTOINSERT_PAIR_BRACKET;
347     CodeInsightSettings.getInstance().AUTOINSERT_PAIR_BRACKET = false;
348
349     try {
350       configureByFile(getTestName(false) + ".java");
351       type('(');
352       checkResult()
353     }
354     finally {
355       CodeInsightSettings.getInstance().AUTOINSERT_PAIR_BRACKET = old;
356     }
357   }
358
359   public void testMethodWithLeftParTailTypeNoPairBrace2() throws Exception {
360     final boolean old = CodeInsightSettings.getInstance().AUTOINSERT_PAIR_BRACKET;
361     CodeInsightSettings.getInstance().AUTOINSERT_PAIR_BRACKET = false;
362
363     try {
364       //no tail type should work the normal way
365       configureByFile("MethodWithLeftParTailTypeNoPairBrace.java");
366       selectItem(myItems[0]);
367       checkResultByFile("MethodWithLeftParTailTypeNoPairBrace_after2.java");
368     }
369     finally {
370       CodeInsightSettings.getInstance().AUTOINSERT_PAIR_BRACKET = old;
371     }
372   }
373
374   public void testMethodNoPairBrace() throws Exception {
375     final boolean old = CodeInsightSettings.getInstance().AUTOINSERT_PAIR_BRACKET;
376     CodeInsightSettings.getInstance().AUTOINSERT_PAIR_BRACKET = false;
377
378     try {
379       doTest '\n'
380     }
381     finally {
382       CodeInsightSettings.getInstance().AUTOINSERT_PAIR_BRACKET = old;
383     }
384   }
385
386   public void testExcessSpaceInTypeCast() throws Throwable {
387    configure()
388    selectItem(myItems[0]);
389    checkResult()
390   }
391
392   public void testFieldType() throws Throwable { doTest('\n'); }
393
394   public void testPackageInAnnoParam() throws Throwable {
395     doTest();
396   }
397
398   public void testAnonymousTypeParameter() throws Throwable { doTest(); }
399
400   public void testClassLiteralInAnnoParam() throws Throwable {
401     doTest();
402   }
403
404   public void testNoForceBraces() {
405     codeStyleSettings.IF_BRACE_FORCE = CommonCodeStyleSettings.FORCE_BRACES_ALWAYS
406     doTest('\n')
407   }
408
409   public void testExcludeStringBuffer() throws Throwable {
410     CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = [StringBuffer.name] as String[]
411     try {
412       doAntiTest()
413     }
414     finally {
415       CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = new String[0]
416     }
417   }
418
419   public void testExcludeInstanceInnerClasses() throws Throwable {
420     CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = ['foo']
421     myFixture.addClass 'package foo; public class Outer { public class Inner {} }'
422     myFixture.addClass 'package bar; public class Inner {}'
423     try {
424       configure()
425       assert 'bar.Inner' == ((JavaPsiClassReferenceElement)myFixture.lookupElements[0]).qualifiedName
426       assert myFixture.lookupElementStrings == ['Inner']
427     }
428     finally {
429       CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = new String[0]
430     }
431   }
432
433   public void testExcludedInstanceInnerClassCreation() throws Throwable {
434     CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = ['foo']
435     myFixture.addClass 'package foo; public class Outer { public class Inner {} }'
436     myFixture.addClass 'package bar; public class Inner {}'
437     try {
438       configure()
439       assert 'foo.Outer.Inner' == ((JavaPsiClassReferenceElement)myFixture.lookupElements[0]).qualifiedName
440       assert myFixture.lookupElementStrings == ['Inner']
441     }
442     finally {
443       CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = new String[0]
444     }
445   }
446
447   public void testExcludedInstanceInnerClassQualifiedReference() throws Throwable {
448     CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = ['foo']
449     myFixture.addClass 'package foo; public class Outer { public class Inner {} }'
450     myFixture.addClass 'package bar; public class Inner {}'
451     try {
452       configure()
453       assert 'foo.Outer.Inner' == ((JavaPsiClassReferenceElement)myFixture.lookupElements[0]).qualifiedName
454       assert myFixture.lookupElementStrings == ['Inner']
455     }
456     finally {
457       CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = new String[0]
458     }
459   }
460
461   public void testAtUnderClass() throws Throwable {
462     doTest();
463   }
464
465   public void testLocalClassName() throws Throwable { doTest(); }
466   public void testAssigningFieldForTheFirstTime() throws Throwable { doTest(); }
467
468   public void testClassTypeParameters() throws Throwable {
469     configure()
470     assert 'K' in myFixture.lookupElementStrings
471   }
472
473   public void testClassTypeParametersGenericBounds() throws Throwable {
474     configure()
475     assert 'K' in myFixture.lookupElementStrings
476   }
477
478   public void testLocalClassTwice() throws Throwable {
479     configure()
480     assertOrderedEquals myFixture.lookupElementStrings, 'Zoooz', 'Zooooo'
481   }
482
483   public void testLocalTopLevelConflict() throws Throwable {
484     configure()
485     assertOrderedEquals myFixture.lookupElementStrings, 'Zoooz', 'Zooooo'
486   }
487
488   public void testFinalBeforeMethodCall() throws Throwable {
489     configure()
490     assertStringItems 'final', 'finalize'
491   }
492   public void testPrivateInAnonymous() throws Throwable { doTest() }
493
494   public void testMethodParenthesesSpaces() throws Throwable {
495     codeStyleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES = true
496     codeStyleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = true
497     doTest();
498   }
499
500   public void testMethodParenthesesSpacesArgs() throws Throwable {
501     codeStyleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES = true
502     codeStyleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = true
503     doTest();
504   }
505
506   public void testAtUnderClassNoModifiers() throws Throwable {
507     doTest();
508   }
509
510   public void testBreakInIfCondition() throws Throwable { doTest(); }
511   public void testAccessStaticViaInstance() throws Throwable { doTest(); }
512
513   public void testAccessStaticViaInstanceSecond() throws Throwable {
514     configure()
515     myFixture.complete(CompletionType.BASIC, 2)
516     checkResult()
517   }
518
519   public void testAccessInstanceFromStaticSecond() throws Throwable {
520     configure()
521     myFixture.complete(CompletionType.BASIC, 2)
522     checkResult()
523   }
524
525   public void testContinueLabel() throws Throwable { doTest(); }
526
527   public void testAnonymousProcess() {
528     myFixture.addClass 'package java.lang; public class Process {}'
529     myFixture.addClass '''
530 import java.util.*;
531 public class Process {}
532 interface Pred <A> { boolean predicate(A elem); }
533 public class ListUtils {
534     public static <A> List<A> filter(List<A> list, Pred<A> pred) {}
535 }
536 '''
537     configure()
538     type '\n'
539     checkResult()
540   }
541
542   public void testNoThisInComment() throws Throwable { doAntiTest() }
543   public void testIncNull() throws Throwable {
544     configure()
545     checkResultByFile(getTestName(false) + ".java")
546     assert !('null' in myFixture.lookupElementStrings)
547   }
548
549   public void testLastExpressionInFor() throws Throwable { doTest(); }
550
551   public void testOnlyKeywordsInsideSwitch() throws Throwable {
552     configureByFile(getTestName(false) + ".java");
553     assertStringItems("case", "default");
554   }
555
556   public void testBooleanLiterals() throws Throwable {
557     doTest('\n');
558   }
559
560   public void testDoubleBooleanInParameter() throws Throwable {
561     configure()
562     assertFirstStringItems("boolean", "byte")
563   }
564
565   public void testDoubleConstant() throws Throwable {
566     configure()
567     assertStringItems("XFOO")
568   }
569
570   public void testNotOnlyKeywordsInsideSwitch() throws Throwable {
571     doTest();
572   }
573
574   public void testChainedCallOnNextLine() throws Throwable {
575     configureByFile(getTestName(false) + ".java");
576     selectItem(myItems[0]);
577     checkResult()
578   }
579
580   public void testFinishWithDot() throws Throwable {
581     configureByFile(getTestName(false) + ".java");
582     type('.');
583     checkResult()
584   }
585
586   public void testEnclosingThis() throws Throwable { doTest(); }
587
588   public void testSeamlessConstant() throws Throwable {
589     configureByFile(getTestName(false) + ".java");
590     selectItem(myItems[0]);
591     checkResult()
592   }
593
594   public void testDefaultAnnoParam() throws Throwable { doTest(); }
595
596   public void testSpaceAfterLookupString() throws Throwable {
597     configureByFile(getTestName(false) + ".java");
598     type(' ');
599     assertNull(getLookup());
600     checkResult()
601   }
602
603   public void testNoSpaceInParensWithoutParams() throws Throwable {
604     codeStyleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = true;
605     try {
606       doTest();
607     }
608     finally {
609       codeStyleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = false;
610     }
611   }
612   
613   public void testTwoSpacesInParensWithParams() throws Throwable {
614     codeStyleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = true;
615     doTest();
616   }
617
618   public void testQualifierAsPackage() throws Throwable {
619     configureByFile(getTestName(false) + ".java");
620     selectItem(myItems[0]);
621     checkResult()
622   }
623
624   public void testQualifierAsPackage2() throws Throwable {
625     doTest();
626   }
627   
628   public void testQualifierAsPackage3() throws Throwable {
629     doTest();
630   }
631
632   public void testPreselectEditorSelection() {
633     configure()
634     assert lookup.currentItem != myFixture.lookupElements[0]
635     assert 'finalize' == lookup.currentItem.lookupString
636   }
637
638   public void testNoMethodsInNonStaticImports() {
639     configure()
640     assertStringItems("*")
641   }
642
643   public void testMembersInStaticImports() { doTest() }
644   
645   public void testPackageNamedVariableBeforeAssignment() throws Throwable {
646     doTest();
647   }
648
649   public void testInnerEnumConstant() throws Throwable { doTest('\n'); }
650
651   public void testMethodReturnType() throws Throwable {
652     doTest();
653   }
654
655   public void testMethodReturnTypeNoSpace() throws Throwable {
656     configureByFile(getTestName(false) + ".java");
657     selectItem(myItems[0]);
658     checkResult()
659   }
660
661   public void testEnumWithoutConstants() throws Throwable {
662     doTest();
663   }
664
665   public void testDoWhileMethodCall() throws Throwable {
666     doTest();
667   }
668
669   public void testSecondTypeParameterExtends() throws Throwable {
670     doTest();
671   }
672
673   public void testGetterWithExistingNonEmptyParameterList() throws Throwable {
674     doTest();
675   }
676
677   public void testNothingAfterNumericLiteral() throws Throwable { doAntiTest(); }
678   public void testNothingAfterTypeParameterQualifier() { doAntiTest(); }
679
680   public void testSpacesAroundEq() throws Throwable { doTest('='); }
681
682   public void _testClassBeforeCast() throws Throwable { doTest '\n' }
683
684   public void testNoAllClassesOnQualifiedReference() throws Throwable {
685     doAntiTest()
686   }
687
688   public void testFinishClassNameWithDot() throws Throwable {
689     doTest('.')
690   }
691
692   public void testFinishClassNameWithLParen() throws Throwable {
693     doTest('(')
694   }
695
696   public void testSelectNoParameterSignature() throws Throwable {
697     configureByFile(getTestName(false) + ".java");
698     final int parametersCount = ((PsiMethod)getLookup().getCurrentItem().getObject()).getParameterList().getParametersCount();
699     assertEquals(0, parametersCount);
700     type '\n'
701     checkResult()
702   }
703
704   public void testCompletionInsideClassLiteral() throws Throwable {
705     configureByFile(getTestName(false) + ".java");
706     type('\n')
707     checkResult()
708   }
709
710   public void testFieldNegation() throws Throwable { doTest('!');}
711   public void testDefaultInSwitch() throws Throwable { doTest()}
712   public void testBreakInSwitch() throws Throwable { doTest() }
713
714   public void testSuperInConstructor() throws Throwable {
715     doTest();
716   }
717
718   public void testSuperInConstructorWithParams() throws Throwable {
719     doTest();
720   }
721
722   public void testSuperInMethod() throws Throwable {
723     doTest();
724   }
725
726   public void testSecondMethodParameterName() throws Throwable {
727     doTest();
728   }
729
730   public void testAnnotationAsUsualObject() throws Throwable {
731     doTest();
732   }
733
734   public void testAnnotationAsUsualObjectFromJavadoc() throws Throwable {
735     doTest();
736   }
737
738   public void testAnnotationAsUsualObjectInsideClass() throws Throwable {
739     doTest();
740   }
741
742   public void testAnnotationOnNothingParens() throws Throwable {
743     doTest();
744   }
745
746   public void testMultiResolveQualifier() throws Throwable {
747     doTest();
748   }
749
750   public void testSecondMethodParameter() throws Throwable { doTest(); }
751   public void testReturnInCase() throws Throwable { doTest(); }
752   public void testUnboxedConstantsInCase() throws Throwable { doTest(); }
753
754   public void testAnnotationWithoutValueMethod() throws Throwable {
755     configureByFile(getTestName(false) + ".java");
756     assertStringItems("bar", "foo");
757   }
758
759   public void testAddExplicitValueInAnnotation() throws Throwable {
760     configureByTestName()
761     assertStringItems("bar", "goo")
762     selectItem(myItems[0])
763     checkResult()
764   }
765
766   public void testUnnecessaryMethodMerging() throws Throwable {
767     configureByFile(getTestName(false) + ".java");
768     assertStringItems("fofoo", "fofoo");
769   }
770
771   public void testMethodMergingMinimalTail() { doTest() }
772
773   public void testAnnotationQualifiedName() throws Throwable {
774     doTest();
775   }
776
777   public void testClassNameGenerics() throws Throwable {
778     doTest('\n')
779   }
780
781   public void testClassNameAnonymous() throws Throwable {
782     doTest('\n')
783   }
784
785   public void testClassNameWithInner() throws Throwable {
786     configure()
787     assertStringItems 'Zzoo', 'Zzoo.Impl'
788     type '\n'
789     checkResult()
790   }
791   public void testClassNameWithInner2() throws Throwable { doTest('\n') }
792
793   public void testClassNameWithInstanceInner() throws Throwable { doTest('\n') }
794
795   public void testDoubleFalse() throws Throwable {
796     configureByFile(getTestName(false) + ".java");
797     assertFirstStringItems("fefefef", "false", "float", "finalize");
798   }
799
800   public void testSameNamedVariableInNestedClasses() throws Throwable {
801     doTest();
802   }
803
804   public void testHonorUnderscoreInPrefix() throws Throwable {
805     doTest();
806   }
807
808   public void testNoSemicolonAfterExistingParenthesesEspeciallyIfItsACast() throws Throwable { doTest(); }
809   public void testReturningTypeVariable() throws Throwable { doTest(); }
810   public void testReturningTypeVariable2() throws Throwable { doTest(); }
811   public void testReturningTypeVariable3() throws Throwable { doTest(); }
812   public void testImportInGenericType() throws Throwable {
813     configure()
814     myFixture.complete(CompletionType.BASIC, 2)
815     myFixture.type('\n')
816     checkResult();
817   }
818
819   public void testCaseTailType() throws Throwable { doTest(); }
820
821   def doPrimitiveTypeTest() {
822     configure()
823     checkResultByFile(getTestName(false) + ".java");
824     assertTrue 'boolean' in myFixture.lookupElementStrings
825   }
826
827   private def configure() {
828     configureByTestName()
829   }
830
831   public void testFinalInForLoop() throws Throwable {
832     configure()
833     assertStringItems 'final'
834   }
835
836   public void testFinalInForLoop2() throws Throwable {
837     configure()
838     myFixture.assertPreferredCompletionItems 0, 'finalize', 'final'
839   }
840
841   public void testOnlyClassesInExtends() throws Throwable {
842     configure()
843     assertStringItems 'Inner'
844   }
845
846   public void testNoThisClassInExtends() throws Throwable {
847     configure()
848     assertStringItems 'Fooxxxx2'
849   }
850
851   public void testPrimitiveTypesInForLoop() throws Throwable { doPrimitiveTypeTest() }
852   public void testPrimitiveTypesInForLoop2() throws Throwable { doPrimitiveTypeTest() }
853   public void testPrimitiveTypesInForLoop3() throws Throwable { doPrimitiveTypeTest() }
854   public void testPrimitiveTypesInForLoop4() throws Throwable { doPrimitiveTypeTest() }
855   public void testPrimitiveTypesInForLoop5() throws Throwable { doPrimitiveTypeTest() }
856   public void testPrimitiveTypesInForLoop6() throws Throwable { doPrimitiveTypeTest() }
857
858   public void testPrimitiveTypesInForLoopSpace() throws Throwable {
859     configure()
860     myFixture.type ' '
861     checkResultByFile(getTestName(false) + "_after.java")
862   }
863
864   public void testSuggestInaccessibleOnSecondInvocation() throws Throwable {
865     configure()
866     assertStringItems("_bar", "_goo");
867     complete();
868     assertStringItems("_bar", "_goo", "_foo");
869     getLookup().setCurrentItem(getLookup().getItems().get(2));
870     selectItem(lookup.items[2], Lookup.NORMAL_SELECT_CHAR)
871     checkResult()
872   }
873
874   public void testNoCommonPrefixInsideIdentifier() throws Throwable {
875     final String path = getTestName(false) + ".java";
876     configureByFile(path);
877     checkResultByFile(path);
878     assertStringItems("fai1", "fai2");
879   }
880
881   public void testProtectedInaccessibleOnSecondInvocation() throws Throwable {
882     myFixture.configureByFile(getTestName(false) + ".java");
883     myFixture.complete(CompletionType.BASIC, 2);
884     checkResult()
885   }
886
887   public void testPropertyReferencePrefix() throws Throwable {
888     myFixture.addFileToProject("test.properties", "foo.bar=Foo! Bar!").getVirtualFile();
889     doAntiTest()
890   }
891
892   private void doTest() throws Exception {
893     configure()
894     checkResult();
895   }
896
897   private void doTest(String finishChar) throws Exception {
898     configure()
899     type finishChar
900     checkResult();
901   }
902
903   public void testSecondAnonymousClassParameter() throws Throwable { doTest('\n'); }
904
905   public void testSpaceAfterReturn() throws Throwable {
906     configure()
907     type '\n'
908     checkResult()
909   }
910
911   private def checkResult() {
912     checkResultByFile(getTestName(false) + "_after.java")
913   }
914
915   public void testIntersectionTypeMembers() throws Throwable {
916     configure()
917     assertStringItems "fooa", "foob"
918   }
919
920   public void testNoReturnInTernary() throws Throwable { doTest(); }
921
922   public void testWildcardsInLookup() throws Exception {
923     configure()
924     assertNotNull(getLookup());
925     type('*fz');
926     assert !lookup
927   }
928
929   public void testSmartEnterWrapsConstructorCall() throws Throwable { doTest(Lookup.COMPLETE_STATEMENT_SELECT_CHAR as String) }
930   public void testSmartEnterNoNewLine() { doTest(Lookup.COMPLETE_STATEMENT_SELECT_CHAR as String) }
931   public void testSmartEnterWithNewLine() { doTest(Lookup.COMPLETE_STATEMENT_SELECT_CHAR as String) }
932
933   public void testTabReplacesMethodNameWithLocalVariableName() throws Throwable { doTest('\t'); }
934   public void testMethodParameterAnnotationClass() throws Throwable { doTest(); }
935   public void testPrimitiveCastOverwrite() throws Throwable { doTest '\t' }
936   public void testClassReferenceInFor() throws Throwable { doTest ' ' }
937   public void testClassReferenceInFor2() throws Throwable { doTest ' ' }
938   public void testClassReferenceInFor3() throws Throwable {
939     CodeInsightSettings.instance.COMPLETION_CASE_SENSITIVE = CodeInsightSettings.NONE
940     doTest ' '
941   }
942
943   public void testEnumConstantFromEnumMember() throws Throwable { doTest(); }
944
945   public void testPrimitiveMethodParameter() throws Throwable { doTest(); }
946
947   public void testNewExpectedClassParens() throws Throwable { doTest('\n'); }
948
949   public void testQualifyInnerMembers() throws Throwable { doTest('\n') }
950
951   public void testDeepInner() throws Throwable {
952     configure()
953     assert myFixture.lookupElementStrings == ['ClassInner1', 'ClassInner1.ClassInner2']
954     selectItem(lookup.items[1])
955     checkResult()
956   }
957
958   public void testSuggestExpectedTypeMembers() throws Throwable { doTest('\n') }
959   public void testSuggestExpectedTypeMembersInCall() throws Throwable { doTest('\n') }
960   public void testSuggestExpectedTypeMembersInAnno() throws Throwable { doTest('\n') }
961   public void testExpectedTypesDotSelectsItem() throws Throwable { doTest('.') }
962
963   public void testExpectedTypeMembersVersusStaticImports() throws Throwable {
964     configure()
965     assertStringItems('XFOO', 'XFOX')
966   }
967
968   public void testDoubleExpectedTypeFactoryMethod() throws Throwable {
969     configure()
970     assertStringItems('Key', 'create', 'create')
971     assert renderElement(myItems[1]).itemText == 'Key.<Boolean>create'
972     assert renderElement(myItems[2]).itemText == 'Key.create'
973   }
974
975   public void testSuggestExpectedTypeMembersNonImported() throws Throwable {
976     myFixture.addClass("package foo; public class Super { public static final Super FOO = null; }")
977     myFixture.addClass("package foo; public class Usage { public static void foo(Super s) {} }")
978     doTest('\n')
979   }
980
981   public void testStaticallyImportedInner() throws Throwable {
982     configure()
983     assertStringItems('AIOInner', 'ArrayIndexOutOfBoundsException')
984   }
985
986   public void testClassNameInIfBeforeIdentifier() throws Throwable {
987     myFixture.addClass("public class ABCDEFFFFF {}")
988     doTest('\n')
989   }
990
991   public void testClassNameWithInnersTab() throws Throwable { doTest('\t') }
992
993   public void testClassNameWithGenericsTab() throws Throwable {doTest('\t') }
994   public void testClassNameWithGenericsTab2() throws Throwable {doTest('\t') }
995
996   public void testLiveTemplatePrefixTab() throws Throwable {doTest('\t') }
997
998   public void testOnlyAnnotationsAfterAt() throws Throwable { doTest() }
999   public void testOnlyAnnotationsAfterAt2() throws Throwable { doTest('\n') }
1000
1001   public void testOnlyExceptionsInCatch1() throws Exception { doTest('\n') }
1002   public void testOnlyExceptionsInCatch2() throws Exception { doTest('\n') }
1003   public void testOnlyExceptionsInCatch3() throws Exception { doTest('\n') }
1004   public void testOnlyExceptionsInCatch4() throws Exception { doTest('\n') }
1005
1006   public void testCommaAfterVariable() throws Throwable { doTest(',') }
1007
1008   public void testClassAngleBracket() throws Throwable { doTest('<') }
1009   public void testNoArgsMethodSpace() throws Throwable { doTest(' ') }
1010
1011   public void testClassSquareBracket() throws Throwable { doTest('[') }
1012   public void testPrimitiveSquareBracket() throws Throwable { doTest('[') }
1013   public void testVariableSquareBracket() throws Throwable { doTest('[') }
1014   public void testMethodSquareBracket() throws Throwable { doTest('[') }
1015
1016   public void testMethodParameterTypeDot() throws Throwable { doAntiTest() }
1017   public void testNewGenericClass() throws Throwable { doTest('\n') }
1018   public void testNewGenericInterface() throws Throwable { doTest() }
1019   public void testEnumPrivateFinal() throws Throwable { doTest() }
1020   public void testNoFieldsInImplements() throws Throwable { doTest() }
1021
1022   public void testSwitchConstantsFromReferencedClass() throws Throwable { doTest('\n') }
1023
1024   public void testUnfinishedMethodTypeParameter() throws Throwable {
1025     configure()
1026     assertStringItems("MyParameter", "MySecondParameter")
1027   }
1028   public void testUnfinishedMethodTypeParameter2() throws Throwable {
1029     configure()
1030     assertStringItems("MyParameter", "MySecondParameter")
1031   }
1032
1033   public void testSuperProtectedMethod() throws Throwable {
1034     myFixture.addClass """package foo;
1035       public class Bar {
1036           protected void foo() { }
1037       }"""
1038     doTest()
1039   }
1040
1041   public void testTopLevelClassesFromPackaged() throws Throwable {
1042     myFixture.addClass "public class Fooooo {}"
1043     final text = "package foo; class Bar { Fooo<caret> }"
1044     def file = myFixture.addFileToProject("foo/Bar.java", text)
1045     myFixture.configureFromExistingVirtualFile file.virtualFile
1046     assertEmpty myFixture.completeBasic()
1047     myFixture.checkResult text
1048   }
1049
1050   public void testRightShift() throws Throwable {
1051     configure()
1052     assertStringItems("myField1", "myField2");
1053   }
1054
1055   public void testAfterCommonPrefix() throws Throwable {
1056     configure()
1057     type 'eq'
1058     assertFirstStringItems("equals", "equalsIgnoreCase");
1059     complete()
1060     assertFirstStringItems("equals", "equalsIgnoreCase");
1061     type '('
1062     checkResult()
1063   }
1064
1065   public void testClassNameInsideIdentifierInIf() throws Throwable {
1066     configure()
1067     myFixture.complete(CompletionType.BASIC, 2)
1068     type '\n'
1069     checkResult()
1070   }
1071
1072   public void testKeywordSmartEnter() {
1073     configure()
1074     myFixture.performEditorAction(IdeActions.ACTION_CHOOSE_LOOKUP_ITEM_COMPLETE_STATEMENT)
1075     checkResult()
1076   }
1077
1078   public void testImportStringValue() throws Throwable {
1079     myFixture.addClass("package foo; public class StringValue {}")
1080     myFixture.addClass("package java.lang; class StringValue {}")
1081     configure()
1082     myFixture.complete(CompletionType.BASIC, 2)
1083     type ' '
1084     checkResult()
1085   }
1086
1087   public void testPrimitiveArrayWithRBrace() throws Throwable { doTest '[' }
1088
1089   public void testSuggestMembersOfStaticallyImportedClasses() throws Exception {
1090     myFixture.addClass("""package foo;
1091     public class Foo {
1092       public static void foo() {}
1093       public static void bar() {}
1094     }
1095     """)
1096     doTest('\n')
1097   }
1098
1099   public void testSuggestMembersOfStaticallyImportedClassesUnqualifiedOnly() throws Exception {
1100     def old = CodeInsightSettings.instance.SHOW_STATIC_AFTER_INSTANCE
1101     CodeInsightSettings.instance.SHOW_STATIC_AFTER_INSTANCE = true
1102
1103     try {
1104       myFixture.addClass("""package foo;
1105       public class Foo {
1106         public static void foo() {}
1107         public static void bar() {}
1108       }
1109       """)
1110       configure()
1111       assertOneElement(myFixture.getLookupElements())
1112       myFixture.type '\t'
1113       checkResult()
1114     }
1115     finally {
1116       CodeInsightSettings.instance.SHOW_STATIC_AFTER_INSTANCE = old
1117     }
1118   }
1119
1120   public void testInstanceMagicMethod() throws Exception { doTest() }
1121
1122   public void testNoDotOverwrite() throws Exception { doTest('.') }
1123
1124   public void testStaticInnerExtendingOuter() throws Exception { doTest() }
1125   public void testPrimitiveClass() throws Exception { doTest() }
1126   public void testPrimitiveArrayClass() throws Exception { doTest() }
1127   public void testPrimitiveArrayOnlyClass() throws Exception { doAntiTest() }
1128   public void testPrimitiveArrayInAnno() throws Exception { doTest() }
1129
1130   public void testNewClassAngleBracket() throws Exception { doTest('<') }
1131   public void testNewClassAngleBracketExpected() throws Exception { doTest('<') }
1132   public void testNewClassSquareBracket() throws Exception { doTest('[') }
1133
1134   public void testMethodColon() throws Exception { doTest(':') }
1135   public void testVariableColon() throws Exception { doTest(':') }
1136
1137   public void testFinishByClosingParenthesis() throws Exception { doTest(')') }
1138
1139   public void testNoMethodsInParameterType() {
1140     configure()
1141     assertFirstStringItems "final", "float"
1142   }
1143
1144   public void testNonImportedClassInAnnotation() {
1145     myFixture.addClass("package foo; public class XInternalTimerServiceController {}")
1146     myFixture.configureByText "a.java", """
1147 class XInternalError {}
1148
1149 @Anno(XInternal<caret>)
1150 """
1151     myFixture.complete(CompletionType.BASIC, 2)
1152     assertFirstStringItems "XInternalError", "XInternalTimerServiceController"
1153   }
1154
1155   public void testMetaAnnotation() {
1156     myFixture.configureByText "a.java", "@<caret> @interface Anno {}"
1157     myFixture.complete(CompletionType.BASIC)
1158     assert myFixture.lookup.items.find { it.lookupString == 'Retention' }
1159   }
1160
1161   public void testAnnotationClassFromWithinAnnotation() { doTest() }
1162
1163   public void testStaticallyImportedFieldsTwice() {
1164     myFixture.addClass("""
1165       class Foo {
1166         public static final int aZOO;
1167       }
1168     """)
1169     myFixture.configureByText("a.java", """
1170       import static Foo.*
1171       class Bar {{
1172         aZ<caret>a
1173       }}
1174     """)
1175     assertOneElement myFixture.completeBasic()
1176   }
1177   public void testStaticallyImportedFieldsTwiceSwitch() { doTest() }
1178
1179   public void testStatementKeywords() {
1180     myFixture.configureByText("a.java", """
1181       class Bar {{
1182         <caret>xxx
1183       }}
1184     """)
1185     myFixture.completeBasic()
1186     final def strings = myFixture.lookupElementStrings
1187     assertTrue 'if' in strings
1188     assertTrue 'while' in strings
1189     assertTrue 'do' in strings
1190     assertTrue 'new' in strings
1191     assertTrue 'try' in strings
1192
1193     strings.remove 'new'
1194     assertFalse 'new' in strings
1195   }
1196
1197   public void testExpressionKeywords() {
1198     myFixture.configureByText("a.java", """
1199       class Bar {{
1200         foo(<caret>xxx)
1201       }}
1202     """)
1203     myFixture.completeBasic()
1204     final def strings = myFixture.lookupElementStrings
1205     assertTrue 'new' in strings
1206   }
1207
1208   public void testImportAsterisk() {
1209     myFixture.configureByText "a.java", "import java.lang.<caret>"
1210     myFixture.completeBasic()
1211     myFixture.type '*;'
1212     myFixture.checkResult "import java.lang.*;<caret>"
1213   }
1214
1215   public void testDontPreselectCaseInsensitivePrefixMatch() {
1216     CodeInsightSettings.instance.COMPLETION_CASE_SENSITIVE = CodeInsightSettings.NONE
1217     myFixture.configureByText "a.java", "import java.io.*; class Foo {{ int fileSize; fil<caret>x }}"
1218     myFixture.completeBasic()
1219     assert lookup.currentItem.lookupString == 'fileSize'
1220     myFixture.type('e')
1221
1222     assert lookup.items[0].lookupString == 'File'
1223     assert lookup.items[1].lookupString == 'fileSize'
1224     assert lookup.currentItem == lookup.items[1]
1225   }
1226
1227   public void testNoGenericsWhenChoosingWithParen() { doTest('Ma(') }
1228
1229   public void testNoClosingWhenChoosingWithParenBeforeIdentifier() { doTest '(' }
1230
1231   public void testPackageInMemberType() { doTest() }
1232
1233   public void testConstantInAnno() { doTest() }
1234
1235   public void testCharsetName() {
1236     myFixture.addClass("package java.nio.charset; public class Charset { public static Charset forName(String s) {} }")
1237     configureByTestName()
1238     assert myFixture.lookupElementStrings.contains('UTF-8')
1239   }
1240
1241   public void testInnerClassInExtendsGenerics() {
1242     def text = "package bar; class Foo extends List<Inne<caret>> { public static class Inner {} }"
1243     myFixture.configureFromExistingVirtualFile(myFixture.addClass(text).containingFile.virtualFile)
1244     myFixture.completeBasic()
1245     myFixture.type('\n')
1246     myFixture.checkResult(text.replace('Inne<caret>', 'Foo.Inner<caret>'))
1247   }
1248
1249   public void testClassNameDot() { doTest('.') }
1250
1251   public void testClassNameDotBeforeCall() {
1252     myFixture.addClass("package foo; public class FileInputStreamSmth {}")
1253     myFixture.configureByFile(getTestName(false) + ".java")
1254     PsiDocumentManager.getInstance(project).commitAllDocuments()
1255     type '\b'
1256     PsiDocumentManager.getInstance(project).commitAllDocuments()
1257     myFixture.complete(CompletionType.BASIC, 2)
1258     assert lookup
1259     type '.'
1260     checkResult()
1261   }
1262
1263   public void testNoReturnAfterDot() {
1264     configure()
1265     assert !('return' in myFixture.lookupElementStrings)
1266   }
1267
1268   public void testDuplicateExpectedTypeInTypeArgumentList() {
1269     configure()
1270     def items = myFixture.lookupElements.findAll { it.lookupString == 'String' }
1271     assert items.size() == 1
1272     assert LookupElementPresentation.renderElement(items[0]).tailText == ' (java.lang)'
1273   }
1274
1275   public void testSameSignature() {
1276     configure()
1277     myFixture.assertPreferredCompletionItems(0, 's', 's, file', 's, file, a')
1278     lookup.setCurrentItem(lookup.items[2])
1279     myFixture.type('\n')
1280     checkResult()
1281   }
1282
1283   public void testNoParenthesesAroundCallQualifier() { doTest() }
1284
1285   public void testAllAssertClassesMethods() {
1286     myFixture.addClass 'package foo; public class Assert { public static boolean foo() {} }'
1287     myFixture.addClass 'package bar; public class Assert { public static boolean bar() {} }'
1288     configure()
1289     assert myFixture.lookupElementStrings == ['Assert.bar', 'Assert.foo']
1290     myFixture.type '\n'
1291     checkResult()
1292   }
1293
1294   public void testCastVisually() {
1295     configure()
1296     def p = LookupElementPresentation.renderElement(myFixture.lookupElements[0])
1297     assert p.itemText == 'getValue'
1298     assert p.itemTextBold
1299     assert p.typeText == 'Foo'
1300   }
1301
1302   public void testSuggestEmptySet() {
1303     configure()
1304     assert 'emptySet' == myFixture.lookupElementStrings[0]
1305     type '\n'
1306     checkResult()
1307   }
1308
1309   public void testSuggestAllTypeArguments() {
1310     configure()
1311     assert 'String, String' == lookup.items[1].lookupString
1312     lookup.currentItem = lookup.items[1]
1313     type '\n'
1314     checkResult()
1315   }
1316
1317   public void testMakeMultipleArgumentsFinalWhenInInner() {
1318     configure()
1319     def item = lookup.items.find { 'a, b' == it.lookupString }
1320     assert item
1321     lookup.currentItem = item
1322     type '\n'
1323     checkResult()
1324   }
1325
1326   public void testNoFinalInAnonymousConstructor() { doTest() }
1327   public void testListArrayListCast() { doTest('\n') }
1328   public void testInterfaceImplementationNoCast() { doTest() }
1329   public void testStaticallyImportedMethodsBeforeExpression() { doTest() }
1330   public void testInnerChainedReturnType() { doTest() }
1331   public void testOverwriteGenericsAfterNew() { doTest('\n') }
1332
1333   private CommonCodeStyleSettings getCodeStyleSettings() {
1334     return CodeStyleSettingsManager.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE);
1335   }
1336
1337   public void testCompatibleInterfacesCast() {
1338     configure()
1339     assert myFixture.lookupElementStrings.containsAll(['foo', 'bar'])
1340   }
1341
1342   public void testDontAutoInsertMiddleMatch() {
1343     configure()
1344     checkResult()
1345     assert lookup.items.size() == 1
1346   }
1347
1348   public void testImplementViaCompletion() {
1349     configure()
1350     myFixture.assertPreferredCompletionItems 0, 'private', 'protected', 'public', 'public void run'
1351     def item = lookup.items[3]
1352
1353     def p = LookupElementPresentation.renderElement(item)
1354     assert p.itemText == 'public void run'
1355     assert p.tailText == '(t, myInt) {...}'
1356     assert p.typeText == 'Foo'
1357
1358     lookup.currentItem = item
1359     myFixture.type('\n')
1360     checkResult()
1361   }
1362
1363   public void testImplementViaOverrideCompletion() {
1364     configure()
1365     myFixture.assertPreferredCompletionItems 0, 'Override', 'public void run'
1366     lookup.currentItem = lookup.items[1]
1367     myFixture.type('\n')
1368     checkResult()
1369   }
1370
1371   public void testAccessorViaCompletion() {
1372     configure()
1373
1374     def getter = myFixture.lookupElements.find { it.lookupString == 'public int getField' }
1375     def setter = myFixture.lookupElements.find { it.lookupString == 'public void setField' }
1376     assert getter : myFixture.lookupElementStrings
1377     assert setter : myFixture.lookupElementStrings
1378
1379     def p = LookupElementPresentation.renderElement(getter)
1380     assert p.itemText == getter.lookupString
1381     assert p.tailText == '() {...}'
1382     assert !p.typeText
1383
1384     p = LookupElementPresentation.renderElement(setter)
1385     assert p.itemText == setter.lookupString
1386     assert p.tailText == '(field) {...}'
1387     assert !p.typeText
1388
1389     lookup.currentItem = getter
1390     myFixture.type('\n')
1391     checkResult()
1392   }
1393
1394   public void testBraceOnNextLine() {
1395     codeStyleSettings.BRACE_STYLE = CommonCodeStyleSettings.NEXT_LINE
1396     doTest()
1397   }
1398
1399   public void testDoForceBraces() {
1400     codeStyleSettings.DOWHILE_BRACE_FORCE = CommonCodeStyleSettings.FORCE_BRACES_ALWAYS
1401     doTest('\n')
1402   }
1403
1404   public void testMulticaretSingleItemInsertion() {
1405     doTest()
1406   }
1407
1408   public void testMulticaretMethodWithParen() {
1409     doTest()
1410   }
1411
1412   public void testMulticaretTyping() {
1413     configure()
1414     assert lookup
1415     type('p')
1416     assert lookup
1417     type('\n')
1418     checkResult()
1419   }
1420
1421   public void testMulticaretCompletionFromNonPrimaryCaret() {
1422     configure()
1423     myFixture.assertPreferredCompletionItems(0, "arraycopy")
1424   }
1425
1426   public void testMulticaretCompletionFromNonPrimaryCaretWithTab() {
1427     doTest '\t'
1428   }
1429
1430   public void "test complete lowercase class name"() {
1431     myFixture.addClass("package foo; public class myClass {}")
1432     myFixture.configureByText "a.java", """
1433 class Foo extends my<caret>
1434 """
1435     myFixture.complete(CompletionType.BASIC, 2)
1436     myFixture.checkResult '''import foo.myClass;
1437
1438 class Foo extends myClass
1439 '''
1440   }
1441
1442   public void "test don't show static inner class after instance qualifier"() {
1443     myFixture.configureByText "a.java", """
1444 class Foo {
1445   static class Inner {}
1446 }
1447 class Bar {
1448   void foo(Foo f) {
1449     f.<caret>
1450   }
1451 }  
1452 """
1453     myFixture.completeBasic()
1454     assert !('Inner' in myFixture.lookupElementStrings)
1455   }
1456
1457   public void "test show static member after instance qualifier when nothing matches"() {
1458     myFixture.configureByText "a.java", "class Foo{{ \"\".<caret> }}"
1459     myFixture.completeBasic()
1460     assert !('valueOf' in myFixture.lookupElementStrings)
1461     ((LookupImpl)myFixture.lookup).hide()
1462     myFixture.type 'val'
1463     myFixture.completeBasic()
1464     assert ('valueOf' in myFixture.lookupElementStrings)
1465   }
1466
1467   public void testNoMathTargetMethods() { doAntiTest() }
1468
1469   public void testNoLowercaseClasses() {
1470     myFixture.addClass("package foo; public class abcdefgXxx {}")
1471     doAntiTest()
1472     myFixture.complete(CompletionType.BASIC, 2)
1473     assertStringItems('abcdefgXxx')
1474   }
1475
1476   public void testProtectedFieldInAnotherPackage() {
1477     myFixture.addClass("package foo; public class Super { protected String myString; }");
1478     doTest()
1479   }
1480
1481   public void testUnimportedStaticInnerClass() {
1482     myFixture.addClass("package foo; public class Super { public static class Inner {} }");
1483     doTest()
1484   }
1485
1486   public void testNoJavaLangPackagesInImport() { doAntiTest() }
1487
1488   public void testNoStaticDuplicatesFromExpectedMemberFactories() {
1489     configure()
1490     myFixture.complete(CompletionType.BASIC, 2)
1491     myFixture.assertPreferredCompletionItems(0, "xcreateZoo", "xcreateElephant");
1492   }
1493
1494   public void "test code cleanup during completion generation"() {
1495     myFixture.configureByText "a.java", "class Foo {int i; ge<caret>}"
1496     myFixture.enableInspections(new UnqualifiedFieldAccessInspection())
1497     myFixture.complete(CompletionType.BASIC)
1498     myFixture.checkResult '''class Foo {int i;
1499
1500     public int getI() {
1501         return this.i;
1502     }
1503 }'''
1504   }
1505 }