From 7281ea4092279f3091ffa3be91a4c66c3b63e080 Mon Sep 17 00:00:00 2001 From: Jesse Wilson Date: Wed, 12 Jan 2011 15:22:56 -0800 Subject: Fix bugs in toString() in reflection classes. Change-Id: Iceba152e1825eb859b23f9eb7463c4ed2e32bac9 http://b/3073292 --- .../java/java/lang/reflect/AccessibleObject.java | 24 ++-------------------- .../main/java/java/lang/reflect/Constructor.java | 2 +- luni/src/main/java/java/lang/reflect/Field.java | 3 +-- luni/src/main/java/java/lang/reflect/Method.java | 4 ++-- .../main/java/java/lang/reflect/WildcardType.java | 19 ++++++++++++----- .../harmony/luni/lang/reflect/ImplForWildcard.java | 3 ++- 6 files changed, 22 insertions(+), 33 deletions(-) (limited to 'luni/src/main/java') diff --git a/luni/src/main/java/java/lang/reflect/AccessibleObject.java b/luni/src/main/java/java/lang/reflect/AccessibleObject.java index 83763a2..6803a46 100644 --- a/luni/src/main/java/java/lang/reflect/AccessibleObject.java +++ b/luni/src/main/java/java/lang/reflect/AccessibleObject.java @@ -245,10 +245,10 @@ public class AccessibleObject implements AnnotatedElement { StringBuilder result = new StringBuilder(); if (types.length != 0) { - result.append(types[0].getCanonicalName()); + result.append(types[0].getName()); for (int i = 1; i < types.length; i++) { result.append(','); - result.append(types[i].getCanonicalName()); + result.append(types[i].getName()); } } @@ -348,26 +348,6 @@ public class AccessibleObject implements AnnotatedElement { * * @throws NullPointerException if any of the arguments is null */ - void appendArrayType(StringBuilder sb, Class[] objs) { - if (objs.length > 0) { - appendArrayType(sb, objs[0]); - for (int i = 1; i < objs.length; i++) { - sb.append(','); - appendArrayType(sb, objs[i]); - } - } - } - - /** - * Appends names of the specified array classes to the buffer. The array - * elements may represent a simple type, a reference type or an array type. - * Output format: java.lang.Object[], java.io.File, void - * - * @param sb buffer - * @param objs array of classes to print the names - * - * @throws NullPointerException if any of the arguments is null - */ void appendArrayGenericType(StringBuilder sb, Type[] objs) { if (objs.length > 0) { appendGenericType(sb, objs[0]); diff --git a/luni/src/main/java/java/lang/reflect/Constructor.java b/luni/src/main/java/java/lang/reflect/Constructor.java index f511687..2a29822 100644 --- a/luni/src/main/java/java/lang/reflect/Constructor.java +++ b/luni/src/main/java/java/lang/reflect/Constructor.java @@ -144,7 +144,7 @@ public final class Constructor extends AccessibleObject implements GenericDec for (int i = 0; i < formalTypeParameters.length; i++) { appendGenericType(sb, formalTypeParameters[i]); if (i < formalTypeParameters.length - 1) { - sb.append(", "); + sb.append(","); } } sb.append("> "); diff --git a/luni/src/main/java/java/lang/reflect/Field.java b/luni/src/main/java/java/lang/reflect/Field.java index d7898b9..1d2726c 100644 --- a/luni/src/main/java/java/lang/reflect/Field.java +++ b/luni/src/main/java/java/lang/reflect/Field.java @@ -32,7 +32,6 @@ package java.lang.reflect; -import dalvik.system.VMStack; import java.lang.annotation.Annotation; import org.apache.harmony.kernel.vm.StringUtils; import org.apache.harmony.luni.lang.reflect.GenericSignatureParser; @@ -838,7 +837,7 @@ public final class Field extends AccessibleObject implements Member { if (result.length() != 0) { result.append(' '); } - result.append(type.getName()); + appendArrayType(result, type); result.append(' '); result.append(declaringClass.getName()); result.append('.'); diff --git a/luni/src/main/java/java/lang/reflect/Method.java b/luni/src/main/java/java/lang/reflect/Method.java index 68fe219..2e2c03f 100644 --- a/luni/src/main/java/java/lang/reflect/Method.java +++ b/luni/src/main/java/java/lang/reflect/Method.java @@ -175,7 +175,7 @@ public final class Method extends AccessibleObject implements GenericDeclaration for (int i = 0; i < formalTypeParameters.length; i++) { appendGenericType(sb, formalTypeParameters[i]); if (i < formalTypeParameters.length - 1) { - sb.append(", "); + sb.append(","); } } sb.append("> "); @@ -185,7 +185,7 @@ public final class Method extends AccessibleObject implements GenericDeclaration sb.append(' '); // append method name appendArrayType(sb, getDeclaringClass()); - sb.append("."+getName()); + sb.append(".").append(getName()); // append parameters sb.append('('); appendArrayGenericType(sb, diff --git a/luni/src/main/java/java/lang/reflect/WildcardType.java b/luni/src/main/java/java/lang/reflect/WildcardType.java index affd526..31e1023 100644 --- a/luni/src/main/java/java/lang/reflect/WildcardType.java +++ b/luni/src/main/java/java/lang/reflect/WildcardType.java @@ -18,12 +18,21 @@ package java.lang.reflect; /** - * This interface represents a wildcard type, such as the simple wildcard - * {@code '?'}, the upper bounded wildcard {@code '? extends Closeable'}, the - * multiple upper bounded wildcard {@code '? extends Closeable & Flushable'} or - * the lower bounded wildcard {@code '? super OutputStream'}. + * A pattern type, such as the upper bounded wildcard {@code + * ? extends Closeable} or the lower bounded wildcard {@code ? super String}. * - * @since 1.5 + *

Although this interface permits an arbitrary number of upper and lower + * bounds, all wildcard types of Java language programs are in one of two forms: + *

    + *
  1. No lower bound and one upper bound. Such types are + * written like {@code ? extends java.lang.Number}. When the upper bound is + * {@code java.lang.Object}, the {@code extends java.lang.Object} suffix is + * optional: {@code Set} is shorthand for {@code + * Set}. + *
  2. One lower bound and an upper bound of {@code + * java.lang.Object}. Such types are written like {@code + * ? super java.lang.String}. + *
*/ public interface WildcardType extends Type { /** diff --git a/luni/src/main/java/org/apache/harmony/luni/lang/reflect/ImplForWildcard.java b/luni/src/main/java/org/apache/harmony/luni/lang/reflect/ImplForWildcard.java index 3d60a0e..b0605f2 100644 --- a/luni/src/main/java/org/apache/harmony/luni/lang/reflect/ImplForWildcard.java +++ b/luni/src/main/java/org/apache/harmony/luni/lang/reflect/ImplForWildcard.java @@ -59,7 +59,8 @@ public final class ImplForWildcard implements WildcardType { @Override public String toString() { StringBuilder sb = new StringBuilder("?"); - if (extendsBound.length() > 0) { + if ((extendsBound.length() == 1 && extendsBound.getResolvedTypes()[0] != Object.class) + || extendsBound.length() > 1) { sb.append(" extends ").append(extendsBound); } else if (superBound.length() > 0) { sb.append(" super ").append(superBound); -- cgit v1.1