mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 14:23:28 +07:00
UnstableApiUsageInspection: extract overridden method case to a separate method. Update testdata for ScheduledForRemoval
GitOrigin-RevId: a855fca7fbc9c3865108aa6937d962709a1471dc
This commit is contained in:
committed by
intellij-monorepo-bot
parent
c62efbfcb7
commit
4e0b7c950e
@@ -129,7 +129,12 @@ private class UnstableApiUsageProcessor(
|
||||
}
|
||||
val annotationName = annotatedContainingDeclaration.psiAnnotation.qualifiedName ?: return
|
||||
val messageProvider = knownAnnotationMessageProviders[annotationName] ?: DefaultUnstableApiUsageMessageProvider
|
||||
val message = messageProvider.buildMessage(annotatedContainingDeclaration, isMethodOverriding)
|
||||
val message = if (isMethodOverriding) {
|
||||
messageProvider.buildUnstableMethodOverriddenMessage(annotatedContainingDeclaration)
|
||||
}
|
||||
else {
|
||||
messageProvider.buildMessage(annotatedContainingDeclaration)
|
||||
}
|
||||
val elementToHighlight = (sourceNode as? UDeclaration)?.uastAnchor.sourcePsiElement ?: sourceNode.sourcePsi
|
||||
if (elementToHighlight != null) {
|
||||
problemsHolder.registerProblem(elementToHighlight, message, ProblemHighlightType.GENERIC_ERROR_OR_WARNING)
|
||||
@@ -185,73 +190,94 @@ private fun findAnnotatedContainingDeclaration(
|
||||
}
|
||||
|
||||
private interface UnstableApiUsageMessageProvider {
|
||||
fun buildMessage(
|
||||
annotatedContainingDeclaration: AnnotatedContainingDeclaration,
|
||||
isMethodOverriding: Boolean
|
||||
): String
|
||||
|
||||
fun buildMessage(annotatedContainingDeclaration: AnnotatedContainingDeclaration): String
|
||||
|
||||
fun buildUnstableMethodOverriddenMessage(annotatedContainingDeclaration: AnnotatedContainingDeclaration): String
|
||||
}
|
||||
|
||||
private object DefaultUnstableApiUsageMessageProvider : UnstableApiUsageMessageProvider {
|
||||
override fun buildMessage(
|
||||
annotatedContainingDeclaration: AnnotatedContainingDeclaration,
|
||||
isMethodOverriding: Boolean
|
||||
): String = with(annotatedContainingDeclaration) {
|
||||
when {
|
||||
isMethodOverriding && isOwnAnnotation -> JvmAnalysisBundle.message(
|
||||
"jvm.inspections.unstable.api.usage.overridden.method.is.marked.unstable.itself", targetName
|
||||
)
|
||||
isMethodOverriding && !isOwnAnnotation -> JvmAnalysisBundle.message(
|
||||
"jvm.inspections.unstable.api.usage.overridden.method.is.declared.in.unstable.api",
|
||||
targetName,
|
||||
containingDeclarationType,
|
||||
containingDeclarationName
|
||||
)
|
||||
!isMethodOverriding && !isOwnAnnotation -> JvmAnalysisBundle.message(
|
||||
"jvm.inspections.unstable.api.usage.api.is.declared.in.unstable.api",
|
||||
targetName,
|
||||
containingDeclarationType,
|
||||
containingDeclarationName
|
||||
)
|
||||
else -> JvmAnalysisBundle.message("jvm.inspections.unstable.api.usage.api.is.marked.unstable.itself", targetName)
|
||||
override fun buildUnstableMethodOverriddenMessage(annotatedContainingDeclaration: AnnotatedContainingDeclaration): String =
|
||||
with(annotatedContainingDeclaration) {
|
||||
if (isOwnAnnotation) {
|
||||
JvmAnalysisBundle.message("jvm.inspections.unstable.api.usage.overridden.method.is.marked.unstable.itself", targetName)
|
||||
}
|
||||
else {
|
||||
JvmAnalysisBundle.message(
|
||||
"jvm.inspections.unstable.api.usage.overridden.method.is.declared.in.unstable.api",
|
||||
targetName,
|
||||
containingDeclarationType,
|
||||
containingDeclarationName
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun buildMessage(annotatedContainingDeclaration: AnnotatedContainingDeclaration): String =
|
||||
with(annotatedContainingDeclaration) {
|
||||
if (isOwnAnnotation) {
|
||||
JvmAnalysisBundle.message("jvm.inspections.unstable.api.usage.api.is.marked.unstable.itself", targetName)
|
||||
}
|
||||
else {
|
||||
JvmAnalysisBundle.message(
|
||||
"jvm.inspections.unstable.api.usage.api.is.declared.in.unstable.api",
|
||||
targetName,
|
||||
containingDeclarationType,
|
||||
containingDeclarationName
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class ScheduledForRemovalMessageProvider : UnstableApiUsageMessageProvider {
|
||||
override fun buildMessage(
|
||||
annotatedContainingDeclaration: AnnotatedContainingDeclaration,
|
||||
isMethodOverriding: Boolean
|
||||
): String {
|
||||
override fun buildUnstableMethodOverriddenMessage(annotatedContainingDeclaration: AnnotatedContainingDeclaration): String {
|
||||
val versionMessage = getVersionMessage(annotatedContainingDeclaration)
|
||||
return with(annotatedContainingDeclaration) {
|
||||
if (isOwnAnnotation) {
|
||||
JvmAnalysisBundle.message(
|
||||
"jvm.inspections.scheduled.for.removal.method.overridden.marked.itself",
|
||||
targetName,
|
||||
versionMessage
|
||||
)
|
||||
}
|
||||
else {
|
||||
JvmAnalysisBundle.message(
|
||||
"jvm.inspections.scheduled.for.removal.method.overridden.declared.in.marked.api",
|
||||
targetName,
|
||||
containingDeclarationType,
|
||||
containingDeclarationName,
|
||||
versionMessage
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun buildMessage(annotatedContainingDeclaration: AnnotatedContainingDeclaration): String {
|
||||
val versionMessage = getVersionMessage(annotatedContainingDeclaration)
|
||||
return with(annotatedContainingDeclaration) {
|
||||
if (!isOwnAnnotation) {
|
||||
JvmAnalysisBundle.message(
|
||||
"jvm.inspections.scheduled.for.removal.api.is.declared.in.marked.api",
|
||||
targetName,
|
||||
containingDeclarationType,
|
||||
containingDeclarationName,
|
||||
versionMessage
|
||||
)
|
||||
}
|
||||
else {
|
||||
JvmAnalysisBundle.message(
|
||||
"jvm.inspections.scheduled.for.removal.api.is.marked.itself", targetName, versionMessage
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getVersionMessage(annotatedContainingDeclaration: AnnotatedContainingDeclaration): String {
|
||||
val versionValue = AnnotationUtil.getDeclaredStringAttributeValue(annotatedContainingDeclaration.psiAnnotation, "inVersion")
|
||||
val versionMessage = if (versionValue.isNullOrEmpty()) {
|
||||
return if (versionValue.isNullOrEmpty()) {
|
||||
JvmAnalysisBundle.message("jvm.inspections.scheduled.for.removal.future.version")
|
||||
}
|
||||
else {
|
||||
JvmAnalysisBundle.message("jvm.inspections.scheduled.for.removal.predefined.version", versionValue)
|
||||
}
|
||||
return with(annotatedContainingDeclaration) {
|
||||
when {
|
||||
isMethodOverriding && isOwnAnnotation -> JvmAnalysisBundle.message(
|
||||
"jvm.inspections.scheduled.for.removal.method.overridden.marked.itself", targetName, versionMessage
|
||||
)
|
||||
isMethodOverriding && !isOwnAnnotation -> JvmAnalysisBundle.message(
|
||||
"jvm.inspections.scheduled.for.removal.method.overridden.declared.in.marked.api",
|
||||
targetName,
|
||||
containingDeclarationType,
|
||||
containingDeclarationName,
|
||||
versionValue
|
||||
)
|
||||
!isMethodOverriding && !isOwnAnnotation -> JvmAnalysisBundle.message(
|
||||
"jvm.inspections.scheduled.for.removal.api.is.declared.in.marked.api",
|
||||
targetName,
|
||||
containingDeclarationType,
|
||||
containingDeclarationName,
|
||||
versionValue
|
||||
)
|
||||
else -> JvmAnalysisBundle.message(
|
||||
"jvm.inspections.scheduled.for.removal.api.is.marked.itself", targetName, versionValue
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user