Minor: Simplify generateMembers() function

This commit is contained in:
Alexey Sedunov
2015-10-07 15:48:41 +03:00
parent 3c14bedc04
commit f59e56b7e9
@@ -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
} }