Override/Implement Members: Do not make return type non-nullable if base

return type is explicitly nullable
 #KT-13383 Fixed
 #KT-13379 Fixed
This commit is contained in:
Alexey Sedunov
2016-08-08 18:14:54 +03:00
parent 75573bd6a5
commit 1a4ff598e3
8 changed files with 54 additions and 1 deletions
@@ -35,6 +35,8 @@ import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.findDocComment.findDocComment
import org.jetbrains.kotlin.renderer.*
import org.jetbrains.kotlin.resolve.descriptorUtil.setSingleOverridden
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.isFlexible
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
interface OverrideMemberChooserObject : ClassMember {
@@ -158,7 +160,10 @@ private fun generateConstructorParameter(project: Project, descriptor: PropertyD
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?.makeNotNullable()
override fun getReturnType(): KotlinType? {
val originalType = descriptor.returnType ?: return null
return if (originalType.isFlexible()) originalType.makeNotNullable() else originalType
}
override fun getOverriddenDescriptors() = listOf(descriptor)
override fun <R : Any?, D : Any?> accept(visitor: DeclarationDescriptorVisitor<R, D>, data: D) = visitor.visitFunctionDescriptor(this, data)
}