summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPekka Enberg <penberg@kernel.org>2011-09-11 11:20:38 +0300
committerPekka Enberg <penberg@kernel.org>2012-03-12 10:55:56 +0200
commit5aa73921784d72c8c3119e52db897e6d779897e9 (patch)
tree00ec95e5182fbd7f910e347fa94fc05119911c0d
parent2dfd5525ea3daa519addbcda40b49f480e63bcc9 (diff)
downloadclasspath-indy.tar.gz
Implement MethodType.toMethodDescriptorString()indy
Signed-off-by: Pekka Enberg <penberg@kernel.org>
-rw-r--r--java/lang/invoke/MethodType.java41
1 files changed, 40 insertions, 1 deletions
diff --git a/java/lang/invoke/MethodType.java b/java/lang/invoke/MethodType.java
index 4d021c711..a4112f4b0 100644
--- a/java/lang/invoke/MethodType.java
+++ b/java/lang/invoke/MethodType.java
@@ -287,6 +287,45 @@ public final class MethodType
public String toMethodDescriptorString()
{
- throw new UnsupportedOperationException();
+ Iterator<Class<?>> itr = ptypes.iterator();
+ CPStringBuilder r = new CPStringBuilder("(");
+ for (Class<?> ptype : ptypes)
+ {
+ appendClassDescriptor(r, ptype);
+ }
+ r.append(")");
+ appendClassDescriptor(r, rtype);
+ return r.toString();
+ }
+
+ private static void appendClassDescriptor(CPStringBuilder r, Class<?> klass)
+ {
+ if (klass.isPrimitive())
+ {
+ if (byte.class.equals(klass))
+ r.append('B');
+ else if (char.class.equals(klass))
+ r.append('C');
+ else if (double.class.equals(klass))
+ r.append('D');
+ else if (float.class.equals(klass))
+ r.append('F');
+ else if (int.class.equals(klass))
+ r.append('I');
+ else if (long.class.equals(klass))
+ r.append('J');
+ else if (short.class.equals(klass))
+ r.append('S');
+ else if (boolean.class.equals(klass))
+ r.append('Z');
+ else if (void.class.equals(klass))
+ r.append('V');
+ }
+ else
+ {
+ r.append('L');
+ r.append(klass.getName().replace('.','/'));
+ r.append(';');
+ }
}
}