This commit is contained in:
peter
2012-02-01 21:58:59 +01:00
parent 208d4e5f74
commit b46549c0e0
4 changed files with 18 additions and 55 deletions
@@ -79,7 +79,7 @@ class ConstructorInsertHandler implements InsertHandler<LookupElementDecorator<L
}
if (item.getDelegate() instanceof JavaPsiClassReferenceElement) {
DefaultInsertHandler.addImportForItem(context, delegate);
PsiTypeLookupItem.addImportForItem(context, psiClass);
}
insertParentheses(context, delegate, psiClass, !inAnonymous && isAbstract);
@@ -22,18 +22,16 @@ import com.intellij.codeInsight.TailTypes;
import com.intellij.codeInsight.lookup.Lookup;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupItem;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.psi.impl.source.PostprocessReformattingAspect;
import org.jetbrains.annotations.NotNull;
public class DefaultInsertHandler extends TemplateInsertHandler implements Cloneable {
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.completion.DefaultInsertHandler");
public static final DefaultInsertHandler NO_TAIL_HANDLER = new DefaultInsertHandler(){
@Override
@@ -54,8 +52,6 @@ public class DefaultInsertHandler extends TemplateInsertHandler implements Clone
final Document document = editor.getDocument();
PsiDocumentManager.getInstance(project).commitDocument(document);
final PsiFile file = context.getFile();
TailType tailType = getTailType(completionChar, item);
InsertHandlerState state = new InsertHandlerState(context.getSelectionEndOffset(), context.getSelectionEndOffset());
@@ -73,8 +69,6 @@ public class DefaultInsertHandler extends TemplateInsertHandler implements Clone
state.caretOffset = processTail(tailType, state.caretOffset, state.tailOffset, editor);
editor.getSelectionModel().removeSelection();
addImportForItem(context, item);
if (tailType == TailType.DOT || context.getCompletionChar() == '.') {
AutoPopupController.getInstance(project).autoPopupMemberLookup(editor, null);
}
@@ -181,50 +175,6 @@ public class DefaultInsertHandler extends TemplateInsertHandler implements Clone
JavaCompletionUtil.initOffsets(file, file.getProject(), offsetMap);
}
public static void addImportForItem(InsertionContext context, LookupElement item) {
PsiDocumentManager.getInstance(context.getProject()).commitAllDocuments();
PsiFile file = context.getFile();
Object o = item.getObject();
if (o instanceof PsiClass){
PsiClass aClass = (PsiClass)o;
if (aClass.getQualifiedName() == null) return;
final String lookupString = item.getLookupString();
int length = lookupString.length();
final int i = lookupString.indexOf('<');
if (i >= 0) length = i;
addImportForClass(aClass, context, length);
JavaCompletionUtil.shortenReference(file, context.getStartOffset());
}
else if (o instanceof PsiType){
PsiType type = ((PsiType)o).getDeepComponentType();
if (type instanceof PsiClassType) {
PsiClass refClass = ((PsiClassType) type).resolve();
if (refClass != null){
int length = refClass.getName().length();
addImportForClass(refClass, context, length);
}
}
}
else if (o instanceof PsiMethod){
PsiMethod method = (PsiMethod)o;
if (method.isConstructor()){
PsiClass aClass = method.getContainingClass();
if (aClass != null){
int length = method.getName().length();
addImportForClass(aClass, context, length);
}
}
}
}
private static void addImportForClass(PsiClass aClass, InsertionContext context, int nameLength) {
context.setTailOffset(JavaCompletionUtil.insertClassReference(aClass, context.getFile(), context.getStartOffset(),
context.getStartOffset() + nameLength));
PostprocessReformattingAspect.getInstance(context.getProject()).doPostponedFormatting();
}
public static class InsertHandlerState{
int tailOffset;
int caretOffset;
@@ -19,6 +19,7 @@ import com.intellij.codeInsight.AutoPopupController;
import com.intellij.codeInsight.ExpectedTypeInfo;
import com.intellij.codeInsight.ExpectedTypesProvider;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.PsiTypeLookupItem;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
@@ -89,7 +90,7 @@ class JavaClassNameInsertHandler implements InsertHandler<JavaPsiClassReferenceE
context.setAddCompletionChar(false);
}
DefaultInsertHandler.addImportForItem(context, item);
PsiTypeLookupItem.addImportForItem(context, psiClass);
if (shouldInsertParentheses(psiClass, file.findElementAt(context.getTailOffset() - 1))) {
if (ConstructorInsertHandler.insertParentheses(context, item, psiClass, false)) {
@@ -21,6 +21,7 @@ import com.intellij.openapi.editor.ScrollType;
import com.intellij.openapi.util.ClassConditionKey;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.PostprocessReformattingAspect;
import com.intellij.psi.impl.source.PsiClassReferenceType;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.NonNls;
@@ -72,7 +73,9 @@ public class PsiTypeLookupItem extends LookupItem {
public void handleInsert(InsertionContext context) {
PsiElement position = context.getFile().findElementAt(context.getStartOffset());
assert position != null;
DefaultInsertHandler.addImportForItem(context, this);
if (getObject() instanceof PsiClass) {
addImportForItem(context, (PsiClass)getObject());
}
context.getDocument().insertString(context.getTailOffset(), calcGenerics(position));
JavaCompletionUtil.shortenReference(context.getFile(), context.getStartOffset());
@@ -223,4 +226,13 @@ public class PsiTypeLookupItem extends LookupItem {
}
}
}
public static void addImportForItem(InsertionContext context, PsiClass aClass) {
if (aClass.getQualifiedName() == null) return;
PsiFile file = context.getFile();
int newTail = JavaCompletionUtil.insertClassReference(aClass, file, context.getStartOffset(), context.getTailOffset());
context.setTailOffset(newTail);
PostprocessReformattingAspect.getInstance(context.getProject()).doPostponedFormatting();
JavaCompletionUtil.shortenReference(file, context.getStartOffset());
}
}