changeset 51181:0f807f558017

8203813: javac accepts an illegal name as a receiver parameter name Reviewed-by: vromero
author bsrbnd
date Thu, 14 Jun 2018 05:50:21 -0700
parents 9ee93487d262
children 60d66a249db6
files src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties test/langtools/tools/javac/T8203813/WrongReceiverTest.java test/langtools/tools/javac/T8203813/WrongReceiverTest.out test/langtools/tools/javac/diags/examples/WrongReceiver.java
diffstat 5 files changed, 48 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java	Thu Jun 14 09:38:31 2018 -0300
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java	Thu Jun 14 05:50:21 2018 -0700
@@ -3127,6 +3127,9 @@
                         if (token.kind == LBRACKET) {
                             log.error(token.pos, Errors.ArrayAndReceiver);
                         }
+                        if (pn.hasTag(Tag.SELECT) && ((JCFieldAccess)pn).name != names._this) {
+                            log.error(token.pos, Errors.WrongReceiver);
+                        }
                     }
                     return toP(F.at(pos).ReceiverVarDef(mods, pn, type));
                 }
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties	Thu Jun 14 09:38:31 2018 -0300
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties	Thu Jun 14 05:50:21 2018 -0700
@@ -677,6 +677,9 @@
 compiler.err.array.and.receiver =\
     legacy array notation not allowed on receiver parameter
 
+compiler.err.wrong.receiver =\
+    wrong receiver parameter name
+
 compiler.err.variable.not.allowed=\
     variable declaration not allowed here
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/T8203813/WrongReceiverTest.java	Thu Jun 14 05:50:21 2018 -0700
@@ -0,0 +1,11 @@
+/*
+ * @test  /nodynamiccopyright/
+ * @bug 8203813
+ * @summary javac accepts an illegal name as a receiver parameter name
+ * @compile/fail/ref=WrongReceiverTest.out -XDrawDiagnostics WrongReceiverTest.java
+ */
+
+public class WrongReceiverTest {
+    WrongReceiverTest wr;
+    void f(WrongReceiverTest wr.wr) {}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/T8203813/WrongReceiverTest.out	Thu Jun 14 05:50:21 2018 -0700
@@ -0,0 +1,2 @@
+WrongReceiverTest.java:10:35: compiler.err.wrong.receiver
+1 error
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/diags/examples/WrongReceiver.java	Thu Jun 14 05:50:21 2018 -0700
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2018, 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.wrong.receiver
+
+class WrongReceiver {
+    WrongReceiver wr;
+    void f(WrongReceiver wr.wr) {}
+}