KT-14307, KT-14377: Run declaration checks on local type aliases.
This commit is contained in:
@@ -142,16 +142,22 @@ class DeclarationsChecker(
|
||||
}
|
||||
|
||||
for ((declaration, typeAliasDescriptor) in bodiesResolveContext.typeAliases.entries) {
|
||||
checkTypeAliasDeclaration(typeAliasDescriptor, declaration)
|
||||
checkTypeAliasDeclaration(declaration, typeAliasDescriptor)
|
||||
modifiersChecker.checkModifiersForDeclaration(declaration, typeAliasDescriptor)
|
||||
exposedChecker.checkTypeAlias(declaration, typeAliasDescriptor)
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkTypeAliasDeclaration(typeAliasDescriptor: TypeAliasDescriptor, declaration: KtTypeAlias) {
|
||||
fun checkLocalTypeAliasDeclaration(declaration: KtTypeAlias, typeAliasDescriptor: TypeAliasDescriptor) {
|
||||
checkTypeAliasDeclaration(declaration, typeAliasDescriptor)
|
||||
modifiersChecker.checkModifiersForDeclaration(declaration, typeAliasDescriptor)
|
||||
exposedChecker.checkTypeAlias(declaration, typeAliasDescriptor)
|
||||
}
|
||||
|
||||
private fun checkTypeAliasDeclaration(declaration: KtTypeAlias, typeAliasDescriptor: TypeAliasDescriptor) {
|
||||
val typeReference = declaration.getTypeReference() ?: return
|
||||
|
||||
checkTypeAliasExpansion(typeAliasDescriptor, declaration)
|
||||
checkTypeAliasExpansion(declaration, typeAliasDescriptor)
|
||||
|
||||
val expandedType = typeAliasDescriptor.expandedType
|
||||
if (expandedType.isError) return
|
||||
@@ -210,7 +216,7 @@ class DeclarationsChecker(
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkTypeAliasExpansion(typeAliasDescriptor: TypeAliasDescriptor, declaration: KtTypeAlias) {
|
||||
private fun checkTypeAliasExpansion(declaration: KtTypeAlias, typeAliasDescriptor: TypeAliasDescriptor) {
|
||||
val typeAliasExpansion = TypeAliasExpansion.createWithFormalArguments(typeAliasDescriptor)
|
||||
val reportStrategy = TypeAliasDeclarationCheckingReportStrategy(trace, typeAliasDescriptor, declaration)
|
||||
TypeAliasExpander(reportStrategy).expandWithoutAbbreviation(typeAliasExpansion, Annotations.EMPTY)
|
||||
|
||||
+2
@@ -118,6 +118,8 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito
|
||||
scope.addClassifierDescriptor(typeAliasDescriptor);
|
||||
ForceResolveUtil.forceResolveAllContents(typeAliasDescriptor);
|
||||
|
||||
facade.getComponents().declarationsCheckerBuilder.withTrace(context.trace).checkLocalTypeAliasDeclaration(typeAlias, typeAliasDescriptor);
|
||||
|
||||
return TypeInfoFactoryKt.createTypeInfo(components.dataFlowAnalyzer.checkStatementType(typeAlias, context), context);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
fun outer() {
|
||||
<!WRONG_MODIFIER_TARGET!>companion<!> typealias TestLocal = Any
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
public fun outer(): kotlin.Unit
|
||||
@@ -0,0 +1,5 @@
|
||||
fun outer() {
|
||||
typealias Test1 = <!RECURSIVE_TYPEALIAS_EXPANSION!>Test1<!>
|
||||
typealias Test2 = <!RECURSIVE_TYPEALIAS_EXPANSION!>List<Test2><!>
|
||||
typealias Test3<T> = List<<!UNRESOLVED_REFERENCE!>Test3<!><T>>
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
public fun outer(): kotlin.Unit
|
||||
@@ -20700,6 +20700,18 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("localTypeAliasModifiers.kt")
|
||||
public void testLocalTypeAliasModifiers() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/localTypeAliasModifiers.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("localTypeAliasRecursive.kt")
|
||||
public void testLocalTypeAliasRecursive() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/localTypeAliasRecursive.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("methodReference.kt")
|
||||
public void testMethodReference() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/methodReference.kt");
|
||||
|
||||
Reference in New Issue
Block a user