mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-26 19:06:24 +07:00
IDEA-87003
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+6
-5
@@ -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);
|
||||
|
||||
+6
-7
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user