[FIR TEST]: two more tests on forEach potential ambiguity (both passing)

This commit is contained in:
Mikhail Glukhikh
2019-11-28 10:28:08 +03:00
parent 4f1167b16f
commit 2c611d75bc
5 changed files with 113 additions and 0 deletions
@@ -0,0 +1,24 @@
import java.util.*
import java.util.function.BiConsumer
private val DEBUG = true
abstract class SomeHashTable<K : Any, V : Any> : AbstractMutableMap<K, V>() {
override fun forEach(action: BiConsumer<in K, in V>) {}
override val entries: MutableSet<MutableMap.MutableEntry<K, V>>
get() {
if (DEBUG) {
return Collections.unmodifiableSet(
mutableSetOf<MutableMap.MutableEntry<K, V>>().apply {
forEach { key, value -> add(Entry(key, value)) }
}
)
}
throw UnsupportedOperationException()
}
private class Entry<K, V>(override val key: K, override val value: V) : MutableMap.MutableEntry<K, V> {
override fun setValue(newValue: V): V = throw UnsupportedOperationException()
}
}
@@ -0,0 +1,46 @@
FILE: hashTableWithForEach.kt
private final val DEBUG: R|kotlin/Boolean| = Boolean(true)
private get(): R|kotlin/Boolean|
public abstract class SomeHashTable<K : R|kotlin/Any|, V : R|kotlin/Any|> : R|kotlin/collections/AbstractMutableMap<K, V>| {
public constructor<K : R|kotlin/Any|, V : R|kotlin/Any|>(): R|SomeHashTable<K, V>| {
super<R|kotlin/collections/AbstractMutableMap<K, V>|>()
}
public open override fun forEach(action: R|java/util/function/BiConsumer<in K, in V>|): R|kotlin/Unit| {
}
public open override val entries: R|kotlin/collections/MutableSet<kotlin/collections/MutableMap.MutableEntry<K, V>>|
public get(): R|kotlin/collections/MutableSet<kotlin/collections/MutableMap.MutableEntry<K, V>>| {
when () {
R|/DEBUG| -> {
^ Q|java/util/Collections|.R|java/util/Collections.unmodifiableSet|<R|kotlin/collections/MutableMap.MutableEntry<K, V>|>(R|kotlin/collections/mutableSetOf|<R|kotlin/collections/MutableMap.MutableEntry<K, V>|>().R|kotlin/apply|<R|kotlin/collections/MutableSet<kotlin/collections/MutableMap.MutableEntry<K, V>>|>(<L> = apply@fun R|kotlin/collections/MutableSet<kotlin/collections/MutableMap.MutableEntry<K, V>>|.<anonymous>(): R|kotlin/Unit| <kind=EXACTLY_ONCE> {
this@R|/SomeHashTable|.R|FakeOverride</SomeHashTable.forEach: R|kotlin/Unit|>|(<L> = forEach@fun <anonymous>(key: R|K!|, value: R|V!|): R|kotlin/Unit| {
this@R|kotlin/collections/MutableSet|.R|FakeOverride<kotlin/collections/MutableSet.add: R|kotlin/Boolean|>|(R|/SomeHashTable.Entry.Entry|<R|K|, R|V|>(R|<local>/key|, R|<local>/value|))
}
)
}
))
}
}
throw R|java/lang/UnsupportedOperationException.UnsupportedOperationException|()
}
private final class Entry<K, V> : R|kotlin/collections/MutableMap.MutableEntry<K, V>| {
public constructor<K, V>(key: R|K|, value: R|V|): R|SomeHashTable.Entry<K, V>| {
super<R|kotlin/Any|>()
}
public final override val key: R|K| = R|<local>/key|
public get(): R|K|
public final override val value: R|V| = R|<local>/value|
public get(): R|V|
public final override fun setValue(newValue: R|V|): R|V| {
^setValue throw R|java/lang/UnsupportedOperationException.UnsupportedOperationException|()
}
}
}
@@ -0,0 +1,15 @@
import java.util.*
interface ArgsInfo
class ArgsInfoImpl : ArgsInfo {
constructor(info: ArgsInfo) {}
}
typealias Arguments = Map<String, ArgsInfo>
fun Arguments.deepCopy(): Arguments {
val result = HashMap<String, ArgsInfo>()
this.forEach { key, value -> result[key] = ArgsInfoImpl(value) }
return result
}
@@ -0,0 +1,18 @@
FILE: typeAliasWithForEach.kt
public abstract interface ArgsInfo : R|kotlin/Any| {
}
public final class ArgsInfoImpl : R|ArgsInfo| {
public constructor(info: R|ArgsInfo|): R|ArgsInfoImpl| {
super<R|kotlin/Any|>()
}
}
public final typealias Arguments = R|kotlin/collections/Map<kotlin/String, ArgsInfo>|
public final fun R|Arguments|.deepCopy(): R|Arguments| {
lval result: R|java/util/HashMap<kotlin/String, ArgsInfo>| = R|java/util/HashMap.HashMap|<R|kotlin/String|, R|ArgsInfo|>()
this@R|/deepCopy|.R|FakeOverride<java/util/Map.forEach: R|kotlin/Unit|>|(<L> = forEach@fun <anonymous>(key: R|kotlin/String!|, value: R|ArgsInfo!|): R|kotlin/Unit| {
R|<local>/result|.R|kotlin/collections/set|<R|kotlin/String|, R|ArgsInfo|>(R|<local>/key|, R|/ArgsInfoImpl.ArgsInfoImpl|(R|<local>/value|))
}
)
^deepCopy R|<local>/result|
}
@@ -98,6 +98,11 @@ public class FirDiagnosticsWithStdlibTestGenerated extends AbstractFirDiagnostic
runTest("compiler/fir/resolve/testData/resolve/stdlib/hashSet.kt");
}
@TestMetadata("hashTableWithForEach.kt")
public void testHashTableWithForEach() throws Exception {
runTest("compiler/fir/resolve/testData/resolve/stdlib/hashTableWithForEach.kt");
}
@TestMetadata("helloWorld.kt")
public void testHelloWorld() throws Exception {
runTest("compiler/fir/resolve/testData/resolve/stdlib/helloWorld.kt");
@@ -173,6 +178,11 @@ public class FirDiagnosticsWithStdlibTestGenerated extends AbstractFirDiagnostic
runTest("compiler/fir/resolve/testData/resolve/stdlib/typeAliasDeserialization.kt");
}
@TestMetadata("typeAliasWithForEach.kt")
public void testTypeAliasWithForEach() throws Exception {
runTest("compiler/fir/resolve/testData/resolve/stdlib/typeAliasWithForEach.kt");
}
@TestMetadata("typeParameterDerived.kt")
public void testTypeParameterDerived() throws Exception {
runTest("compiler/fir/resolve/testData/resolve/stdlib/typeParameterDerived.kt");