Unclear error message when class has same name as package

Jonathan Gibbons jonathan.gibbons at oracle.com
Tue Aug 13 15:32:15 PDT 2013


Jeremy,

To be realistic, I do not know what we can do about this issue. It is 
legal to have a class and a package with the same name, which means that 
in a sufficiently perverse case, and the following import

     import A.B.C.D.E;

the problem could occur at any point along the qualified name, where the 
compiler chooses a type name contrary to the erroneous expectation of 
the programmer. See JLS 6.5.4.

So, as much as it would be nice to be able to warn the programmer of 
problematic coding, this error message is not the place to do it.    The 
compiler already tries to give you enough detail by point out (in your 
case) that it is trying to find "class E" within "class D".   That 
should surely be enough to have you realize that the compiler is looking 
at "class D" and not "package D".

-- Jon


On 08/13/2013 12:36 PM, Jeremy Manson wrote:
> Thanks!
>
> Jeremy
>
>
> On Tue, Aug 13, 2013 at 2:31 AM, Vicente-Arturo Romero-Zaldivar 
> <vicente.romero at oracle.com <mailto:vicente.romero at oracle.com>> wrote:
>
>     Hi Jeremy,
>
>     Thanks for the report I have created a bug entry with id
>     JDK-8022873 to track this issue,
>
>     Vicente
>
>
>     On 10/08/13 23:10, Jeremy Manson wrote:
>
>         Hi folks,
>
>         One of our users said that he spent a day trying to figure out
>         where how this error happened (lots of autogenerated code made
>         it all rather opaque), so I'm reporting it.
>
>         $ cat C.java
>         import p.D.E;
>
>         public class C {
>         }
>         $ cat p/D.java
>         package p;
>         public class D {
>         }
>         $ cat p/D/E.java
>         package p.D;
>
>         public class E {
>         }
>         $ javac C.java
>         C.java:1: error: cannot find symbol
>         import p.D.E;
>                   ^
>           symbol:   class E
>           location: class D
>         1 error
>
>
>         The reporter suggested that the error "cannot find symbol"
>         would be better as something like "package D clashes with
>         class of same name".
>
>         Jeremy
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20130813/4f935e72/attachment.html 


More information about the compiler-dev mailing list