IDEA-87003

This commit is contained in:
Alexey Kudravtsev
2012-06-19 13:02:05 +04:00
parent 0d421564e3
commit 6ed387d394
7 changed files with 94 additions and 16 deletions
@@ -23,6 +23,7 @@ import com.intellij.openapi.editor.Editor;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiJavaCodeReferenceElement;
import com.intellij.psi.PsiReference;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -56,4 +57,19 @@ public class JavaReferenceImporter implements ReferenceImporter {
}
return false;
}
@Override
public boolean autoImportReferenceAt(@NotNull Editor editor, @NotNull PsiFile file, int offset) {
if (!file.getViewProvider().getLanguages().contains(StdLanguages.JAVA)) return false;
PsiReference element = file.findReferenceAt(offset);
if (element instanceof PsiJavaCodeReferenceElement) {
PsiJavaCodeReferenceElement ref = (PsiJavaCodeReferenceElement)element;
if (ref.multiResolve(true).length == 0) {
new ImportClassFix(ref).doFix(editor, false, true);
return true;
}
}
return false;
}
}
@@ -36,12 +36,12 @@ public class ImportClassFix extends ImportClassFixBase<PsiJavaCodeReferenceEleme
}
@Override
protected String getReferenceName(PsiJavaCodeReferenceElement reference) {
protected String getReferenceName(@NotNull PsiJavaCodeReferenceElement reference) {
return reference.getReferenceName();
}
@Override
protected PsiElement getReferenceNameElement(PsiJavaCodeReferenceElement reference) {
protected PsiElement getReferenceNameElement(@NotNull PsiJavaCodeReferenceElement reference) {
return reference.getReferenceNameElement();
}
@@ -56,7 +56,7 @@ public class ImportClassFix extends ImportClassFixBase<PsiJavaCodeReferenceEleme
}
@Override
protected boolean hasTypeParameters(PsiJavaCodeReferenceElement reference) {
protected boolean hasTypeParameters(@NotNull PsiJavaCodeReferenceElement reference) {
final PsiReferenceParameterList refParameters = reference.getParameterList();
return refParameters != null && refParameters.getTypeParameterElements().length > 0;
}
@@ -97,8 +97,9 @@ public class ImportClassFix extends ImportClassFixBase<PsiJavaCodeReferenceEleme
@Override
protected String getRequiredMemberName(PsiJavaCodeReferenceElement reference) {
if (reference.getParent() instanceof PsiJavaCodeReferenceElement) {
return ((PsiJavaCodeReferenceElement)reference.getParent()).getReferenceName();
PsiElement parent = reference.getParent();
if (parent instanceof PsiJavaCodeReferenceElement) {
return ((PsiJavaCodeReferenceElement)parent).getReferenceName();
}
return super.getRequiredMemberName(reference);
@@ -72,10 +72,9 @@ public abstract class ImportClassFixBase<T extends PsiElement & PsiReference> im
}
@Nullable
protected abstract String getReferenceName(T reference);
protected abstract PsiElement getReferenceNameElement(T reference);
protected abstract boolean hasTypeParameters(T reference);
protected abstract String getReferenceName(@NotNull T reference);
protected abstract PsiElement getReferenceNameElement(@NotNull T reference);
protected abstract boolean hasTypeParameters(@NotNull T reference);
@NotNull
public List<PsiClass> getClassesToImport() {
@@ -145,7 +144,7 @@ public abstract class ImportClassFixBase<T extends PsiElement & PsiReference> im
POPUP_NOT_SHOWN
}
public Result doFix(@NotNull final Editor editor, boolean doShow, final boolean allowCaretNearRef) {
public Result doFix(@NotNull final Editor editor, boolean allowPopup, final boolean allowCaretNearRef) {
List<PsiClass> classesToImport = getClassesToImport();
if (classesToImport.isEmpty()) return Result.POPUP_NOT_SHOWN;
@@ -194,7 +193,7 @@ public abstract class ImportClassFixBase<T extends PsiElement & PsiReference> im
return Result.CLASS_AUTO_IMPORTED;
}
if (doShow && canImportHere) {
if (allowPopup && canImportHere) {
String hintText = ShowAutoImportPass.getMessage(classes.length > 1, classes[0].getQualifiedName());
if (!ApplicationManager.getApplication().isUnitTestMode() && !HintManager.getInstance().hasShownHintsThatWillHideByOtherHint(true)) {
HintManager.getInstance().showQuestionHint(editor, hintText, myRef.getTextOffset(),
@@ -261,7 +260,7 @@ public abstract class ImportClassFixBase<T extends PsiElement & PsiReference> im
}
}
private boolean isCaretNearRef(Editor editor, T ref) {
private boolean isCaretNearRef(@NotNull Editor editor, @NotNull T ref) {
PsiElement nameElement = getReferenceNameElement(ref);
if (nameElement == null) return false;
TextRange range = nameElement.getTextRange();