FIR: Unwrap type aliases in type arguments

This commit is contained in:
Denis.Zharkov
2021-04-29 18:25:19 +03:00
committed by teamcityserver
parent 4f08e1550d
commit c4862fb124
6 changed files with 47 additions and 2 deletions
@@ -3455,6 +3455,11 @@ public class LazyBodyIsNotTouchedTilContractsPhaseTestGenerated extends Abstract
public void testCastToBareType() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/types/castToBareType.kt");
}
@TestMetadata("typeAliasInArguments.kt")
public void testTypeAliasInArguments() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/types/typeAliasInArguments.kt");
}
}
@TestMetadata("compiler/fir/analysis-tests/testData/resolve/visibility")
@@ -0,0 +1,7 @@
FILE: main.kt
public final typealias ImmutableMap<K, V> = R|MyMap<K, V>|
public final typealias ImmutableSet<E> = R|MySet<E>|
private final typealias ImmutableMultimap<K, V> = R|ImmutableMap<K, ImmutableSet<V>>|
private final fun <K, V> R|ImmutableMultimap<K, V>|.put(key: R|K|, value: R|V|, oldSet: R|ImmutableSet<V>|): R|ImmutableMultimap<K, V>| {
^put this@R|/put|.R|SubstitutionOverride</MyMap.put: R|ft<MyMap<ft<K, K?>, ft<ImmutableSet<V>, ImmutableSet<V>?>>, MyMap<ft<K, K?>, ft<ImmutableSet<V>, ImmutableSet<V>?>>?>|>|(R|<local>/key|, R|<local>/oldSet|.R|SubstitutionOverride</MySet.add: R|ft<MySet<ft<V, V?>>, MySet<ft<V, V?>>?>|>|(R|<local>/value|))
}
@@ -0,0 +1,21 @@
// FILE: MyMap.java
public interface MyMap<K, V> {
public MyMap<K, V> put(K k, V v);
}
// FILE: MySet.java
public interface MySet<E> {
public MySet<E> add(E e);
}
// FILE: main.kt
typealias ImmutableMap<K, V> = MyMap<K, V>
typealias ImmutableSet<E> = MySet<E>
private typealias ImmutableMultimap<K, V> = ImmutableMap<K, ImmutableSet<V>>
private fun <K, V> ImmutableMultimap<K, V>.put(key: K, value: V, oldSet: ImmutableSet<V>): ImmutableMultimap<K, V> {
return put(key, oldSet.add(value))
}
@@ -3852,6 +3852,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest {
public void testCastToBareType() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/types/castToBareType.kt");
}
@Test
@TestMetadata("typeAliasInArguments.kt")
public void testTypeAliasInArguments() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/types/typeAliasInArguments.kt");
}
}
@Nested
@@ -3852,6 +3852,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos
public void testCastToBareType() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/types/castToBareType.kt");
}
@Test
@TestMetadata("typeAliasInArguments.kt")
public void testTypeAliasInArguments() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/types/typeAliasInArguments.kt");
}
}
@Nested
@@ -222,8 +222,8 @@ object AbstractTypeChecker {
if (a === b) return true
if (isCommonDenotableType(a) && isCommonDenotableType(b)) {
val refinedA = context.refineType(a)
val refinedB = context.refineType(b)
val refinedA = context.prepareType(context.refineType(a))
val refinedB = context.prepareType(context.refineType(b))
val simpleA = refinedA.lowerBoundIfFlexible()
if (!areEqualTypeConstructors(refinedA.typeConstructor(), refinedB.typeConstructor())) return false
if (simpleA.argumentsCount() == 0) {