From a316f5e735ffdadf0d6cfbb1491003190c5baf54 Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Wed, 13 Sep 2017 14:57:31 +0200 Subject: [PATCH] [groovy] prefer empty vararg over implicit null (IDEA-178858) --- .../lang/resolve/GrDefaultMethodComparator.java | 5 +++++ .../groovy/lang/resolve/ResolveMethodTest.groovy | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/GrDefaultMethodComparator.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/GrDefaultMethodComparator.java index 138f10ea9b10..ba676a2b1bb3 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/GrDefaultMethodComparator.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/GrDefaultMethodComparator.java @@ -69,6 +69,11 @@ public class GrDefaultMethodComparator extends GrMethodComparator { PsiParameter[] params1 = method1.getParameterList().getParameters(); PsiParameter[] params2 = method2.getParameterList().getParameters(); + + if (argTypes != null && argTypes.length == 0) { + if (params2.length == 1 && params2[0].getType() instanceof PsiArrayType) return true; + } + if (argTypes == null && params1.length != params2.length) return false; if (params1.length < params2.length) { diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolveMethodTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolveMethodTest.groovy index d3489f52e201..296b65190619 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolveMethodTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolveMethodTest.groovy @@ -19,6 +19,7 @@ package org.jetbrains.plugins.groovy.lang.resolve import com.intellij.psi.* import com.intellij.psi.util.PropertyUtil import org.jetbrains.plugins.groovy.codeInspection.assignment.GroovyAssignabilityCheckInspection +import org.jetbrains.plugins.groovy.lang.psi.GroovyFile import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariable import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrBinaryExpression import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrNewExpression @@ -2292,4 +2293,19 @@ new SomeClass().size() ''', GrMethodImpl } + + void 'test prefer varargs in no-arg call'() { + def file = fixture.configureByText('_.groovy', '''\ +class A { + A(String... a) { println "varargs" } + A(A a) { println "single" } +} + +new A() +''') as GroovyFile + def expression = file.statements.last() as GrNewExpression + def resolved = expression.resolveMethod() + assert resolved instanceof GrMethod + assert resolved.isVarArgs() + } }