Top Inners Fields Constructors Methods
org.glassfish.pfl.dynamic.copyobject.impl

public Class ClassCopierOrdinaryImpl

extends ClassCopierBase
Class Inheritance
Imports
java.io.Externalizable, .Serializable, java.lang.invoke.MethodHandle, java.lang.reflect.Constructor, .Field, .Modifier, java.security.AccessController, .PrivilegedAction, .PrivilegedActionException, .PrivilegedExceptionAction, .ProtectionDomain, java.util.Map, .WeakHashMap, org.glassfish.pfl.basic.reflection.Bridge, org.glassfish.pfl.dynamic.copyobject.spi.Copy, .CopyInterceptor, .ReflectiveCopyException

Nested and Inner Type Summary

Modifier and TypeClass and Description
public static interface
private static class
private abstract static class
ClassCopierOrdinaryImpl.ConstructorFactory

Class used as a factory for the appropriate Serialization constructors.

Field Summary

Modifier and TypeField and Description
private static final Bridge
BRIDGE_REF

Bridge is used to access unsafe methods used to read and write arbitrary data members in objects.

private final ClassCopierOrdinaryImpl.ClassFieldCopier
private static Map<Class<?>, ClassCopierOrdinaryImpl.ClassFieldCopier>
private static Map<Class<?>, Constructor<?>>
private static final Package
private static final Package
private final Constructor<?>
private static ThreadLocal<Boolean>
private final MethodHandle

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public Object
createCopy(Object source)

Implements abstract org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierBase.createCopy.

Create a copy of source.

public Object
doCopy(Map<Object, Object> oldToNew, Object source, Object result)

Overrides org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierBase.doCopy.

Do the copying of data from source to result.

private static synchronized ClassCopierOrdinaryImpl.ClassFieldCopier
getClassFieldCopier(final Class<?> cls, final PipelineClassCopierFactory classCopierFactory)

private static synchronized ClassCopierOrdinaryImpl.ClassFieldCopier
private static synchronized ClassCopierOrdinaryImpl.ClassFieldCopier
makeClassFieldCopierUnsafeCodegenImpl(final Class<?> cls, final PipelineClassCopierFactory classCopierFactory)

Use bridge with code generated by codegen to copy objects.

private Object
public static void
private static boolean
Inherited from org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierBase:
copyequalshashCodeisReflectiveClassCopiertoString

Field Detail

BRIDGE_REFback to summary
private static final Bridge BRIDGE_REF

Bridge is used to access unsafe methods used to read and write arbitrary data members in objects. This is very fast, and completely ignores access protections including final on fields. NOTE WELL: Unsafe is capable of causing severe damage to the VM, including causing the VM to dump core. get and put calls must only be made with offsets obtained from objectFieldOffset calls. Because of the dangerous nature of Unsafe, its use must be carefully protected.

classFieldCopierback to summary
private final ClassCopierOrdinaryImpl.ClassFieldCopier classFieldCopier
classToClassFieldCopierback to summary
private static Map<Class<?>, ClassCopierOrdinaryImpl.ClassFieldCopier> classToClassFieldCopier
classToConstructorback to summary
private static Map<Class<?>, Constructor<?>> classToConstructor
CODEGEN_IMPLback to summary
private static final Package CODEGEN_IMPL
CODEGEN_SPIback to summary
private static final Package CODEGEN_SPI
constructorback to summary
private final Constructor<?> constructor
isCodegenCopierAllowedback to summary
private static ThreadLocal<Boolean> isCodegenCopierAllowed
readResolveMethodback to summary
private final MethodHandle readResolveMethod

Constructor Detail

ClassCopierOrdinaryImplback to summary
public ClassCopierOrdinaryImpl(PipelineClassCopierFactory ccf, Class<?> cls) throws ReflectiveCopyException

Method Detail

createCopyback to summary
public Object createCopy(Object source) throws ReflectiveCopyException

Implements abstract org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierBase.createCopy.

Doc from org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierBase.createCopy.

Create a copy of source. The copy may or may not be fully initialized. This method must always be overridden in a subclass.

Annotations
@Override
doCopyback to summary
public Object doCopy(Map<Object, Object> oldToNew, Object source, Object result) throws ReflectiveCopyException

Overrides org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierBase.doCopy.

Doc from org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierBase.doCopy.

Do the copying of data from source to result. This just returns the result by default, but it may be overrideden in a subclass. When this method completes, result must be fully initialized.

