mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-33405
This commit is contained in:
@@ -21,6 +21,7 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
@@ -468,7 +469,7 @@ public class ImportHelper{
|
||||
return array;
|
||||
}
|
||||
|
||||
private static PsiClass findSingleImportByShortName(@NotNull PsiJavaFile file, @NotNull String shortClassName){
|
||||
private static PsiClass findSingleImportByShortName(@NotNull final PsiJavaFile file, @NotNull String shortClassName){
|
||||
PsiClass[] refs = file.getSingleClassImports(true);
|
||||
for (PsiClass ref : refs) {
|
||||
String className = ref.getQualifiedName();
|
||||
@@ -482,6 +483,33 @@ public class ImportHelper{
|
||||
return aClass;
|
||||
}
|
||||
}
|
||||
|
||||
// there maybe a class imported implicitly from current package
|
||||
String packageName = file.getPackageName();
|
||||
if (!StringUtil.isEmptyOrSpaces(packageName)) {
|
||||
String fqn = packageName + "." + shortClassName;
|
||||
final PsiClass aClass = JavaPsiFacade.getInstance(file.getProject()).findClass(fqn, file.getResolveScope());
|
||||
if (aClass != null) {
|
||||
final boolean[] foundRef = {false};
|
||||
// check if that short name referenced in the file
|
||||
file.accept(new JavaRecursiveElementWalkingVisitor() {
|
||||
@Override
|
||||
public void visitElement(PsiElement element) {
|
||||
if (foundRef[0]) return;
|
||||
super.visitElement(element);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitReferenceElement(PsiJavaCodeReferenceElement reference) {
|
||||
if (file.getManager().areElementsEquivalent(reference.resolve(), aClass)) {
|
||||
foundRef[0] = true;
|
||||
}
|
||||
super.visitReferenceElement(reference);
|
||||
}
|
||||
});
|
||||
if (foundRef[0]) return aClass;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -150,8 +150,8 @@ public class ImportHelperTest extends DaemonAnalyzerTestCase {
|
||||
ImportHelper importHelper = new ImportHelper(settings);
|
||||
|
||||
PsiClass psiClass = JavaPsiFacade.getInstance(getProject()).findClass(fqn, GlobalSearchScope.allScope(getProject()));
|
||||
boolean b = importHelper.addImport(file, psiClass);
|
||||
assertTrue(b);
|
||||
boolean b = importHelper.addImport(file, psiClass);
|
||||
assertTrue(b);
|
||||
|
||||
assertOrder(file, expectedOrder);
|
||||
}
|
||||
@@ -193,6 +193,22 @@ public class ImportHelperTest extends DaemonAnalyzerTestCase {
|
||||
String text = LoadTextUtil.loadText(vFile).toString();
|
||||
assertEquals(text, getFile().getText());
|
||||
}
|
||||
public void testConflictingClassesFromCurrentPackage() throws Throwable {
|
||||
final PsiFile file = configureByText(StdFileTypes.JAVA, "package java.util; class X{ Date d;}");
|
||||
assertEmpty(filter(doHighlighting(), HighlightSeverity.ERROR));
|
||||
|
||||
new WriteCommandAction.Simple(getProject()) {
|
||||
@Override
|
||||
protected void run() throws Throwable {
|
||||
CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject());
|
||||
ImportHelper importHelper = new ImportHelper(settings);
|
||||
|
||||
PsiClass psiClass = JavaPsiFacade.getInstance(getProject()).findClass("java.sql.Date", GlobalSearchScope.allScope(getProject()));
|
||||
boolean b = importHelper.addImport((PsiJavaFile)file, psiClass);
|
||||
assertFalse(b); // must fail
|
||||
}
|
||||
}.execute().throwException();
|
||||
}
|
||||
|
||||
@DoNotWrapInCommand
|
||||
public void testAutoImportCaretLocation() throws Throwable {
|
||||
|
||||
Reference in New Issue
Block a user