[groovy] store expression in parameter cast fix since it's already known, no need to find it in argument list by index

GitOrigin-RevId: e45122d83c08c48e288016f4783c28041366d861
This commit is contained in:
Daniil Ovchinnikov
2019-12-27 14:07:55 +00:00
committed by intellij-monorepo-bot
parent 3f557092b6
commit 76bf5f5eb0
3 changed files with 40 additions and 8 deletions
@@ -8,6 +8,7 @@ import com.intellij.psi.SmartPointerManager;
import com.intellij.psi.SmartPsiElementPointer;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.groovy.codeInspection.GroovyFix;
@@ -68,7 +69,8 @@ public class GrCastFix extends GroovyFix {
JavaCodeStyleManager.getInstance(project).shortenClassReferences(replaced);
}
static void doSafeCast(@NotNull Project project, @NotNull PsiType type, @NotNull GrExpression expr) {
@ApiStatus.Internal
public static void doSafeCast(@NotNull Project project, @NotNull PsiType type, @NotNull GrExpression expr) {
if (!type.isValid()) return;
final GroovyPsiElementFactory factory = GroovyPsiElementFactory.getInstance(project);
@@ -1,9 +1,9 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.plugins.groovy.codeInspection.type.highlighting
import com.intellij.codeInspection.LocalQuickFix
import com.intellij.psi.PsiType
import org.jetbrains.plugins.groovy.GroovyBundle
import org.jetbrains.plugins.groovy.codeInspection.assignment.ParameterCastFix
import org.jetbrains.plugins.groovy.highlighting.HighlightSink
import org.jetbrains.plugins.groovy.lang.psi.api.GroovyMethodResult
import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgumentList
@@ -28,13 +28,13 @@ abstract class ConstructorCallHighlighter(reference: GroovyCallReference, sink:
}
}
override fun buildCastFix(argument: ExpressionArgument, expectedType: PsiType): ParameterCastFix? {
override fun buildCastFix(argument: ExpressionArgument, expectedType: PsiType): LocalQuickFix? {
val arguments = reference.arguments ?: return null
val list = argumentList ?: return null
if (argument !in arguments) return null
val position = list.getExpressionArgumentIndex(argument.expression)
return ParameterCastFix(position, expectedType)
val position = arguments.indexOf(argument)
if (position < 0) {
return null
}
return ParameterCastFix(argument.expression, position, expectedType)
}
fun highlight(): Boolean = highlightMethodApplicability()
@@ -0,0 +1,30 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.plugins.groovy.codeInspection.type.highlighting
import com.intellij.codeInspection.ProblemDescriptor
import com.intellij.model.Pointer
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiType
import com.intellij.psi.util.createSmartPointer
import org.jetbrains.plugins.groovy.GroovyBundle
import org.jetbrains.plugins.groovy.codeInspection.GroovyFix
import org.jetbrains.plugins.groovy.codeInspection.assignment.GrCastFix
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression
class ParameterCastFix(
expression: GrExpression,
position: Int,
private val myType: PsiType
) : GroovyFix() {
private val myName: String = GroovyBundle.message("parameter.cast.fix", position + 1, myType.presentableText)
override fun getName(): String = myName
override fun getFamilyName(): String = "Add parameter cast"
private val myExpression: Pointer<GrExpression> = expression.createSmartPointer()
override fun doFix(project: Project, descriptor: ProblemDescriptor) {
val expression = myExpression.dereference() ?: return
GrCastFix.doSafeCast(project, myType, expression)
}
}