From dc05596ce064c30697726f187b2c4ef2ced6705d Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Wed, 22 Apr 2015 15:20:54 +0300 Subject: [PATCH] Create FqName safely in KotlinCliJavaFileManagerImpl#findPackage #KT-7501 Fixed --- .../cli/jvm/compiler/KotlinCliJavaFileManagerImpl.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCliJavaFileManagerImpl.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCliJavaFileManagerImpl.kt index b546aaf0f0d..092b27a73c7 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCliJavaFileManagerImpl.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCliJavaFileManagerImpl.kt @@ -78,7 +78,8 @@ public class KotlinCliJavaFileManagerImpl(private val myPsiManager: PsiManager) override fun findPackage(packageName: String): PsiPackage? { var found = false - index.traverseDirectoriesInPackage(FqName(packageName)) { _, __ -> + val packageFqName = packageName.toSafeFqName() ?: return null + index.traverseDirectoriesInPackage(packageFqName) { _, __ -> found = true //abort on first found false @@ -149,8 +150,8 @@ public class KotlinCliJavaFileManagerImpl(private val myPsiManager: PsiManager) } // a sad workaround to avoid throwing exception when called from inside IDEA code -private fun String.toSafeTopLevelClassId(): ClassId? = try { - ClassId.topLevel(FqName(this)) +private fun safely(compute: () -> T): T? = try { + compute() } catch (e: IllegalArgumentException) { null @@ -158,3 +159,6 @@ catch (e: IllegalArgumentException) { catch (e: AssertionError) { null } + +private fun String.toSafeFqName(): FqName? = safely { FqName(this) } +private fun String.toSafeTopLevelClassId(): ClassId? = safely { ClassId.topLevel(FqName(this)) } \ No newline at end of file