diff options
author | Alexander Udalov <Alexander.Udalov@jetbrains.com> | 2018-08-02 17:36:43 +0200 |
---|---|---|
committer | Alexander Udalov <Alexander.Udalov@jetbrains.com> | 2018-08-07 13:59:55 +0200 |
commit | c9d4aab352efbfdb0b464404845cff404b3ca6ab (patch) | |
tree | b6bb00cec35a768c163eed7d4871fd44f996cb0a | |
parent | ca34e2085e143dc2b66618e6497f83bb3c3e3759 (diff) | |
download | kotlin-c9d4aab352efbfdb0b464404845cff404b3ca6ab.tar.gz |
Run classifier usage checkers on function types
(cherry picked from commit fe2251bfcaff013cc4780f9d6f52a9cea9380c04)
-rw-r--r-- | compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ClassifierUsageChecker.kt | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ClassifierUsageChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ClassifierUsageChecker.kt index 421c10ae65a..530f425afcb 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ClassifierUsageChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ClassifierUsageChecker.kt @@ -18,11 +18,12 @@ package org.jetbrains.kotlin.resolve.checkers import com.intellij.psi.PsiElement import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor +import org.jetbrains.kotlin.descriptors.ClassifierDescriptor +import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource +import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.psi.KtNameReferenceExpression -import org.jetbrains.kotlin.psi.KtReferenceExpression -import org.jetbrains.kotlin.psi.KtTreeVisitorVoid +import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.DeprecationResolver @@ -62,7 +63,19 @@ fun checkClassifierUsages( } } - private fun runCheckersWithTarget(target: ClassifierDescriptor, expression: KtReferenceExpression) { + override fun visitFunctionType(type: KtFunctionType) { + super.visitFunctionType(type) + + val kotlinType = context.trace.get(BindingContext.TYPE, type.parent as? KtTypeReference ?: return) + if (kotlinType != null) { + val descriptor = kotlinType.constructor.declarationDescriptor + if (descriptor is ClassifierDescriptor) { + runCheckersWithTarget(descriptor, type) + } + } + } + + private fun runCheckersWithTarget(target: ClassifierDescriptor, expression: KtElement) { for (checker in checkers) { checker.check(target, expression, context) } |