New J2K: Fix raw types in new expression

This commit is contained in:
Ilya Kirillov
2019-01-10 16:55:07 +03:00
committed by Ilya Kirillov
parent 9b73db4308
commit 46c7cd4b40
2 changed files with 30 additions and 9 deletions
@@ -41,11 +41,12 @@ class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicabl
JKTypeElementImpl(newType)
}
is JKJavaNewExpression -> {
val newClassSymbol = element.classSymbol.mapClassSymbol(null)
recurse(
JKJavaNewExpressionImpl(
element.classSymbol.mapClassSymbol(null),
newClassSymbol,
element::arguments.detached(),
element::typeArgumentList.detached(),
element::typeArgumentList.detached().fixTypeArguments(newClassSymbol),
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 {
if (nullability == Nullability.Default && this is JKClassType) {
val newNullability = calculateNullability(typeElement)
@@ -259,13 +259,7 @@ fun JKJavaPrimitiveType.isNumberType() =
inline fun <reified T : JKType> T.addTypeParametersToRawProjectionType(typeParameter: JKType): T =
if (this is JKClassType && parameters.isEmpty()) {
val resolvedClass = classReference.target
val parametersCount =
when (resolvedClass) {
is PsiClass -> resolvedClass.typeParameters.size
is KtClass -> resolvedClass.typeParameters.size
else -> 0
}
val parametersCount = classReference.expectedTypeParametersCount()
val typeParameters = List(parametersCount) { typeParameter }
JKClassTypeImpl(
classReference,
@@ -274,6 +268,15 @@ inline fun <reified T : JKType> T.addTypeParametersToRawProjectionType(typeParam
) as T
} 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 =
fqName in
JKJavaPrimitiveTypeImpl.KEYWORD_TO_INSTANCE.values