suggest primitive type arrays after new

This commit is contained in:
peter
2013-07-05 17:36:06 +02:00
parent eb25fedfcc
commit d4d59e43f5
2 changed files with 17 additions and 4 deletions
@@ -21,6 +21,7 @@ import com.intellij.codeInsight.TailTypes;
import com.intellij.codeInsight.completion.util.ParenthesesInsertHandler;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupItem;
import com.intellij.codeInsight.lookup.PsiTypeLookupItem;
import com.intellij.codeInsight.lookup.TailTypeDecorator;
import com.intellij.patterns.ElementPattern;
import com.intellij.patterns.PsiJavaElementPattern;
@@ -612,6 +613,17 @@ public class JavaCompletionData extends JavaAwareCompletionData {
return;
}
boolean afterNew = psiElement().afterLeaf(
psiElement().withText(PsiKeyword.NEW).andNot(psiElement().afterLeaf(PsiKeyword.THROW, "."))).accepts(position);
if (afterNew) {
PsiElementFactory factory = JavaPsiFacade.getElementFactory(position.getProject());
for (String primitiveType : PRIMITIVE_TYPES) {
result.addElement(PsiTypeLookupItem.createLookupItem(factory.createTypeFromText(primitiveType + "[]", null), null));
}
result.addElement(PsiTypeLookupItem.createLookupItem(factory.createTypeFromText("void[]", null), null));
return;
}
boolean inCast = psiElement()
.afterLeaf(psiElement().withText("(").withParent(psiElement(PsiParenthesizedExpression.class, PsiTypeCastExpression.class)))
.accepts(position);
@@ -619,8 +631,6 @@ public class JavaCompletionData extends JavaAwareCompletionData {
boolean typeFragment = position.getContainingFile() instanceof PsiTypeCodeFragment && PsiTreeUtil.prevVisibleLeaf(position) == null;
boolean declaration = DECLARATION_START.accepts(position);
boolean expressionPosition = isExpressionPosition(position);
boolean afterNew = psiElement().afterLeaf(
psiElement().withText(PsiKeyword.NEW).andNot(psiElement().afterLeaf(PsiKeyword.THROW, "."))).accepts(position);
boolean inGenerics = PsiTreeUtil.getParentOfType(position, PsiReferenceParameterList.class) != null;
if (START_FOR.accepts(position) ||
isInsideParameterList(position) ||
@@ -629,7 +639,6 @@ public class JavaCompletionData extends JavaAwareCompletionData {
inCast ||
declaration ||
typeFragment ||
afterNew ||
expressionPosition ||
isStatementPosition(position)) {
for (String primitiveType : PRIMITIVE_TYPES) {
@@ -21,6 +21,7 @@ import com.intellij.codeInsight.editorActions.CompletionAutoPopupHandler
import com.intellij.codeInsight.lookup.Lookup
import com.intellij.codeInsight.lookup.LookupElementPresentation
import com.intellij.codeInsight.lookup.LookupManager
import com.intellij.codeInsight.lookup.PsiTypeLookupItem
import com.intellij.codeInsight.lookup.impl.LookupImpl
import com.intellij.codeInsight.template.impl.TemplateManagerImpl
import com.intellij.ide.DataManager
@@ -1331,7 +1332,10 @@ class Foo {
}
}
'''
type 'int['
type 'int'
myFixture.assertPreferredCompletionItems 0, 'int', 'Integer'
assert ((PsiTypeLookupItem) myFixture.lookupElements[0]).bracketsCount == 1
type '['
myFixture.checkResult '''
class Foo {
void foo() {