Skip to content

Commit 3500f5a

Browse files
committed
Type alias: resolve type alias RHS during force-resolve.
1 parent df335b9 commit 3500f5a

File tree

8 files changed

+62
-3
lines changed

8 files changed

+62
-3
lines changed

compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/ForceResolveUtil.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
2525
import org.jetbrains.kotlin.resolve.DescriptorUtils;
2626
import org.jetbrains.kotlin.resolve.scopes.MemberScope;
27+
import org.jetbrains.kotlin.serialization.ProtoBuf;
2728
import org.jetbrains.kotlin.types.*;
2829

2930
import java.util.Collection;
@@ -85,6 +86,10 @@ else if (object instanceof CallableDescriptor) {
8586
forceResolveAllContents(callableDescriptor.getReturnType());
8687
forceResolveAllContents(callableDescriptor.getAnnotations());
8788
}
89+
else if (object instanceof TypeAliasDescriptor) {
90+
TypeAliasDescriptor typeAliasDescriptor = (TypeAliasDescriptor) object;
91+
forceResolveAllContents(typeAliasDescriptor.getUnderlyingType());
92+
}
8893
}
8994

9095
@Nullable
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
1-
typealias S = String
1+
typealias S = String
2+
3+
class C {
4+
typealias SS = String
5+
typealias SF<T> = (T) -> String
6+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
11
package
22

33
public typealias S = kotlin.String
4+
5+
public final class C {
6+
public typealias SF</*0*/ T> = (T) -> kotlin.String
7+
public typealias SS = kotlin.String
8+
public constructor C()
9+
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
10+
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
11+
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
12+
}

idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ private object KotlinResolveDataProvider {
121121
KtTypeConstraint::class.java,
122122
KtSuperTypeList::class.java,
123123
KtTypeParameter::class.java,
124-
KtParameter::class.java
124+
KtParameter::class.java,
125+
KtTypeAlias::class.java
125126
)
126127

127128
fun findAnalyzableParent(element: KtElement): KtElement {

idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,8 @@ class ResolveElementCache(
217217
KtTypeParameter::class.java,
218218
KtTypeConstraint::class.java,
219219
KtPackageDirective::class.java,
220-
KtCodeFragment::class.java) as KtElement?
220+
KtCodeFragment::class.java,
221+
KtTypeAlias::class.java) as KtElement?
221222

222223
when (elementOfAdditionalResolve) {
223224
null -> {
@@ -306,6 +307,8 @@ class ResolveElementCache(
306307

307308
is KtClass -> constructorAdditionalResolve(resolveSession, resolveElement, file)
308309

310+
is KtTypeAlias -> typealiasAdditionalResolve(resolveSession, resolveElement)
311+
309312
is KtTypeParameter -> typeParameterAdditionalResolve(resolveSession, resolveElement)
310313

311314
is KtTypeConstraint -> typeConstraintAdditionalResolve(resolveSession, resolveElement)
@@ -503,6 +506,14 @@ class ResolveElementCache(
503506
return trace
504507
}
505508

509+
private fun typealiasAdditionalResolve(resolveSession: ResolveSession, typeAlias: KtTypeAlias): BindingTrace {
510+
val trace = createDelegatingTrace(typeAlias)
511+
val typeAliasDescriptor = resolveSession.resolveToDescriptor(typeAlias)
512+
ForceResolveUtil.forceResolveAllContents(typeAliasDescriptor)
513+
forceResolveAnnotationsInside(typeAlias)
514+
return trace
515+
}
516+
506517
private fun initializerAdditionalResolve(resolveSession: ResolveSession, anonymousInitializer: KtAnonymousInitializer, file: KtFile, statementFilter: StatementFilter): BindingTrace {
507518
val trace = createDelegatingTrace(anonymousInitializer)
508519

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package test
2+
3+
class C
4+
5+
typealias CA = C
6+
7+
val x: <caret>CA = CA()
8+
9+
// REF: typealias CA = C
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package test
2+
3+
class C
4+
5+
typealias CA = <caret>C
6+
7+
// REF: (test).C

idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveTestGenerated.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,18 @@ public void testSyntheticProperty() throws Exception {
383383
doTest(fileName);
384384
}
385385

386+
@TestMetadata("TypeAlias.kt")
387+
public void testTypeAlias() throws Exception {
388+
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/resolve/references/TypeAlias.kt");
389+
doTest(fileName);
390+
}
391+
392+
@TestMetadata("TypeAliasRHS.kt")
393+
public void testTypeAliasRHS() throws Exception {
394+
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/resolve/references/TypeAliasRHS.kt");
395+
doTest(fileName);
396+
}
397+
386398
@TestMetadata("TypeArgumentBeforeDot.kt")
387399
public void testTypeArgumentBeforeDot() throws Exception {
388400
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/resolve/references/TypeArgumentBeforeDot.kt");

0 commit comments

Comments
 (0)