implementation inconsistency with scope rules for Java generic types

Rémi Forax forax at univ-mlv.fr
Thu Jun 19 04:57:19 PDT 2008


Maurizio Cimadamore a écrit :
> Hi Nick,
> this is definitively an interesting question; if your example might 
> look like a straight javac bug at first, it' less clear whether it 
> should be considered as such when Subclass and NestedSubclass live in 
> completely unrelated packages; I think that one in principle could 
> exploit an eventual vulnerability (as the one you described for 
> Eclipse) for acquiring access to members of a private type that 
> otherwise cannot be accessed.
>
> In this particular case however, since the class referencing the 
> private type is the class in which that type is defined, I don't think 
> that an error should be raised - so this is indeed a javac bug.
>
> Alex do you have any JLS paragraph handy to support this?
In section 6.6.1, the  next to last bullet  says:
"if the member or constructor is declared |private|, then access is 
permitted if and only if it occurs within the body of the top level 
class (§7.6) 
<http://java.sun.com/docs/books/jls/third_edition/html/packages.html#26783> 
that encloses the declaration of the member or constructor"

If body means body like in the grammar;

/NormalClassDeclaration:
/|     class|/ Identifier [/TypeParameters]/ [/|extends|/ Type] [/|implements|/ TypeList] ClassBody/


Annotations or extends/implements types are not in the body so javac is 
correct.
> Maurizio
Rémi
>
> Nick Radov wrote:
>>
>> I've run across an interesting inconsistency between javac and the 
>> Java compiler built in to the Eclipse 3.3.2 IDE. Try compiling this 
>> piece of code.
>>
>> public class X<T> {
>> }
>> class Subclass extends X<Subclass.NestedSubclass> {
>> @SuppressWarnings("unchecked")
>> private final class NestedSubclass extends X {
>> }
>> }
>>
>> The javac compiler reports one error because the generic type 
>> parameter of the Subclass class has private access, but Eclipse 
>> reports no errors. I had reported this as an Eclipse bug, but one of 
>> the Eclipse team thinks it may be a javac bug. You can see the 
>> Eclipse bug report here: 
>> <https://bugs.eclipse.org/bugs/show_bug.cgi?id=237656>.
>>
>> Does anyone know for sure which is correct? As far as I can tell the 
>> JLS doesn't explicitly state whether this is allowed, although it may 
>> be implicit in the scope rules.
>>
>> *Nick Radov | Director, Research & Development | Axolotl Corp*
>> www.axolotl.com <http://www.axolotl.com/>, d: 408.920.0800 x116, f: 
>> 408.920.0880
>> 160 West Santa Clara St., Suite 1000, San Jose, CA, 95113
>>
>> THE MARKET LEADER IN HEALTH INFORMATION EXCHANGE – PROVIDING PATIENT 
>> INFORMATION WHEN AND WHERE IT IS NEEDED.
>>
>> /The information contained in this e-mail transmission may contain 
>> confidential information. It is intended for the use of the 
>> addressee. If you are not the intended recipient, any disclosure, 
>> copying, or distribution of this information is strictly prohibited. 
>> If you receive this message in error, please inform the sender 
>> immediately and remove any record of this message./ 




More information about the compiler-dev mailing list