allow to pass arrays as groovy vararg parameter
authorpeter <peter.gromov@jetbrains.com>
Mon, 15 Mar 2010 09:18:20 +0000 (09:18 +0000)
committerpeter <peter.gromov@jetbrains.com>
Mon, 15 Mar 2010 09:18:38 +0000 (09:18 +0000)
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GrClosureSignatureUtil.java
plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java
plugins/groovy/testdata/highlighting/ByteArrayArgument.groovy [new file with mode: 0644]

index 39d508ae4c76045fdf5cbe88d6f9f9f7365eb357..1a1ceda96e20f8caacf913b6ef6b5f1b5362ab85 100644 (file)
@@ -56,9 +56,10 @@ public class GrClosureSignatureUtil {
 
     if (signature.isVarargs()) {
       if (isApplicable(params, args, params.length - 1, args.length, manager, scope)) return true;
-
       PsiType lastType = params[params.length - 1].getType();
       assert lastType instanceof PsiArrayType;
+      if (TypesUtil.isAssignableByMethodCallConversion(lastType, args[args.length - 1], manager, scope)) return true;
+      
       PsiType varargType = ((PsiArrayType)lastType).getComponentType();
 
       for (int argCount = args.length - 1; argCount >= notOptional; argCount--) {
index eb385138a5f98140ad933e64c5a9e4fb12f18e18..f38280c2924c28efb2d50b579e0bbd1ed76978a2 100644 (file)
@@ -205,6 +205,7 @@ public class GroovyHighlightingTest extends LightCodeInsightFixtureTestCase {
   public void testStringAndGStringUpperBound() throws Exception {doTest();}
 
   public void testWithMethod() throws Exception {doTest();}
+  public void testByteArrayArgument() throws Exception {doTest();}
 
   public void testForLoopWithNestedEndlessLoop() throws Exception {doTest(new UnassignedVariableAccessInspection());}
   public void testIfIncrementElseReturn() throws Exception {doTest(new UnusedDefInspection()); }
diff --git a/plugins/groovy/testdata/highlighting/ByteArrayArgument.groovy b/plugins/groovy/testdata/highlighting/ByteArrayArgument.groovy
new file mode 100644 (file)
index 0000000..e20f290
--- /dev/null
@@ -0,0 +1,5 @@
+def foo(byte[] b) {}
+def bar(byte[] b) {
+  foo(b)
+  foo<warning descr="'foo' in 'ByteArrayArgument' cannot be applied to '(java.lang.Integer)'">(239)</warning>
+}
\ No newline at end of file