[Bug java/32638] Wrong selection of field in inner class when outer class and super class have a relevant filed named the same

mark at klomp dot org gcc-bugzilla@gcc.gnu.org
Thu Jul 5 18:34:00 GMT 2007



------- Comment #2 from mark at gcc dot gnu dot org  2007-07-05 18:34 -------
Subject: Re:  Wrong selection of field in inner class when
        outer class and super class have a relevant filed named the same

> ------- Comment #1 from tromey at gcc dot gnu dot org  2007-07-05 17:31 -------
> I tried this with svn trunk and got 'false'.
> If there is a bug here it is in ecj, not gcj.

Wow, that is interesting. Which ecj version are you using?
v_686_R32x, 3.2.2 release gives "true".

> I'm not sure I agree with your interpretation here.
> I don't see how specificity applies.  Isn't that term only used
> for overload resolution?  It's been a while since I was completely
> familiar with the JLS, though ... where are you reading?

I am using the completely wrong terms, sorry about that. I got the idea
from JLS second edition 8.3 Field Declarations (but admit to not have
had it handy when I filed the bug report, it actually took me some time
to find it back):
http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#40898

         If the class declares a field with a certain name, then the
        declaration of that field is said to hide any and all accessible
        declarations of fields with the same name in superclasses, and
        superinterfaces of the class. The field declaration also shadows
        (§6.3.1) declarations of any accessible fields in enclosing
        classes or interfaces, and any local variables, formal method
        parameters, and exception handler parameters with the same name
        in any enclosing blocks.

         If a field declaration hides the declaration of another field,
        the two fields need not have the same type.

         A class inherits from its direct superclass and direct
        superinterfaces all the non-private fields of the superclass and
        superinterfaces that are both accessible to code in the class
        and not hidden by a declaration in the class.

Since it mentions that the field declaration shadows the local variables
of the enclosing block (the method) and not the enclosing class and that
it inherits the fields (which I take to mean also shadows) I believe my
interpretation is correct.

> IMO the JLS could be clearer here, but I believe the local 'o'
> shadows the field a.o.  See:
> 
> http://java.sun.com/docs/books/jls/third_edition/html/names.html#34133
> 
> Anyway, I suggest filing against ecj or perhaps the JDK for resolution.

Yeah, it certainly is confusing. I need all my language lawyer skills to
even defend my bug report :) All I really want is a big fat warning from
the compiler for this type of usage because it clearly is something that
takes a long debate to even see who is right and why.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32638



More information about the Java-prs mailing list