only suggest to create dynamic methods when there are argument types available (EA-29809)

low priority create dynamic method/property intentions
This commit is contained in:
peter
2011-09-23 18:50:55 +02:00
parent b4a4bec7c7
commit dd61ddf7d9
3 changed files with 13 additions and 9 deletions
@@ -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());
@@ -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(", ");
@@ -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;