I use GCJ to compile .java files to .class files. On the command line, I use the @<java source files list> option to make gcj compile several classes at a time. gcj seems to have a bug in the way it resolves the complete class name of an imported class, and so throws compile errors for valid code. In my example, I have several classes called AbstractAction. One comming from javax.swing and another one I have written. The class MoveUpMultipleDataAction extends the javax.swing.AbstractAction and in its source file, I use a "import javax.swing.*" instead of writing a complete class name. When I compile MoveUpMultipleDataAction with gcj (and the @<file> option), gcj throws a compile error: for gcj MoveUpMultipleDataAction extends my AbstractAction class instead of the javax.swing one. If I remove the first class in the file that contains the java source files to compile, gcj works fine (even if the removed class has nothing to do the classes causing the compilation error) You will find all the sources in the attached file. I tryed to make the example as small as possible but the bug is difficult to reproduce at a very small scale. The example uses the following command line: gcj -d classes -classpath <jakarta ant lib>/ant.jar -g1 -C @javafiles
Created attachment 6259 [details] An example to reproduce the compile error
Can you try 3.4.0 as it has improved gcj support and this problme might be fixed there. Otherwise can you provide with the full instructions on how to reproduce it as I could not figure it out with the directions you gave?
I have done the same test with gcc 3.4.0 under windows XP. To reproduce the bug with the example, 1) unzip test.tgz somewhere 2) get the jakarta ant (at least version 1.4) from Apache Jakarta. 3) if you are under unix, start the compil.sh from the "test" directory if you are under windows, start a dos prompt and cd to the "test" directory and launch gcj -d classes -classpath <jakarta ant lib>/ant.jar -g1 -C @javafiles gcj will display: /home/builder/CDMIndus/test/com/calendra/swing/components/multipledata/action/MoveUpMultipleDataAction.java:9: error: Class `com.ca endra.swing.components.multipledata.action.MoveUpMultipleDataAction' doesn't define the abstract method `java.lang.String com.calen ra.logs.AbstractAction.getActionName()' from class `com.calendra.logs.AbstractAction'. This method must be defined or class `com.ca endra.swing.components.multipledata.action.MoveUpMultipleDataAction' must be declared abstract. public class MoveUpMultipleDataAction extends AbstractMultipleDataAction { ^ 1 error If you try to remove the first line of the "javafiles" file and start again gcj, the compilation will succeed.
I have seen similar behaviour to this where concrete classes are named after their interfaces. I haven't been able to to produce a simple test case. This bug looks very similar to bug 18796.
All gcj front end bugs have been fixed by the gcj-eclipse branch merge. I'm mass-closing the affected PRs. If you believe one of these was closed in error, please reopen it with a note explaining why. Thanks.