From dd61ddf7d9de5f090cc85efe421e992324288dbb Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 23 Sep 2011 17:59:11 +0200 Subject: [PATCH] only suggest to create dynamic methods when there are argument types available (EA-29809) low priority create dynamic method/property intentions --- .../plugins/groovy/annotator/GroovyAnnotator.java | 5 ++++- .../intentions/dynamic/DynamicMethodFix.java | 14 +++++++------- .../intentions/dynamic/DynamicPropertyFix.java | 3 ++- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java index 3d5d51610abc..a9b5cb98ab94 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java @@ -1444,7 +1444,10 @@ public class GroovyAnnotator extends GroovyElementVisitor implements Annotator { } if (QuickfixUtil.isCall(referenceExpression)) { - annotation.registerFix(new DynamicMethodFix(referenceExpression), referenceExpression.getTextRange()); + PsiType[] argumentTypes = PsiUtil.getArgumentTypes(referenceExpression, false); + if (argumentTypes != null) { + annotation.registerFix(new DynamicMethodFix(referenceExpression, argumentTypes), referenceExpression.getTextRange()); + } } else { annotation.registerFix(new DynamicPropertyFix(referenceExpression), referenceExpression.getTextRange()); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/dynamic/DynamicMethodFix.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/dynamic/DynamicMethodFix.java index 2d1a16d3019d..0e9c7c6c3965 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/dynamic/DynamicMethodFix.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/dynamic/DynamicMethodFix.java @@ -16,6 +16,7 @@ package org.jetbrains.plugins.groovy.annotator.intentions.dynamic; import com.intellij.codeInsight.intention.IntentionAction; +import com.intellij.codeInsight.intention.LowPriorityAction; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiFile; @@ -28,27 +29,26 @@ import org.jetbrains.plugins.groovy.annotator.intentions.dynamic.ui.DynamicDialo import org.jetbrains.plugins.groovy.annotator.intentions.dynamic.ui.DynamicElementSettings; import org.jetbrains.plugins.groovy.annotator.intentions.dynamic.ui.DynamicMethodDialog; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; -import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; /** * @author Maxim.Medvedev */ -public class DynamicMethodFix implements IntentionAction { +public class DynamicMethodFix implements IntentionAction, LowPriorityAction { private final GrReferenceExpression myReferenceExpression; + private final PsiType[] myMethodArgumentsTypes; - public DynamicMethodFix(GrReferenceExpression referenceExpression) { + public DynamicMethodFix(GrReferenceExpression referenceExpression, final PsiType[] argumentTypes) { myReferenceExpression = referenceExpression; + myMethodArgumentsTypes = argumentTypes; } @NotNull public String getText() { - final PsiType[] methodArgumentsTypes = PsiUtil.getArgumentTypes(myReferenceExpression, false); StringBuilder builder = new StringBuilder(" '").append(myReferenceExpression.getName()); builder.append("("); - assert methodArgumentsTypes != null; - for (int i = 0; i < methodArgumentsTypes.length; i++) { - PsiType type = methodArgumentsTypes[i]; + for (int i = 0; i < myMethodArgumentsTypes.length; i++) { + PsiType type = myMethodArgumentsTypes[i]; if (i > 0) { builder.append(", "); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/dynamic/DynamicPropertyFix.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/dynamic/DynamicPropertyFix.java index 988cc11c2daa..a4f837983d39 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/dynamic/DynamicPropertyFix.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/dynamic/DynamicPropertyFix.java @@ -16,6 +16,7 @@ package org.jetbrains.plugins.groovy.annotator.intentions.dynamic; import com.intellij.codeInsight.intention.IntentionAction; +import com.intellij.codeInsight.intention.LowPriorityAction; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; @@ -36,7 +37,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrRefere /** * @author Maxim.Medvedev */ -public class DynamicPropertyFix extends GroovyFix implements IntentionAction { +public class DynamicPropertyFix extends GroovyFix implements IntentionAction, LowPriorityAction { private final GrReferenceExpression myReferenceExpression; private final GrArgumentLabel myArgumentLabel; private final PsiClass myTargetClass;