KT-13550 Fix Boolean.TYPE does not compile (#969)

* Fix Boolean.TYPE does not compile
This commit is contained in:
takahirom
2016-10-13 22:02:06 +09:00
committed by Dmitry Jemerov
parent 29fe63d5a9
commit 93c2e7dfc0
5 changed files with 15 additions and 27 deletions
@@ -232,29 +232,19 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter {
override fun visitClassObjectAccessExpression(expression: PsiClassObjectAccessExpression) {
val operand = expression.operand
val type = converter.convertTypeElement(operand, Nullability.NotNull)
val typeName = operand.type.canonicalText
val primitiveType = JvmPrimitiveType.values().firstOrNull { it.javaKeywordName == typeName }
val wrapperTypeName = if (primitiveType != null) {
primitiveType.wrapperFqName
}
else if (typeName == "void") { // by unknown reason it's not in JvmPrimitiveType enum
FqName("java.lang.Void")
}
else {
val type = converter.convertTypeElement(operand, Nullability.NotNull)
result = QualifiedExpression(ClassLiteralExpression(type).assignNoPrototype(), Identifier.withNoPrototype("java"), null)
if (typeName == "void") {
result = QualifiedExpression(Identifier("Void", false).assignNoPrototype(), Identifier.withNoPrototype("TYPE", isNullable = false), null)
return
}
//TODO: need more correct way to detect if short name is ok
val qualifiedName = wrapperTypeName.asString()
val classNameToUse = if (qualifiedName in needQualifierNameSet)
qualifiedName
else
wrapperTypeName.shortName().asString()
result = QualifiedExpression(Identifier(classNameToUse, false).assignPrototype(operand),
Identifier.withNoPrototype("TYPE", isNullable = false),
null)
val name = if (primitiveType != null) {
"javaPrimitiveType"
} else {
"java"
}
result = QualifiedExpression(ClassLiteralExpression(type).assignNoPrototype(), Identifier.withNoPrototype(name), null)
}
override fun visitConditionalExpression(expression: PsiConditionalExpression) {
@@ -917,8 +907,4 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter {
override fun visitExpression(expression: PsiExpression) {
result = DummyStringExpression(expression.text)
}
companion object {
private val needQualifierNameSet = setOf("java.lang.Byte", "java.lang.Double", "java.lang.Float", "java.lang.Long", "java.lang.Short")
}
}
@@ -1,2 +1,2 @@
//statement
Class<?>[] constrArgTypes = new Class<?>[]{String[].class, String.class};
Class<?>[] constrArgTypes = new Class<?>[]{String[].class, String.class, Integer.class, Double.class};
@@ -1 +1 @@
val constrArgTypes = arrayOf<Class<*>>(Array<String>::class.java, String::class.java)
val constrArgTypes = arrayOf<Class<*>>(Array<String>::class.java, String::class.java, Int::class.java, Double::class.java)
@@ -1,6 +1,7 @@
public class A {
public static void main(String[] args) {
System.out.println(void.class);
System.out.println(boolean.class);
System.out.println(int.class);
System.out.println(double.class);
System.out.println(int[].class);
@@ -1,8 +1,9 @@
object A {
@JvmStatic fun main(args: Array<String>) {
println(Void.TYPE)
println(Integer.TYPE)
println(java.lang.Double.TYPE)
println(Boolean::class.javaPrimitiveType)
println(Int::class.javaPrimitiveType)
println(Double::class.javaPrimitiveType)
println(IntArray::class.java)
println(Array<Any>::class.java)
println(Array<Array<Any>>::class.java)