From 1d787ed222e2878a82802d74adadbaee4ce4dc1c Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Thu, 17 Dec 2015 18:01:17 +0300 Subject: [PATCH] J2K: Insert initializer type for properties with primitive type if necessary --- j2k/src/org/jetbrains/kotlin/j2k/CodeConverter.kt | 3 +++ j2k/src/org/jetbrains/kotlin/j2k/Converter.kt | 5 +++++ j2k/testData/fileOrElement/boxedType/kt-671.kt | 3 +-- j2k/testData/fileOrElement/issues/kt-543-boxed.kt | 2 +- j2k/testData/fileOrElement/issues/kt-543.kt | 2 +- j2k/testData/fileOrElement/issues/kt-792.kt | 2 +- j2k/testData/fileOrElement/issues/kt-794.kt | 2 +- j2k/testData/fileOrElement/issues/kt-9997.java | 11 +++++++++++ j2k/testData/fileOrElement/issues/kt-9997.kt | 11 +++++++++++ j2k/testData/fileOrElement/literalExpression/long.kt | 6 +++--- .../JavaToKotlinConverterForWebDemoTestGenerated.java | 6 ++++++ .../JavaToKotlinConverterSingleFileTestGenerated.java | 6 ++++++ 12 files changed, 50 insertions(+), 9 deletions(-) create mode 100644 j2k/testData/fileOrElement/issues/kt-9997.java create mode 100644 j2k/testData/fileOrElement/issues/kt-9997.kt diff --git a/j2k/src/org/jetbrains/kotlin/j2k/CodeConverter.kt b/j2k/src/org/jetbrains/kotlin/j2k/CodeConverter.kt index 2ce3f49fdc4..c6be0bfb609 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/CodeConverter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/CodeConverter.kt @@ -117,6 +117,9 @@ class CodeConverter( } convertedExpression = LiteralExpression(text) } + else if (expectedTypeStr == "char") { + convertedExpression = MethodCallExpression.build(convertedExpression, "toChar", emptyList(), emptyList(), false) + } } else if (expression is PsiPrefixExpression && expression.isLiteralWithSign()) { val operandConverted = convertExpression(expression.operand, expectedType) diff --git a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt index 59b9e7e0ee6..c3f298f3e0e 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt @@ -445,6 +445,11 @@ class Converter private constructor( public fun shouldDeclareVariableType(variable: PsiVariable, type: Type, canChangeType: Boolean): Boolean { val initializer = variable.initializer if (initializer == null || initializer.isNullLiteral()) return true + if (initializer.type is PsiPrimitiveType && type is PrimitiveType) { + if (createDefaultCodeConverter().convertedExpressionType(initializer, variable.type) != type) { + return true + } + } if (canChangeType) return false diff --git a/j2k/testData/fileOrElement/boxedType/kt-671.kt b/j2k/testData/fileOrElement/boxedType/kt-671.kt index 3357145964a..5785c1962b9 100644 --- a/j2k/testData/fileOrElement/boxedType/kt-671.kt +++ b/j2k/testData/fileOrElement/boxedType/kt-671.kt @@ -1,10 +1,9 @@ -// ERROR: None of the following functions can be called with the arguments supplied: public open fun valueOf(p0: kotlin.Short): kotlin.Short! defined in java.lang.Short public open fun valueOf(p0: kotlin.String!): kotlin.Short! defined in java.lang.Short package demo internal class Test { fun test() { val i = Integer.valueOf(100) - val s = 3 + val s: Short = 3 val ss = java.lang.Short.valueOf(s) } } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/issues/kt-543-boxed.kt b/j2k/testData/fileOrElement/issues/kt-543-boxed.kt index 7322457e35f..5ac56a9c663 100644 --- a/j2k/testData/fileOrElement/issues/kt-543-boxed.kt +++ b/j2k/testData/fileOrElement/issues/kt-543-boxed.kt @@ -5,7 +5,7 @@ internal class Test { } fun test() { - val b = 10 + val b: Byte = 10 putInt(b.toInt()) val b2 = 10 diff --git a/j2k/testData/fileOrElement/issues/kt-543.kt b/j2k/testData/fileOrElement/issues/kt-543.kt index e3e1ce9fc2a..26dfffa5885 100644 --- a/j2k/testData/fileOrElement/issues/kt-543.kt +++ b/j2k/testData/fileOrElement/issues/kt-543.kt @@ -5,7 +5,7 @@ internal class Test { } fun test() { - val b = 10 + val b: Byte = 10 putInt(b.toInt()) } } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/issues/kt-792.kt b/j2k/testData/fileOrElement/issues/kt-792.kt index 4bd12d5eaa0..61cea59e10d 100644 --- a/j2k/testData/fileOrElement/issues/kt-792.kt +++ b/j2k/testData/fileOrElement/issues/kt-792.kt @@ -3,7 +3,7 @@ package demo internal class Test(i: Int) { fun test() { - val b = 10 + val b: Byte = 10 Test(b.toInt()) } } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/issues/kt-794.kt b/j2k/testData/fileOrElement/issues/kt-794.kt index 18300f9bafa..92b6418c974 100644 --- a/j2k/testData/fileOrElement/issues/kt-794.kt +++ b/j2k/testData/fileOrElement/issues/kt-794.kt @@ -1,7 +1,7 @@ internal class Test { val int: Int get() { - val b = 10 + val b: Byte = 10 return b.toInt() } } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/issues/kt-9997.java b/j2k/testData/fileOrElement/issues/kt-9997.java new file mode 100644 index 00000000000..ab2d2808051 --- /dev/null +++ b/j2k/testData/fileOrElement/issues/kt-9997.java @@ -0,0 +1,11 @@ +class A { + public void foo() { + int i = 1; + byte b = 1; + short s = 1; + long l = 1; + double d = 1.0; + float f = 1.0f; + char c = 1; + } +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/issues/kt-9997.kt b/j2k/testData/fileOrElement/issues/kt-9997.kt new file mode 100644 index 00000000000..9c38834a0a0 --- /dev/null +++ b/j2k/testData/fileOrElement/issues/kt-9997.kt @@ -0,0 +1,11 @@ +internal class A { + fun foo() { + val i = 1 + val b: Byte = 1 + val s: Short = 1 + val l: Long = 1 + val d = 1.0 + val f = 1.0f + val c: Char = 1.toChar() + } +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/literalExpression/long.kt b/j2k/testData/fileOrElement/literalExpression/long.kt index 7a131d68e00..209d6667404 100644 --- a/j2k/testData/fileOrElement/literalExpression/long.kt +++ b/j2k/testData/fileOrElement/literalExpression/long.kt @@ -3,9 +3,9 @@ internal class A { private var l2: Long = 1 private val l3 = 1L private var l4: Long = -1 - private val l5 = 123456789101112 - private val l6 = -123456789101112 - private val l7 = +1 + private val l5: Long = 123456789101112 + private val l6: Long = -123456789101112 + private val l7: Long = +1 private val l8 = +1L fun foo1(l: Long) { diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java index 14ce0f06730..636519bde0e 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java @@ -2785,6 +2785,12 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("kt-9997.java") + public void testKt_9997() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/issues/kt-9997.java"); + doTest(fileName); + } + @TestMetadata("qualifyStatic.java") public void testQualifyStatic() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/issues/qualifyStatic.java"); diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java index 32d451135ba..7c11381f4ad 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java @@ -2785,6 +2785,12 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("kt-9997.java") + public void testKt_9997() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/issues/kt-9997.java"); + doTest(fileName); + } + @TestMetadata("qualifyStatic.java") public void testQualifyStatic() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/issues/qualifyStatic.java");