Changed completion for classes, so if they have the same name as already imported, new import is not added. Qualified name is inserted instead.
This commit is contained in:
@@ -49,15 +49,12 @@ public class JetClassInsertHandler implements InsertHandler<LookupElement> {
|
||||
}
|
||||
|
||||
if (context.getFile() instanceof JetFile && item.getObject() instanceof JetLookupObject) {
|
||||
final DeclarationDescriptor descriptor = ((JetLookupObject) item.getObject()).getDescriptor();
|
||||
if (descriptor != null) {
|
||||
ApplicationManager.getApplication().runWriteAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final FqName fqn = DescriptorUtils.getFQName(descriptor).toSafe();
|
||||
ImportInsertHelper.addImportDirective(fqn, jetFile);
|
||||
}
|
||||
});
|
||||
JetLookupObject lookupObject = (JetLookupObject)item.getObject();
|
||||
final DeclarationDescriptor descriptor = lookupObject.getDescriptor();
|
||||
PsiElement targetElement = lookupObject.getPsiElement();
|
||||
if (descriptor != null && targetElement != null) {
|
||||
final FqName fqn = DescriptorUtils.getFQName(descriptor).toSafe();
|
||||
ImportInsertHelper.addImportDirectiveOrChangeToFqName(fqn, jetFile, context.getStartOffset(), targetElement);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-2
@@ -35,8 +35,10 @@ public class JetJavaClassInsertHandler implements InsertHandler<JavaPsiClassRefe
|
||||
@Override
|
||||
public void handleInsert(final InsertionContext context, final JavaPsiClassReferenceElement item) {
|
||||
if (context.getFile() instanceof JetFile) {
|
||||
final JetFile jetFile = (JetFile) context.getFile();
|
||||
ImportInsertHelper.addImportDirective(new FqName(item.getQualifiedName()), jetFile);
|
||||
ImportInsertHelper.addImportDirectiveOrChangeToFqName(new FqName(item.getQualifiedName()),
|
||||
(JetFile) context.getFile(),
|
||||
context.getStartOffset(),
|
||||
item.getObject());
|
||||
}
|
||||
|
||||
// check annotation
|
||||
|
||||
@@ -16,7 +16,12 @@
|
||||
|
||||
package org.jetbrains.jet.plugin.quickfix;
|
||||
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.DefaultModuleConfiguration;
|
||||
@@ -33,6 +38,7 @@ import org.jetbrains.jet.lang.types.ErrorUtils;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
import org.jetbrains.jet.lang.types.TypeUtils;
|
||||
import org.jetbrains.jet.plugin.JetPluginUtil;
|
||||
import org.jetbrains.jet.plugin.references.JetPsiReference;
|
||||
import org.jetbrains.jet.util.QualifiedNamesUtil;
|
||||
|
||||
import java.util.List;
|
||||
@@ -76,6 +82,24 @@ public class ImportInsertHelper {
|
||||
addImportDirective(new ImportPath(importFqn, false), null, file);
|
||||
}
|
||||
|
||||
public static void addImportDirectiveOrChangeToFqName(@NotNull FqName importFqn, @NotNull JetFile file, int refOffset, @NotNull PsiElement targetElement) {
|
||||
PsiReference reference = file.findReferenceAt(refOffset);
|
||||
if (reference instanceof JetPsiReference) {
|
||||
PsiElement target = reference.resolve();
|
||||
if (target != null) {
|
||||
boolean same = file.getManager().areElementsEquivalent(target, targetElement);
|
||||
same |= target instanceof PsiClass && importFqn.getFqName().equals(((PsiClass)target).getQualifiedName());
|
||||
if (!same) {
|
||||
Document document = PsiDocumentManager.getInstance(file.getProject()).getDocument(file);
|
||||
TextRange refRange = reference.getElement().getTextRange();
|
||||
document.replaceString(refRange.getStartOffset(), refRange.getEndOffset(), importFqn.getFqName());
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
addImportDirective(new ImportPath(importFqn, false), null, file);
|
||||
}
|
||||
|
||||
public static void addImportDirective(@NotNull ImportPath importPath, @Nullable String aliasName, @NotNull JetFile file) {
|
||||
if (!doNeedImport(importPath, aliasName, file)) {
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user