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) {
|
override fun visitClassObjectAccessExpression(expression: PsiClassObjectAccessExpression) {
|
||||||
val operand = expression.operand
|
val operand = expression.operand
|
||||||
|
val type = converter.convertTypeElement(operand, Nullability.NotNull)
|
||||||
val typeName = operand.type.canonicalText
|
val typeName = operand.type.canonicalText
|
||||||
val primitiveType = JvmPrimitiveType.values().firstOrNull { it.javaKeywordName == typeName }
|
val primitiveType = JvmPrimitiveType.values().firstOrNull { it.javaKeywordName == typeName }
|
||||||
val wrapperTypeName = if (primitiveType != null) {
|
if (typeName == "void") {
|
||||||
primitiveType.wrapperFqName
|
result = QualifiedExpression(Identifier("Void", false).assignNoPrototype(), Identifier.withNoPrototype("TYPE", isNullable = false), null)
|
||||||
}
|
|
||||||
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)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
val name = if (primitiveType != null) {
|
||||||
//TODO: need more correct way to detect if short name is ok
|
"javaPrimitiveType"
|
||||||
val qualifiedName = wrapperTypeName.asString()
|
} else {
|
||||||
val classNameToUse = if (qualifiedName in needQualifierNameSet)
|
"java"
|
||||||
qualifiedName
|
}
|
||||||
else
|
result = QualifiedExpression(ClassLiteralExpression(type).assignNoPrototype(), Identifier.withNoPrototype(name), null)
|
||||||
wrapperTypeName.shortName().asString()
|
|
||||||
result = QualifiedExpression(Identifier(classNameToUse, false).assignPrototype(operand),
|
|
||||||
Identifier.withNoPrototype("TYPE", isNullable = false),
|
|
||||||
null)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitConditionalExpression(expression: PsiConditionalExpression) {
|
override fun visitConditionalExpression(expression: PsiConditionalExpression) {
|
||||||
@@ -917,8 +907,4 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter {
|
|||||||
override fun visitExpression(expression: PsiExpression) {
|
override fun visitExpression(expression: PsiExpression) {
|
||||||
result = DummyStringExpression(expression.text)
|
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
|
//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 class A {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
System.out.println(void.class);
|
System.out.println(void.class);
|
||||||
|
System.out.println(boolean.class);
|
||||||
System.out.println(int.class);
|
System.out.println(int.class);
|
||||||
System.out.println(double.class);
|
System.out.println(double.class);
|
||||||
System.out.println(int[].class);
|
System.out.println(int[].class);
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
object A {
|
object A {
|
||||||
@JvmStatic fun main(args: Array<String>) {
|
@JvmStatic fun main(args: Array<String>) {
|
||||||
println(Void.TYPE)
|
println(Void.TYPE)
|
||||||
println(Integer.TYPE)
|
println(Boolean::class.javaPrimitiveType)
|
||||||
println(java.lang.Double.TYPE)
|
println(Int::class.javaPrimitiveType)
|
||||||
|
println(Double::class.javaPrimitiveType)
|
||||||
println(IntArray::class.java)
|
println(IntArray::class.java)
|
||||||
println(Array<Any>::class.java)
|
println(Array<Any>::class.java)
|
||||||
println(Array<Array<Any>>::class.java)
|
println(Array<Array<Any>>::class.java)
|
||||||
|
|||||||
Reference in New Issue
Block a user