KT-13550 Fix Boolean.TYPE does not compile (#969)
* Fix Boolean.TYPE does not compile
This commit is contained in:
committed by
Dmitry Jemerov
parent
29fe63d5a9
commit
93c2e7dfc0
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user