/*
* @test /nodynamiccopyright/
* @bug 4319507 4785453
* @summary Verify correct implementation of JLS2e 6.6.2.1
* @author maddox
*
* @compile/fail/ref=ProtectedMemberAccess4.out -XDdiags=-simpleNames -XDdiagsFormat=%b:%l:%_%m ProtectedMemberAccess4.java
*/
// 33 errors expected.
import pkg.SuperClass;
// Access to a protected instance (non-static) field, instance method,
// or member type by a qualified name is always legal in a subclass of
// the class in which the member is declared. Such access to a protected
// instance field or instance method is allowed only if the qualifying type
// or the type of the qualifying expression is (a subclass of) the class
// in which the reference occurs. In this test case, the qualifying type
// is a superclass, thus all of the qualified references to instance fields
// and instance methods are illegal.
int i = x.pi; // illegal
int j = x.spi; // ok
int w = x.pm(); // illegal
int y = x.spm(); // ok
static {
//class C1 extends pkg.SuperClass.pC {}
//interface I1 extends pkg.SuperClass.pI {}
//interface I2 extends pkg.SuperClass.spI {}
}
void m() {
int t = x.pm(); // illegal
int y = x.spm(); // ok
int i = x.pi; // illegal
int j = x.spi; // ok
//interface I1 extends pkg.SuperClass.pI {}
//interface I2 extends pkg.SuperClass.spI {}
}
class Inner {
int i = x.pi; // illegal
int j = x.spi; // ok
//static int sn = sx.pi;
//static int sm = sx.spi;
int w = x.pm(); // illegal
int y = x.spm(); // ok
//interface I1 extends pkg.SuperClass.pI {}
//interface I2 extends pkg.SuperClass.spI {}
// Not allowed in inner classes.
// static { ... }
void m() {
int t = x.pm(); // illegal
int y = x.spm(); // ok
int i = x.pi; // illegal
int j = x.spi; // ok
//interface I1 extends pkg.SuperClass.pI {}
//interface I2 extends pkg.SuperClass.spI {}
}
}
}