Annotations
@Override
getClassFieldCopierback to summary
private static synchronized ClassCopierOrdinaryImpl.ClassFieldCopier getClassFieldCopier(final Class<?> cls, final PipelineClassCopierFactory classCopierFactory) throws ReflectiveCopyException
getSuperCopierback to summary
private static synchronized ClassCopierOrdinaryImpl.ClassFieldCopier getSuperCopier(PipelineClassCopierFactory ccf, Class<?> cls) throws ReflectiveCopyException
makeClassFieldCopierUnsafeCodegenImplback to summary
private static synchronized ClassCopierOrdinaryImpl.ClassFieldCopier makeClassFieldCopierUnsafeCodegenImpl(final Class<?> cls, final PipelineClassCopierFactory classCopierFactory) throws ReflectiveCopyException

Use bridge with code generated by codegen to copy objects. This method must be invoked from inside a doPrivileged call.

resolveback to summary
private Object resolve(Object obj)
setCodegenCopierAllowedback to summary
public static void setCodegenCopierAllowed(boolean flag)
useCodegenCopierback to summary
private static boolean useCodegenCopier()
org.glassfish.pfl.dynamic.copyobject.impl back to summary

public Interface ClassCopierOrdinaryImpl.ClassFieldCopier

Known Direct Implementers
org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl, org.glassfish.pfl.dynamic.copyobject.impl.CodegenCopierBase

Method Summary

Modifier and TypeMethod and Description
public void
copy(Map<Object, Object> oldToNew, Object src, Object dest)

Copy all fields from src to dest, using oldToNew as usual to preserve aliasing.

Method Detail

copyback to summary
public void copy(Map<Object, Object> oldToNew, Object src, Object dest) throws ReflectiveCopyException

Copy all fields from src to dest, using oldToNew as usual to preserve aliasing. This copies all fields declared in the class, as well as in the super class.

org.glassfish.pfl.dynamic.copyobject.impl back to summary

private Class ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl

extends Object
implements ClassFieldCopier
Class Inheritance
  • java.lang.Object
  • org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl
All Implemented Interfaces
org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierOrdinaryImpl.ClassFieldCopier

Use bridge to copy objects. Now that we are on JDK 5, this has not been known to fail on any VM (unlike on JDK 1.4.1). Note that the reflective copier should work now on JDK 5, due to the change in suppressAccessChecks that supports writing to final fields. This copier also supports @Copy annotations on fields.

Nested and Inner Type Summary

Modifier and TypeClass and Description
private abstract static class

Field Summary

Modifier and TypeField and Description
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private final PipelineClassCopierFactory
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private final ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier[]
private final long[]
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private final Class<?>
private final ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private final ClassCopierOrdinaryImpl.ClassFieldCopier

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public void
copy(Map<Object, Object> oldToNew, Object source, Object result)

Implements org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierOrdinaryImpl.ClassFieldCopier.copy.

Copy all fields from src to dest, using oldToNew as usual to preserve aliasing.

private boolean
private ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
private ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier
public String
toString()

Overrides java.lang.Object.toString.

Returns a string representation of the object.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAllwaitwaitwait

Field Detail

booleanUnsafeFieldCopierback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier booleanUnsafeFieldCopier
booleanUnsafeFieldInitializerback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier booleanUnsafeFieldInitializer
byteUnsafeFieldCopierback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier byteUnsafeFieldCopier
byteUnsafeFieldInitializerback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier byteUnsafeFieldInitializer
charUnsafeFieldCopierback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier charUnsafeFieldCopier
charUnsafeFieldInitializerback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier charUnsafeFieldInitializer
classCopierFactoryback to summary
private final PipelineClassCopierFactory classCopierFactory
doubleUnsafeFieldCopierback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier doubleUnsafeFieldCopier
doubleUnsafeFieldInitializerback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier doubleUnsafeFieldInitializer
fieldCopiersback to summary
private final ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier[] fieldCopiers
fieldOffsetsback to summary
private final long[] fieldOffsets
floatUnsafeFieldCopierback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier floatUnsafeFieldCopier
floatUnsafeFieldInitializerback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier floatUnsafeFieldInitializer
intUnsafeFieldCopierback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier intUnsafeFieldCopier
intUnsafeFieldInitializerback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier intUnsafeFieldInitializer
longUnsafeFieldCopierback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier longUnsafeFieldCopier
longUnsafeFieldInitializerback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier longUnsafeFieldInitializer
myClassback to summary
private final Class<?> myClass
objectUnsafeFieldCopierback to summary
private final ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier objectUnsafeFieldCopier
objectUnsafeFieldIdentityCopierback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier objectUnsafeFieldIdentityCopier
objectUnsafeFieldInitializerback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier objectUnsafeFieldInitializer
objectUnsafeFieldResultCopierback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier objectUnsafeFieldResultCopier
objectUnsafeFieldSourceCopierback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier objectUnsafeFieldSourceCopier
shortUnsafeFieldCopierback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier shortUnsafeFieldCopier
shortUnsafeFieldInitializerback to summary
private static ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier shortUnsafeFieldInitializer
superCopierback to summary
private final ClassCopierOrdinaryImpl.ClassFieldCopier superCopier

