# HG changeset patch # User mcimadamore # Date 1295883924 0 # Node ID c7f08cdb5c3c78bce244f7b1c659a72ff8587c71 # Parent 376310825f60224c672c7bb6b4cbcffbdd72123e 6569633: Varargs: parser error when varargs element type is an array Summary: explicit error message when old-style array syntax is mixed with varargs Reviewed-by: jjg diff -r 376310825f60 -r c7f08cdb5c3c langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java --- a/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java Mon Jan 24 15:45:06 2011 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java Mon Jan 24 15:45:24 2011 +0000 @@ -2168,8 +2168,11 @@ JCVariableDecl variableDeclaratorId(JCModifiers mods, JCExpression type) { int pos = S.pos(); Name name = ident(); - if ((mods.flags & Flags.VARARGS) == 0) - type = bracketsOpt(type); + if ((mods.flags & Flags.VARARGS) != 0 && + S.token() == LBRACKET) { + log.error(S.pos(), "varargs.and.old.array.syntax"); + } + type = bracketsOpt(type); return toP(F.at(pos).VarDef(mods, name, type, null)); } diff -r 376310825f60 -r c7f08cdb5c3c langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties --- a/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties Mon Jan 24 15:45:06 2011 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties Mon Jan 24 15:45:24 2011 +0000 @@ -266,6 +266,8 @@ hexadecimal numbers must contain at least one hexadecimal digit compiler.err.invalid.meth.decl.ret.type.req=\ invalid method declaration; return type required +compiler.err.varargs.and.old.array.syntax=\ + legacy array notation not allowed on variable-arity parameter compiler.err.label.already.in.use=\ label {0} already in use diff -r 376310825f60 -r c7f08cdb5c3c langtools/test/tools/javac/diags/examples/VarargsAndOldArraySyntax.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/diags/examples/VarargsAndOldArraySyntax.java Mon Jan 24 15:45:24 2011 +0000 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +// key: compiler.err.varargs.and.old.array.syntax + +class VarargsAndOldArraySyntax { + void m1 (Integer... i[]) { } +} diff -r 376310825f60 -r c7f08cdb5c3c langtools/test/tools/javac/varargs/6569633/T6569633.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/varargs/6569633/T6569633.java Mon Jan 24 15:45:24 2011 +0000 @@ -0,0 +1,13 @@ +/* + * @test /nodynamiccopyright/ + * @bug 6569633 + * @author mcimadamore + * @summary Varargs: parser error when varargs element type is an array + * @compile/fail/ref=T6569633.out -XDrawDiagnostics T6569633.java + */ + +class T6569633 { + void m1 (Integer... i[]) { } + void m2 (Integer[]... i) { } + void m3 (Integer[]... i[]) { } +} diff -r 376310825f60 -r c7f08cdb5c3c langtools/test/tools/javac/varargs/6569633/T6569633.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/varargs/6569633/T6569633.out Mon Jan 24 15:45:24 2011 +0000 @@ -0,0 +1,3 @@ +T6569633.java:10:27: compiler.err.varargs.and.old.array.syntax +T6569633.java:12:29: compiler.err.varargs.and.old.array.syntax +2 errors