<div dir="ltr">Hi Jan,<div><br></div><div>I see the same behaviour with JDK 9 b54. I've included a more verbose version of the repro below. Sorry if I'm missing something obvious.</div><div><br></div><div>One additional bit of weirdness is that the order of the source files passed to javac matters: the issue occurs for "P/Outer.java P/Q/C.java P/Q/D.java" but not "P/Q/C.java P/Q/D.java P/Outer.java".</div><div><br></div><div>Here's the repro:</div><div><br></div><div><div>$ ~/jdk/jdk1.9.0/bin/java -version</div><div>java version "1.9.0-ea"</div><div>Java(TM) SE Runtime Environment (build 1.9.0-ea-b54)</div><div>Java HotSpot(TM) 64-Bit Server VM (build 1.9.0-ea-b54, mixed mode)</div><div><br></div><div>$ for f in $(find . -name "*.java"); do echo "=== $f ==="; cat $f; done</div><div>=== ./P/Q/C.java ===</div><div>package P.Q;</div><div><br></div><div>public class C extends D {</div><div>}</div><div>=== ./P/Q/D.java ===</div><div>package P.Q;</div><div><br></div><div>public class D {</div><div>  public interface I {</div><div>  }</div><div>}</div><div>=== ./P/Outer.java ===</div><div>package P;</div><div><br></div><div>import static P.Outer.Nested.*;</div><div>import static P.Q.C.*;</div><div><br></div><div>public class Outer {</div><div>  public static class Nested implements I {</div><div>  }</div><div>}</div><div><br></div><div>$ ~/jdk/jdk1.9.0/bin/javac P/Outer.java P/Q/C.java P/Q/D.java</div><div>P/Outer.java:7: error: cannot find symbol</div><div>  public static class Nested implements I {</div><div>                                        ^</div><div>  symbol:   class I</div><div>  location: class Outer</div><div>1 error</div><div><br></div><div># Now, flip the order of the two imports in P.Outer</div><div><br></div><div>$ for f in $(find . -name "*.java"); do echo "=== $f ==="; cat $f; done</div><div>=== ./P/Q/C.java ===</div><div>package P.Q;</div><div><br></div><div>public class C extends D {</div><div>}</div><div>=== ./P/Q/D.java ===</div><div>package P.Q;</div><div><br></div><div>public class D {</div><div>  public interface I {</div><div>  }</div><div>}</div><div>=== ./P/Outer.java ===</div><div>package P;</div><div><br></div><div>import static P.Q.C.*;</div><div>import static P.Outer.Nested.*;</div><div><br></div><div>public class Outer {</div><div>  public static class Nested implements I {</div><div>  }</div><div>}</div><div><br></div><div>$ ~/jdk/jdk1.9.0/bin/javac P/Outer.java P/Q/C.java P/Q/D.java</div><div><br></div><div># ... compiles cleanly</div></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Mar 16, 2015 at 1:08 AM, Jan Lahoda <span dir="ltr"><<a href="mailto:jan.lahoda@oracle.com" target="_blank">jan.lahoda@oracle.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Liam,<br>
<br>
Thanks for the report. I am afraid I was not able to reproduce. I tried on:<br>
$ javac -fullversion<br>
javac full version "1.9.0-ea-b54"<br>
<br>
and on a custom build from jdk9/dev/langtools, tip:<br>
$ hg tip<br>
changeset:   2850:32a2e7249884<br>
tag:         tip<br>
parent:      2849:75cedc6db8c2<br>
parent:      2848:f5a1cb1309ae<br>
user:        lana<br>
date:        Thu Mar 12 21:13:42 2015 -0700<br>
summary:     Merge<br>
<br>
Is there something special I need to do? Could you please try on JDK 9 b54?<br>
<br>
Thanks,<br>
    Jan<div class="HOEnZb"><div class="h5"><br>
<br>
On 15.3.2015 23:00, Liam Miller-Cushon wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I think I found a bug related to JEP 216. With javac9-dev @ r2850, the<br>
following program fails to compile unless the order of imports is reversed.<br>
<br>
It looks like the current implementation isn't lazy enough to handle the<br>
dependency between the two on-demand imports if 'I' is inherited into<br>
'C'. If 'I' is declared directly in 'C' then it works.<br>
<br>
{{{<br>
package P;<br>
<br>
import static P.Outer.Nested.*;<br>
import static P.Q.C.*;<br>
<br>
public class Outer {<br>
   public static class Nested implements I {<br>
   }<br>
}<br>
<br>
package P.Q;<br>
<br>
public class C extends D {<br>
}<br>
<br>
package P.Q;<br>
<br>
public class D {<br>
   public interface I {<br>
   }<br>
}<br>
}}}<br>
<br>
$ javac P/Outer.java P/Q/D.java P/Q/C.java<br>
P/Outer.java:7: error: cannot find symbol<br>
   public static class Nested implements I {<br>
                                         ^<br>
   symbol:   class I<br>
   location: class Outer<br>
1 error<br>
</blockquote>
</div></div></blockquote></div><br></div>