diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsElementImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsElementImpl.java index 6e60a2d20401..96ec63b29b33 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsElementImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsElementImpl.java @@ -182,7 +182,7 @@ public abstract class ClsElementImpl extends PsiElementBase implements PsiCompil if (mirror == null) return null; PsiElement mirrorAt = mirror.findElementAt(offset); while (true) { - if (mirrorAt == null) return null; + if (mirrorAt == null || mirrorAt instanceof PsiFile) return null; PsiElement elementAt = mirrorToElement(mirrorAt); if (elementAt != null) return elementAt; mirrorAt = mirrorAt.getParent(); diff --git a/java/java-tests/testSrc/com/intellij/psi/ClsMirrorBuildingTest.java b/java/java-tests/testSrc/com/intellij/psi/ClsMirrorBuildingTest.java index bc2af54bcfb9..4cbee71ec9d9 100644 --- a/java/java-tests/testSrc/com/intellij/psi/ClsMirrorBuildingTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/ClsMirrorBuildingTest.java @@ -117,7 +117,7 @@ public class ClsMirrorBuildingTest extends LightIdeaTestCase { assertNotNull(classFile.getPath(), vFile); PsiFile psiFile = PsiManager.getInstance(getProject()).findFile(vFile); assertNotNull(psiFile); - String testDir = JavaTestUtil.getJavaTestDataPath() + "/psi/cls/mirror/"; + String testDir = getTestDataDir(); FileUtil.copy(new File(testDir, "pkg/ReuseTestV1.class"), classFile); vFile.refresh(false, false); @@ -138,12 +138,28 @@ public class ClsMirrorBuildingTest extends LightIdeaTestCase { assertSame(doc2, PsiDocumentManager.getInstance(getProject()).getDocument(psiFile)); } + public void testElementAt() { + String path = getTestDataDir() + "/pkg/SimpleEnum.class"; + VirtualFile vFile = StandardFileSystems.local().findFileByPath(path); + assertNotNull(path, vFile); + PsiFile psiFile = PsiManager.getInstance(getProject()).findFile(vFile); + assertNotNull(path, psiFile); + for (int i = 0; i < psiFile.getTextLength(); i++) { + PsiElement element = psiFile.findElementAt(i); + assertFalse(i + ":" + element, element instanceof PsiFile); + } + } + + private static String getTestDataDir() { + return JavaTestUtil.getJavaTestDataPath() + "/psi/cls/mirror/"; + } + private void doTest() { doTest(getTestName(false)); } private static void doTest(String name) { - String testDir = JavaTestUtil.getJavaTestDataPath() + "/psi/cls/mirror/"; + String testDir = getTestDataDir(); doTest(testDir + "pkg/" + name + ".class", testDir + name + ".txt"); }