mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
no more classNameInsertHandler extension
This commit is contained in:
@@ -16,8 +16,6 @@
|
||||
package com.intellij.codeInsight.completion;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightUtilBase;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.lang.LanguageExtension;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
@@ -45,7 +43,7 @@ import java.util.Set;
|
||||
*/
|
||||
public class AllClassesGetter {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.completion.AllClassesGetter");
|
||||
private static final InsertHandler<JavaPsiClassReferenceElement> INSERT_HANDLER = new InsertHandler<JavaPsiClassReferenceElement>() {
|
||||
public static final InsertHandler<JavaPsiClassReferenceElement> TRY_SHORTENING = new InsertHandler<JavaPsiClassReferenceElement>() {
|
||||
|
||||
private void _handleInsert(final InsertionContext context, final JavaPsiClassReferenceElement item) {
|
||||
final Editor editor = context.getEditor();
|
||||
@@ -65,11 +63,6 @@ public class AllClassesGetter {
|
||||
|
||||
final OffsetKey key = OffsetKey.create("endOffset", false);
|
||||
context.getOffsetMap().addOffset(key, endOffset);
|
||||
ClassNameInsertHandler handler = ClassNameInsertHandler.EP_NAME.forLanguage(file.getLanguage());
|
||||
ClassNameInsertHandlerResult checkReference = ClassNameInsertHandlerResult.CHECK_FOR_CORRECT_REFERENCE;
|
||||
if (handler != null) {
|
||||
checkReference = handler.handleInsert(context, item);
|
||||
}
|
||||
PostprocessReformattingAspect.getInstance(context.getProject()).doPostponedFormatting();
|
||||
|
||||
final int newOffset = context.getOffsetMap().getOffset(key);
|
||||
@@ -84,8 +77,8 @@ public class AllClassesGetter {
|
||||
psiDocumentManager.commitAllDocuments();
|
||||
PsiReference psiReference = file.findReferenceAt(endOffset - 1);
|
||||
|
||||
boolean insertFqn=checkReference!=ClassNameInsertHandlerResult.REFERENCE_CORRECTED;
|
||||
if (checkReference == ClassNameInsertHandlerResult.CHECK_FOR_CORRECT_REFERENCE && psiReference != null) {
|
||||
boolean insertFqn = true;
|
||||
if (psiReference != null) {
|
||||
final PsiManager psiManager = file.getManager();
|
||||
if (psiManager.areElementsEquivalent(psiClass, JavaCompletionUtil.resolveReference(psiReference))) {
|
||||
insertFqn = false;
|
||||
@@ -99,7 +92,6 @@ public class AllClassesGetter {
|
||||
for (final PsiReference reference : psiElement.getReferences()) {
|
||||
if (psiManager.areElementsEquivalent(psiClass, JavaCompletionUtil.resolveReference(reference))) {
|
||||
insertFqn = false;
|
||||
endOffset = reference.getRangeInElement().getEndOffset() + reference.getElement().getTextRange().getStartOffset();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -113,19 +105,11 @@ public class AllClassesGetter {
|
||||
}
|
||||
if (toDelete.isValid()) {
|
||||
document.deleteString(toDelete.getStartOffset(), toDelete.getEndOffset());
|
||||
if (insertFqn) {
|
||||
endOffset = toDelete.getStartOffset();
|
||||
}
|
||||
context.setTailOffset(toDelete.getStartOffset());
|
||||
}
|
||||
|
||||
if (insertFqn) {
|
||||
int i = endOffset - 1;
|
||||
while (i >= 0) {
|
||||
final char ch = document.getCharsSequence().charAt(i);
|
||||
if (!Character.isJavaIdentifierPart(ch) && ch != '.') break;
|
||||
i--;
|
||||
}
|
||||
document.replaceString(i + 1, endOffset, qname);
|
||||
INSERT_FQN.handleInsert(context, item);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -136,6 +120,22 @@ public class AllClassesGetter {
|
||||
|
||||
};
|
||||
|
||||
public static final InsertHandler<JavaPsiClassReferenceElement> INSERT_FQN = new InsertHandler<JavaPsiClassReferenceElement>() {
|
||||
@Override
|
||||
public void handleInsert(InsertionContext context, JavaPsiClassReferenceElement item) {
|
||||
final String qName = item.getQualifiedName();
|
||||
if (qName != null) {
|
||||
int start = context.getTailOffset() - 1;
|
||||
while (start >= 0) {
|
||||
final char ch = context.getDocument().getCharsSequence().charAt(start);
|
||||
if (!Character.isJavaIdentifierPart(ch) && ch != '.') break;
|
||||
start--;
|
||||
}
|
||||
context.getDocument().replaceString(start + 1, context.getTailOffset(), qName);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public static void processJavaClasses(CompletionParameters parameters,
|
||||
final PrefixMatcher prefixMatcher, final boolean filterByScope,
|
||||
final Consumer<PsiClass> consumer) {
|
||||
@@ -194,20 +194,11 @@ public class AllClassesGetter {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static LookupElement createLookupItem(@NotNull final PsiClass psiClass) {
|
||||
return new JavaPsiClassReferenceElement(psiClass).setInsertHandler(INSERT_HANDLER);
|
||||
}
|
||||
|
||||
|
||||
public interface ClassNameInsertHandler {
|
||||
LanguageExtension<ClassNameInsertHandler> EP_NAME =
|
||||
new LanguageExtension<ClassNameInsertHandler>("com.intellij.classNameInsertHandler");
|
||||
|
||||
ClassNameInsertHandlerResult handleInsert(InsertionContext context, JavaPsiClassReferenceElement item);
|
||||
}
|
||||
|
||||
public enum ClassNameInsertHandlerResult {
|
||||
INSERT_FQN, REFERENCE_CORRECTED, CHECK_FOR_CORRECT_REFERENCE
|
||||
public static JavaPsiClassReferenceElement createLookupItem(@NotNull final PsiClass psiClass,
|
||||
final InsertHandler<JavaPsiClassReferenceElement> insertHandler) {
|
||||
final JavaPsiClassReferenceElement item = new JavaPsiClassReferenceElement(psiClass);
|
||||
item.setInsertHandler(insertHandler);
|
||||
return item;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+29
-3
@@ -17,6 +17,7 @@ package com.intellij.codeInsight.completion;
|
||||
|
||||
import com.intellij.codeInsight.ExpectedTypeInfo;
|
||||
import com.intellij.codeInsight.ExpectedTypesProvider;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.lang.LangBundle;
|
||||
import com.intellij.lang.StdLanguages;
|
||||
import com.intellij.openapi.actionSystem.IdeActions;
|
||||
@@ -69,19 +70,20 @@ public class JavaClassNameCompletionContributor extends CompletionContributor {
|
||||
TrueFilter.INSTANCE;
|
||||
|
||||
|
||||
final boolean inJavaContext = parameters.getPosition() instanceof PsiIdentifier;
|
||||
if (AFTER_NEW.accepts(insertedElement)) {
|
||||
final PsiExpression expr = PsiTreeUtil.getContextOfType(insertedElement, PsiExpression.class, true);
|
||||
for (final ExpectedTypeInfo info : ExpectedTypesProvider.getExpectedTypes(expr, true)) {
|
||||
final PsiType type = info.getType();
|
||||
final PsiClass psiClass = PsiUtil.resolveClassInType(type);
|
||||
if (psiClass != null) {
|
||||
result.addElement(AllClassesGetter.createLookupItem(psiClass));
|
||||
result.addElement(createClassLookupItem(psiClass, inJavaContext));
|
||||
}
|
||||
final PsiType defaultType = info.getDefaultType();
|
||||
if (!defaultType.equals(type)) {
|
||||
final PsiClass defClass = PsiUtil.resolveClassInType(defaultType);
|
||||
if (defClass != null) {
|
||||
result.addElement(AllClassesGetter.createLookupItem(defClass));
|
||||
result.addElement(createClassLookupItem(defClass, inJavaContext));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -95,7 +97,7 @@ public class JavaClassNameCompletionContributor extends CompletionContributor {
|
||||
if (lookingForAnnotations && !psiClass.isAnnotationType()) return;
|
||||
|
||||
if (filter.isAcceptable(psiClass, insertedElement)) {
|
||||
result.addElement(AllClassesGetter.createLookupItem(psiClass));
|
||||
result.addElement(createClassLookupItem(psiClass, inJavaContext));
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -104,6 +106,30 @@ public class JavaClassNameCompletionContributor extends CompletionContributor {
|
||||
|
||||
}
|
||||
|
||||
public static LookupElement createClassLookupItem(final PsiClass psiClass, final boolean inJavaContext) {
|
||||
if (inJavaContext) {
|
||||
return AllClassesGetter.createLookupItem(psiClass, new InsertHandler<JavaPsiClassReferenceElement>() {
|
||||
@Override
|
||||
public void handleInsert(InsertionContext context, JavaPsiClassReferenceElement item) {
|
||||
context.setAddCompletionChar(false);
|
||||
int offset = context.getTailOffset() - 1;
|
||||
final PsiFile file = context.getFile();
|
||||
if (PsiTreeUtil.findElementOfClassAtOffset(file, offset, PsiImportStatementBase.class, false) != null) {
|
||||
final PsiJavaCodeReferenceElement ref = PsiTreeUtil.findElementOfClassAtOffset(file, offset, PsiJavaCodeReferenceElement.class, false);
|
||||
final String qname = item.getQualifiedName();
|
||||
if (qname != null && (ref == null || !qname.equals(ref.getCanonicalText()))) {
|
||||
AllClassesGetter.INSERT_FQN.handleInsert(context, item);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
JavaPsiClassReferenceElement.JAVA_CLASS_INSERT_HANDLER.handleInsert(context, item);
|
||||
}
|
||||
});
|
||||
}
|
||||
return AllClassesGetter.createLookupItem(psiClass, AllClassesGetter.TRY_SHORTENING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String handleEmptyLookup(@NotNull final CompletionParameters parameters, final Editor editor) {
|
||||
if (!(parameters.getOriginalFile() instanceof PsiJavaFile)) return null;
|
||||
|
||||
-44
@@ -1,44 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2010 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.codeInsight.completion;
|
||||
|
||||
import com.intellij.lang.StdLanguages;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiImportStatementBase;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
|
||||
/**
|
||||
* @author Maxim.Medvedev
|
||||
*/
|
||||
public class JavaClassNameInsertHandler implements AllClassesGetter.ClassNameInsertHandler {
|
||||
public AllClassesGetter.ClassNameInsertHandlerResult handleInsert(InsertionContext context,
|
||||
JavaPsiClassReferenceElement item) {
|
||||
context.setAddCompletionChar(false);
|
||||
Editor editor = context.getEditor();
|
||||
PsiFile file = context.getFile();
|
||||
int endOffset = editor.getCaretModel().getOffset();
|
||||
if (file.getLanguage() == StdLanguages.JAVA) {
|
||||
if (PsiTreeUtil.findElementOfClassAtOffset(file, endOffset - 1, PsiImportStatementBase.class, false) != null) {
|
||||
return AllClassesGetter.ClassNameInsertHandlerResult.INSERT_FQN;
|
||||
}
|
||||
else {
|
||||
JavaPsiClassReferenceElement.JAVA_CLASS_INSERT_HANDLER.handleInsert(context, item);
|
||||
}
|
||||
}
|
||||
return AllClassesGetter.ClassNameInsertHandlerResult.CHECK_FOR_CORRECT_REFERENCE;
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -244,7 +244,7 @@ public class JavaCompletionContributor extends CompletionContributor {
|
||||
result.addElement((LookupElement)completion);
|
||||
}
|
||||
else if (completion instanceof PsiClass) {
|
||||
result.addElement(AllClassesGetter.createLookupItem((PsiClass)completion));
|
||||
result.addElement(JavaClassNameCompletionContributor.createClassLookupItem((PsiClass)completion, true));
|
||||
}
|
||||
else {
|
||||
result.addElement(LookupItemUtil.objectToLookupItem(completion));
|
||||
|
||||
@@ -24,8 +24,6 @@ import com.intellij.codeInsight.generation.OverrideImplementUtil;
|
||||
import com.intellij.codeInsight.guess.GuessManager;
|
||||
import com.intellij.codeInsight.lookup.*;
|
||||
import com.intellij.featureStatistics.FeatureUsageTracker;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.command.CommandProcessor;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
@@ -1103,15 +1101,10 @@ public class JavaCompletionUtil {
|
||||
}
|
||||
|
||||
public static int insertClassReference(PsiClass psiClass, PsiFile file, int startOffset, int endOffset) {
|
||||
PsiDocumentManager.getInstance(file.getProject()).commitAllDocuments();
|
||||
if (!psiClass.isValid()) {
|
||||
return startOffset;
|
||||
}
|
||||
final Project project = file.getProject();
|
||||
PsiDocumentManager.getInstance(project).commitAllDocuments();
|
||||
|
||||
SmartPsiElementPointer<PsiClass> pointer = SmartPointerManager.getInstance(file.getProject()).createSmartPsiElementPointer(psiClass);
|
||||
LOG.assertTrue(CommandProcessor.getInstance().getCurrentCommand() != null);
|
||||
LOG.assertTrue(
|
||||
ApplicationManager.getApplication().isUnitTestMode() || ApplicationManager.getApplication().getCurrentWriteAction(null) != null);
|
||||
SmartPsiElementPointer<PsiClass> pointer = SmartPointerManager.getInstance(project).createSmartPsiElementPointer(psiClass);
|
||||
|
||||
final PsiManager manager = file.getManager();
|
||||
|
||||
@@ -1132,7 +1125,7 @@ public class JavaCompletionUtil {
|
||||
|
||||
final RangeMarker toDelete = insertSpace(startOffset + name.length(), document);
|
||||
|
||||
PsiDocumentManager.getInstance(manager.getProject()).commitAllDocuments();
|
||||
PsiDocumentManager.getInstance(project).commitAllDocuments();
|
||||
|
||||
int newStartOffset = startOffset;
|
||||
PsiElement element = file.findElementAt(startOffset);
|
||||
@@ -1144,16 +1137,24 @@ public class JavaCompletionUtil {
|
||||
if (!psiClass.getManager().areElementsEquivalent(psiClass, resolveReference(ref))) {
|
||||
final PsiElement pointerElement = pointer.getElement();
|
||||
if (pointerElement instanceof PsiClass) {
|
||||
PsiElement newElement;
|
||||
if (!(ref instanceof PsiImportStaticReferenceElement)) {
|
||||
newElement = ref.bindToElement(pointerElement);
|
||||
}
|
||||
else {
|
||||
newElement = ((PsiImportStaticReferenceElement)ref).bindToTargetClass((PsiClass)pointerElement);
|
||||
}
|
||||
final boolean staticImport = ref instanceof PsiImportStaticReferenceElement;
|
||||
PsiElement newElement = staticImport
|
||||
? ((PsiImportStaticReferenceElement)ref).bindToTargetClass((PsiClass)pointerElement)
|
||||
: ref.bindToElement(pointerElement);
|
||||
|
||||
RangeMarker marker = document.createRangeMarker(newElement.getTextRange());
|
||||
CodeInsightUtilBase.forcePsiPostprocessAndRestoreElement(newElement);
|
||||
newElement = CodeInsightUtilBase.forcePsiPostprocessAndRestoreElement(newElement);
|
||||
newStartOffset = marker.getStartOffset();
|
||||
|
||||
if (!staticImport &&
|
||||
newElement instanceof PsiJavaCodeReferenceElement &&
|
||||
!psiClass.getManager().areElementsEquivalent(psiClass, resolveReference((PsiReference)newElement))) {
|
||||
final String qName = psiClass.getQualifiedName();
|
||||
if (qName != null) {
|
||||
document.replaceString(newStartOffset, newElement.getTextRange().getEndOffset(), qName);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -178,7 +178,6 @@
|
||||
<lookup.charFilter implementation="org.jetbrains.plugins.groovy.lang.completion.GroovyReferenceCharFilter"/>
|
||||
<completion.contributor language="Groovy" implementationClass="org.jetbrains.plugins.groovy.lang.completion.GroovyCompletionContributor" id="groovyBasic"/>
|
||||
<completion.contributor language="Groovy" implementationClass="org.jetbrains.plugins.groovy.lang.completion.GroovySmartCompletionContributor"/>
|
||||
<classNameInsertHandler language="Groovy" implementationClass="org.jetbrains.plugins.groovy.lang.completion.GroovyClassNameInsertHandler"/>
|
||||
|
||||
<completion.confidence language="Groovy" implementationClass="com.intellij.codeInsight.completion.UnfocusedNameIdentifier" id="groovyNameIdentifier"/>
|
||||
<completion.confidence language="Groovy" implementationClass="org.jetbrains.plugins.groovy.lang.completion.GroovyCompletionConfidence" id="groovyAdvanced" order="after groovyNameIdentifier"/>
|
||||
|
||||
+10
-12
@@ -15,10 +15,7 @@
|
||||
*/
|
||||
package org.jetbrains.plugins.groovy.lang.completion;
|
||||
|
||||
import com.intellij.codeInsight.completion.AllClassesGetter;
|
||||
import com.intellij.codeInsight.completion.InsertionContext;
|
||||
import com.intellij.codeInsight.completion.JavaCompletionUtil;
|
||||
import com.intellij.codeInsight.completion.JavaPsiClassReferenceElement;
|
||||
import com.intellij.codeInsight.completion.*;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.JavaPsiFacade;
|
||||
@@ -34,14 +31,16 @@ import org.jetbrains.plugins.groovy.lang.psi.api.toplevel.imports.GrImportStatem
|
||||
/**
|
||||
* @author Maxim.Medvedev
|
||||
*/
|
||||
public class GroovyClassNameInsertHandler implements AllClassesGetter.ClassNameInsertHandler {
|
||||
public AllClassesGetter.ClassNameInsertHandlerResult handleInsert(InsertionContext context, JavaPsiClassReferenceElement item) {
|
||||
public class GroovyClassNameInsertHandler implements InsertHandler<JavaPsiClassReferenceElement> {
|
||||
@Override
|
||||
public void handleInsert(InsertionContext context, JavaPsiClassReferenceElement item) {
|
||||
PsiFile file = context.getFile();
|
||||
assert GroovyFileType.GROOVY_LANGUAGE.equals(file.getLanguage());
|
||||
Editor editor = context.getEditor();
|
||||
int endOffset = editor.getCaretModel().getOffset();
|
||||
if (PsiTreeUtil.findElementOfClassAtOffset(file, endOffset - 1, GrImportStatement.class, false) != null) {
|
||||
return AllClassesGetter.ClassNameInsertHandlerResult.INSERT_FQN;
|
||||
AllClassesGetter.INSERT_FQN.handleInsert(context, item);
|
||||
return;
|
||||
}
|
||||
PsiElement position = file.findElementAt(endOffset - 1);
|
||||
|
||||
@@ -52,23 +51,22 @@ public class GroovyClassNameInsertHandler implements AllClassesGetter.ClassNameI
|
||||
if (isInVariable(position) || GroovyCompletionContributor.isInClosurePropertyParameters(position)) {
|
||||
Project project = context.getProject();
|
||||
PsiClass psiClass = item.getObject();
|
||||
if (!psiClass.isValid()) return AllClassesGetter.ClassNameInsertHandlerResult.CHECK_FOR_CORRECT_REFERENCE;
|
||||
String qname = psiClass.getQualifiedName();
|
||||
String shortName = psiClass.getName();
|
||||
if (qname == null) return AllClassesGetter.ClassNameInsertHandlerResult.CHECK_FOR_CORRECT_REFERENCE;
|
||||
if (qname == null) return;
|
||||
|
||||
PsiClass aClass = JavaPsiFacade.getInstance(project).getResolveHelper().resolveReferencedClass(shortName, position);
|
||||
if (aClass == null) {
|
||||
((GroovyFileBase)file).addImportForClass(psiClass);
|
||||
GroovyInsertHandler.INSTANCE.handleInsert(context, item);
|
||||
return AllClassesGetter.ClassNameInsertHandlerResult.REFERENCE_CORRECTED;
|
||||
return;
|
||||
}
|
||||
else if (aClass == psiClass) {
|
||||
GroovyInsertHandler.INSTANCE.handleInsert(context, item);
|
||||
return AllClassesGetter.ClassNameInsertHandlerResult.REFERENCE_CORRECTED;
|
||||
return;
|
||||
}
|
||||
}
|
||||
return AllClassesGetter.ClassNameInsertHandlerResult.CHECK_FOR_CORRECT_REFERENCE;
|
||||
AllClassesGetter.TRY_SHORTENING.handleInsert(context, item);
|
||||
}
|
||||
|
||||
private static boolean isInVariable(PsiElement position) {
|
||||
|
||||
+36
-23
@@ -227,7 +227,7 @@ public class GroovyCompletionContributor extends CompletionContributor {
|
||||
((GrReferenceElement)reference).processVariants(new Consumer<Object>() {
|
||||
public void consume(Object element) {
|
||||
final LookupElement lookupElement = element instanceof PsiClass
|
||||
? AllClassesGetter.createLookupItem((PsiClass)element)
|
||||
? GroovyCompletionUtil.createClassLookupItem((PsiClass)element)
|
||||
: GroovyCompletionUtil.getLookupElement(element);
|
||||
final Object object = lookupElement.getObject();
|
||||
if ((object instanceof PsiMethod || object instanceof PsiField) && ((PsiModifierListOwner)object).hasModifierProperty(PsiModifier.STATIC)) {
|
||||
@@ -358,29 +358,9 @@ public class GroovyCompletionContributor extends CompletionContributor {
|
||||
extend(CompletionType.BASIC, IN_ARGUMENT_LIST_OF_CALL, MAP_ARGUMENT_COMPLETION_PROVIDER);
|
||||
extend(CompletionType.BASIC, IN_MAP_KEY_ARGUMENT_LIST_OF_CALL, MAP_ARGUMENT_COMPLETION_PROVIDER);
|
||||
|
||||
extend(CompletionType.BASIC, psiElement().withParent(GrReferenceElement.class), new CompletionProvider<CompletionParameters>(false) {
|
||||
@Override
|
||||
protected void addCompletions(@NotNull CompletionParameters parameters,
|
||||
ProcessingContext context,
|
||||
@NotNull final CompletionResultSet result) {
|
||||
final PsiElement position = parameters.getPosition();
|
||||
if (((GrReferenceElement)position.getParent()).getQualifier() != null) return;
|
||||
// class name stuff
|
||||
|
||||
final String s = result.getPrefixMatcher().getPrefix();
|
||||
if (StringUtil.isEmpty(s) || !Character.isUpperCase(s.charAt(0))) return;
|
||||
|
||||
result.runRemainingContributors(
|
||||
new CompletionParameters(parameters.getPosition(), parameters.getOriginalFile(), CompletionType.CLASS_NAME,
|
||||
parameters.getOffset(),
|
||||
parameters.getInvocationCount()), new Consumer<LookupElement>() {
|
||||
@Override
|
||||
public void consume(LookupElement lookupElement) {
|
||||
result.addElement(lookupElement);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
extend(CompletionType.CLASS_NAME, psiElement().withParent(GrReferenceElement.class), new CompletionProvider<CompletionParameters>(false) {
|
||||
extend(CompletionType.CLASS_NAME, psiElement().withParent(GrReferenceElement.class), new CompletionProvider<CompletionParameters>() {
|
||||
@Override
|
||||
protected void addCompletions(@NotNull CompletionParameters parameters,
|
||||
ProcessingContext context,
|
||||
@@ -394,6 +374,39 @@ public class GroovyCompletionContributor extends CompletionContributor {
|
||||
completeStaticMembers(position).processStaticMethodsGlobally(result);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
final CompletionProvider<CompletionParameters> classNameProvider = new CompletionProvider<CompletionParameters>() {
|
||||
@Override
|
||||
protected void addCompletions(@NotNull CompletionParameters parameters,
|
||||
ProcessingContext context,
|
||||
@NotNull final CompletionResultSet result) {
|
||||
result.stopHere();
|
||||
AllClassesGetter
|
||||
.processJavaClasses(parameters, result.getPrefixMatcher(), parameters.getInvocationCount() <= 1, new Consumer<PsiClass>() {
|
||||
@Override
|
||||
public void consume(PsiClass psiClass) {
|
||||
result.addElement(GroovyCompletionUtil.createClassLookupItem(psiClass));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
extend(CompletionType.CLASS_NAME, psiElement(), classNameProvider);
|
||||
|
||||
extend(CompletionType.BASIC, psiElement().withParent(GrReferenceElement.class), new CompletionProvider<CompletionParameters>() {
|
||||
@Override
|
||||
protected void addCompletions(@NotNull CompletionParameters parameters,
|
||||
ProcessingContext context,
|
||||
@NotNull final CompletionResultSet result) {
|
||||
final PsiElement position = parameters.getPosition();
|
||||
if (((GrReferenceElement)position.getParent()).getQualifier() != null) return;
|
||||
|
||||
final String s = result.getPrefixMatcher().getPrefix();
|
||||
if (StringUtil.isEmpty(s) || !Character.isUpperCase(s.charAt(0))) return;
|
||||
|
||||
classNameProvider.addCompletionVariants(parameters, context, result);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static StaticMemberProcessor completeStaticMembers(PsiElement position) {
|
||||
|
||||
+10
-3
@@ -18,8 +18,7 @@ package org.jetbrains.plugins.groovy.lang.completion;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightUtilBase;
|
||||
import com.intellij.codeInsight.TailType;
|
||||
import com.intellij.codeInsight.completion.AllClassesGetter;
|
||||
import com.intellij.codeInsight.completion.JavaCompletionUtil;
|
||||
import com.intellij.codeInsight.completion.*;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
||||
import com.intellij.codeInsight.lookup.LookupItem;
|
||||
@@ -29,6 +28,7 @@ import com.intellij.openapi.editor.RangeMarker;
|
||||
import com.intellij.openapi.editor.ex.EditorEx;
|
||||
import com.intellij.openapi.editor.highlighter.HighlighterIterator;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Iconable;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
@@ -37,15 +37,18 @@ import com.intellij.psi.impl.light.LightMethodBuilder;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.tree.TokenSet;
|
||||
import com.intellij.psi.util.PsiFormatUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.containers.CollectionFactory;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.GroovyFileType;
|
||||
import org.jetbrains.plugins.groovy.GroovyIcons;
|
||||
import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes;
|
||||
import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyFileBase;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariable;
|
||||
@@ -233,7 +236,7 @@ public class GroovyCompletionUtil {
|
||||
continue;
|
||||
}
|
||||
if (element instanceof PsiClass) {
|
||||
result.add(AllClassesGetter.createLookupItem((PsiClass)element));
|
||||
result.add(createClassLookupItem((PsiClass)element));
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -247,6 +250,10 @@ public class GroovyCompletionUtil {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static LookupElement createClassLookupItem(PsiClass psiClass) {
|
||||
return AllClassesGetter.createLookupItem(psiClass, new GroovyClassNameInsertHandler());
|
||||
}
|
||||
|
||||
private static LookupElementBuilder generateLookupForImportedElement(GroovyResolveResult resolveResult, String importedName) {
|
||||
final PsiElement element = resolveResult.getElement();
|
||||
assert element != null;
|
||||
|
||||
@@ -169,7 +169,6 @@
|
||||
|
||||
<extensionPoint name="java.compiler" area="IDEA_PROJECT" interface="com.intellij.compiler.impl.javaCompiler.BackendCompiler"/>
|
||||
|
||||
<extensionPoint name="classNameInsertHandler" beanClass="com.intellij.lang.LanguageExtensionPoint"/>
|
||||
<extensionPoint name="allowedApiFilter" interface="com.intellij.psi.impl.AllowedApiFilterExtension"/>
|
||||
</extensionPoints>
|
||||
|
||||
@@ -257,7 +256,6 @@
|
||||
order="last, before javaSmart"/>
|
||||
<completion.contributor language="JAVA" implementationClass="com.intellij.codeInsight.completion.JavaSmartCompletionContributor" id="javaSmart"
|
||||
order="last, before default"/>
|
||||
<classNameInsertHandler language="JAVA" implementationClass="com.intellij.codeInsight.completion.JavaClassNameInsertHandler"/>
|
||||
|
||||
<packaging.sourceItemProvider implementation="com.intellij.openapi.roots.ui.configuration.artifacts.sourceItems.ModulesAndLibrariesSourceItemsProvider"/>
|
||||
<packaging.sourceItemProvider implementation="com.intellij.openapi.roots.ui.configuration.artifacts.sourceItems.ArtifactsSourceItemsProvider"/>
|
||||
|
||||
Reference in New Issue
Block a user