/*
 * @test  /nodynamiccopyright/
 * @bug 4319507 4785453
 * @summary Verify correct implementation of JLS2e 6.6.2.1
 * @author maddox
 *
 * @compile/fail/ref=ProtectedMemberAccess2.out --diags=formatterOptions=-simpleNames;layout=%b:%l:%_%m ProtectedMemberAccess2.java
 */

// 71 errors expected.

import pkg.SuperClass;

class ProtectedMemberAccess2 {

  // Since this class is not a subclass of the class in which the
  // protected members are declared, all of the accesses are illegal.

  pkg.SuperClass x = new pkg.SuperClass();

  static pkg.SuperClass sx = new pkg.SuperClass();

  int i = x.pi;                                 // illegal
  int j = x.spi;                                // illegal

  int n = sx.pi;                                // illegal
  int m = sx.spi;                               // illegal

  static int sn = sx.pi;                        // illegal
  static int sm = sx.spi;                       // illegal

  int w = x.pm();                               // illegal
  int y = x.spm();                              // illegal

  int u = sx.pm();                              // illegal
  int v = sx.spm();                             // illegal

  pkg.SuperClass.pC  obj1;                      // illegal
  pkg.SuperClass.spC obj2;                      // illegal

  pkg.SuperClass.pI  obj3;                      // illegal
  pkg.SuperClass.spI obj4;                      // illegal

  Object o1 = (pkg.SuperClass.pC) null;         // illegal
  Object o2 = (pkg.SuperClass.spC) null;        // illegal

  Object o3 = (pkg.SuperClass.pI) null;         // illegal
  Object o4 = (pkg.SuperClass.spI) null;        // illegal

  class C1 extends pkg.SuperClass.pC {}         // illegal
  class C2 extends pkg.SuperClass.spC {}        // illegal

  interface I1 extends pkg.SuperClass.pI {}     // illegal
  interface I2 extends pkg.SuperClass.spI {}    // illegal

  static {

    pkg.SuperClass lx = new pkg.SuperClass();

    sx.pi  = 1;                                 // illegal
    sx.spi = 2;                                 // illegal

    lx.pi  = 1;                                 // illegal
    lx.spi = 2;                                 // illegal

    int n = sx.pi;                              // illegal
    int m = sx.spi;                             // illegal

    int k = lx.pi;                              // illegal
    int l = lx.spi;                             // illegal

    int u = sx.pm();                            // illegal
    int v = sx.spm();                           // illegal

    int w = lx.pm();                            // illegal
    int z = lx.spm();                           // illegal

    pkg.SuperClass.pC  obj1;                    // illegal
    pkg.SuperClass.spC obj2;                    // illegal

    pkg.SuperClass.pI  obj3;                    // illegal
    pkg.SuperClass.spI obj4;                    // illegal

    Object o1 = (pkg.SuperClass.pC) null;       // illegal
    Object o2 = (pkg.SuperClass.spC) null;      // illegal

    Object o3 = (pkg.SuperClass.pI) null;       // illegal
    Object o4 = (pkg.SuperClass.spI) null;      // illegal

    //class C1 extends pkg.SuperClass.pC {}
    class C2 extends pkg.SuperClass.spC {}      // illegal

    //interface I1 extends pkg.SuperClass.pI {}
    //interface I2 extends pkg.SuperClass.spI {}

  }

  void m() {

    pkg.SuperClass lx = new pkg.SuperClass();

    x.pi  = 1;                                  // illegal
    x.spi = 2;                                  // illegal

    sx.pi  = 1;                                 // illegal
    sx.spi = 2;                                 // illegal

    lx.pi  = 1;                                 // illegal
    lx.spi = 2;                                 // illegal

    int t = x.pm();                             // illegal
    int y = x.spm();                            // illegal

    int u = sx.pm();                            // illegal
    int v = sx.spm();                           // illegal

    int w = lx.pm();                            // illegal
    int z = lx.spm();                           // illegal

    int i = x.pi;                               // illegal
    int j = x.spi;                              // illegal

    int n = sx.pi;                              // illegal
    int m = sx.spi;                             // illegal

    int k = lx.pi;                              // illegal
    int l = lx.spi;                             // illegal

    pkg.SuperClass.pC  obj1;                    // illegal
    pkg.SuperClass.spC obj2;                    // illegal

    pkg.SuperClass.pI  obj3;                    // illegal
    pkg.SuperClass.spI obj4;                    // illegal

    Object o1 = (pkg.SuperClass.pC) null;       // illegal
    Object o2 = (pkg.SuperClass.spC) null;      // illegal

    Object o3 = (pkg.SuperClass.pI) null;       // illegal
    Object o4 = (pkg.SuperClass.spI) null;      // illegal

    class C1 extends pkg.SuperClass.pC {}       // illegal
    class C2 extends pkg.SuperClass.spC {}      // illegal

    //interface I1 extends pkg.SuperClass.pI {}
    //interface I2 extends pkg.SuperClass.spI {}

  }

}
