From 93c2e7dfc09b176655a13a78befa8ad6b3b23cf8 Mon Sep 17 00:00:00 2001 From: takahirom Date: Thu, 13 Oct 2016 22:02:06 +0900 Subject: [PATCH] KT-13550 Fix Boolean.TYPE does not compile (#969) * Fix Boolean.TYPE does not compile --- .../kotlin/j2k/ExpressionConverter.kt | 32 ++++++------------- .../classExpression/complexExample.java | 2 +- .../classExpression/complexExample.kt | 2 +- .../classExpression/primitivesAndArrays.java | 1 + .../classExpression/primitivesAndArrays.kt | 5 +-- 5 files changed, 15 insertions(+), 27 deletions(-) diff --git a/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt b/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt index aa262cbe19b..1406755ab14 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt @@ -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") - } } diff --git a/j2k/testData/fileOrElement/classExpression/complexExample.java b/j2k/testData/fileOrElement/classExpression/complexExample.java index f0a8047102f..c94f9bf3fbf 100644 --- a/j2k/testData/fileOrElement/classExpression/complexExample.java +++ b/j2k/testData/fileOrElement/classExpression/complexExample.java @@ -1,2 +1,2 @@ //statement -Class[] constrArgTypes = new Class[]{String[].class, String.class}; \ No newline at end of file +Class[] constrArgTypes = new Class[]{String[].class, String.class, Integer.class, Double.class}; \ No newline at end of file diff --git a/j2k/testData/fileOrElement/classExpression/complexExample.kt b/j2k/testData/fileOrElement/classExpression/complexExample.kt index 9368e2a4895..8e23438a627 100644 --- a/j2k/testData/fileOrElement/classExpression/complexExample.kt +++ b/j2k/testData/fileOrElement/classExpression/complexExample.kt @@ -1 +1 @@ -val constrArgTypes = arrayOf>(Array::class.java, String::class.java) \ No newline at end of file +val constrArgTypes = arrayOf>(Array::class.java, String::class.java, Int::class.java, Double::class.java) \ No newline at end of file diff --git a/j2k/testData/fileOrElement/classExpression/primitivesAndArrays.java b/j2k/testData/fileOrElement/classExpression/primitivesAndArrays.java index 45b288e5a07..52a78b3f95d 100644 --- a/j2k/testData/fileOrElement/classExpression/primitivesAndArrays.java +++ b/j2k/testData/fileOrElement/classExpression/primitivesAndArrays.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); diff --git a/j2k/testData/fileOrElement/classExpression/primitivesAndArrays.kt b/j2k/testData/fileOrElement/classExpression/primitivesAndArrays.kt index 5bc2715d7f2..d9cfcc0c9cf 100644 --- a/j2k/testData/fileOrElement/classExpression/primitivesAndArrays.kt +++ b/j2k/testData/fileOrElement/classExpression/primitivesAndArrays.kt @@ -1,8 +1,9 @@ object A { @JvmStatic fun main(args: Array) { 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::class.java) println(Array>::class.java)