Fix exception in imports folding when there're two imports lists (KT-29455)

Probably caused by modifications of the recovery for import lists
https://github.com/JetBrains/kotlin/commit/65e6e21d0f3017417ecb786a63d5209c546dd744

 #KT-29455 Fixed
This commit is contained in:
Nikolay Krasko
2019-01-23 18:02:57 +03:00
parent 92a50b2880
commit ed5051a5e3
3 changed files with 27 additions and 10 deletions
@@ -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)
})
}
}
@@ -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 {}
@@ -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");