OpenJDK / bsd-port / jdk9 / langtools
changeset 830:812c6251ea78
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
author | mcimadamore |
---|---|
date | Mon, 24 Jan 2011 15:45:24 +0000 |
parents | 02e6e7dd1a64 |
children | 57e3b9bc7fb8 |
files | src/share/classes/com/sun/tools/javac/parser/JavacParser.java src/share/classes/com/sun/tools/javac/resources/compiler.properties test/tools/javac/diags/examples/VarargsAndOldArraySyntax.java test/tools/javac/varargs/6569633/T6569633.java test/tools/javac/varargs/6569633/T6569633.out |
diffstat | 5 files changed, 51 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/com/sun/tools/javac/parser/JavacParser.java Mon Jan 24 15:45:06 2011 +0000 +++ b/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)); }
--- a/src/share/classes/com/sun/tools/javac/resources/compiler.properties Mon Jan 24 15:45:06 2011 +0000 +++ b/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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/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[]) { } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/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[]) { } +}