When using gcj to produce dependencies (-MMD) for Java code with inner classes, it adds the source file _and_ the .class file of the inner class. While this is technically correct, it should not be done as it creates cyclic dependencies. E.g. given the two files A.java: class A { public interface AA {} B.BB b; } B.java: class B { public interface BB { } A.AA a; } compiling these files with (has to be compiled twice): gcj -MMD -C A.java gcj -MMD -C B.java gcj -MMD -C A.java gcj -MMD -C B.java results in the dependencies ./A$$AA.class ./A.class: A.java ./B.java ./B$$BB.class ./B$$BB.class ./B.class: B.java ./A.java ./A$$AA.class This creates a cyclic dependency, which makes the dependencies more or less worthless. The nicer behaviour would be to ommit the .class files in the dependency lists, as they are already implied by their .java files (of course this is only possible if the .java files are actually available).
I can confirm this on the mainline (20031018).
Closing as won't fix as the Java front-end has been removed from the trunk.