mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 21:11:28 +07:00
java chained completion: qualifier class items shouldn't be inserted as constructors
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
class Zoo {
|
||||
void foo() {
|
||||
new Super.I<caret>
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
import foo.Super;
|
||||
|
||||
class Zoo {
|
||||
void foo() {
|
||||
new Super.Inner()<caret>
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user