diff --git a/idea/src/org/jetbrains/kotlin/idea/KotlinFoldingBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/KotlinFoldingBuilder.kt index 6f360f660f1..18c8e8e5492 100644 --- a/idea/src/org/jetbrains/kotlin/idea/KotlinFoldingBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/KotlinFoldingBuilder.kt @@ -35,8 +35,10 @@ import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.references.resolveMainReferenceToDescriptors import org.jetbrains.kotlin.kdoc.lexer.KDocTokens import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.KtCallExpression +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtFunctionLiteral +import org.jetbrains.kotlin.psi.KtImportList import org.jetbrains.kotlin.psi.psiUtil.allChildren import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.referenceExpression @@ -66,17 +68,19 @@ class KotlinFoldingBuilder : CustomFoldingBuilder(), DumbAware { if (root !is KtFile) { return } - val imports = root.importDirectives - if (imports.size > 1) { - val importKeyword = imports[0].firstChild - val startOffset = importKeyword.endOffset + 1 - val importList = root.importList - if (importList != null) { + val importList = root.importList + if (importList != null) { + val firstImport = importList.imports.firstOrNull() + if (firstImport != null && importList.imports.size > 1) { + val importKeyword = firstImport.firstChild + + val startOffset = importKeyword.endOffset + 1 val endOffset = importList.endOffset - val range = TextRange(startOffset, endOffset) - descriptors.add(FoldingDescriptor(importList, range).apply { setCanBeRemovedWhenCollapsed(true) }) + descriptors.add(FoldingDescriptor(importList, TextRange(startOffset, endOffset)).apply { + setCanBeRemovedWhenCollapsed(true) + }) } } diff --git a/idea/testData/folding/checkCollapse/doubleImportListsError.kt b/idea/testData/folding/checkCollapse/doubleImportListsError.kt new file mode 100644 index 00000000000..1c2b436b53c --- /dev/null +++ b/idea/testData/folding/checkCollapse/doubleImportListsError.kt @@ -0,0 +1,8 @@ +// An empty import list in PSI +inline fun foo() {} + +// Another import list in PSI +import a.foo +import a.inlineOnly + +fun box(): String {} diff --git a/idea/tests/org/jetbrains/kotlin/idea/folding/KotlinFoldingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/folding/KotlinFoldingTestGenerated.java index 5d6dfa4f4fc..ca82a64b110 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/folding/KotlinFoldingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/folding/KotlinFoldingTestGenerated.java @@ -109,6 +109,11 @@ public class KotlinFoldingTestGenerated extends AbstractKotlinFoldingTest { runTest("idea/testData/folding/checkCollapse/customRegionsNotFullBlock.kt"); } + @TestMetadata("doubleImportListsError.kt") + public void testDoubleImportListsError() throws Exception { + runTest("idea/testData/folding/checkCollapse/doubleImportListsError.kt"); + } + @TestMetadata("functionLiteral.kt") public void testFunctionLiteral() throws Exception { runTest("idea/testData/folding/checkCollapse/functionLiteral.kt");