From 12bd290e160247877e03780de47fcd09e3b8f2bb Mon Sep 17 00:00:00 2001 From: paltherr Date: Fri, 27 Feb 2004 23:59:05 +0000 Subject: - Added method Primitives.getJavaSignature - Changed GenJVM.javaName to use Primitives.getJavaSignature Added - caching to GenJVM.javaName --- sources/scalac/backend/Primitives.java | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) (limited to 'sources/scalac/backend/Primitives.java') diff --git a/sources/scalac/backend/Primitives.java b/sources/scalac/backend/Primitives.java index 26e158e0c7..4615d27ec2 100644 --- a/sources/scalac/backend/Primitives.java +++ b/sources/scalac/backend/Primitives.java @@ -1230,21 +1230,7 @@ public class Primitives { /* Return name to use in "Class.forName()" for the given symbol. */ public String getNameForClassForName(Symbol symbol) { - if (symbol == definitions.ANY_CLASS || - symbol == definitions.ANYREF_CLASS) - symbol = definitions.JAVA_OBJECT_CLASS; - StringBuffer buffer = new StringBuffer(symbol.name.toString()); - for (symbol = symbol.owner(); - symbol != definitions.ROOT_CLASS && !symbol.isPackage(); - symbol = symbol.owner()) { - buffer.insert(0, '$'); - buffer.insert(0, symbol.name); - } - if (symbol != definitions.ROOT_CLASS) { - buffer.insert(0, '.'); - buffer.insert(0, symbol.fullName()); - } - return buffer.toString(); + return getJavaSignature(symbol); } /* Return name to use in "Class.forName()" for the given kind. */ @@ -1262,5 +1248,23 @@ public class Primitives { } } + /** Return the Java signature of given symbol. */ + public String getJavaSignature(Symbol symbol) { + if (symbol == definitions.ANY_CLASS || + symbol == definitions.ANYREF_CLASS) + return getJavaSignature(definitions.JAVA_OBJECT_CLASS); + String name = symbol.name.toString(); + return getJavaPrefix(symbol.owner(), name.length()) + .append(name).toString(); + } + + /** Return the Java prefix of given symbol. */ + private StringBuffer getJavaPrefix(Symbol symbol, int length) { + if (symbol.isRoot()) return new StringBuffer(length); + String name = symbol.name.toString(); + return getJavaPrefix(symbol.owner(), name.length() + 1 + length) + .append(name).append(symbol.isPackage() ? '.' : '$'); + } + //######################################################################## } -- cgit v1.2.3