java chained completion: qualifier class items shouldn't be inserted as constructors

This commit is contained in:
peter
2014-07-22 14:09:13 +02:00
parent 7cb41f86ea
commit f81e96ef9d
6 changed files with 26 additions and 2 deletions

View File

@@ -21,6 +21,7 @@ import com.intellij.diagnostic.AttachmentFactory;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.util.ClassConditionKey;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
@@ -38,6 +39,7 @@ import java.util.Set;
* @author peter
*/
public class JavaChainLookupElement extends LookupElementDecorator<LookupElement> implements TypedLookupItem {
public static final Key<Boolean> CHAIN_QUALIFIER = Key.create("CHAIN_QUALIFIER");
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.completion.JavaChainLookupElement");
public static final ClassConditionKey<JavaChainLookupElement> CLASS_CONDITION_KEY = ClassConditionKey.create(JavaChainLookupElement.class);
private final LookupElement myQualifier;
@@ -109,6 +111,7 @@ public class JavaChainLookupElement extends LookupElementDecorator<LookupElement
public void handleInsert(InsertionContext context) {
final Document document = context.getEditor().getDocument();
document.replaceString(context.getStartOffset(), context.getTailOffset(), ";");
myQualifier.putUserData(CHAIN_QUALIFIER, true);
final InsertionContext qualifierContext = CompletionUtil.emulateInsertion(context, context.getStartOffset(), myQualifier);
OffsetKey oldStart = context.trackOffset(context.getStartOffset(), false);
@@ -167,6 +170,7 @@ public class JavaChainLookupElement extends LookupElementDecorator<LookupElement
if (expr instanceof PsiJavaCodeReferenceElement ||
expr instanceof PsiMethodCallExpression ||
expr instanceof PsiNewExpression ||
expr instanceof PsiArrayAccessExpression) {
return false;
}

View File

@@ -98,7 +98,8 @@ class JavaClassNameInsertHandler implements InsertHandler<JavaPsiClassReferenceE
context.setTailOffset(context.getOffset(refEnd));
context.commitDocument();
if (shouldInsertParentheses(file.findElementAt(context.getTailOffset() - 1))) {
if (item.getUserData(JavaChainLookupElement.CHAIN_QUALIFIER) == null &&
shouldInsertParentheses(file.findElementAt(context.getTailOffset() - 1))) {
if (ConstructorInsertHandler.insertParentheses(context, item, psiClass, false)) {
fillTypeArgs |= psiClass.hasTypeParameters() && PsiUtil.getLanguageLevel(file).isAtLeast(LanguageLevel.JDK_1_5);
}

View File

@@ -20,6 +20,7 @@ import com.intellij.codeInsight.completion.impl.BetterPrefixMatcher;
import com.intellij.codeInsight.completion.impl.CamelHumpMatcher;
import com.intellij.codeInsight.lookup.AutoCompletionPolicy;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
@@ -41,7 +42,6 @@ import static com.intellij.patterns.PsiJavaPatterns.psiElement;
* @author peter
*/
public class JavaNoVariantsDelegator extends CompletionContributor {
@Override
public void fillCompletionVariants(@NotNull final CompletionParameters parameters, @NotNull CompletionResultSet result) {
LinkedHashSet<CompletionResult> plainResults = result.runRemainingContributors(parameters, true);

View File

@@ -0,0 +1,6 @@
class Zoo {
void foo() {
new Super.I<caret>
}
}

View File

@@ -0,0 +1,8 @@
import foo.Super;
class Zoo {
void foo() {
new Super.Inner()<caret>
}
}

View File

@@ -1474,6 +1474,11 @@ class Bar {
doTest()
}
public void testUnimportedStaticInnerClass() {
myFixture.addClass("package foo; public class Super { public static class Inner {} }");
doTest()
}
public void testNoJavaLangPackagesInImport() { doAntiTest() }
public void testNoStaticDuplicatesFromExpectedMemberFactories() {