Index: vm/vmcore/src/kernel_classes/javasrc/java/lang/Class.java =================================================================== --- vm/vmcore/src/kernel_classes/javasrc/java/lang/Class.java (revision 655000) +++ vm/vmcore/src/kernel_classes/javasrc/java/lang/Class.java (working copy) @@ -22,6 +22,7 @@ import static org.apache.harmony.vm.ClassFormat.ACC_INTERFACE; import static org.apache.harmony.vm.ClassFormat.ACC_SYNTHETIC; +import java.io.Externalizable; import java.io.InputStream; import java.io.Serializable; import java.lang.annotation.Annotation; @@ -78,7 +79,18 @@ // TODO make it soft reference transient ReflectionData reflectionData; transient SoftReference softCache; + + transient static final Class SERIALIZABLE = Serializable.class; + transient static final Class EXTERNALIZABLE = Externalizable.class; + transient boolean resolvedSerializable = false; + transient boolean resolvedExternalizable = false; + transient boolean resolvedPrimitive = false; + + transient boolean isSerializable; + transient boolean isExternalizable; + transient boolean isPrimitive; + private GACache getCache() { GACache cache = null; if (softCache != null) { @@ -605,6 +617,22 @@ * @com.intel.drl.spec_ref */ public boolean isAssignableFrom(Class clazz) { + if (SERIALIZABLE.equals(this)) { + if (!clazz.resolvedSerializable) { + clazz.isSerializable = VMClassRegistry.isAssignableFrom(this, clazz); + clazz.resolvedSerializable = true; + } + return clazz.isSerializable; + } + + if (EXTERNALIZABLE.equals(this)) { + if (!clazz.resolvedExternalizable) { + clazz.isExternalizable = VMClassRegistry.isAssignableFrom(this, clazz); + clazz.resolvedExternalizable = true; + } + return clazz.isExternalizable; + } + return VMClassRegistry.isAssignableFrom(this, clazz); } @@ -626,7 +654,11 @@ * @com.intel.drl.spec_ref */ public boolean isPrimitive() { - return VMClassRegistry.isPrimitive(this); + if (!resolvedPrimitive) { + isPrimitive = VMClassRegistry.isPrimitive(this); + resolvedPrimitive = true; + } + return isPrimitive; } /**