diff --git a/compiler/testData/diagnostics/tests/platformTypes/methodCall/entrySet.kt b/compiler/testData/diagnostics/tests/platformTypes/methodCall/entrySet.kt new file mode 100644 index 00000000000..3aaf4cce6e2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/platformTypes/methodCall/entrySet.kt @@ -0,0 +1,24 @@ +// FILE: p/MultiMap.java + +package p; + +import java.util.*; + +public class MultiMap { + public Set> entrySet() { + return null; + } +} + +// FILE: k.kt + +import p.* + +fun test() { + val map = MultiMap() + val set = map.entrySet() + set.iterator() + + val set1 = map.entrySet()!! + set1.iterator() +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 6a4883b3b2b..ba7ae5dd6fc 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -7779,6 +7779,11 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/platformTypes/methodCall"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("entrySet.kt") + public void testEntrySet() throws Exception { + doTest("compiler/testData/diagnostics/tests/platformTypes/methodCall/entrySet.kt"); + } + @TestMetadata("int.kt") public void testInt() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/platformTypes/methodCall/int.kt"); diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/TypeSubstitutor.java b/core/descriptors/src/org/jetbrains/jet/lang/types/TypeSubstitutor.java index 2554d8ebf72..85fd40143b5 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/TypeSubstitutor.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/TypeSubstitutor.java @@ -191,8 +191,8 @@ public class TypeSubstitutor { substitutedType = typeVariable.substitutionResult(replacement.getType()); } else { - boolean resultingIsNullable = type.isNullable() || replacement.getType().isNullable(); - substitutedType = TypeUtils.makeNullableAsSpecified(replacement.getType(), resultingIsNullable); + // this is a simple type T or T?: if it's T, we should just take replacement, if T? - we make replacement nullable + substitutedType = type.isNullable() ? TypeUtils.makeNullable(replacement.getType()) : replacement.getType(); } Variance resultingProjectionKind = combine(originalProjectionKind, replacement.getProjectionKind());