From 050139220db0594d085e96172505e99bac92cd79 Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Fri, 14 Oct 2016 10:51:46 +0300 Subject: [PATCH] Fix for KT-14330 java.lang.IllegalArgumentException: Parameter specified as non-null is null: method ... parameter value #KT-14330 Fixed --- .../kotlin/codegen/PropertyReferenceCodegen.kt | 2 +- .../box/callableReference/property/kt14330.kt | 8 ++++++++ .../box/callableReference/property/kt14330_2.kt | 14 ++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 12 ++++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/callableReference/property/kt14330.kt create mode 100644 compiler/testData/codegen/box/callableReference/property/kt14330_2.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt index 94893848801..fbed4f7e576 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt @@ -181,7 +181,7 @@ class PropertyReferenceCodegen( if (KotlinBuiltIns.isUnit(key)) { return TypeProjectionImpl(key) } - return TypeProjectionImpl(key.builtIns.anyType) + return TypeProjectionImpl(key.builtIns.nullableAnyType) } }) diff --git a/compiler/testData/codegen/box/callableReference/property/kt14330.kt b/compiler/testData/codegen/box/callableReference/property/kt14330.kt new file mode 100644 index 00000000000..43969a5fd1a --- /dev/null +++ b/compiler/testData/codegen/box/callableReference/property/kt14330.kt @@ -0,0 +1,8 @@ +data class Foo(var bar: Int?) + +fun box(): String { + val receiver = Foo(1) + Foo::bar.set(receiver, null) + return if (receiver.bar == null) "OK" else "fail ${receiver.bar}" + +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/callableReference/property/kt14330_2.kt b/compiler/testData/codegen/box/callableReference/property/kt14330_2.kt new file mode 100644 index 00000000000..d0acfccb0bd --- /dev/null +++ b/compiler/testData/codegen/box/callableReference/property/kt14330_2.kt @@ -0,0 +1,14 @@ +var recivier : Any? = "fail" +var value2 : Any? = "fail2" + +var T.bar : T + get() = this + set(value) { recivier = this; value2 = value} + + +fun box(): String { + String?::bar.set(null, null) + if (recivier != null) "fail 1: ${recivier}" + if (value2 != null) "fail 2: ${value2}" + return "OK" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 17183e34061..93c011069a9 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -1992,6 +1992,18 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("kt14330.kt") + public void testKt14330() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/callableReference/property/kt14330.kt"); + doTest(fileName); + } + + @TestMetadata("kt14330_2.kt") + public void testKt14330_2() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/callableReference/property/kt14330_2.kt"); + doTest(fileName); + } + @TestMetadata("kt6870_privatePropertyReference.kt") public void testKt6870_privatePropertyReference() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/callableReference/property/kt6870_privatePropertyReference.kt");