Bug 15377

Summary: GCJ does not use the good package for imported classes
Product: gcc Reporter: Nicolas Moyère <nmoyere>
Component: javaAssignee: Not yet assigned to anyone <unassigned>
Status: RESOLVED FIXED    
Severity: normal CC: gcc-bugs, java-prs, phil
Priority: P2    
Version: 3.3.2   
Target Milestone: 4.3.0   
Host: i686-pc-linux-gnu Target:
Build: 3.3.2 Known to work:
Known to fail: Last reconfirmed:
Bug Depends on: 28067    
Bug Blocks:    
Attachments: An example to reproduce the compile error

Description Nicolas Moyère 2004-05-11 15:40:00 UTC
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
Comment 1 Nicolas Moyère 2004-05-11 15:42:00 UTC
Created attachment 6259 [details]
An example to reproduce the compile error
Comment 2 Andrew Pinski 2004-05-11 15:47:59 UTC
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?
Comment 3 Nicolas Moyère 2004-05-11 15:57:33 UTC
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.
Comment 4 Phil Shaw 2005-03-29 11:53:07 UTC
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.
Comment 5 Tom Tromey 2007-01-09 20:46:06 UTC
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.