summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Udalov <Alexander.Udalov@jetbrains.com>2018-08-02 17:36:43 +0200
committerAlexander Udalov <Alexander.Udalov@jetbrains.com>2018-08-07 13:59:55 +0200
commitc9d4aab352efbfdb0b464404845cff404b3ca6ab (patch)
treeb6bb00cec35a768c163eed7d4871fd44f996cb0a
parentca34e2085e143dc2b66618e6497f83bb3c3e3759 (diff)
downloadkotlin-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.kt23
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)
}