diff --git a/ChangeLog.md b/ChangeLog.md index 297fefbcf08..8759f2a9409 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -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) diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt index ac5294b69be..31e7535f79c 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt @@ -191,6 +191,7 @@ interface DescriptorRendererOptions { var renderDefaultAnnotationArguments: Boolean var alwaysRenderModifiers: Boolean var renderConstructorKeyword: Boolean + var renderUnabbreviatedType: Boolean } object ExcludedTypeAnnotations { diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt index 4001e2ddc03..30b8c88e66c 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt @@ -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 */" } diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererOptionsImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererOptionsImpl.kt index 9fd102e497f..b30fff017d9 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererOptionsImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererOptionsImpl.kt @@ -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) } \ No newline at end of file diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/TypeUtils.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/TypeUtils.kt index 6e7488413d4..ea9f85c3498 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/TypeUtils.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/TypeUtils.kt @@ -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) } }, diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMemberChooserObject.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMemberChooserObject.kt index 0bb3261288c..76039e4bf40 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMemberChooserObject.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMemberChooserObject.kt @@ -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 { diff --git a/idea/testData/codeInsight/overrideImplement/typeAliasNotExpanded.kt b/idea/testData/codeInsight/overrideImplement/typeAliasNotExpanded.kt new file mode 100644 index 00000000000..b2e4a426134 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/typeAliasNotExpanded.kt @@ -0,0 +1,9 @@ +typealias Foo = Int + +interface Bar { + fun test(foo: Foo) = Unit +} + +class Bar2 : Bar { + +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/typeAliasNotExpanded.kt.after b/idea/testData/codeInsight/overrideImplement/typeAliasNotExpanded.kt.after new file mode 100644 index 00000000000..9400c907ed4 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/typeAliasNotExpanded.kt.after @@ -0,0 +1,11 @@ +typealias Foo = Int + +interface Bar { + fun test(foo: Foo) = Unit +} + +class Bar2 : Bar { + override fun test(foo: Foo) { + super.test(foo) + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt index 172357f4bdf..6af91aece20 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt @@ -259,4 +259,8 @@ class OverrideImplementTest : AbstractOverrideImplementTest() { fun testAbstractAndNonAbstractInheritedFromInterface() { doImplementFileTest("getFoo") } + + fun testTypeAliasNotExpanded() { + doOverrideFileTest("test") + } }