Override/Implement: Fix processing of unresolved types
#KT-17350 Fixed
This commit is contained in:
@@ -214,6 +214,7 @@ interface DescriptorRendererOptions {
|
|||||||
var includeAdditionalModifiers: Boolean
|
var includeAdditionalModifiers: Boolean
|
||||||
var parameterNamesInFunctionalTypes: Boolean
|
var parameterNamesInFunctionalTypes: Boolean
|
||||||
var renderFunctionContracts: Boolean
|
var renderFunctionContracts: Boolean
|
||||||
|
var presentableUnresolvedTypes: Boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
object ExcludedTypeAnnotations {
|
object ExcludedTypeAnnotations {
|
||||||
|
|||||||
@@ -229,7 +229,11 @@ internal class DescriptorRendererImpl(
|
|||||||
this.renderAnnotations(type)
|
this.renderAnnotations(type)
|
||||||
|
|
||||||
if (type.isError) {
|
if (type.isError) {
|
||||||
append(type.constructor.toString()) // Debug name of an error type is more informative
|
if (type is UnresolvedType && presentableUnresolvedTypes) {
|
||||||
|
append(type.presentableName)
|
||||||
|
} else {
|
||||||
|
append(type.constructor.toString()) // Debug name of an error type is more informative
|
||||||
|
}
|
||||||
append(renderTypeArguments(type.arguments))
|
append(renderTypeArguments(type.arguments))
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -115,4 +115,6 @@ internal class DescriptorRendererOptionsImpl : DescriptorRendererOptions {
|
|||||||
override var parameterNamesInFunctionalTypes: Boolean by property(true)
|
override var parameterNamesInFunctionalTypes: Boolean by property(true)
|
||||||
|
|
||||||
override var renderFunctionContracts: Boolean by property(false)
|
override var renderFunctionContracts: Boolean by property(false)
|
||||||
|
|
||||||
|
override var presentableUnresolvedTypes: Boolean by property(false)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ private fun KotlinType.approximateNonDynamicFlexibleTypes(
|
|||||||
preferNotNull: Boolean = false,
|
preferNotNull: Boolean = false,
|
||||||
preferStarForRaw: Boolean = false
|
preferStarForRaw: Boolean = false
|
||||||
): SimpleType {
|
): SimpleType {
|
||||||
|
if (this is ErrorType) return this
|
||||||
|
|
||||||
if (isFlexible()) {
|
if (isFlexible()) {
|
||||||
val flexible = asFlexibleType()
|
val flexible = asFlexibleType()
|
||||||
val lowerClass = flexible.lowerBound.constructor.declarationDescriptor as? ClassDescriptor?
|
val lowerClass = flexible.lowerBound.constructor.declarationDescriptor as? ClassDescriptor?
|
||||||
|
|||||||
+1
@@ -162,6 +162,7 @@ private val OVERRIDE_RENDERER = DescriptorRenderer.withOptions {
|
|||||||
annotationFilter = {
|
annotationFilter = {
|
||||||
it.type.constructor.declarationDescriptor?.annotations?.hasAnnotation(ExperimentalUsageChecker.EXPERIMENTAL_FQ_NAME) ?: false
|
it.type.constructor.declarationDescriptor?.annotations?.hasAnnotation(ExperimentalUsageChecker.EXPERIMENTAL_FQ_NAME) ?: false
|
||||||
}
|
}
|
||||||
|
presentableUnresolvedTypes = true
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun PropertyDescriptor.wrap(): PropertyDescriptor {
|
private fun PropertyDescriptor.wrap(): PropertyDescriptor {
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
// DISABLE-ERRORS
|
||||||
|
interface A<in TPipeline, out TBuilder : Any, TFeature : Any> {
|
||||||
|
fun install(pipeline: TPipeline, configure: TBuilder.() -> Unit): TFeature
|
||||||
|
}
|
||||||
|
|
||||||
|
class X : A<String, UnresolvedType, Unit> {
|
||||||
|
<caret>
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
// DISABLE-ERRORS
|
||||||
|
interface A<in TPipeline, out TBuilder : Any, TFeature : Any> {
|
||||||
|
fun install(pipeline: TPipeline, configure: TBuilder.() -> Unit): TFeature
|
||||||
|
}
|
||||||
|
|
||||||
|
class X : A<String, UnresolvedType, Unit> {
|
||||||
|
override fun install(pipeline: String, configure: UnresolvedType.() -> Unit) {
|
||||||
|
<selection><caret>TODO("not implemented") //To change body of created functions use File | Settings | File Templates.</selection>
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -289,4 +289,8 @@ class OverrideImplementTest : AbstractOverrideImplementTest() {
|
|||||||
configureLanguageAndApiVersion(project, module, "1.3", "1.3")
|
configureLanguageAndApiVersion(project, module, "1.3", "1.3")
|
||||||
doOverrideFileTest("targetFun")
|
doOverrideFileTest("targetFun")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun testUnresolvedType() {
|
||||||
|
doOverrideFileTest()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user