prefer package to class in import list (IDEA-113756)

This commit is contained in:
Anna Kozlova
2016-06-07 20:06:58 +03:00
parent 74030e0524
commit db53a27296
5 changed files with 33 additions and 3 deletions
@@ -461,6 +461,14 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme
case CLASS_FQ_OR_PACKAGE_NAME_KIND:
case CLASS_OR_PACKAGE_NAME_KIND: {
int classKind = kind == CLASS_OR_PACKAGE_NAME_KIND ? CLASS_NAME_KIND : CLASS_FQ_NAME_KIND;
//A single-type-import declaration d in a compilation unit c of package p that imports a type named n shadows, throughout c, the declarations of:
//any top level type named n declared in another compilation unit of p
if (PsiTreeUtil.getParentOfType(this, PsiImportStatementBase.class) != null) {
JavaResolveResult[] result = resolve(PACKAGE_NAME_KIND, containingFile);
return result.length == 0 ? resolve(classKind, containingFile) : result;
}
JavaResolveResult[] result = resolve(classKind, containingFile);
if (result.length == 1 && !result[0].isAccessible()) {
@@ -713,7 +721,10 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme
case CLASS_FQ_OR_PACKAGE_NAME_KIND:
if (element instanceof PsiClass) {
final String qName = ((PsiClass)element).getQualifiedName();
return qName != null && qName.equals(getCanonicalText(false, null, containingFile));
if (qName != null && qName.equals(getCanonicalText(false, null, containingFile))) {
return !PsiUtil.isFromDefaultPackage((PsiClass)element) ||
PsiTreeUtil.getParentOfType(this, PsiImportStatementBase.class) == null;
}
}
if (element instanceof PsiPackage) {
final String qName = ((PsiPackage)element).getQualifiedName();
@@ -0,0 +1,5 @@
import test.A;
class B {
private A a;
}
@@ -1,4 +1,5 @@
import static InlineIssue.ClassToMove.F1;
package p;
import static p.InlineIssue.ClassToMove.F1;
abstract class InlineIssue {
public enum ClassToMove { F1 }
@@ -1,4 +1,5 @@
import static Desc.ClassToMove.F1;
package p;
import static p.Desc.ClassToMove.F1;
abstract class InlineIssue {
}
@@ -16,6 +16,8 @@
package com.intellij.codeInsight.daemon;
import com.intellij.JavaTestUtil;
import com.intellij.psi.PsiClass;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.testFramework.LightProjectDescriptor;
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
import org.jetbrains.annotations.NotNull;
@@ -35,6 +37,16 @@ public class LightAdvHighlightingFixtureTest extends LightCodeInsightFixtureTest
myFixture.checkHighlighting(false, false, false);
}
public void testPackageNamedAsClassInDefaultPackage() throws Exception {
myFixture.addClass("package test; public class A {}");
final PsiClass aClass = myFixture.addClass("public class test {}");
myFixture.configureByFile(getTestName(false) + ".java");
myFixture.checkHighlighting();
assertNull(ReferencesSearch.search(aClass).findFirst());
}
@Override
protected String getBasePath() {
return JavaTestUtil.getRelativeJavaTestDataPath() + "/codeInsight/daemonCodeAnalyzer/advFixture";