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:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user