# HG changeset patch # User vromero # Date 1486565014 28800 # Node ID 118221d3960de4ce43fff2a85e58a9fa95e5047d # Parent ae42964e27e36af6a8cc6217efa9c90a432b6486 8174027: error message should adapt to the corresponding top level element Reviewed-by: mcimadamore diff -r ae42964e27e3 -r 118221d3960d langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java Tue Feb 07 13:45:29 2017 -0800 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java Wed Feb 08 06:43:34 2017 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2017, 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 @@ -32,6 +32,7 @@ import javax.tools.JavaFileManager; import com.sun.tools.javac.code.*; +import com.sun.tools.javac.code.Kinds.KindName; import com.sun.tools.javac.code.Kinds.KindSelector; import com.sun.tools.javac.code.Scope.*; import com.sun.tools.javac.code.Symbol.*; @@ -400,8 +401,14 @@ c = syms.enterClass(env.toplevel.modle, tree.name, packge); packge.members().enterIfAbsent(c); if ((tree.mods.flags & PUBLIC) != 0 && !classNameMatchesFileName(c, env)) { + KindName topElement = KindName.CLASS; + if ((tree.mods.flags & ENUM) != 0) { + topElement = KindName.ENUM; + } else if ((tree.mods.flags & INTERFACE) != 0) { + topElement = KindName.INTERFACE; + } log.error(tree.pos(), - "class.public.should.be.in.file", tree.name); + "class.public.should.be.in.file", topElement, tree.name); } } else { if (!tree.name.isEmpty() && diff -r ae42964e27e3 -r 118221d3960d langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Tue Feb 07 13:45:29 2017 -0800 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Wed Feb 08 06:43:34 2017 -0800 @@ -1246,9 +1246,9 @@ # In the following string, {0} is the name of the class in the Java source. # It really should be used two times.. -# 0: name +# 0: kind name, 1: name compiler.err.class.public.should.be.in.file=\ - class {0} is public, should be declared in a file named {0}.java + {0} {1} is public, should be declared in a file named {1}.java ## All errors which do not refer to a particular line in the source code are ## preceded by this string. diff -r ae42964e27e3 -r 118221d3960d langtools/test/tools/javac/T6234077.out --- a/langtools/test/tools/javac/T6234077.out Tue Feb 07 13:45:29 2017 -0800 +++ b/langtools/test/tools/javac/T6234077.out Wed Feb 08 06:43:34 2017 -0800 @@ -1,2 +1,2 @@ -T6234077.java:7:8: compiler.err.class.public.should.be.in.file: Foo +T6234077.java:7:8: compiler.err.class.public.should.be.in.file: kindname.class, Foo 1 error diff -r ae42964e27e3 -r 118221d3960d langtools/test/tools/javac/T8173955/MessageForClassTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/T8173955/MessageForClassTest.java Wed Feb 08 06:43:34 2017 -0800 @@ -0,0 +1,8 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8174027 + * @summary error message should adapt to the corresponding top level element + * @compile/fail/ref=MessageForClassTest.out -XDrawDiagnostics MessageForClassTest.java + */ + +public class MessageForClassTest_ {} diff -r ae42964e27e3 -r 118221d3960d langtools/test/tools/javac/T8173955/MessageForClassTest.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/T8173955/MessageForClassTest.out Wed Feb 08 06:43:34 2017 -0800 @@ -0,0 +1,2 @@ +MessageForClassTest.java:8:8: compiler.err.class.public.should.be.in.file: kindname.class, MessageForClassTest_ +1 error diff -r ae42964e27e3 -r 118221d3960d langtools/test/tools/javac/T8173955/MessageForEnumTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/T8173955/MessageForEnumTest.java Wed Feb 08 06:43:34 2017 -0800 @@ -0,0 +1,8 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8174027 + * @summary error message should adapt to the corresponding top level element + * @compile/fail/ref=MessageForEnumTest.out -XDrawDiagnostics MessageForEnumTest.java + */ + +public enum MessageForEnumTest_ {} diff -r ae42964e27e3 -r 118221d3960d langtools/test/tools/javac/T8173955/MessageForEnumTest.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/T8173955/MessageForEnumTest.out Wed Feb 08 06:43:34 2017 -0800 @@ -0,0 +1,2 @@ +MessageForEnumTest.java:8:8: compiler.err.class.public.should.be.in.file: kindname.enum, MessageForEnumTest_ +1 error diff -r ae42964e27e3 -r 118221d3960d langtools/test/tools/javac/T8173955/MessageForInterfaceTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/T8173955/MessageForInterfaceTest.java Wed Feb 08 06:43:34 2017 -0800 @@ -0,0 +1,8 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8174027 + * @summary error message should adapt to the corresponding top level element + * @compile/fail/ref=MessageForInterfaceTest.out -XDrawDiagnostics MessageForInterfaceTest.java + */ + +public interface MessageForInterfaceTest_ {} diff -r ae42964e27e3 -r 118221d3960d langtools/test/tools/javac/T8173955/MessageForInterfaceTest.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/T8173955/MessageForInterfaceTest.out Wed Feb 08 06:43:34 2017 -0800 @@ -0,0 +1,2 @@ +MessageForInterfaceTest.java:8:8: compiler.err.class.public.should.be.in.file: kindname.interface, MessageForInterfaceTest_ +1 error diff -r ae42964e27e3 -r 118221d3960d langtools/test/tools/javac/modules/ModuleInfoTest.java --- a/langtools/test/tools/javac/modules/ModuleInfoTest.java Tue Feb 07 13:45:29 2017 -0800 +++ b/langtools/test/tools/javac/modules/ModuleInfoTest.java Wed Feb 08 06:43:34 2017 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, 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 @@ -94,7 +94,7 @@ .writeAll() .getOutput(Task.OutputKind.DIRECT); - if (!log.contains("module-info.java:1:8: compiler.err.class.public.should.be.in.file: C")) + if (!log.contains("module-info.java:1:8: compiler.err.class.public.should.be.in.file: kindname.class, C")) throw new Exception("expected output not found"); }