Minor: Simplify generateMembers() function
This commit is contained in:
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.idea.util.ShortenReferences
|
|||||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.siblings
|
import org.jetbrains.kotlin.psi.psiUtil.siblings
|
||||||
|
import org.jetbrains.kotlin.utils.ifEmpty
|
||||||
|
|
||||||
public fun moveCaretIntoGeneratedElement(editor: Editor, element: PsiElement) {
|
public fun moveCaretIntoGeneratedElement(editor: Editor, element: PsiElement) {
|
||||||
val project = element.project
|
val project = element.project
|
||||||
@@ -146,32 +147,20 @@ public fun <T : JetDeclaration> generateMembers(
|
|||||||
classOrObject: JetClassOrObject,
|
classOrObject: JetClassOrObject,
|
||||||
generators: Collection<() -> T>
|
generators: Collection<() -> T>
|
||||||
): List<T> {
|
): List<T> {
|
||||||
val insertedMembers = SmartList<T>()
|
generators.ifEmpty { return emptyList() }
|
||||||
return runWriteAction<List<T>> {
|
|
||||||
if (generators.isEmpty()) return@runWriteAction emptyList()
|
|
||||||
|
|
||||||
|
return runWriteAction<List<T>> {
|
||||||
val body = classOrObject.getOrCreateBody()
|
val body = classOrObject.getOrCreateBody()
|
||||||
|
|
||||||
var afterAnchor = findInsertAfterAnchor(editor, body) ?: return@runWriteAction emptyList()
|
var afterAnchor = findInsertAfterAnchor(editor, body) ?: return@runWriteAction emptyList()
|
||||||
|
val insertedMembers = generators.mapTo(SmartList<T>()) {
|
||||||
var firstGenerated: PsiElement? = null
|
|
||||||
|
|
||||||
for (generator in generators) {
|
|
||||||
val member = generator()
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
val added = body.addAfter(member, afterAnchor) as T
|
(body.addAfter(it(), afterAnchor) as T).apply { afterAnchor = this }
|
||||||
|
|
||||||
if (firstGenerated == null) {
|
|
||||||
firstGenerated = added
|
|
||||||
}
|
|
||||||
|
|
||||||
afterAnchor = added
|
|
||||||
insertedMembers.add(added)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ShortenReferences.DEFAULT.process(insertedMembers)
|
ShortenReferences.DEFAULT.process(insertedMembers)
|
||||||
|
|
||||||
moveCaretIntoGeneratedElement(editor, firstGenerated!!)
|
moveCaretIntoGeneratedElement(editor, insertedMembers.first())
|
||||||
|
|
||||||
insertedMembers
|
insertedMembers
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user