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.idea.references.resolveMainReferenceToDescriptors
|
||||||
import org.jetbrains.kotlin.kdoc.lexer.KDocTokens
|
import org.jetbrains.kotlin.kdoc.lexer.KDocTokens
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.psi.KtCallExpression
|
||||||
import org.jetbrains.kotlin.psi.*
|
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.allChildren
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.referenceExpression
|
import org.jetbrains.kotlin.psi.psiUtil.referenceExpression
|
||||||
@@ -66,17 +68,19 @@ class KotlinFoldingBuilder : CustomFoldingBuilder(), DumbAware {
|
|||||||
if (root !is KtFile) {
|
if (root !is KtFile) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
val imports = root.importDirectives
|
|
||||||
if (imports.size > 1) {
|
|
||||||
val importKeyword = imports[0].firstChild
|
|
||||||
val startOffset = importKeyword.endOffset + 1
|
|
||||||
|
|
||||||
val importList = root.importList
|
val importList = root.importList
|
||||||
if (importList != null) {
|
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 endOffset = importList.endOffset
|
||||||
|
|
||||||
val range = TextRange(startOffset, endOffset)
|
descriptors.add(FoldingDescriptor(importList, TextRange(startOffset, endOffset)).apply {
|
||||||
descriptors.add(FoldingDescriptor(importList, range).apply { setCanBeRemovedWhenCollapsed(true) })
|
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");
|
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")
|
@TestMetadata("functionLiteral.kt")
|
||||||
public void testFunctionLiteral() throws Exception {
|
public void testFunctionLiteral() throws Exception {
|
||||||
runTest("idea/testData/folding/checkCollapse/functionLiteral.kt");
|
runTest("idea/testData/folding/checkCollapse/functionLiteral.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user