diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt index bfc741c32f1..b3baafcf62a 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt @@ -493,6 +493,13 @@ class NewCodeBuilder { is JKContextType -> return is JKStarProjectionType -> printer.printWithNoIndent("*") + is JKVarianceTypeParameterType -> { + when (type.variance) { + JKVarianceTypeParameterType.Variance.IN -> printer.printWithNoIndent("in ") + JKVarianceTypeParameterType.Variance.OUT -> printer.printWithNoIndent("out ") + } + renderType(type.boundType) + } else -> printer.printWithNoIndent("Unit /* TODO: ${type::class} */") } if (type is JKParametrizedType && type.parameters.isNotEmpty()) { diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt index a628b42dece..80626e0e156 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt @@ -60,6 +60,17 @@ interface JKType { val nullability: Nullability } +interface JKVarianceTypeParameterType : JKType { + val variance: Variance + val boundType: JKType + override val nullability: Nullability + get() = Nullability.NotNull + + enum class Variance { + IN, OUT + } +} + interface JKNoType : JKType interface JKParametrizedType : JKType { diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt index aebb8faaa7f..b9f830583ee 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt @@ -70,7 +70,20 @@ fun PsiType.toJK(symbolProvider: JKSymbolProvider, nullability: Nullability = Nu ?: error("Invalid primitive type $presentableText") is PsiDisjunctionType -> JKJavaDisjunctionTypeImpl(disjunctions.map { it.toJK(symbolProvider) }) - is PsiWildcardType -> JKStarProjectionTypeImpl() + is PsiWildcardType -> + when { + isExtends -> + JKVarianceTypeParameterTypeImpl( + JKVarianceTypeParameterType.Variance.OUT, + extendsBound.toJK(symbolProvider) + ) + isSuper -> + JKVarianceTypeParameterTypeImpl( + JKVarianceTypeParameterType.Variance.IN, + superBound.toJK(symbolProvider) + ) + else -> JKStarProjectionTypeImpl() + } else -> throw Exception("Invalid PSI ${this::class.java}") } }