Constructor Detail

ClassFieldCopierUnsafeImplback to summary
public ClassFieldCopierUnsafeImpl(Class<?> cls, PipelineClassCopierFactory ccf) throws ReflectiveCopyException

Method Detail

copyback to summary
public void copy(Map<Object, Object> oldToNew, Object source, Object result) throws ReflectiveCopyException

Implements org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierOrdinaryImpl.ClassFieldCopier.copy.

Doc from org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierOrdinaryImpl.ClassFieldCopier.copy.

Copy all fields from src to dest, using oldToNew as usual to preserve aliasing. This copies all fields declared in the class, as well as in the super class.

Annotations
@Override
fieldIsCopyableback to summary
private boolean fieldIsCopyable(Field field)
getPrimitiveFieldCopierback to summary
private ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier getPrimitiveFieldCopier(Class<?> cls)
getPrimitiveFieldInitializerback to summary
private ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier getPrimitiveFieldInitializer(Class<?> cls)
getUnsafeFieldCopierback to summary
private ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier getUnsafeFieldCopier(Field fld)
toStringback to summary
public String toString()

Overrides java.lang.Object.toString.

Doc from java.lang.Object.toString.

Returns a string representation of the object. Satisfying this method's contract implies a non-null result must be returned.

Annotations
@Override
org.glassfish.pfl.dynamic.copyobject.impl back to summary

private abstract Class ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier

extends Object
Class Inheritance
  • java.lang.Object
  • org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierOrdinaryImpl.ClassFieldCopierUnsafeImpl.UnsafeFieldCopier

Field Summary

Modifier and TypeField and Description
protected Bridge

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
pack-priv abstract void
copy(Map<Object, Object> oldToNew, long offset, Object src, Object dest)

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

bridgeback to summary
protected Bridge bridge

Constructor Detail

UnsafeFieldCopierback to summary
public UnsafeFieldCopier(Bridge bridge)

Method Detail

copyback to summary
pack-priv abstract void copy(Map<Object, Object> oldToNew, long offset, Object src, Object dest) throws ReflectiveCopyException
org.glassfish.pfl.dynamic.copyobject.impl back to summary

private abstract Class ClassCopierOrdinaryImpl.ConstructorFactory

extends Object
Class Inheritance
  • java.lang.Object
  • org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierOrdinaryImpl.ConstructorFactory

Class used as a factory for the appropriate Serialization constructors. Note that this cannot be exposed in another class (even package private), because this would provide access to a constructor in some cases that can never be used outside of special serialization or copy support.

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
private static Constructor<?>
getDefaultConstructor(Class<?> clazz)

Returns a constructor based on the first no-args constructor in the super class chain.

private static Constructor<?>
getExternalizableConstructor(Class<?> cl)

Returns public no-arg constructor of given class, or null if none found.

private static Constructor<?>
getSerializableConstructor(Class<?> clazz)

Returns subclass-accessible no-arg constructor of first non-serializable superclass, or null if none found.

private static Constructor<?>
makeConstructor(final Class<?> cls)

Analyze the class to determine the correct constructor type.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Constructor Detail

ConstructorFactoryback to summary
private ConstructorFactory()

Method Detail

getDefaultConstructorback to summary
private static Constructor<?> getDefaultConstructor(Class<?> clazz)

Returns a constructor based on the first no-args constructor in the super class chain. This allows us to construct an instance of any class at all, serializable or not.

getExternalizableConstructorback to summary
private static Constructor<?> getExternalizableConstructor(Class<?> cl)

Returns public no-arg constructor of given class, or null if none found. Access checks are disabled on the returned constructor (if any), since the defining class may still be non-public.

getSerializableConstructorback to summary
private static Constructor<?> getSerializableConstructor(Class<?> clazz)

Returns subclass-accessible no-arg constructor of first non-serializable superclass, or null if none found. Access checks are disabled on the returned constructor (if any).

makeConstructorback to summary
private static Constructor<?> makeConstructor(final Class<?> cls)

Analyze the class to determine the correct constructor type. Returns the appropriate constructor.