New J2K: Add java void type to JKClassLiteralExpression & make all inner types of JKClassLiteralExpression's classType to be notNull

This commit is contained in:
Ilya Kirillov
2018-12-24 12:08:48 +03:00
committed by Ilya Kirillov
parent 5e6e5bcf8c
commit 51ee64a757
3 changed files with 19 additions and 11 deletions
@@ -104,11 +104,14 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
}
fun PsiClassObjectAccessExpressionImpl.toJK(): JKClassLiteralExpression {
val type = operand.toJK()
val type = operand.toJK().type.updateNullabilityRecursively(Nullability.NotNull)
return JKClassLiteralExpressionImpl(
type,
if (type.type is JKJavaPrimitiveType) JKClassLiteralExpression.LiteralType.JAVA_PRIMITIVE_CLASS
else JKClassLiteralExpression.LiteralType.JAVA_CLASS
JKTypeElementImpl(type),
when (type) {
is JKJavaPrimitiveType -> JKClassLiteralExpression.LiteralType.JAVA_PRIMITIVE_CLASS
is JKJavaVoidType -> JKClassLiteralExpression.LiteralType.JAVA_VOID_TYPE
else -> JKClassLiteralExpression.LiteralType.JAVA_CLASS
}
)
}
@@ -812,12 +812,16 @@ class NewCodeBuilder {
}
override fun visitClassLiteralExpression(classLiteralExpression: JKClassLiteralExpression) {
renderType(classLiteralExpression.classType.type.updateNullability(Nullability.NotNull))
printer.printWithNoIndent("::")
when (classLiteralExpression.literalType) {
JKClassLiteralExpression.LiteralType.KOTLIN_CLASS -> printer.printWithNoIndent("class")
JKClassLiteralExpression.LiteralType.JAVA_CLASS -> printer.printWithNoIndent("class.java")
JKClassLiteralExpression.LiteralType.JAVA_PRIMITIVE_CLASS -> printer.printWithNoIndent("class.javaPrimitiveType")
if (classLiteralExpression.literalType == JKClassLiteralExpression.LiteralType.JAVA_VOID_TYPE) {
printer.printWithNoIndent("Void.TYPE")
} else {
renderType(classLiteralExpression.classType.type)
printer.printWithNoIndent("::")
when (classLiteralExpression.literalType) {
JKClassLiteralExpression.LiteralType.KOTLIN_CLASS -> printer.printWithNoIndent("class")
JKClassLiteralExpression.LiteralType.JAVA_CLASS -> printer.printWithNoIndent("class.java")
JKClassLiteralExpression.LiteralType.JAVA_PRIMITIVE_CLASS -> printer.printWithNoIndent("class.javaPrimitiveType")
}
}
}
@@ -412,6 +412,7 @@ interface JKClassLiteralExpression : JKExpression {
enum class LiteralType {
KOTLIN_CLASS,
JAVA_CLASS,
JAVA_PRIMITIVE_CLASS
JAVA_PRIMITIVE_CLASS,
JAVA_VOID_TYPE
}
}