diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java index 483fff6fab81..88773495e411 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java @@ -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(); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advFixture/PackageNamedAsClassInDefaultPackage.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advFixture/PackageNamedAsClassInDefaultPackage.java new file mode 100644 index 000000000000..763ed3cdc026 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advFixture/PackageNamedAsClassInDefaultPackage.java @@ -0,0 +1,5 @@ +import test.A; + +class B { + private A a; +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/pushDown/ReferenceForMovedInnerClass.java b/java/java-tests/testData/refactoring/pushDown/ReferenceForMovedInnerClass.java index 0fde2da784f3..20954bb4bfb6 100644 --- a/java/java-tests/testData/refactoring/pushDown/ReferenceForMovedInnerClass.java +++ b/java/java-tests/testData/refactoring/pushDown/ReferenceForMovedInnerClass.java @@ -1,4 +1,5 @@ -import static InlineIssue.ClassToMove.F1; +package p; +import static p.InlineIssue.ClassToMove.F1; abstract class InlineIssue { public enum ClassToMove { F1 } diff --git a/java/java-tests/testData/refactoring/pushDown/ReferenceForMovedInnerClass_after.java b/java/java-tests/testData/refactoring/pushDown/ReferenceForMovedInnerClass_after.java index 2f447026e692..26a0aa0598b8 100644 --- a/java/java-tests/testData/refactoring/pushDown/ReferenceForMovedInnerClass_after.java +++ b/java/java-tests/testData/refactoring/pushDown/ReferenceForMovedInnerClass_after.java @@ -1,4 +1,5 @@ -import static Desc.ClassToMove.F1; +package p; +import static p.Desc.ClassToMove.F1; abstract class InlineIssue { } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingFixtureTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingFixtureTest.java index 515e877bccaa..ec4dac578f33 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingFixtureTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingFixtureTest.java @@ -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";