Local type aliases: resolve

This commit is contained in:
Dmitry Petrov
2016-06-09 18:02:36 +03:00
parent 9a7bbc1516
commit 6924ed53ec
4 changed files with 40 additions and 0 deletions
@@ -39,6 +39,7 @@ import org.jetbrains.kotlin.resolve.calls.results.OverloadResolutionResultsUtil;
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValue;
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory;
import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil;
import org.jetbrains.kotlin.resolve.scopes.LexicalWritableScope;
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver;
import org.jetbrains.kotlin.types.KotlinType;
@@ -110,6 +111,16 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito
return typeInfoAndVariableDescriptor.getFirst();
}
@Override
public KotlinTypeInfo visitTypeAlias(@NotNull KtTypeAlias typeAlias, ExpressionTypingContext context) {
TypeAliasDescriptor typeAliasDescriptor = components.descriptorResolver.resolveTypeAliasDescriptor(
context.scope.getOwnerDescriptor(), context.scope, typeAlias, context.trace);
scope.addClassifierDescriptor(typeAliasDescriptor);
ForceResolveUtil.forceResolveAllContents(typeAliasDescriptor);
return TypeInfoFactoryKt.createTypeInfo(components.dataFlowAnalyzer.checkStatementType(typeAlias, context), context);
}
@Override
public KotlinTypeInfo visitDestructuringDeclaration(@NotNull KtDestructuringDeclaration multiDeclaration, ExpressionTypingContext context) {
components.annotationResolver.resolveAnnotationsWithArguments(scope, multiDeclaration.getModifierList(), context.trace);
@@ -0,0 +1,19 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
fun <T> emptyList(): List<T> = null!!
fun <T> foo() {
typealias LT = List<T>
val a: LT = emptyList()
fun localFun(): LT {
typealias LLT = List<T>
val b: LLT = a
return b
}
localFun()
}
@@ -0,0 +1,4 @@
package
public fun </*0*/ T> emptyList(): kotlin.collections.List<T>
public fun </*0*/ T> foo(): kotlin.Unit
@@ -19533,6 +19533,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
doTest(fileName);
}
@TestMetadata("localTypeAlias.kt")
public void testLocalTypeAlias() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/localTypeAlias.kt");
doTest(fileName);
}
@TestMetadata("nested.kt")
public void testNested() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/nested.kt");