IDEA-33405

This commit is contained in:
Alexey Kudravtsev
2010-11-10 12:54:00 +03:00
parent cfaa73797a
commit f39f6107b7
2 changed files with 47 additions and 3 deletions
@@ -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 {