Browse Source

* correctly set the external name of nested classes (should not
include the parent class names, those are added by the compiler)

git-svn-id: branches/jvmbackend@18677 -

Jonas Maebe 14 years ago
parent
commit
e30319561f

+ 1 - 1
utils/javapp/src/fpc/tools/javapp/JavapPrinter.java

@@ -118,7 +118,7 @@ public class JavapPrinter {
     	String pkgname = cls.getClassPackageName();
     	if (pkgname != null)
     		out.print("'"+pkgname+"' ");
-    	out.print("name '"+cls.getExternalClassName()+"' ");
+    	out.print("name '"+cls.getExternalShortClassName()+"' ");
 
     	if (!printOnlySkel) {
     		// FPC doesn't like it when you say that an interface's superclass is

+ 18 - 0
utils/javapp/src/fpc/tools/javapp/PascalClassData.java

@@ -225,6 +225,20 @@ public class PascalClassData extends ClassData {
 			return className;
 	}
 
+	/* returns the name of the class according to the JVM
+	 * (in case of nested class: just the name of the nested
+	 * class, ignoring parent classes)
+	 */
+	public static String getExternalShortClassName(String className) {
+		int index;
+		
+		if (isInnerClass(className)) {
+			index=className.lastIndexOf("$")+1;
+			return className.substring(index);
+		}
+		return getExternalClassName(className);
+	}
+
 	public String getShortClassName() {
 		return getShortClassName(getClassName());
     }
@@ -248,6 +262,10 @@ public class PascalClassData extends ClassData {
 	public String getExternalClassName() {
 		return getExternalClassName(getClassName());
 	}
+
+	public String getExternalShortClassName() {
+		return getExternalShortClassName(getClassName());
+	}	
 	
 	public String[] getPascalSuperInterfaces(){
 		String[] res = super.getSuperInterfaces();