| /* |
| * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license |
| * that can be found in the license/LICENSE.txt file. |
| */ |
| |
| package org.jetbrains.kotlin.idea.inspections.coroutines |
| |
| import com.intellij.codeInspection.ProblemHighlightType |
| import com.intellij.codeInspection.ProblemsHolder |
| import org.jetbrains.kotlin.idea.inspections.collections.AbstractCallChainChecker |
| import org.jetbrains.kotlin.idea.inspections.collections.SimplifyCallChainFix |
| import org.jetbrains.kotlin.psi.psiUtil.startOffset |
| import org.jetbrains.kotlin.psi.qualifiedExpressionVisitor |
| |
| class RedundantRunCatchingInspection : AbstractCallChainChecker() { |
| |
| override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean) = |
| qualifiedExpressionVisitor(fun(expression) { |
| val conversion = findQualifiedConversion(expression, conversionGroups) { _, _, _, _ -> true } ?: return |
| val replacement = conversion.replacement |
| val descriptor = holder.manager.createProblemDescriptor( |
| expression, |
| expression.firstCalleeExpression()!!.textRange.shiftRight(-expression.startOffset), |
| "Redundant 'runCatching' call may be reduced to '$replacement'", |
| ProblemHighlightType.GENERIC_ERROR_OR_WARNING, |
| isOnTheFly, |
| SimplifyCallChainFix(conversion) |
| ) |
| holder.registerProblem(descriptor) |
| }) |
| |
| private val conversionGroups = conversions.group() |
| |
| companion object { |
| private val conversions = listOf( |
| Conversion( |
| "kotlin.runCatching", |
| "kotlin.Result.getOrThrow", |
| "run" |
| ) |
| ) |
| } |
| } |