The following code compiled with the Sun Java compiler
version 1.3.1_19 is not successfully decompiled, that
is recompilation of the compiled class file fails.
//---------------------------------------------------
/* Original source of InnerClassTest.java */
public class InnerClassTest {
public InnerClass myInnerClass;
InnerClassTest\(\) \{ myInnerClass = new InnerClass\(\); \} class InnerClass \{ private String sValue; InnerClass\(\) \{ sValue = "Constructor of InnerClass called"; \} public String getValue\(\) \{ return sValue; \} \} public static void main\(String\[\] args\) \{ InnerClassTest myInnerClassTest; myInnerClassTest = new InnerClassTest\(\);
System.out.println(myInnerClassTest.myInnerClass.getValue());
}
}
//---------------------------------------------------
//---------------------------------------------------
/* Decompiled source of InnerClassTest.class */
// Decompiled by jdec
// DECOMPILER HOME PAGE:
http://sourceforge.net/projects/jdec
// Copyright (C)2006 Swaroop Belur.
// jdec comes with ABSOLUTELY NO WARRANTY;
// This is free software, and you are welcome to
redistribute
// it under certain conditions;
// See the File 'COPYING' for more details.
/**** List of All Imported Classes ***/
import java.io.PrintStream;
import java.lang.Object;
import java.lang.System;
// End of Import
public class InnerClassTest extends Object
{
public InnerClassTest$InnerClass myInnerClass ;
public static void main(String [] param_0)
{
InnerClassTest JDecGenerated2=new InnerClassTest();
InnerClassTest Var_7_1=JDecGenerated2;
System.out.println(Var_7_1.myInnerClass.getValue());
return;
}
InnerClassTest( )
{
super();
InnerClassTest$InnerClass JDecGenerated7=new
InnerClassTest$InnerClass(this);
this.myInnerClass =JDecGenerated7;
return;
}
}
//---------------------------------------------------
//---------------------------------------------------
Compiler errors:
InnerClassTest.java:25: cannot resolve symbol
symbol : class InnerClassTest$InnerClass
location: class InnerClassTest
public InnerClassTest$InnerClass myInnerClass ;
^
InnerClassTest.java:41: cannot resolve symbol
symbol : class InnerClassTest$InnerClass
location: class InnerClassTest
InnerClassTest$InnerClass JDecGenerated7=new
InnerClassTest$InnerClass(this);
^
InnerClassTest.java:41: cannot resolve symbol
symbol : class InnerClassTest$InnerClass
location: class InnerClassTest
InnerClassTest$InnerClass JDecGenerated7=new
InnerClassTest$InnerClass(this);
^
3 errors
Original source of InnerClassTest.java
Logged In: NO
Decompiling InnerClassTest$InnerClass.class produces
InnerClassTest$InnerClass.java. Recompiling the two java
files generate other errors:
//---------------------------------------------------
/* Decompiled source of InnerClassTest$InnerClass.class */
// Decompiled by jdec
// DECOMPILER HOME PAGE: http://sourceforge.net/projects/jdec
// Copyright (C)2006 Swaroop Belur.
// jdec comes with ABSOLUTELY NO WARRANTY;
// This is free software, and you are welcome to redistribute
// it under certain conditions;
// See the File 'COPYING' for more details.
/**** List of All Imported Classes ***/
import java.lang.Object;
import java.lang.String;
// End of Import
class InnerClassTest$InnerClass extends Object
{
private String sValue ;
private final InnerClassTest this$0 ;
public String getValue( )
{
return this.sValue;
}
InnerClassTest$InnerClass(InnerClassTest param_1)
{
super();
this.This$0 =param_1;
this.sValue ="Constructor of InnerClass called";
return;
}
}
//---------------------------------------------------
//---------------------------------------------------
Compiler errors:
.\InnerClassTest$InnerClass.java:25: this$0 is reserved for
internal use
private final InnerClassTest this$0 ;
^
.\InnerClassTest$InnerClass.java:37: cannot resolve symbol
symbol : variable This$0
location: class InnerClassTest$InnerClass
this.This$0 =param_1;
^
Logged In: NO
Replacing line 25 which reads:
private final InnerClassTest this$0 ;
with:
private final InnerClassTest This$0 ;
Solves the problem and successfully compiles the decompiled
sources, but this clearly is a bug in the Jdec Java
Decompiler I think.