New J2K: Add type parameter type
This commit is contained in:
committed by
Ilya Kirillov
parent
524b07f6ac
commit
0bc1e96f0d
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user