[r=nik] no comma/semicolon/whatever when no closing bracket is inserted (IDEA-62725, IDEA-58920)

This commit is contained in:
peter
2010-12-09 12:51:22 +03:00
parent e1980f56b1
commit f5f37d9499
8 changed files with 67 additions and 2 deletions
@@ -15,6 +15,7 @@
*/
package com.intellij.codeInsight.completion;
import com.intellij.codeInsight.CodeInsightSettings;
import com.intellij.codeInsight.CodeInsightUtilBase;
import com.intellij.codeInsight.ExpectedTypeInfo;
import com.intellij.codeInsight.TailType;
@@ -57,10 +58,15 @@ public class SmartCompletionDecorator extends TailTypeDecorator<LookupElement> {
return defType;
}
final PsiExpression enclosing = PsiTreeUtil.getContextOfType(myPosition, PsiExpression.class, true);
LookupElement item = getDelegate();
Object object = item.getObject();
if (!CodeInsightSettings.getInstance().AUTOINSERT_PAIR_BRACKET && (object instanceof PsiMethod || object instanceof PsiClass)) {
return TailType.NONE;
}
if (enclosing != null && item.getObject() instanceof PsiElement) {
final PsiExpression enclosing = PsiTreeUtil.getContextOfType(myPosition, PsiExpression.class, true);
if (enclosing != null && object instanceof PsiElement) {
final PsiType type = getItemType(item);
final TailType itemType = item instanceof LookupItem ? ((LookupItem)item).getTailType() : TailType.NONE;
TailType cached = itemType;
@@ -0,0 +1,5 @@
class A {
{
String c = new String(<caret>
}
}
@@ -0,0 +1,5 @@
class A {
{
String c = new Stri<caret>
}
}
@@ -0,0 +1,6 @@
class A {
{
String x;
Class c = x.getClass(<caret>
}
}
@@ -0,0 +1,6 @@
class A {
{
String x;
Class c = x.getCl<caret>
}
}
@@ -0,0 +1,7 @@
class A {
{
Class c = this.xxxxx(<caret>
}
Class xxxxx() {}
}
@@ -0,0 +1,7 @@
class A {
{
Class c = this.xx<caret>
}
Class xxxxx() {}
}
@@ -477,6 +477,29 @@ public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase {
public void testSameNamedFieldAndLocal() throws Throwable { doTest(); }
public void testNoTailWhenNoPairBracket() throws Throwable {
doTestNoPairBracket();
}
public void testNoTailWhenNoPairBracket2() throws Throwable {
doTestNoPairBracket();
}
private void doTestNoPairBracket() throws Exception {
boolean old = CodeInsightSettings.getInstance().AUTOINSERT_PAIR_BRACKET;
CodeInsightSettings.getInstance().AUTOINSERT_PAIR_BRACKET = false;
try {
doTest();
}
finally {
CodeInsightSettings.getInstance().AUTOINSERT_PAIR_BRACKET = old;
}
}
public void testNoConstructorTailWhenNoPairBracket() throws Throwable {
doTestNoPairBracket();
}
public void testAbstractClassTwice() throws Throwable {
configureByTestName();
assertOneElement(myItems);