Code Insight: "Generate secondary constructor" action

#KT-6970 Fixed
This commit is contained in:
Alexey Sedunov
2015-10-09 17:54:14 +03:00
parent 78829b9e8f
commit 30d697109c
37 changed files with 1025 additions and 246 deletions
@@ -26,7 +26,7 @@ import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiFile
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.quickfix.generateMembers
import org.jetbrains.kotlin.idea.quickfix.insertMembersAfter
import org.jetbrains.kotlin.psi.JetClassOrObject
import org.jetbrains.kotlin.psi.JetFile
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
@@ -90,7 +90,7 @@ public abstract class OverrideImplementMembersHandler : LanguageCodeInsightActio
companion object {
public fun generateMembers(editor: Editor, classOrObject: JetClassOrObject, selectedElements: Collection<OverrideMemberChooserObject>) {
val project = classOrObject.project
generateMembers(editor, classOrObject, selectedElements.map { chooser -> { chooser.generateMember(project) } })
insertMembersAfter(editor, classOrObject, selectedElements.map { it.generateMember(project) })
}
}
}
@@ -21,8 +21,6 @@ import com.intellij.psi.PsiWhiteSpace
import com.intellij.psi.impl.source.codeStyle.CodeEditUtil
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.lexer.JetModifierKeywordToken
import org.jetbrains.kotlin.lexer.JetTokens
@@ -103,16 +101,21 @@ public fun JetCallExpression.moveFunctionLiteralOutsideParentheses() {
}
}
public fun JetBlockExpression.appendElement(element: JetElement): JetElement {
public fun JetBlockExpression.appendElement(element: JetElement, addNewLine: Boolean = false): JetElement {
val rBrace = getRBrace()
val newLine = JetPsiFactory(this).createNewLine()
val anchor = if (rBrace == null) {
val lastChild = getLastChild()
if (lastChild !is PsiWhiteSpace) addAfter(JetPsiFactory(this).createNewLine(), lastChild)!! else lastChild
if (lastChild !is PsiWhiteSpace) addAfter(newLine, lastChild)!! else lastChild
}
else {
rBrace.getPrevSibling()!!
}
return addAfter(element, anchor)!! as JetElement
val addedElement = addAfter(element, anchor)!! as JetElement
if (addNewLine) {
addAfter(newLine, addedElement)
}
return addedElement
}
//TODO: git rid of this method