Pass LanguageVersionSettings to ClassifierUsageChecker

To be used in future classifier usage checkers
This commit is contained in:
Alexander Udalov
2016-09-13 14:23:39 +03:00
parent 9fd698db36
commit 6ec868d84e
3 changed files with 23 additions and 6 deletions
@@ -211,7 +211,7 @@ class LazyTopDownAnalyzer(
resolveImportsInAllFiles(c)
ClassifierUsageChecker.check(declarations, trace, classifierUsageCheckers)
ClassifierUsageChecker.check(declarations, trace, languageVersionSettings, classifierUsageCheckers)
return c
}
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.resolve.checkers
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource
@@ -29,10 +30,20 @@ import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.DescriptorUtils
interface ClassifierUsageChecker {
fun check(targetDescriptor: ClassifierDescriptor, trace: BindingTrace, element: PsiElement)
fun check(
targetDescriptor: ClassifierDescriptor,
trace: BindingTrace,
element: PsiElement,
languageVersionSettings: LanguageVersionSettings
)
companion object {
fun check(declarations: Collection<PsiElement>, trace: BindingTrace, checkers: Iterable<ClassifierUsageChecker>) {
fun check(
declarations: Collection<PsiElement>,
trace: BindingTrace,
languageVersionSettings: LanguageVersionSettings,
checkers: Iterable<ClassifierUsageChecker>
) {
val visitor = object : KtTreeVisitorVoid() {
override fun visitReferenceExpression(expression: KtReferenceExpression) {
super.visitReferenceExpression(expression)
@@ -46,13 +57,13 @@ interface ClassifierUsageChecker {
val target = getReferencedClassifier(expression) ?: return
for (checker in checkers) {
checker.check(target, trace, expression)
checker.check(target, trace, expression, languageVersionSettings)
}
if (isReferenceToCompanionViaOuterClass(expression, target)) {
val outerClass = target.containingDeclaration as ClassDescriptor
for (checker in checkers) {
checker.check(outerClass, trace, expression)
checker.check(outerClass, trace, expression, languageVersionSettings)
}
}
}
@@ -17,13 +17,19 @@
package org.jetbrains.kotlin.resolve.checkers
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.createDeprecationDiagnostic
import org.jetbrains.kotlin.resolve.getDeprecation
class DeprecatedClassifierUsageChecker : ClassifierUsageChecker {
override fun check(targetDescriptor: ClassifierDescriptor, trace: BindingTrace, element: PsiElement) {
override fun check(
targetDescriptor: ClassifierDescriptor,
trace: BindingTrace,
element: PsiElement,
languageVersionSettings: LanguageVersionSettings
) {
val deprecation = targetDescriptor.getDeprecation()
if (deprecation != null) {
trace.report(createDeprecationDiagnostic(element, deprecation))