diff --git a/java/java-psi-impl/src/com/intellij/psi/ClassFileViewProvider.java b/java/java-psi-impl/src/com/intellij/psi/ClassFileViewProvider.java index ec95fe08d902..43c4036ef814 100644 --- a/java/java-psi-impl/src/com/intellij/psi/ClassFileViewProvider.java +++ b/java/java-psi-impl/src/com/intellij/psi/ClassFileViewProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2013 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -42,14 +42,15 @@ public class ClassFileViewProvider extends SingleRootFileViewProvider { if (fileIndex.isInLibraryClasses(vFile) || !fileIndex.isInSource(vFile)) { String name = vFile.getName(); - // skip inners & anonymous + // skip inners & anonymous (todo: read actual class name from file) int dotIndex = name.lastIndexOf('.'); if (dotIndex < 0) dotIndex = name.length(); int index = name.lastIndexOf('$', dotIndex); - if (index > 0) return null; // todo: read actual class name from file - - return new ClsFileImpl((PsiManagerImpl)PsiManager.getInstance(project), this); + if (index <= 0 || index == dotIndex - 1) { + return new ClsFileImpl((PsiManagerImpl)PsiManager.getInstance(project), this); + } } + return null; } diff --git a/java/java-tests/testData/psi/cls/mirror/BuckClass$.txt b/java/java-tests/testData/psi/cls/mirror/BuckClass$.txt new file mode 100644 index 000000000000..43f5a0b578b6 --- /dev/null +++ b/java/java-tests/testData/psi/cls/mirror/BuckClass$.txt @@ -0,0 +1,11 @@ + + // IntelliJ API Decompiler stub source generated from a class file + // Implementation of methods is not available + +package pkg; + +class BuckClass$ { + BuckClass$() { /* compiled code */ } + + static pkg.BuckClass$ getInstance() { /* compiled code */ } +} \ No newline at end of file diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/BuckClass$.class b/java/java-tests/testData/psi/cls/mirror/pkg/BuckClass$.class new file mode 100644 index 000000000000..0f4d2ded07db Binary files /dev/null and b/java/java-tests/testData/psi/cls/mirror/pkg/BuckClass$.class differ diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/BuckClass$.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/BuckClass$.java new file mode 100644 index 000000000000..65edd13afd19 --- /dev/null +++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/BuckClass$.java @@ -0,0 +1,11 @@ +package pkg; + +class BuckClass$ { + BuckClass$() { + System.out.println(this); + } + + static BuckClass$ getInstance() { + return new BuckClass$(); + } +} diff --git a/java/java-tests/testSrc/com/intellij/psi/ClsMirrorBuildingTest.java b/java/java-tests/testSrc/com/intellij/psi/ClsMirrorBuildingTest.java index 53dd6849e7b9..7d77adab3513 100644 --- a/java/java-tests/testSrc/com/intellij/psi/ClsMirrorBuildingTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/ClsMirrorBuildingTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2013 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -35,6 +35,7 @@ public class ClsMirrorBuildingTest extends LightIdeaTestCase { public void testParameterNames() { doTest(); } public void testEmptyEnum() { doTest(); } public void test$BuckClass() { doTest(); } + public void testBuckClass$() { doTest(); } public void testExtMethods() { doTest(); } public void testMethodReceiver() { doTest(); } public void testPackageInfo() { doTest("package-info"); }