From 122c631fcfd641a354d2e57cf3f5d51593624072 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 14 Dec 2016 13:00:32 +0300 Subject: [PATCH] Refactor getDeprecation() -> getDeprecations() In subsequent commits, another kind of deprecation is introduced which should be reported alongside with deprecation by the `@Deprecated` annotation --- .../calls/checkers/DeprecatedCallChecker.kt | 14 +++++++++----- .../checkers/DeprecatedClassifierUsageChecker.kt | 6 +++--- .../jetbrains/kotlin/resolve/deprecationUtil.kt | 13 ++++++------- .../idea/KotlinQuickDocumentationProvider.kt | 7 ++----- .../OverridingDeprecatedMemberInspection.kt | 6 +++--- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/DeprecatedCallChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/DeprecatedCallChecker.kt index 2be15fe9c5f..ee73907a72b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/DeprecatedCallChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/DeprecatedCallChecker.kt @@ -31,7 +31,7 @@ import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.calls.util.FakeCallableDescriptorForObject import org.jetbrains.kotlin.resolve.createDeprecationDiagnostic -import org.jetbrains.kotlin.resolve.getDeprecation +import org.jetbrains.kotlin.resolve.getDeprecations object DeprecatedCallChecker : CallChecker { override fun check(resolvedCall: ResolvedCall<*>, reportOn: PsiElement, context: CallCheckerContext) { @@ -42,13 +42,17 @@ object DeprecatedCallChecker : CallChecker { // Objects will be checked by DeprecatedClassifierUsageChecker if (targetDescriptor is FakeCallableDescriptorForObject) return - val deprecation = targetDescriptor.getDeprecation() + val deprecations = targetDescriptor.getDeprecations().toMutableList() // avoid duplicating diagnostic when deprecation for property effectively deprecates setter - if (targetDescriptor is PropertySetterDescriptor && targetDescriptor.correspondingProperty.getDeprecation() == deprecation) return + if (targetDescriptor is PropertySetterDescriptor) { + deprecations -= targetDescriptor.correspondingProperty.getDeprecations() + } - if (deprecation != null) { - trace.report(createDeprecationDiagnostic(element, deprecation)) + if (deprecations.isNotEmpty()) { + for (deprecation in deprecations) { + trace.report(createDeprecationDiagnostic(element, deprecation)) + } } else if (targetDescriptor is PropertyDescriptor && shouldCheckPropertyGetter(element)) { targetDescriptor.getter?.let { check(it, trace, element) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/DeprecatedClassifierUsageChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/DeprecatedClassifierUsageChecker.kt index 4c8a555d835..52b0d4fab45 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/DeprecatedClassifierUsageChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/DeprecatedClassifierUsageChecker.kt @@ -21,7 +21,7 @@ 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 +import org.jetbrains.kotlin.resolve.getDeprecations class DeprecatedClassifierUsageChecker : ClassifierUsageChecker { override fun check( @@ -30,8 +30,8 @@ class DeprecatedClassifierUsageChecker : ClassifierUsageChecker { element: PsiElement, languageVersionSettings: LanguageVersionSettings ) { - val deprecation = targetDescriptor.getDeprecation() - if (deprecation != null) { + val deprecations = targetDescriptor.getDeprecations() + for (deprecation in deprecations) { trace.report(createDeprecationDiagnostic(element, deprecation)) } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/deprecationUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/deprecationUtil.kt index ed9205a6f6c..5acf07353c1 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/deprecationUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/deprecationUtil.kt @@ -89,17 +89,17 @@ private data class DeprecatedByOverridden(private val deprecations: Collection { val deprecation = this.getDeprecationByAnnotation() if (deprecation != null) { - return deprecation + return listOf(deprecation) } if (this is CallableMemberDescriptor) { - return deprecationByOverridden(this) + return listOfNotNull(deprecationByOverridden(this)) } - return null + return emptyList() } private fun deprecationByOverridden(root: CallableMemberDescriptor): Deprecation? { @@ -200,9 +200,8 @@ enum class DeprecationLevelValue { WARNING, ERROR, HIDDEN } -fun DeclarationDescriptor.isDeprecatedHidden(): Boolean { - return getDeprecation()?.deprecationLevel == HIDDEN -} +fun DeclarationDescriptor.isDeprecatedHidden(): Boolean = + getDeprecations().any { it.deprecationLevel == HIDDEN } @JvmOverloads fun DeclarationDescriptor.isHiddenInResolution(languageVersionSettings: LanguageVersionSettings, isSuperCall: Boolean = false): Boolean { diff --git a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt index d3b6e66ccf3..e12770d94a3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt @@ -18,15 +18,12 @@ package org.jetbrains.kotlin.idea import com.google.common.html.HtmlEscapers import com.intellij.codeInsight.documentation.DocumentationManagerUtil -import com.intellij.codeInsight.javadoc.JavaDocInfoGenerator import com.intellij.codeInsight.javadoc.JavaDocInfoGeneratorFactory import com.intellij.lang.documentation.AbstractDocumentationProvider import com.intellij.lang.java.JavaDocumentationProvider -import com.intellij.lang.java.JavaLanguage import com.intellij.openapi.diagnostic.Logger import com.intellij.psi.PsiElement import com.intellij.psi.PsiManager -import com.intellij.psi.PsiMethod import org.jetbrains.kotlin.asJava.LightClassUtil import org.jetbrains.kotlin.asJava.elements.KtLightDeclaration import org.jetbrains.kotlin.descriptors.CallableDescriptor @@ -51,7 +48,7 @@ import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.deprecatedByAnnotationReplaceWithExpression import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe -import org.jetbrains.kotlin.resolve.getDeprecation +import org.jetbrains.kotlin.resolve.getDeprecations import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.utils.addToStdlib.constant @@ -196,7 +193,7 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() { } private fun renderDeprecationInfo(declarationDescriptor: DeclarationDescriptor): String { - val deprecation = declarationDescriptor.getDeprecation() ?: return "" + val deprecation = declarationDescriptor.getDeprecations().firstOrNull() ?: return "" return buildString { wrapTag("DL") { diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/OverridingDeprecatedMemberInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/OverridingDeprecatedMemberInspection.kt index 4c4ee94e329..007dbbe73a7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/OverridingDeprecatedMemberInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/OverridingDeprecatedMemberInspection.kt @@ -24,7 +24,7 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.deprecatedByOverriddenMessage -import org.jetbrains.kotlin.resolve.getDeprecation +import org.jetbrains.kotlin.resolve.getDeprecations class OverridingDeprecatedMemberInspection : AbstractKotlinInspection() { override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor { @@ -41,7 +41,7 @@ class OverridingDeprecatedMemberInspection : AbstractKotlinInspection() { if (declaration is KtDestructuringDeclarationEntry) return val accessorDescriptor = declaration.resolveToDescriptor() as? CallableMemberDescriptor ?: return - val message = accessorDescriptor.getDeprecation()?.deprecatedByOverriddenMessage() ?: return + val message = accessorDescriptor.getDeprecations().firstOrNull()?.deprecatedByOverriddenMessage() ?: return val problem = holder.manager.createProblemDescriptor( targetForProblem, message, @@ -53,4 +53,4 @@ class OverridingDeprecatedMemberInspection : AbstractKotlinInspection() { } } } -} \ No newline at end of file +}