Simplify source operations in FirAnnotationArgumentChecker

This commit is contained in:
Mikhail Glukhikh
2020-11-24 10:04:57 +03:00
parent 1c71e64f58
commit b673996586
@@ -37,7 +37,7 @@ object FirAnnotationArgumentChecker : FirBasicDeclarationChecker() {
val expression = (arg as? FirNamedArgumentExpression)?.expression ?: arg
checkAnnotationArgumentWithSubElements(expression, context.session, reporter)
?.let { reporter.report(getFirSourceElement(expression), it) }
?.let { reporter.report(expression.source, it) }
}
}
}
@@ -52,7 +52,7 @@ object FirAnnotationArgumentChecker : FirBasicDeclarationChecker() {
var usedNonConst = false
for (arg in expression.argumentList.arguments) {
val sourceForReport = getFirSourceElement(arg)
val sourceForReport = arg.source
when (val err = checkAnnotationArgumentWithSubElements(arg, session, reporter)) {
null -> {
@@ -70,7 +70,7 @@ object FirAnnotationArgumentChecker : FirBasicDeclarationChecker() {
is FirVarargArgumentsExpression -> {
for (arg in expression.arguments)
checkAnnotationArgumentWithSubElements(arg, session, reporter)
?.let { reporter.report(getFirSourceElement(arg), it) }
?.let { reporter.report(arg.source, it) }
}
else ->
return checkAnnotationArgument(expression, session)
@@ -224,31 +224,6 @@ object FirAnnotationArgumentChecker : FirBasicDeclarationChecker() {
?.toSymbol(session)
?.fir
private fun getFirSourceElement(expression: FirExpression): FirSourceElement? =
when {
expression is FirFunctionCall && expression.calleeReference.name == TO_STRING ->
getParentOfFirSourceElement(getParentOfFirSourceElement(expression.source))
expression is FirFunctionCall ->
expression.source
(expression as? FirQualifiedAccess)?.explicitReceiver != null ->
getParentOfFirSourceElement(expression.source)
else ->
expression.source
}
private fun getParentOfFirSourceElement(source: FirSourceElement?): FirSourceElement? =
when (source) {
is FirPsiSourceElement<*> ->
source.psi.parent.toFirPsiSourceElement()
is FirLightSourceElement -> {
val elementOfParent = source.treeStructure.getParent(source.lighterASTNode) ?: source.lighterASTNode
elementOfParent.toFirLightSourceElement(source.treeStructure)
}
else ->
source
}
private inline fun <reified T : FirSourceElement, P : PsiElement> DiagnosticReporter.report(
source: T?,
factory: FirDiagnosticFactory0<T, P>