diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/assignment/GrCastFix.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/assignment/GrCastFix.java index 7185ebc02177..1d06f65a9c5b 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/assignment/GrCastFix.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/assignment/GrCastFix.java @@ -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); diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/type/highlighting/ConstructorCallHighlighter.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/type/highlighting/ConstructorCallHighlighter.kt index 7afc1f00eb32..f575807761e7 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/type/highlighting/ConstructorCallHighlighter.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/type/highlighting/ConstructorCallHighlighter.kt @@ -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() diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/type/highlighting/ParameterCastFix.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/type/highlighting/ParameterCastFix.kt new file mode 100644 index 000000000000..7309503121a7 --- /dev/null +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/type/highlighting/ParameterCastFix.kt @@ -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 = expression.createSmartPointer() + + override fun doFix(project: Project, descriptor: ProblemDescriptor) { + val expression = myExpression.dereference() ?: return + GrCastFix.doSafeCast(project, myType, expression) + } +}