Implement Members: Do not generate 'header' keyword
#KT-18466 Fixed
This commit is contained in:
+22
-12
@@ -135,11 +135,27 @@ private val OVERRIDE_RENDERER = DescriptorRenderer.withOptions {
|
||||
renderUnabbreviatedType = false
|
||||
}
|
||||
|
||||
private fun generateProperty(project: Project, descriptor: PropertyDescriptor, bodyType: OverrideMemberChooserObject.BodyType): KtProperty {
|
||||
val newDescriptor = descriptor.copy(descriptor.containingDeclaration, Modality.OPEN, descriptor.visibility,
|
||||
descriptor.kind, /* copyOverrides = */ true) as PropertyDescriptor
|
||||
newDescriptor.setSingleOverridden(descriptor)
|
||||
private fun PropertyDescriptor.wrap(): PropertyDescriptor {
|
||||
val newDescriptor = object : PropertyDescriptor by this {
|
||||
override fun isHeader() = false
|
||||
override fun getModality() = Modality.OPEN
|
||||
}
|
||||
newDescriptor.setSingleOverridden(this)
|
||||
return newDescriptor
|
||||
}
|
||||
|
||||
private fun FunctionDescriptor.wrap(): FunctionDescriptor {
|
||||
return object : FunctionDescriptor by this {
|
||||
override fun isHeader() = false
|
||||
override fun getModality() = Modality.OPEN
|
||||
override fun getReturnType() = this@wrap.returnType?.approximateFlexibleTypes(preferNotNull = true, preferStarForRaw = true)
|
||||
override fun getOverriddenDescriptors() = listOf(this@wrap)
|
||||
override fun <R : Any?, D : Any?> accept(visitor: DeclarationDescriptorVisitor<R, D>, data: D) = visitor.visitFunctionDescriptor(this, data)
|
||||
}
|
||||
}
|
||||
|
||||
private fun generateProperty(project: Project, descriptor: PropertyDescriptor, bodyType: OverrideMemberChooserObject.BodyType): KtProperty {
|
||||
val newDescriptor = descriptor.wrap()
|
||||
val body = buildString {
|
||||
append("\nget()")
|
||||
append(" = ")
|
||||
@@ -152,19 +168,13 @@ private fun generateProperty(project: Project, descriptor: PropertyDescriptor, b
|
||||
}
|
||||
|
||||
private fun generateConstructorParameter(project: Project, descriptor: PropertyDescriptor): KtParameter {
|
||||
val newDescriptor = descriptor.copy(descriptor.containingDeclaration, Modality.OPEN, descriptor.visibility,
|
||||
descriptor.kind, /* copyOverrides = */ true) as PropertyDescriptor
|
||||
val newDescriptor = descriptor.wrap()
|
||||
newDescriptor.setSingleOverridden(descriptor)
|
||||
return KtPsiFactory(project).createParameter(OVERRIDE_RENDERER.render(newDescriptor))
|
||||
}
|
||||
|
||||
private fun generateFunction(project: Project, descriptor: FunctionDescriptor, bodyType: OverrideMemberChooserObject.BodyType): KtNamedFunction {
|
||||
val newDescriptor = object : FunctionDescriptor by descriptor {
|
||||
override fun getModality() = Modality.OPEN
|
||||
override fun getReturnType() = descriptor.returnType?.approximateFlexibleTypes(preferNotNull = true, preferStarForRaw = true)
|
||||
override fun getOverriddenDescriptors() = listOf(descriptor)
|
||||
override fun <R : Any?, D : Any?> accept(visitor: DeclarationDescriptorVisitor<R, D>, data: D) = visitor.visitFunctionDescriptor(this, data)
|
||||
}
|
||||
val newDescriptor = descriptor.wrap()
|
||||
|
||||
val returnType = descriptor.returnType
|
||||
val returnsNotUnit = returnType != null && !KotlinBuiltIns.isUnit(returnType)
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
// "Implement members" "true"
|
||||
// WITH_RUNTIME
|
||||
// ERROR: Header declaration 'InterfaceWithFuns' has no implementation in module light_idea_test_case for JVM
|
||||
header interface InterfaceWithFuns {
|
||||
fun funInInterface()
|
||||
}
|
||||
|
||||
class <caret>ChildOfInterface : InterfaceWithFuns{
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// "Implement members" "true"
|
||||
// WITH_RUNTIME
|
||||
// ERROR: Header declaration 'InterfaceWithFuns' has no implementation in module light_idea_test_case for JVM
|
||||
header interface InterfaceWithFuns {
|
||||
fun funInInterface()
|
||||
}
|
||||
|
||||
class ChildOfInterface : InterfaceWithFuns{
|
||||
override fun funInInterface() {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
}
|
||||
@@ -5768,6 +5768,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("doNotAddHeader.kt")
|
||||
public void testDoNotAddHeader() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/implement/doNotAddHeader.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("enum.kt")
|
||||
public void testEnum() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/implement/enum.kt");
|
||||
|
||||
Reference in New Issue
Block a user