From ffb702768043799871392a3b3572fcf29a2eecf5 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Tue, 26 May 2015 18:08:18 +0300 Subject: [PATCH] JetPositionManager: fix finding psi file by source name --- .../kotlin/idea/util/DebuggerUtils.java | 53 +++++++++++-------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/util/DebuggerUtils.java b/idea/src/org/jetbrains/kotlin/idea/util/DebuggerUtils.java index c41785baa42..d9dbbab57de 100644 --- a/idea/src/org/jetbrains/kotlin/idea/util/DebuggerUtils.java +++ b/idea/src/org/jetbrains/kotlin/idea/util/DebuggerUtils.java @@ -78,7 +78,7 @@ public class DebuggerUtils { return filesWithExactName.iterator().next(); } - if (!isPackagePartClassName(className)) { + if (isPackageClassName(className)) { for (JetFile file : filesWithExactName) { boolean hasTopLevelMembers = KotlinPackage.any(file.getDeclarations(), new Function1() { @Override @@ -90,42 +90,51 @@ public class DebuggerUtils { } } - JetFile file = getFileForPackagePartPrefixedName(filesWithExactName, className.getInternalName()); - if (file != null) { - return file; - } - - boolean isInLibrary = KotlinPackage.all(filesWithExactName, new Function1() { - @Override - public Boolean invoke(JetFile file) { - return LibraryUtil.findLibraryEntry(file.getVirtualFile(), file.getProject()) != null; + if (isPackagePartClassName(className)) { + JetFile file = getFileForPackagePartPrefixedName(filesWithExactName, className.getInternalName()); + if (file != null) { + return file; } - }); - if (isInLibrary) { - return KotlinPackage.singleOrNull(KotlinPackage.filter(filesWithExactName, new Function1() { + boolean isInLibrary = KotlinPackage.all(filesWithExactName, new Function1() { @Override public Boolean invoke(JetFile file) { - Integer startLineOffset = CodeInsightUtils.getStartLineOffset(file, lineNumber); - assert startLineOffset != null : "Cannot find start line offset for file " + file.getName() + ", line " + lineNumber; - JetDeclaration elementAt = PsiTreeUtil.getParentOfType(file.findElementAt(startLineOffset), JetDeclaration.class); - return elementAt != null && - className.getInternalName().equals(DebuggerPackage.findPackagePartInternalNameForLibraryFile(elementAt)); + return LibraryUtil.findLibraryEntry(file.getVirtualFile(), file.getProject()) != null; } - })); + }); + + if (isInLibrary) { + return KotlinPackage.singleOrNull(KotlinPackage.filter(filesWithExactName, new Function1() { + @Override + public Boolean invoke(JetFile file) { + Integer startLineOffset = CodeInsightUtils.getStartLineOffset(file, lineNumber); + assert startLineOffset != null : "Cannot find start line offset for file " + file.getName() + ", line " + lineNumber; + JetDeclaration elementAt = PsiTreeUtil.getParentOfType(file.findElementAt(startLineOffset), JetDeclaration.class); + return elementAt != null && + className.getInternalName().equals(DebuggerPackage.findPackagePartInternalNameForLibraryFile(elementAt)); + } + })); + } + + return null; } - return null; + return filesWithExactName.iterator().next(); } private static boolean isPackagePartClassName(JvmClassName className) { - FqName packageFqName = PackageClassUtils.getPackageClassFqName(className.getPackageFqName()); - String packageName = packageFqName.asString().replaceAll("\\.", "/"); + String packageName = PackageClassUtils.getPackageClassInternalName(className.getPackageFqName()); String internalName = className.getInternalName(); return !internalName.equals(packageName) && internalName.startsWith(packageName); } + private static boolean isPackageClassName(JvmClassName className) { + String packageName = PackageClassUtils.getPackageClassInternalName(className.getPackageFqName()); + + return packageName.equals(className.getInternalName()); + } + @Nullable private static JetFile getFileForPackagePartPrefixedName( @NotNull Collection allPackageFiles,