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
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());
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);
}
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;
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;
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)) {
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;
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());
}
}
}
+
+ 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());
+ }
}