no more classNameInsertHandler extension

This commit is contained in:
peter
2010-10-30 15:23:45 +04:00
parent 54baa13e3b
commit 3bb33ea6db
10 changed files with 132 additions and 143 deletions
@@ -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;
}
}
@@ -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;
@@ -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;
}
}
@@ -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);
}
}
}
}
}
-1
View File
@@ -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"/>
@@ -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) {
@@ -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) {
@@ -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;
-2
View File
@@ -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"/>