- 
    Bug 
- 
    Resolution: Fixed
- 
     P2 P2
- 
    9
                    FULL PRODUCT VERSION :
java full version "9-ea+100-2016-01-06-195905.javare.4235.nc"
ADDITIONAL OS VERSION INFORMATION :
x86_64 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
The fix forJDK-8075274 (compilation still depends on the order of imports) [1][2], seems to have introduced another source ordering bug.
[1] http://hg.openjdk.java.net/jdk9/dev/langtools/rev/4914b013c305
[2] https://bugs.openjdk.java.net/browse/JDK-8075274
REGRESSION. Last worked in version 8u66
ADDITIONAL REGRESSION INFORMATION:
java full version "1.8.0_66-ea-b02"
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
javac One.java Two.java Three.java Test.java
javac Test.java One.java Two.java Three.java
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
I expected both compilations to succeed.
ACTUAL -
The first compilation succeeds, but the second compilation fails.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
One.java:3: error: cannot find symbol
class One implements Two.ThreeInner {
^
symbol: class ThreeInner
location: class Two
1 error
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
=== Test.java ===
package p;
import p.One.OneInner;
class Test implements OneInner {}
=== One.java ===
package p;
class One implements Two.ThreeInner {
interface OneInner {}
}
=== Two.java ===
package p;
class Two extends Three {}
=== Three.java ===
package p;
class Three {
interface ThreeInner {}
}
===
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Using canonical qualified type names (e.g. Three.ThreeInner instead of Two.ThreeInner) seems to work around the problem.
            
java full version "9-ea+100-2016-01-06-195905.javare.4235.nc"
ADDITIONAL OS VERSION INFORMATION :
x86_64 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
The fix for
[1] http://hg.openjdk.java.net/jdk9/dev/langtools/rev/4914b013c305
[2] https://bugs.openjdk.java.net/browse/JDK-8075274
REGRESSION. Last worked in version 8u66
ADDITIONAL REGRESSION INFORMATION:
java full version "1.8.0_66-ea-b02"
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
javac One.java Two.java Three.java Test.java
javac Test.java One.java Two.java Three.java
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
I expected both compilations to succeed.
ACTUAL -
The first compilation succeeds, but the second compilation fails.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
One.java:3: error: cannot find symbol
class One implements Two.ThreeInner {
^
symbol: class ThreeInner
location: class Two
1 error
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
=== Test.java ===
package p;
import p.One.OneInner;
class Test implements OneInner {}
=== One.java ===
package p;
class One implements Two.ThreeInner {
interface OneInner {}
}
=== Two.java ===
package p;
class Two extends Three {}
=== Three.java ===
package p;
class Three {
interface ThreeInner {}
}
===
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Using canonical qualified type names (e.g. Three.ThreeInner instead of Two.ThreeInner) seems to work around the problem.
- relates to
- 
                    JDK-8172202 source ordering bug with static type imports -           
- Open
 
-