summaryrefslogtreecommitdiff
path: root/sources/scalac/backend/Primitives.java
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-02-27 23:59:05 +0000
committerpaltherr <paltherr@epfl.ch>2004-02-27 23:59:05 +0000
commit12bd290e160247877e03780de47fcd09e3b8f2bb (patch)
treee7e943b62d7c765470b602d3ef2665795d7a351d /sources/scalac/backend/Primitives.java
parent01599fa37b24e623d1bc6836a8f65548bd5fdcea (diff)
downloadscala-12bd290e160247877e03780de47fcd09e3b8f2bb.tar.gz
scala-12bd290e160247877e03780de47fcd09e3b8f2bb.tar.bz2
scala-12bd290e160247877e03780de47fcd09e3b8f2bb.zip
- Added method Primitives.getJavaSignature
- Changed GenJVM.javaName to use Primitives.getJavaSignature Added - caching to GenJVM.javaName
Diffstat (limited to 'sources/scalac/backend/Primitives.java')
-rw-r--r--sources/scalac/backend/Primitives.java34
1 files changed, 19 insertions, 15 deletions
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(<name>)" 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(<name>)" 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() ? '.' : '$');
+ }
+
//########################################################################
}