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)
|
||||
}
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user