New J2K: Fix raw types in new expression
This commit is contained in:
committed by
Ilya Kirillov
parent
9b73db4308
commit
46c7cd4b40
@@ -41,11 +41,12 @@ class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicabl
|
|||||||
JKTypeElementImpl(newType)
|
JKTypeElementImpl(newType)
|
||||||
}
|
}
|
||||||
is JKJavaNewExpression -> {
|
is JKJavaNewExpression -> {
|
||||||
|
val newClassSymbol = element.classSymbol.mapClassSymbol(null)
|
||||||
recurse(
|
recurse(
|
||||||
JKJavaNewExpressionImpl(
|
JKJavaNewExpressionImpl(
|
||||||
element.classSymbol.mapClassSymbol(null),
|
newClassSymbol,
|
||||||
element::arguments.detached(),
|
element::arguments.detached(),
|
||||||
element::typeArgumentList.detached(),
|
element::typeArgumentList.detached().fixTypeArguments(newClassSymbol),
|
||||||
element::classBody.detached()
|
element::classBody.detached()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -54,6 +55,23 @@ class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicabl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun JKTypeArgumentList.fixTypeArguments(classSymbol: JKClassSymbol): JKTypeArgumentList {
|
||||||
|
if (typeArguments.isNotEmpty()) return this
|
||||||
|
val typeParametersCount = classSymbol.expectedTypeParametersCount()
|
||||||
|
return when (typeParametersCount) {
|
||||||
|
0 -> this
|
||||||
|
else -> JKTypeArgumentListImpl(List(typeParametersCount) {
|
||||||
|
JKTypeElementImpl(
|
||||||
|
kotlinTypeByName(
|
||||||
|
KotlinBuiltIns.FQ_NAMES.any.toSafe().asString(),
|
||||||
|
context.symbolProvider,
|
||||||
|
Nullability.Nullable
|
||||||
|
)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun JKType.refineNullability(typeElement: JKTypeElement): JKType {
|
private fun JKType.refineNullability(typeElement: JKTypeElement): JKType {
|
||||||
if (nullability == Nullability.Default && this is JKClassType) {
|
if (nullability == Nullability.Default && this is JKClassType) {
|
||||||
val newNullability = calculateNullability(typeElement)
|
val newNullability = calculateNullability(typeElement)
|
||||||
|
|||||||
@@ -259,13 +259,7 @@ fun JKJavaPrimitiveType.isNumberType() =
|
|||||||
|
|
||||||
inline fun <reified T : JKType> T.addTypeParametersToRawProjectionType(typeParameter: JKType): T =
|
inline fun <reified T : JKType> T.addTypeParametersToRawProjectionType(typeParameter: JKType): T =
|
||||||
if (this is JKClassType && parameters.isEmpty()) {
|
if (this is JKClassType && parameters.isEmpty()) {
|
||||||
val resolvedClass = classReference.target
|
val parametersCount = classReference.expectedTypeParametersCount()
|
||||||
val parametersCount =
|
|
||||||
when (resolvedClass) {
|
|
||||||
is PsiClass -> resolvedClass.typeParameters.size
|
|
||||||
is KtClass -> resolvedClass.typeParameters.size
|
|
||||||
else -> 0
|
|
||||||
}
|
|
||||||
val typeParameters = List(parametersCount) { typeParameter }
|
val typeParameters = List(parametersCount) { typeParameter }
|
||||||
JKClassTypeImpl(
|
JKClassTypeImpl(
|
||||||
classReference,
|
classReference,
|
||||||
@@ -274,6 +268,15 @@ inline fun <reified T : JKType> T.addTypeParametersToRawProjectionType(typeParam
|
|||||||
) as T
|
) as T
|
||||||
} else this
|
} else this
|
||||||
|
|
||||||
|
fun JKClassSymbol.expectedTypeParametersCount(): Int {
|
||||||
|
val resolvedClass = target
|
||||||
|
return when (resolvedClass) {
|
||||||
|
is PsiClass -> resolvedClass.typeParameters.size
|
||||||
|
is KtClass -> resolvedClass.typeParameters.size
|
||||||
|
else -> 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun JKClassSymbol.isArrayType(): Boolean =
|
fun JKClassSymbol.isArrayType(): Boolean =
|
||||||
fqName in
|
fqName in
|
||||||
JKJavaPrimitiveTypeImpl.KEYWORD_TO_INSTANCE.values
|
JKJavaPrimitiveTypeImpl.KEYWORD_TO_INSTANCE.values
|
||||||
|
|||||||
Reference in New Issue
Block a user