From 9d69b701c1f18402f72f3c4a3ced2e6725353c7f Mon Sep 17 00:00:00 2001 From: "Vitaliy.Bibaev" Date: Wed, 20 Dec 2017 18:37:14 +0300 Subject: [PATCH] Add tests for type inference for items in the chain --- .../psi/sequence/positive/types/Any.kt | 3 ++ .../sequence/positive/types/AnyToPrimitive.kt | 3 ++ .../psi/sequence/positive/types/Boolean.kt | 3 ++ .../psi/sequence/positive/types/Byte.kt | 3 ++ .../psi/sequence/positive/types/Char.kt | 3 ++ .../psi/sequence/positive/types/Double.kt | 3 ++ .../positive/types/FewTransitions1.kt | 7 +++ .../positive/types/FewTransitions2.kt | 6 +++ .../psi/sequence/positive/types/Float.kt | 3 ++ .../psi/sequence/positive/types/Int.kt | 3 ++ .../psi/sequence/positive/types/Long.kt | 3 ++ .../positive/types/NotNullToNullable.kt | 3 ++ .../sequence/positive/types/NullableAny.kt | 3 ++ .../positive/types/NullableAnyToPrimitive.kt | 3 ++ .../positive/types/NullableBoolean.kt | 3 ++ .../sequence/positive/types/NullableByte.kt | 3 ++ .../sequence/positive/types/NullableChar.kt | 3 ++ .../sequence/positive/types/NullableDouble.kt | 3 ++ .../sequence/positive/types/NullableFloat.kt | 3 ++ .../sequence/positive/types/NullableInt.kt | 3 ++ .../sequence/positive/types/NullableLong.kt | 3 ++ .../sequence/positive/types/NullableShort.kt | 3 ++ .../positive/types/NullableToNotNull.kt | 3 ++ .../sequence/positive/types/PrimitiveToAny.kt | 3 ++ .../positive/types/PrimitiveToNullableAny.kt | 3 ++ .../psi/sequence/positive/types/Short.kt | 3 ++ .../kotlin/psi/sequence/TypedSequenceChain.kt | 54 +++++++++++++++++++ 27 files changed, 139 insertions(+) create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/Any.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/AnyToPrimitive.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/Boolean.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/Byte.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/Char.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/Double.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/FewTransitions1.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/FewTransitions2.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/Float.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/Int.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/Long.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/NotNullToNullable.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/NullableAny.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/NullableAnyToPrimitive.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/NullableBoolean.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/NullableByte.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/NullableChar.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/NullableDouble.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/NullableFloat.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/NullableInt.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/NullableLong.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/NullableShort.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/NullableToNotNull.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/PrimitiveToAny.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/PrimitiveToNullableAny.kt create mode 100644 idea/testData/debugger/sequence/psi/sequence/positive/types/Short.kt create mode 100644 idea/tests/com/intellij/debugger/streams/kotlin/psi/sequence/TypedSequenceChain.kt diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/Any.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/Any.kt new file mode 100644 index 00000000000..ef409f9a01f --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/Any.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + listOf("abc").asSequence().count() +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/AnyToPrimitive.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/AnyToPrimitive.kt new file mode 100644 index 00000000000..fc214cda75a --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/AnyToPrimitive.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + listOf("abc", 12).asSequence().map { 10 }.count() +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/Boolean.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/Boolean.kt new file mode 100644 index 00000000000..1eab587a239 --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/Boolean.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + booleanArrayOf(true, true, false).asSequence().count() +} diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/Byte.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/Byte.kt new file mode 100644 index 00000000000..9742a196025 --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/Byte.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + setOf(1.toByte(), 20.toByte()).asSequence().forEach { } +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/Char.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/Char.kt new file mode 100644 index 00000000000..3ee9959a1f9 --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/Char.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + charArrayOf('a', 'b', 'c').asSequence().count() +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/Double.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/Double.kt new file mode 100644 index 00000000000..eb6c6ea35e2 --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/Double.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + DoubleArray(10).asSequence().count() +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/FewTransitions1.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/FewTransitions1.kt new file mode 100644 index 00000000000..aa493cb300d --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/FewTransitions1.kt @@ -0,0 +1,7 @@ +fun main(args: Array) { + byteArrayOf(10, 20).asSequence() + .map { it.toString() } + .map { if (it == "10") null else 10 } + .map { 10 } + .contains(200) +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/FewTransitions2.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/FewTransitions2.kt new file mode 100644 index 00000000000..8c9ccb913cc --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/FewTransitions2.kt @@ -0,0 +1,6 @@ +fun main(args: Array) { + "jetBrains".asSequence().map { it.isLowerCase() } + .flatMap { linkedSetOf(1.2, 3.0).asSequence() } + .map { it.toString() } + .count() +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/Float.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/Float.kt new file mode 100644 index 00000000000..49a265001d8 --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/Float.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + listOf(1.0f).asSequence().contains(2.0f) +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/Int.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/Int.kt new file mode 100644 index 00000000000..e42c884830b --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/Int.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + intArrayOf(10).asSequence().any() +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/Long.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/Long.kt new file mode 100644 index 00000000000..43adb3ac8c9 --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/Long.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + longArrayOf(1L, 2L).asSequence().count { it < 2 } +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/NotNullToNullable.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/NotNullToNullable.kt new file mode 100644 index 00000000000..ad4f694628e --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/NotNullToNullable.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + sortedSetOf(10.0).asSequence().map { null }.count() +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableAny.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableAny.kt new file mode 100644 index 00000000000..15884496c4c --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableAny.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + listOf(Any(), null).asSequence().contains(10) +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableAnyToPrimitive.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableAnyToPrimitive.kt new file mode 100644 index 00000000000..6a2164be9f4 --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableAnyToPrimitive.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + listOf(Any(), null).asSequence().map { true }.contains(false) +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableBoolean.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableBoolean.kt new file mode 100644 index 00000000000..f1008a211ec --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableBoolean.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + listOf(true, null, false).asSequence().count() +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableByte.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableByte.kt new file mode 100644 index 00000000000..e6441c3dc06 --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableByte.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + listOf(1.toByte(), null).asSequence().forEach { } +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableChar.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableChar.kt new file mode 100644 index 00000000000..e0de43c8f1f --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableChar.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + listOf(',', '.', null).asSequence().singleOrNull() +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableDouble.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableDouble.kt new file mode 100644 index 00000000000..026fb9d45ff --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableDouble.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + val element = listOf(0.4, null).asSequence().elementAt(2) +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableFloat.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableFloat.kt new file mode 100644 index 00000000000..568aa2f19bb --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableFloat.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + listOf(0.4f, null).asSequence().indexOf(0.3f) +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableInt.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableInt.kt new file mode 100644 index 00000000000..d9b9938b858 --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableInt.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + listOf(5, null).asSequence().lastIndexOf(null) +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableLong.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableLong.kt new file mode 100644 index 00000000000..fc7e8237402 --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableLong.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + listOf(10L, null).asSequence().none() +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableShort.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableShort.kt new file mode 100644 index 00000000000..1fab668d523 --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableShort.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + listOf(6.toShort(), null).asSequence().last() +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableToNotNull.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableToNotNull.kt new file mode 100644 index 00000000000..ec37af649e9 --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/NullableToNotNull.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + listOf(0.4, null).asSequence().map { 10 }.count() +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/PrimitiveToAny.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/PrimitiveToAny.kt new file mode 100644 index 00000000000..1e70e85f281 --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/PrimitiveToAny.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + listOf(20, 30).asSequence().map { Any() }.contains(Any()) +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/PrimitiveToNullableAny.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/PrimitiveToNullableAny.kt new file mode 100644 index 00000000000..cae22c12d19 --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/PrimitiveToNullableAny.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + listOf(20, 30).asSequence().map { if(it == 20) null else it }.count() +} \ No newline at end of file diff --git a/idea/testData/debugger/sequence/psi/sequence/positive/types/Short.kt b/idea/testData/debugger/sequence/psi/sequence/positive/types/Short.kt new file mode 100644 index 00000000000..b471cfae5b0 --- /dev/null +++ b/idea/testData/debugger/sequence/psi/sequence/positive/types/Short.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + shortArrayOf(1.toShort(), 2.toShort()).asSequence().singleOrNull() +} \ No newline at end of file diff --git a/idea/tests/com/intellij/debugger/streams/kotlin/psi/sequence/TypedSequenceChain.kt b/idea/tests/com/intellij/debugger/streams/kotlin/psi/sequence/TypedSequenceChain.kt new file mode 100644 index 00000000000..84b136ab5bc --- /dev/null +++ b/idea/tests/com/intellij/debugger/streams/kotlin/psi/sequence/TypedSequenceChain.kt @@ -0,0 +1,54 @@ +// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.debugger.streams.kotlin.psi.sequence + +import com.intellij.debugger.streams.kotlin.lib.sequence.KotlinSequenceSupportProvider +import com.intellij.debugger.streams.kotlin.psi.TypedChainTestCase +import com.intellij.debugger.streams.kotlin.trace.dsl.KotlinTypes +import com.intellij.debugger.streams.wrapper.StreamChainBuilder + +/** + * @author Vitaliy.Bibaev + */ +class TypedSequenceChain : TypedChainTestCase("sequence/positive/types") { + override val kotlinChainBuilder: StreamChainBuilder = KotlinSequenceSupportProvider().chainBuilder + + fun testAny() = doTest(KotlinTypes.ANY) + fun testNullableAny() = doTest(KotlinTypes.NULLABLE_ANY) + + fun testBoolean() = doTest(KotlinTypes.BOOLEAN) + fun testNullableBoolean() = doTest(KotlinTypes.NULLABLE_ANY) + + fun testByte() = doTest(KotlinTypes.BYTE) + fun testNullableByte() = doTest(KotlinTypes.NULLABLE_ANY) + + fun testShort() = doTest(KotlinTypes.SHORT) + fun testNullableShort() = doTest(KotlinTypes.NULLABLE_ANY) + + fun testInt() = doTest(KotlinTypes.INT) + fun testNullableInt() = doTest(KotlinTypes.NULLABLE_ANY) + + fun testLong() = doTest(KotlinTypes.LONG) + fun testNullableLong() = doTest(KotlinTypes.NULLABLE_ANY) + + fun testFloat() = doTest(KotlinTypes.FLOAT) + fun testNullableFloat() = doTest(KotlinTypes.NULLABLE_ANY) + + fun testDouble() = doTest(KotlinTypes.DOUBLE) + fun testNullableDouble() = doTest(KotlinTypes.NULLABLE_ANY) + + fun testChar() = doTest(KotlinTypes.CHAR) + fun testNullableChar() = doTest(KotlinTypes.NULLABLE_ANY) + + fun testNullableAnyToPrimitive() = doTest(KotlinTypes.NULLABLE_ANY, KotlinTypes.BOOLEAN) + fun testPrimitiveToNullableAny() = doTest(KotlinTypes.INT, KotlinTypes.NULLABLE_ANY) + + fun testAnyToPrimitive() = doTest(KotlinTypes.ANY, KotlinTypes.INT) + fun testPrimitiveToAny() = doTest(KotlinTypes.INT, KotlinTypes.ANY) + + fun testNullableToNotNull() = doTest(KotlinTypes.NULLABLE_ANY, KotlinTypes.INT) + fun testNotNullToNullable() = doTest(KotlinTypes.DOUBLE, KotlinTypes.NULLABLE_ANY) + + fun testFewTransitions1() = doTest(KotlinTypes.BYTE, KotlinTypes.ANY, KotlinTypes.NULLABLE_ANY, KotlinTypes.INT) + fun testFewTransitions2() = doTest(KotlinTypes.CHAR, KotlinTypes.BOOLEAN, KotlinTypes.DOUBLE, KotlinTypes.ANY) + +}