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) {
|
for ((declaration, typeAliasDescriptor) in bodiesResolveContext.typeAliases.entries) {
|
||||||
checkTypeAliasDeclaration(typeAliasDescriptor, declaration)
|
checkTypeAliasDeclaration(declaration, typeAliasDescriptor)
|
||||||
modifiersChecker.checkModifiersForDeclaration(declaration, typeAliasDescriptor)
|
modifiersChecker.checkModifiersForDeclaration(declaration, typeAliasDescriptor)
|
||||||
exposedChecker.checkTypeAlias(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
|
val typeReference = declaration.getTypeReference() ?: return
|
||||||
|
|
||||||
checkTypeAliasExpansion(typeAliasDescriptor, declaration)
|
checkTypeAliasExpansion(declaration, typeAliasDescriptor)
|
||||||
|
|
||||||
val expandedType = typeAliasDescriptor.expandedType
|
val expandedType = typeAliasDescriptor.expandedType
|
||||||
if (expandedType.isError) return
|
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 typeAliasExpansion = TypeAliasExpansion.createWithFormalArguments(typeAliasDescriptor)
|
||||||
val reportStrategy = TypeAliasDeclarationCheckingReportStrategy(trace, typeAliasDescriptor, declaration)
|
val reportStrategy = TypeAliasDeclarationCheckingReportStrategy(trace, typeAliasDescriptor, declaration)
|
||||||
TypeAliasExpander(reportStrategy).expandWithoutAbbreviation(typeAliasExpansion, Annotations.EMPTY)
|
TypeAliasExpander(reportStrategy).expandWithoutAbbreviation(typeAliasExpansion, Annotations.EMPTY)
|
||||||
|
|||||||
+2
@@ -118,6 +118,8 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito
|
|||||||
scope.addClassifierDescriptor(typeAliasDescriptor);
|
scope.addClassifierDescriptor(typeAliasDescriptor);
|
||||||
ForceResolveUtil.forceResolveAllContents(typeAliasDescriptor);
|
ForceResolveUtil.forceResolveAllContents(typeAliasDescriptor);
|
||||||
|
|
||||||
|
facade.getComponents().declarationsCheckerBuilder.withTrace(context.trace).checkLocalTypeAliasDeclaration(typeAlias, typeAliasDescriptor);
|
||||||
|
|
||||||
return TypeInfoFactoryKt.createTypeInfo(components.dataFlowAnalyzer.checkStatementType(typeAlias, context), context);
|
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);
|
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")
|
@TestMetadata("methodReference.kt")
|
||||||
public void testMethodReference() throws Exception {
|
public void testMethodReference() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/methodReference.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/methodReference.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user