From 07bbab3ea02624054f24e7a0b78a707408134cbb Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 23 Jun 2014 19:14:42 +0400 Subject: [PATCH] Java to Kotlin converter: fixed bug --- j2k/src/org/jetbrains/jet/j2k/TypeConverter.kt | 3 +++ j2k/src/org/jetbrains/jet/j2k/ast/Types.kt | 14 ++------------ .../test/JavaToKotlinConverterTestGenerated.java | 5 +++++ .../ast/nullability/NullableIntNoCrash.java | 8 ++++++++ .../testData/ast/nullability/NullableIntNoCrash.kt | 7 +++++++ 5 files changed, 25 insertions(+), 12 deletions(-) create mode 100644 j2k/tests/testData/ast/nullability/NullableIntNoCrash.java create mode 100644 j2k/tests/testData/ast/nullability/NullableIntNoCrash.kt diff --git a/j2k/src/org/jetbrains/jet/j2k/TypeConverter.kt b/j2k/src/org/jetbrains/jet/j2k/TypeConverter.kt index 395e6f5eacf..4458f631e5c 100644 --- a/j2k/src/org/jetbrains/jet/j2k/TypeConverter.kt +++ b/j2k/src/org/jetbrains/jet/j2k/TypeConverter.kt @@ -69,6 +69,7 @@ class TypeConverter(val settings: ConverterSettings, val conversionScope: Conver private fun variableNullabilityNoCache(variable: PsiVariable): Nullability { if (variable is PsiEnumConstant) return Nullability.NotNull + if (variable.getType() is PsiPrimitiveType) return Nullability.NotNull var nullability = variable.nullabilityFromAnnotations() @@ -154,6 +155,8 @@ class TypeConverter(val settings: ConverterSettings, val conversionScope: Conver } private fun methodNullabilityNoCache(method: PsiMethod): Nullability { + if (method.getReturnType() is PsiPrimitiveType) return Nullability.NotNull + var nullability = method.nullabilityFromAnnotations() if (nullability == Nullability.Default) { diff --git a/j2k/src/org/jetbrains/jet/j2k/ast/Types.kt b/j2k/src/org/jetbrains/jet/j2k/ast/Types.kt index 52a9a9698d7..344a4e02bdf 100644 --- a/j2k/src/org/jetbrains/jet/j2k/ast/Types.kt +++ b/j2k/src/org/jetbrains/jet/j2k/ast/Types.kt @@ -47,19 +47,9 @@ abstract class NotNullType() : Type() { abstract class Type() : Element() { abstract val isNullable: Boolean - open fun toNotNullType(): Type { - if (isNullable) { - throw UnsupportedOperationException("toNotNullType must be defined") - } - return this - } + open fun toNotNullType(): Type = this - open fun toNullableType(): Type { - if (!isNullable) { - throw UnsupportedOperationException("toNullableType must be defined") - } - return this - } + open fun toNullableType(): Type = this object Empty : NotNullType() { override fun generateCode(builder: CodeBuilder) { diff --git a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java index 0b7c2c6a32a..5c3604760dc 100644 --- a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java +++ b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java @@ -2084,6 +2084,11 @@ public class JavaToKotlinConverterTestGenerated extends AbstractJavaToKotlinConv doTest("j2k/tests/testData/ast/nullability/MethodReturnsTernaryNull.java"); } + @TestMetadata("NullableIntNoCrash.java") + public void testNullableIntNoCrash() throws Exception { + doTest("j2k/tests/testData/ast/nullability/NullableIntNoCrash.java"); + } + @TestMetadata("NullableMethodDotAccess.java") public void testNullableMethodDotAccess() throws Exception { doTest("j2k/tests/testData/ast/nullability/NullableMethodDotAccess.java"); diff --git a/j2k/tests/testData/ast/nullability/NullableIntNoCrash.java b/j2k/tests/testData/ast/nullability/NullableIntNoCrash.java new file mode 100644 index 00000000000..ba4276df19f --- /dev/null +++ b/j2k/tests/testData/ast/nullability/NullableIntNoCrash.java @@ -0,0 +1,8 @@ +import org.jetbrains.annotations.Nullable; + +//file +class A { + int field = foo(); + + @Nullable int foo() { return 1; } +} diff --git a/j2k/tests/testData/ast/nullability/NullableIntNoCrash.kt b/j2k/tests/testData/ast/nullability/NullableIntNoCrash.kt new file mode 100644 index 00000000000..83dda3a4ae5 --- /dev/null +++ b/j2k/tests/testData/ast/nullability/NullableIntNoCrash.kt @@ -0,0 +1,7 @@ +class A() { + var field = foo() + + fun foo(): Int { + return 1 + } +} \ No newline at end of file