From 5aa73921784d72c8c3119e52db897e6d779897e9 Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Sun, 11 Sep 2011 11:20:38 +0300 Subject: Implement MethodType.toMethodDescriptorString() Signed-off-by: Pekka Enberg --- java/lang/invoke/MethodType.java | 41 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) 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> 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(';'); + } } } -- cgit v1.2.1