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:
Alexey Sedunov
2016-08-08 16:25:22 +03:00
parent 1a4ff598e3
commit 1b546d18ff
9 changed files with 34 additions and 0 deletions
+1
View File
@@ -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) } },
@@ -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")
}
}