Override/Implement: Do not generate bodies for header class members

#KT-15659 Fixed
This commit is contained in:
Alexey Sedunov
2017-08-15 17:32:50 +03:00
parent 6c3620f481
commit 6f8503a178
10 changed files with 39 additions and 14 deletions
@@ -106,8 +106,7 @@ abstract class OverrideImplementMembersHandler : LanguageCodeInsightActionHandle
selectedElements: Collection<OverrideMemberChooserObject>,
copyDoc: Boolean
) {
val project = classOrObject.project
insertMembersAfter(editor, classOrObject, selectedElements.map { it.generateMember(project, copyDoc) })
insertMembersAfter(editor, classOrObject, selectedElements.map { it.generateMember(classOrObject, copyDoc) })
}
}
}
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.idea.j2k.IdeaDocCommentConverter
import org.jetbrains.kotlin.idea.kdoc.KDocElementFactory
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
import org.jetbrains.kotlin.idea.util.approximateFlexibleTypes
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.findDocComment.findDocComment
import org.jetbrains.kotlin.renderer.*
@@ -95,7 +96,11 @@ interface OverrideMemberChooserObject : ClassMember {
}
}
fun OverrideMemberChooserObject.generateMember(project: Project, copyDoc: Boolean): KtCallableDeclaration {
fun OverrideMemberChooserObject.generateMember(targetClass: KtClassOrObject, copyDoc: Boolean): KtCallableDeclaration {
val project = targetClass.project
val bodyType = if (targetClass.hasModifier(KtTokens.HEADER_KEYWORD)) OverrideMemberChooserObject.BodyType.NO_BODY else bodyType
val descriptor = immediateSuper
if (preferConstructorParameter && descriptor is PropertyDescriptor) return generateConstructorParameter(project, descriptor)