Override/Implement Members: Do not expand type aliases in the generated members. Retain abbreviated types during flexible type approximation
#KT-13244 Fixed
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
|
||||
###### Issues fixed
|
||||
- [`KT-13383`](https://youtrack.jetbrains.com/issue/KT-13383), [`KT-13379`](https://youtrack.jetbrains.com/issue/KT-13379) Override/Implement Members: Do not make return type non-nullable if base return type is explicitly nullable
|
||||
- [`KT-13244`](https://youtrack.jetbrains.com/issue/KT-13244) Override/Implement Members: Do not expand type aliases in the generated members
|
||||
|
||||
## 1.1-M01 (EAP-1)
|
||||
|
||||
|
||||
@@ -191,6 +191,7 @@ interface DescriptorRendererOptions {
|
||||
var renderDefaultAnnotationArguments: Boolean
|
||||
var alwaysRenderModifiers: Boolean
|
||||
var renderConstructorKeyword: Boolean
|
||||
var renderUnabbreviatedType: Boolean
|
||||
}
|
||||
|
||||
object ExcludedTypeAnnotations {
|
||||
|
||||
@@ -128,6 +128,7 @@ internal class DescriptorRendererImpl(
|
||||
if (abbreviated != null) {
|
||||
// TODO nullability is lost for abbreviated type?
|
||||
val abbreviatedRendered = renderNormalizedTypeAsIs(abbreviated.abbreviation)
|
||||
if (!renderUnabbreviatedType) return abbreviatedRendered
|
||||
val unabbreviatedRendered = renderNormalizedTypeAsIs(abbreviated.expandedType)
|
||||
return "$abbreviatedRendered /* = $unabbreviatedRendered */"
|
||||
}
|
||||
|
||||
@@ -99,4 +99,6 @@ internal class DescriptorRendererOptionsImpl : DescriptorRendererOptions {
|
||||
override var alwaysRenderModifiers by property(false)
|
||||
|
||||
override var renderConstructorKeyword by property(true)
|
||||
|
||||
override var renderUnabbreviatedType: Boolean by property(true)
|
||||
}
|
||||
@@ -64,6 +64,10 @@ private fun KotlinType.approximateNonDynamicFlexibleTypes(preferNotNull: Boolean
|
||||
|
||||
return approximation
|
||||
}
|
||||
|
||||
(unwrap() as? AbbreviatedType)?.let {
|
||||
return AbbreviatedType(it.expandedType, it.abbreviation.approximateNonDynamicFlexibleTypes(preferNotNull))
|
||||
}
|
||||
return KotlinTypeFactory.simpleType(annotations,
|
||||
constructor,
|
||||
arguments.map { it.substitute { type -> type.approximateFlexibleTypes(preferNotNull = true) } },
|
||||
|
||||
+1
@@ -132,6 +132,7 @@ private val OVERRIDE_RENDERER = DescriptorRenderer.withOptions {
|
||||
overrideRenderingPolicy = OverrideRenderingPolicy.RENDER_OVERRIDE
|
||||
unitReturnType = false
|
||||
typeNormalizer = IdeDescriptorRenderers.APPROXIMATE_FLEXIBLE_TYPES
|
||||
renderUnabbreviatedType = false
|
||||
}
|
||||
|
||||
private fun generateProperty(project: Project, descriptor: PropertyDescriptor, bodyType: OverrideMemberChooserObject.BodyType): KtProperty {
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
typealias Foo = Int
|
||||
|
||||
interface Bar {
|
||||
fun test(foo: Foo) = Unit
|
||||
}
|
||||
|
||||
class Bar2 : Bar {
|
||||
<caret>
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
typealias Foo = Int
|
||||
|
||||
interface Bar {
|
||||
fun test(foo: Foo) = Unit
|
||||
}
|
||||
|
||||
class Bar2 : Bar {
|
||||
override fun test(foo: Foo) {
|
||||
<selection><caret>super.test(foo)</selection>
|
||||
}
|
||||
}
|
||||
@@ -259,4 +259,8 @@ class OverrideImplementTest : AbstractOverrideImplementTest() {
|
||||
fun testAbstractAndNonAbstractInheritedFromInterface() {
|
||||
doImplementFileTest("getFoo")
|
||||
}
|
||||
|
||||
fun testTypeAliasNotExpanded() {
|
||||
doOverrideFileTest("test")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user