Mercurial > hg > shenandoah-preopenjdk-archive > openjdk8 > langtools
changeset 2205:8acb838c9b79
8026374: javac accepts void as a method parameter
Summary: Changing Check.validate to reject void types.
Reviewed-by: jjg, vromero
author | jlahoda |
---|---|
date | Tue, 26 Nov 2013 15:27:19 +0100 |
parents | 3ea55d523981 |
children | 756ae3791c45 |
files | src/share/classes/com/sun/tools/javac/comp/Attr.java src/share/classes/com/sun/tools/javac/comp/Check.java test/tools/javac/declaration/method/MethodVoidParameter.java test/tools/javac/declaration/method/MethodVoidParameter.out |
diffstat | 4 files changed, 22 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/com/sun/tools/javac/comp/Attr.java Tue Nov 26 13:33:33 2013 +0100 +++ b/src/share/classes/com/sun/tools/javac/comp/Attr.java Tue Nov 26 15:27:19 2013 +0100 @@ -933,7 +933,8 @@ chk.validate(tree.typarams, localEnv); // Check that result type is well-formed. - chk.validate(tree.restype, localEnv); + if (tree.restype != null && !tree.restype.type.hasTag(VOID)) + chk.validate(tree.restype, localEnv); // Check that receiver type is well-formed. if (tree.recvparam != null) {
--- a/src/share/classes/com/sun/tools/javac/comp/Check.java Tue Nov 26 13:33:33 2013 +0100 +++ b/src/share/classes/com/sun/tools/javac/comp/Check.java Tue Nov 26 15:27:19 2013 +0100 @@ -1326,6 +1326,14 @@ tree.underlyingType.accept(this); } + @Override + public void visitTypeIdent(JCPrimitiveTypeTree that) { + if (that.type.hasTag(TypeTag.VOID)) { + log.error(that.pos(), "void.not.allowed.here"); + } + super.visitTypeIdent(that); + } + /** Default visitor method: do nothing. */ @Override
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/declaration/method/MethodVoidParameter.java Tue Nov 26 15:27:19 2013 +0100 @@ -0,0 +1,9 @@ +/* @test /nodynamiccopyright/ + * @bug 8026374 + * @summary Cannot use void as a variable type + * @compile/fail/ref=MethodVoidParameter.out -XDrawDiagnostics MethodVoidParameter.java + */ +public class MethodVoidParameter { + void method(void v) { } + void method(void... v) { } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/declaration/method/MethodVoidParameter.out Tue Nov 26 15:27:19 2013 +0100 @@ -0,0 +1,3 @@ +MethodVoidParameter.java:7:17: compiler.err.void.not.allowed.here +MethodVoidParameter.java:8:17: compiler.err.void.not.allowed.here +2 errors