[AA] approximate inplace type parameters bounds

^ KTIJ-27211 fixed
This commit is contained in:
Anna Kozlova
2023-10-23 15:15:22 +02:00
committed by Space Team
parent f37f1e6d91
commit 5cac013d8c
17 changed files with 420 additions and 2 deletions
@@ -18,5 +18,12 @@ public object KtDeclarationRendererForDebug {
typeRenderer = KtTypeRendererForDebug.WITH_QUALIFIED_NAMES
declarationTypeApproximator = KtRendererTypeApproximator.NO_APPROXIMATION
}
public val WITH_QUALIFIED_NAMES_DENOTABLE: KtDeclarationRenderer = KtDeclarationRendererForSource.WITH_QUALIFIED_NAMES.with {
singleTypeParameterRenderer = KtSingleTypeParameterSymbolRenderer.WITHOUT_BOUNDS
samConstructorRenderer = KtSamConstructorSymbolRenderer.AS_FUNCTION
typeRenderer = KtTypeRendererForDebug.WITH_QUALIFIED_NAMES
declarationTypeApproximator = KtRendererTypeApproximator.TO_DENOTABLE
}
}
@@ -63,7 +63,9 @@ public interface KtTypeParametersRenderer {
)
if (typeParameter.upperBounds.size == 1) {
append(" : ")
typeRenderer.renderType(typeParameter.upperBounds.single(), printer)
val ktType = typeParameter.upperBounds.single()
val type = declarationTypeApproximator.approximateType(ktType, Variance.OUT_VARIANCE)
typeRenderer.renderType(type, printer)
}
}
}
@@ -0,0 +1 @@
open fun <K> foo() where K : T?, K : java.lang.Runnable?
@@ -0,0 +1,13 @@
// DO_NOT_CHECK_SYMBOL_RESTORE_K1
// FILE: main.kt
class J: JavaClass<String> {}
fun some(j: J) {
j.f<caret>o<caret_onAirContext>o()
}
// FILE: JavaClass.java
public class JavaClass<T> {
public <K extends T & Runnable> void foo() {};
}
@@ -0,0 +1 @@
open fun <K> foo() where K : kotlin.String?, K : java.lang.Runnable?
@@ -0,0 +1,13 @@
//DO_NOT_CHECK_SYMBOL_RESTORE_K1
// FILE: main.kt
class J: JavaClass<String> {}
fun some(j: J) {
j.f<caret>o<caret_onAirContext>o()
}
// FILE: JavaClass.java
public class JavaClass<T> {
public <K extends T> void foo() {};
}