From 6924ed53ecc3cdfcf3ae8a047b4e1829f589803d Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Thu, 9 Jun 2016 18:02:36 +0300 Subject: [PATCH] Local type aliases: resolve --- .../ExpressionTypingVisitorForStatements.java | 11 +++++++++++ .../tests/typealias/localTypeAlias.kt | 19 +++++++++++++++++++ .../tests/typealias/localTypeAlias.txt | 4 ++++ .../checkers/DiagnosticsTestGenerated.java | 6 ++++++ 4 files changed, 40 insertions(+) create mode 100644 compiler/testData/diagnostics/tests/typealias/localTypeAlias.kt create mode 100644 compiler/testData/diagnostics/tests/typealias/localTypeAlias.txt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorForStatements.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorForStatements.java index 52d00b67361..0ecfb9e8c35 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorForStatements.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorForStatements.java @@ -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); diff --git a/compiler/testData/diagnostics/tests/typealias/localTypeAlias.kt b/compiler/testData/diagnostics/tests/typealias/localTypeAlias.kt new file mode 100644 index 00000000000..7ff40630d07 --- /dev/null +++ b/compiler/testData/diagnostics/tests/typealias/localTypeAlias.kt @@ -0,0 +1,19 @@ +// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER + +fun emptyList(): List = null!! + +fun foo() { + typealias LT = List + + val a: LT = emptyList() + + fun localFun(): LT { + typealias LLT = List + + val b: LLT = a + + return b + } + + localFun() +} diff --git a/compiler/testData/diagnostics/tests/typealias/localTypeAlias.txt b/compiler/testData/diagnostics/tests/typealias/localTypeAlias.txt new file mode 100644 index 00000000000..de2d3e70c58 --- /dev/null +++ b/compiler/testData/diagnostics/tests/typealias/localTypeAlias.txt @@ -0,0 +1,4 @@ +package + +public fun emptyList(): kotlin.collections.List +public fun foo(): kotlin.Unit diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 5504bb4b5c9..1b4ff469d14 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -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");