1.1 --- a/rt/emul/mini/src/main/java/java/lang/Class.java Sat Mar 19 08:45:39 2016 +0100
1.2 +++ b/rt/emul/mini/src/main/java/java/lang/Class.java Sun Mar 20 08:12:55 2016 +0100
1.3 @@ -721,15 +721,12 @@
1.4 * class.
1.5 */
1.6 private String getSimpleBinaryName() {
1.7 - Class<?> enclosingClass = null; // XXX getEnclosingClass();
1.8 - if (enclosingClass == null) // top level class
1.9 + final String name = getName();
1.10 + int dolar = name.lastIndexOf('$');
1.11 + if (dolar == -1) {
1.12 return null;
1.13 - // Otherwise, strip the enclosing class' name
1.14 - try {
1.15 - return getName().substring(enclosingClass.getName().length());
1.16 - } catch (IndexOutOfBoundsException ex) {
1.17 - throw new IllegalStateException("Malformed class name");
1.18 }
1.19 + return name.substring(dolar);
1.20 }
1.21
1.22 /**
1.23 @@ -1350,8 +1347,8 @@
1.24 else
1.25 return null;
1.26 }
1.27 -// if (isLocalOrAnonymousClass())
1.28 -// return null;
1.29 + if (isLocalOrAnonymousClass())
1.30 + return null;
1.31 // Class<?> enclosingClass = getEnclosingClass();
1.32 Class<?> enclosingClass = null;
1.33 if (enclosingClass == null) { // top level class
1.34 @@ -1365,6 +1362,47 @@
1.35 }
1.36
1.37 /**
1.38 + * Returns {@code true} if and only if the underlying class is an anonymous
1.39 + * class.
1.40 + *
1.41 + * @return {@code true} if and only if this class is an anonymous class.
1.42 + * @since 1.5
1.43 + */
1.44 + public boolean isAnonymousClass() {
1.45 + return "".equals(getSimpleName());
1.46 + }
1.47 +
1.48 + /**
1.49 + * Returns {@code true} if and only if the underlying class is a local
1.50 + * class.
1.51 + *
1.52 + * @return {@code true} if and only if this class is a local class.
1.53 + * @since 1.5
1.54 + */
1.55 + public boolean isLocalClass() {
1.56 + return isLocalOrAnonymousClass() && !isAnonymousClass();
1.57 + }
1.58 +
1.59 + /**
1.60 + * Returns {@code true} if and only if the underlying class is a member
1.61 + * class.
1.62 + *
1.63 + * @return {@code true} if and only if this class is a member class.
1.64 + * @since 1.5
1.65 + */
1.66 + public boolean isMemberClass() {
1.67 + return getSimpleBinaryName() != null && !isLocalOrAnonymousClass();
1.68 + }
1.69 +
1.70 + /**
1.71 + * Returns {@code true} if this is a local class or an anonymous class.
1.72 + * Returns {@code false} otherwise.
1.73 + */
1.74 + private boolean isLocalOrAnonymousClass() {
1.75 + return (getAccess() & 0x10000) != 0;
1.76 + }
1.77 +
1.78 + /**
1.79 * Finds a resource with a given name. The rules for searching resources
1.80 * associated with a given class are implemented by the defining
1.81 * {@linkplain ClassLoader class loader} of the class. This method