New J2K: Add type parameter type

This commit is contained in:
Ilya Kirillov
2018-11-08 15:10:25 +03:00
committed by Ilya Kirillov
parent 524b07f6ac
commit 0bc1e96f0d
4 changed files with 28 additions and 8 deletions
@@ -493,6 +493,8 @@ class NewCodeBuilder {
is JKContextType -> return
is JKStarProjectionType ->
printer.printWithNoIndent("*")
is JKTypeParameterType ->
printer.printWithNoIndent(type.name)
is JKVarianceTypeParameterType -> {
when (type.variance) {
JKVarianceTypeParameterType.Variance.IN -> printer.printWithNoIndent("in ")
@@ -458,3 +458,13 @@ class JKTypeParameterImpl(name: JKNameIdentifier, upperBounds: List<JKTypeElemen
override var upperBounds: List<JKTypeElement> by children(upperBounds)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitTypeParameter(this, data)
}
class JKVarianceTypeParameterTypeImpl(
override val variance: JKVarianceTypeParameterType.Variance,
override val boundType: JKType
) : JKVarianceTypeParameterType
class JKTypeParameterTypeImpl(
override val name: String,
override val nullability: Nullability = Nullability.Default
) : JKTypeParameterType
@@ -71,6 +71,10 @@ interface JKVarianceTypeParameterType : JKType {
}
}
interface JKTypeParameterType : JKType {
val name: String
}
interface JKNoType : JKType
interface JKParametrizedType : JKType {
@@ -55,14 +55,18 @@ fun PsiType.toJK(symbolProvider: JKSymbolProvider, nullability: Nullability = Nu
is PsiClassType -> {
val target = resolve()
val parameters = parameters.map { it.toJK(symbolProvider, nullability) }
if (target != null) {
JKClassTypeImpl(
target.let { symbolProvider.provideDirectSymbol(it) as JKClassSymbol },
parameters,
nullability
)
} else {
JKUnresolvedClassType(this.rawType().canonicalText, parameters, nullability)
when (target) {
null ->
JKUnresolvedClassType(rawType().canonicalText, parameters, nullability)
is PsiTypeParameter ->
JKTypeParameterTypeImpl(target.name!!)
else -> {
JKClassTypeImpl(
target.let { symbolProvider.provideDirectSymbol(it) as JKClassSymbol },
parameters,
nullability
)
}
}
}
is PsiArrayType -> JKJavaArrayTypeImpl(componentType.toJK(symbolProvider, nullability), nullability)