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 { fun PsiClassObjectAccessExpressionImpl.toJK(): JKClassLiteralExpression {
val type = operand.toJK() val type = operand.toJK().type.updateNullabilityRecursively(Nullability.NotNull)
return JKClassLiteralExpressionImpl( return JKClassLiteralExpressionImpl(
type, JKTypeElementImpl(type),
if (type.type is JKJavaPrimitiveType) JKClassLiteralExpression.LiteralType.JAVA_PRIMITIVE_CLASS when (type) {
else JKClassLiteralExpression.LiteralType.JAVA_CLASS 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) { override fun visitClassLiteralExpression(classLiteralExpression: JKClassLiteralExpression) {
renderType(classLiteralExpression.classType.type.updateNullability(Nullability.NotNull)) if (classLiteralExpression.literalType == JKClassLiteralExpression.LiteralType.JAVA_VOID_TYPE) {
printer.printWithNoIndent("::") printer.printWithNoIndent("Void.TYPE")
when (classLiteralExpression.literalType) { } else {
JKClassLiteralExpression.LiteralType.KOTLIN_CLASS -> printer.printWithNoIndent("class") renderType(classLiteralExpression.classType.type)
JKClassLiteralExpression.LiteralType.JAVA_CLASS -> printer.printWithNoIndent("class.java") printer.printWithNoIndent("::")
JKClassLiteralExpression.LiteralType.JAVA_PRIMITIVE_CLASS -> printer.printWithNoIndent("class.javaPrimitiveType") 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 { enum class LiteralType {
KOTLIN_CLASS, KOTLIN_CLASS,
JAVA_CLASS, JAVA_CLASS,
JAVA_PRIMITIVE_CLASS JAVA_PRIMITIVE_CLASS,
JAVA_VOID_TYPE
} }
} }