JDK-7029650 : Existing private variable access now causes compiler error with JDK 7.
  • Type: Bug
  • Component: tools
  • Sub-Component: javac
  • Affected Version: 7
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • OS: linux_ubuntu
  • CPU: x86
  • Submitted: 2011-03-21
  • Updated: 2012-09-06
  • Resolved: 2011-03-22
Related Reports
Duplicate :  
Description
FULL PRODUCT VERSION :
java version "1.7.0-ea"
Java(TM) SE Runtime Environment (build 1.7.0-ea-b134)
Java HotSpot(TM) Server VM (build 21.0-b04, mixed mode)

ADDITIONAL OS VERSION INFORMATION :
Linux barkerm-laptop 2.6.32-30-generic-pae #59-Ubuntu SMP Tue Mar 1 23:01:33 UTC 2011 i686 GNU/Linux

A DESCRIPTION OF THE PROBLEM :
The following class doesn't compile.  The method getError(T accessChange) fails with the error:

PrivateAccessError.java:10: someField has private access in PrivateAccessError
            return accesChange.someField;
                              ^
It compiles and runs fine under JDK 6.

public abstract class PrivateAccessError
{
    private int someField;
    
    public abstract static class InnerClass<T extends PrivateAccessError>
    {
        // This method compiles.
        public int getOk(PrivateAccessError accesChange)
        {
            return accesChange.someField;
        }
        
        // This method fails to compile.
        // "someField has private access in PrivateAccessError"
        public int getError(T accesChange)
        {
            return accesChange.someField;
        }
    }
}


REGRESSION.  Last worked in version 6u24

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile the following code:


public abstract class PrivateAccessError
{
    private int someField;
    
    public abstract static class InnerClass<T extends PrivateAccessError>
    {
        // This method compiles.
        public int getOk(PrivateAccessError accesChange)
        {
            return accesChange.someField;
        }
        
        // This method fails to compile.
        // "someField has private access in PrivateAccessError"
        public int getError(T accesChange)
        {
            return accesChange.someField;
        }
    }
}


EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Successful compilation
ACTUAL -
PrivateAccessError.java:18: someField has private access in PrivateAccessError
            return accesChange.someField;
                              ^
1 error


REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
public abstract class PrivateAccessError
{
    private int someField;
    
    public abstract static class InnerClass<T extends PrivateAccessError>
    {
        // This method compiles.
        public int getOk(PrivateAccessError accesChange)
        {
            return accesChange.someField;
        }
        
        // This method fails to compile.
        // "someField has private access in PrivateAccessError"
        public int getError(T accesChange)
        {
            return accesChange.someField;
        }
    }
}

---------- END SOURCE ----------

CUSTOMER SUBMITTED WORKAROUND :
Make the fields protected not private.