KT-14307, KT-14377: Run declaration checks on local type aliases.

This commit is contained in:
Dmitry Petrov
2016-10-17 12:32:27 +03:00
parent 6a72cebe88
commit 1600037625
7 changed files with 38 additions and 4 deletions
@@ -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)
@@ -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);
}