3789983e89
Reviewed-by: darcy, ihse
649 lines
12 KiB
Java
649 lines
12 KiB
Java
/*
|
|
* Copyright (c) 2000, 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
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
|
|
/*
|
|
* @test
|
|
* @bug 4319507
|
|
* @summary Verify correct implementation of JLS2e 6.6.2.1
|
|
* @author maddox
|
|
*
|
|
* @run compile ProtectedMemberAccess1.java
|
|
*/
|
|
|
|
import pkg.SuperClass;
|
|
|
|
class ProtectedMemberAccess1a extends SuperClass {
|
|
|
|
// Access to a protected member via its simple name
|
|
// is always legal in a subclass of the class in
|
|
// which the member is declared.
|
|
|
|
int i = pi;
|
|
int j = spi;
|
|
|
|
int x = pm();
|
|
int y = spm();
|
|
|
|
pC obj1;
|
|
spC obj2;
|
|
|
|
pI obj3;
|
|
spI obj4;
|
|
|
|
Object o1 = (pC) null;
|
|
Object o2 = (spC) null;
|
|
|
|
Object o3 = (pI) null;
|
|
Object o4 = (spI) null;
|
|
|
|
class C1 extends pC {}
|
|
class C2 extends spC {}
|
|
|
|
interface I1 extends pI {}
|
|
interface I2 extends spI {}
|
|
|
|
static {
|
|
|
|
spi = 2;
|
|
|
|
int y = spm();
|
|
|
|
pC obj1;
|
|
spC obj2;
|
|
|
|
pI obj3;
|
|
spI obj4;
|
|
|
|
Object o1 = (pC) null;
|
|
Object o2 = (spC) null;
|
|
|
|
Object o3 = (pI) null;
|
|
Object o4 = (spI) null;
|
|
|
|
//class C1 extends pC {}
|
|
class C2 extends spC {}
|
|
|
|
//interface I1 extends pI {}
|
|
//interface I2 extends spI {}
|
|
|
|
}
|
|
|
|
void m() {
|
|
|
|
pi = 1;
|
|
spi = 2;
|
|
|
|
int x = pm();
|
|
int y = spm();
|
|
|
|
pC obj1;
|
|
spC obj2;
|
|
|
|
pI obj3;
|
|
spI obj4;
|
|
|
|
Object o1 = (pC) null;
|
|
Object o2 = (spC) null;
|
|
|
|
Object o3 = (pI) null;
|
|
Object o4 = (spI) null;
|
|
|
|
class C1 extends pC {}
|
|
class C2 extends spC {}
|
|
|
|
//interface I1 extends pI {}
|
|
//interface I2 extends spI {}
|
|
|
|
}
|
|
|
|
class Inner {
|
|
|
|
int i = pi;
|
|
int j = spi;
|
|
|
|
int x = pm();
|
|
int y = spm();
|
|
|
|
pC obj1;
|
|
spC obj2;
|
|
|
|
pI obj3;
|
|
spI obj4;
|
|
|
|
Object o1 = (pC) null;
|
|
Object o2 = (spC) null;
|
|
|
|
Object o3 = (pI) null;
|
|
Object o4 = (spI) null;
|
|
|
|
class C1 extends pC {}
|
|
class C2 extends spC {}
|
|
|
|
//interface I1 extends pI {}
|
|
//interface I2 extends spI {}
|
|
|
|
// Not allowed in inner classes.
|
|
// static { ... }
|
|
|
|
void m() {
|
|
|
|
pi = 1;
|
|
spi = 2;
|
|
|
|
int x = pm();
|
|
int y = spm();
|
|
|
|
pC obj1;
|
|
spC obj2;
|
|
|
|
pI obj3;
|
|
spI obj4;
|
|
|
|
Object o1 = (pC) null;
|
|
Object o2 = (spC) null;
|
|
|
|
Object o3 = (pI) null;
|
|
Object o4 = (spI) null;
|
|
|
|
class C1 extends pC {}
|
|
class C2 extends spC {}
|
|
|
|
//interface I1 extends pI {}
|
|
//interface I2 extends spI {}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
class ProtectedMemberAccess2a extends 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 if the qualifying type
|
|
// or the type of the qualifying expression is (a subclass of) the class
|
|
// in which the reference occurs.
|
|
|
|
ProtectedMemberAccess2a x =
|
|
new ProtectedMemberAccess2a();
|
|
|
|
static ProtectedMemberAccess2a sx =
|
|
new ProtectedMemberAccess2a();
|
|
|
|
int i = x.pi;
|
|
int j = x.spi;
|
|
|
|
int n = sx.pi;
|
|
int m = sx.spi;
|
|
|
|
static int sn = sx.pi;
|
|
static int sm = sx.spi;
|
|
|
|
int w = x.pm();
|
|
int y = x.spm();
|
|
|
|
int u = sx.pm();
|
|
int v = sx.spm();
|
|
|
|
ProtectedMemberAccess2a.pC obj1;
|
|
ProtectedMemberAccess2a.spC obj2;
|
|
|
|
ProtectedMemberAccess2a.pI obj3;
|
|
ProtectedMemberAccess2a.spI obj4;
|
|
|
|
Object o1 = (ProtectedMemberAccess2a.pC) null;
|
|
Object o2 = (ProtectedMemberAccess2a.spC) null;
|
|
|
|
Object o3 = (ProtectedMemberAccess2a.pI) null;
|
|
Object o4 = (ProtectedMemberAccess2a.spI) null;
|
|
|
|
class C1 extends ProtectedMemberAccess2a.pC {}
|
|
class C2 extends ProtectedMemberAccess2a.spC {}
|
|
|
|
interface I1 extends ProtectedMemberAccess2a.pI {}
|
|
interface I2 extends ProtectedMemberAccess2a.spI {}
|
|
|
|
static {
|
|
|
|
ProtectedMemberAccess2a lx =
|
|
new ProtectedMemberAccess2a();
|
|
|
|
sx.pi = 1;
|
|
sx.spi = 2;
|
|
|
|
lx.pi = 1;
|
|
lx.spi = 2;
|
|
|
|
int n = sx.pi;
|
|
int m = sx.spi;
|
|
|
|
int k = lx.pi;
|
|
int l = lx.spi;
|
|
|
|
int u = sx.pm();
|
|
int v = sx.spm();
|
|
|
|
int w = lx.pm();
|
|
int z = lx.spm();
|
|
|
|
ProtectedMemberAccess2a.pC obj1;
|
|
ProtectedMemberAccess2a.spC obj2;
|
|
|
|
ProtectedMemberAccess2a.pI obj3;
|
|
ProtectedMemberAccess2a.spI obj4;
|
|
|
|
Object o1 = (ProtectedMemberAccess2a.pC) null;
|
|
Object o2 = (ProtectedMemberAccess2a.spC) null;
|
|
|
|
Object o3 = (ProtectedMemberAccess2a.pI) null;
|
|
Object o4 = (ProtectedMemberAccess2a.spI) null;
|
|
|
|
//class C1 extends ProtectedMemberAccess2a.pC {}
|
|
class C2 extends ProtectedMemberAccess2a.spC {}
|
|
|
|
//interface I1 extends ProtectedMemberAccess2a.pI {}
|
|
//interface I2 extends ProtectedMemberAccess2a.spI {}
|
|
|
|
}
|
|
|
|
void m() {
|
|
|
|
ProtectedMemberAccess2a lx =
|
|
new ProtectedMemberAccess2a();
|
|
|
|
x.pi = 1;
|
|
x.spi = 2;
|
|
|
|
sx.pi = 1;
|
|
sx.spi = 2;
|
|
|
|
lx.pi = 1;
|
|
lx.spi = 2;
|
|
|
|
int t = x.pm();
|
|
int y = x.spm();
|
|
|
|
int u = sx.pm();
|
|
int v = sx.spm();
|
|
|
|
int w = lx.pm();
|
|
int z = lx.spm();
|
|
|
|
int i = x.pi;
|
|
int j = x.spi;
|
|
|
|
int n = sx.pi;
|
|
int m = sx.spi;
|
|
|
|
int k = lx.pi;
|
|
int l = lx.spi;
|
|
|
|
ProtectedMemberAccess2a.pC obj1;
|
|
ProtectedMemberAccess2a.spC obj2;
|
|
|
|
ProtectedMemberAccess2a.pI obj3;
|
|
ProtectedMemberAccess2a.spI obj4;
|
|
|
|
Object o1 = (ProtectedMemberAccess2a.pC) null;
|
|
Object o2 = (ProtectedMemberAccess2a.spC) null;
|
|
|
|
Object o3 = (ProtectedMemberAccess2a.pI) null;
|
|
Object o4 = (ProtectedMemberAccess2a.spI) null;
|
|
|
|
class C1 extends ProtectedMemberAccess2a.pC {}
|
|
class C2 extends ProtectedMemberAccess2a.spC {}
|
|
|
|
//interface I1 extends ProtectedMemberAccess2a.pI {}
|
|
//interface I2 extends ProtectedMemberAccess2a.spI {}
|
|
|
|
}
|
|
|
|
class Inner {
|
|
|
|
int i = x.pi;
|
|
int j = x.spi;
|
|
|
|
int n = sx.pi;
|
|
int m = sx.spi;
|
|
|
|
//static int sn = sx.pi;
|
|
//static int sm = sx.spi;
|
|
|
|
int w = x.pm();
|
|
int y = x.spm();
|
|
|
|
int u = sx.pm();
|
|
int v = sx.spm();
|
|
|
|
ProtectedMemberAccess2a.pC obj1;
|
|
ProtectedMemberAccess2a.spC obj2;
|
|
|
|
ProtectedMemberAccess2a.pI obj3;
|
|
ProtectedMemberAccess2a.spI obj4;
|
|
|
|
Object o1 = (ProtectedMemberAccess2a.pC) null;
|
|
Object o2 = (ProtectedMemberAccess2a.spC) null;
|
|
|
|
Object o3 = (ProtectedMemberAccess2a.pI) null;
|
|
Object o4 = (ProtectedMemberAccess2a.spI) null;
|
|
|
|
class C1 extends ProtectedMemberAccess2a.pC {}
|
|
class C2 extends ProtectedMemberAccess2a.spC {}
|
|
|
|
//interface I1 extends ProtectedMemberAccess2a.pI {}
|
|
//interface I2 extends ProtectedMemberAccess2a.spI {}
|
|
|
|
// Not allowed in inner classes.
|
|
// static { ... }
|
|
|
|
void m() {
|
|
|
|
ProtectedMemberAccess2a lx =
|
|
new ProtectedMemberAccess2a();
|
|
|
|
x.pi = 1;
|
|
x.spi = 2;
|
|
|
|
sx.pi = 1;
|
|
sx.spi = 2;
|
|
|
|
lx.pi = 1;
|
|
lx.spi = 2;
|
|
|
|
int t = x.pm();
|
|
int y = x.spm();
|
|
|
|
int u = sx.pm();
|
|
int v = sx.spm();
|
|
|
|
int w = lx.pm();
|
|
int z = lx.spm();
|
|
|
|
int i = x.pi;
|
|
int j = x.spi;
|
|
|
|
int n = sx.pi;
|
|
int m = sx.spi;
|
|
|
|
int k = lx.pi;
|
|
int l = lx.spi;
|
|
|
|
ProtectedMemberAccess2a.pC obj1;
|
|
ProtectedMemberAccess2a.spC obj2;
|
|
|
|
ProtectedMemberAccess2a.pI obj3;
|
|
ProtectedMemberAccess2a.spI obj4;
|
|
|
|
Object o1 = (ProtectedMemberAccess2a.pC) null;
|
|
Object o2 = (ProtectedMemberAccess2a.spC) null;
|
|
|
|
Object o3 = (ProtectedMemberAccess2a.pI) null;
|
|
Object o4 = (ProtectedMemberAccess2a.spI) null;
|
|
|
|
class C1 extends ProtectedMemberAccess2a.pC {}
|
|
class C2 extends ProtectedMemberAccess2a.spC {}
|
|
|
|
//interface I1 extends ProtectedMemberAccess2a.pI {}
|
|
//interface I2 extends ProtectedMemberAccess2a.spI {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
class SubClass extends ProtectedMemberAccess3a { }
|
|
|
|
class ProtectedMemberAccess3a extends 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 if the qualifying type
|
|
// or the type of the qualifying expression is (a subclass of) the class
|
|
// in which the reference occurs.
|
|
|
|
SubClass x = new SubClass();
|
|
|
|
static SubClass sx = new SubClass();
|
|
|
|
int i = x.pi;
|
|
int j = x.spi;
|
|
|
|
int n = sx.pi;
|
|
int m = sx.spi;
|
|
|
|
static int sn = sx.pi;
|
|
static int sm = sx.spi;
|
|
|
|
int w = x.pm();
|
|
int y = x.spm();
|
|
|
|
int u = sx.pm();
|
|
int v = sx.spm();
|
|
|
|
SubClass.pC obj1;
|
|
SubClass.spC obj2;
|
|
|
|
SubClass.pI obj3;
|
|
SubClass.spI obj4;
|
|
|
|
Object o1 = (SubClass.pC) null;
|
|
Object o2 = (SubClass.spC) null;
|
|
|
|
Object o3 = (SubClass.pI) null;
|
|
Object o4 = (SubClass.spI) null;
|
|
|
|
class C1 extends SubClass.pC {}
|
|
class C2 extends SubClass.spC {}
|
|
|
|
interface I1 extends SubClass.pI {}
|
|
interface I2 extends SubClass.spI {}
|
|
|
|
static {
|
|
|
|
SubClass lx = new SubClass();
|
|
|
|
sx.pi = 1;
|
|
sx.spi = 2;
|
|
|
|
lx.pi = 1;
|
|
lx.spi = 2;
|
|
|
|
int n = sx.pi;
|
|
int m = sx.spi;
|
|
|
|
int k = lx.pi;
|
|
int l = lx.spi;
|
|
|
|
int u = sx.pm();
|
|
int v = sx.spm();
|
|
|
|
int w = lx.pm();
|
|
int z = lx.spm();
|
|
|
|
SubClass.pC obj1;
|
|
SubClass.spC obj2;
|
|
|
|
SubClass.pI obj3;
|
|
SubClass.spI obj4;
|
|
|
|
Object o1 = (SubClass.pC) null;
|
|
Object o2 = (SubClass.spC) null;
|
|
|
|
Object o3 = (SubClass.pI) null;
|
|
Object o4 = (SubClass.spI) null;
|
|
|
|
//class C1 extends SubClass.pC {}
|
|
class C2 extends SubClass.spC {}
|
|
|
|
//interface I1 extends SubClass.pI {}
|
|
//interface I2 extends SubClass.spI {}
|
|
|
|
}
|
|
|
|
void m() {
|
|
|
|
SubClass lx = new SubClass();
|
|
|
|
x.pi = 1;
|
|
x.spi = 2;
|
|
|
|
sx.pi = 1;
|
|
sx.spi = 2;
|
|
|
|
lx.pi = 1;
|
|
lx.spi = 2;
|
|
|
|
int t = x.pm();
|
|
int y = x.spm();
|
|
|
|
int u = sx.pm();
|
|
int v = sx.spm();
|
|
|
|
int w = lx.pm();
|
|
int z = lx.spm();
|
|
|
|
int i = x.pi;
|
|
int j = x.spi;
|
|
|
|
int n = sx.pi;
|
|
int m = sx.spi;
|
|
|
|
int k = lx.pi;
|
|
int l = lx.spi;
|
|
|
|
SubClass.pC obj1;
|
|
SubClass.spC obj2;
|
|
|
|
SubClass.pI obj3;
|
|
SubClass.spI obj4;
|
|
|
|
Object o1 = (SubClass.pC) null;
|
|
Object o2 = (SubClass.spC) null;
|
|
|
|
Object o3 = (SubClass.pI) null;
|
|
Object o4 = (SubClass.spI) null;
|
|
|
|
class C1 extends SubClass.pC {}
|
|
class C2 extends SubClass.spC {}
|
|
|
|
//interface I1 extends SubClass.pI {}
|
|
//interface I2 extends SubClass.spI {}
|
|
|
|
}
|
|
|
|
class Inner {
|
|
|
|
int i = x.pi;
|
|
int j = x.spi;
|
|
|
|
int n = sx.pi;
|
|
int m = sx.spi;
|
|
|
|
//static int sn = sx.pi;
|
|
//static int sm = sx.spi;
|
|
|
|
int w = x.pm();
|
|
int y = x.spm();
|
|
|
|
int u = sx.pm();
|
|
int v = sx.spm();
|
|
|
|
SubClass.pC obj1;
|
|
SubClass.spC obj2;
|
|
|
|
SubClass.pI obj3;
|
|
SubClass.spI obj4;
|
|
|
|
Object o1 = (SubClass.pC) null;
|
|
Object o2 = (SubClass.spC) null;
|
|
|
|
Object o3 = (SubClass.pI) null;
|
|
Object o4 = (SubClass.spI) null;
|
|
|
|
class C1 extends SubClass.pC {}
|
|
class C2 extends SubClass.spC {}
|
|
|
|
//interface I1 extends SubClass.pI {}
|
|
//interface I2 extends SubClass.spI {}
|
|
|
|
// Not allowed in inner classes.
|
|
// static { ... }
|
|
|
|
void m() {
|
|
|
|
SubClass lx = new SubClass();
|
|
|
|
x.pi = 1;
|
|
x.spi = 2;
|
|
|
|
sx.pi = 1;
|
|
sx.spi = 2;
|
|
|
|
lx.pi = 1;
|
|
lx.spi = 2;
|
|
|
|
int t = x.pm();
|
|
int y = x.spm();
|
|
|
|
int u = sx.pm();
|
|
int v = sx.spm();
|
|
|
|
int w = lx.pm();
|
|
int z = lx.spm();
|
|
|
|
int i = x.pi;
|
|
int j = x.spi;
|
|
|
|
int n = sx.pi;
|
|
int m = sx.spi;
|
|
|
|
int k = lx.pi;
|
|
int l = lx.spi;
|
|
|
|
SubClass.pC obj1;
|
|
SubClass.spC obj2;
|
|
|
|
SubClass.pI obj3;
|
|
SubClass.spI obj4;
|
|
|
|
Object o1 = (SubClass.pC) null;
|
|
Object o2 = (SubClass.spC) null;
|
|
|
|
Object o3 = (SubClass.pI) null;
|
|
Object o4 = (SubClass.spI) null;
|
|
|
|
class C1 extends SubClass.pC {}
|
|
class C2 extends SubClass.spC {}
|
|
|
|
//interface I1 extends SubClass.pI {}
|
|
//interface I2 extends SubClass.spI {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|