Top Description Inners Fields Constructors Methods
org.codehaus.groovy.reflection

public Class ClassInfo

extends Object
implements Finalizable
Class Inheritance
All Implemented Interfaces
org.codehaus.groovy.util.Finalizable
Imports
groovy.lang.Closure, .ExpandoMetaClass, .ExpandoMetaClassCreationHandle, .GroovySystem, .MetaClass, .MetaClassRegistry, .MetaMethod, org.codehaus.groovy.reflection.GroovyClassValue.ComputeValue, org.codehaus.groovy.reflection.stdclasses.ArrayCachedClass, .BigDecimalCachedClass, .BigIntegerCachedClass, .BooleanCachedClass, .ByteCachedClass, .CachedClosureClass, .CachedSAMClass, .CharacterCachedClass, .DoubleCachedClass, .FloatCachedClass, .IntegerCachedClass, .LongCachedClass, .NumberCachedClass, .ObjectCachedClass, .ShortCachedClass, .StringCachedClass, org.codehaus.groovy.util.Finalizable, .LazyReference, .LockableObject, .ManagedConcurrentLinkedQueue, .ManagedConcurrentMap, .ManagedReference, .ReferenceBundle, org.codehaus.groovy.vmplugin.VMPluginFactory, java.lang.ref.WeakReference, java.math.BigDecimal, .BigInteger, java.security.AccessController, .PrivilegedAction, java.util.Collection, .Iterator, java.util.concurrent.atomic.AtomicInteger

Handle for all information we want to keep about the class

This class handles caching internally and its advisable to not store references directly to objects of this class. The static factory method ClassInfo#getClassInfo(Class) should be used to retrieve an instance from the cache. Internally the Class associated with a ClassInfo instance is kept as WeakReference, so it not safe to reference and instance without the Class being either strongly or softly reachable.

Nested and Inner Type Summary

Modifier and TypeClass and Description
public static interface
private static class
private static class
private static class

Field Summary

Modifier and TypeField and Description
private final ClassInfo.LazyClassLoaderRef
private final ClassInfo.LazyCachedClassRef
private final WeakReference<Class<?>>
pack-priv MetaMethod[]
private static final ClassInfo.GlobalClassSet
private static final GroovyClassValue<ClassInfo>
public final int
private final LockableObject
private static final ManagedConcurrentLinkedQueue<ClassInfo>
pack-priv MetaMethod[]
private ManagedConcurrentMap<Object, MetaClass>
private static final ReferenceBundle
private MetaClass
private final AtomicInteger
private static final ReferenceBundle
private ManagedReference<MetaClass>

Constructor Summary

AccessConstructor and Description
pack-priv
ClassInfo(Class<T> klazz)

Method Summary

Modifier and TypeMethod and Description
public static void
private static CachedClass
createCachedClass(Class<T> klazz, ClassInfo classInfo)

public void
public static int
public static Collection<ClassInfo>
private static Collection<ClassInfo>
public ClassLoaderForClassArtifacts
public CachedClass
public static ClassInfo
public final MetaClass

Returns:

a MetaClass instance
getMetaClass
()

Returns the MetaClass for the Class associated with this ClassInfo.

public MetaClass
public MetaClass
private MetaClass
public ExpandoMetaClass
public MetaClass
public MetaClass
public final Class<?>

Returns:

the Class associated with this ClassInfo, else null
getTheClass
()

Returns the Class associated with this ClassInfo.

public int
public MetaClass
public boolean
public void
private static boolean
isSAM(Class<?> c)

private static boolean
private static boolean
isValidWeakMetaClass(MetaClass metaClass, MetaClassRegistry.MetaClassCreationHandle mccHandle)

if EMC.enableGlobally() is OFF, return whatever the cached answer is.

public void
lock()

public static void
public static void
remove(Class<?>
the Class associated with the ClassInfo to remove from cache
cls
)

Removes a ClassInfo from the cache.

private void
public void
public void
public void
public static int
size()

public void
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

artifactClassLoaderback to summary
private final ClassInfo.LazyClassLoaderRef artifactClassLoader
cachedClassRefback to summary
private final ClassInfo.LazyCachedClassRef cachedClassRef
classRefback to summary
private final WeakReference<Class<?>> classRef
dgmMetaMethodsback to summary
pack-priv MetaMethod[] dgmMetaMethods
globalClassSetback to summary
private static final ClassInfo.GlobalClassSet globalClassSet
globalClassValueback to summary
private static final GroovyClassValue<ClassInfo> globalClassValue
hashback to summary
public final int hash
lockback to summary
private final LockableObject lock
modifiedExpandosback to summary
private static final ManagedConcurrentLinkedQueue<ClassInfo> modifiedExpandos
newMetaMethodsback to summary
pack-priv MetaMethod[] newMetaMethods
perInstanceMetaClassMapback to summary
private ManagedConcurrentMap<Object, MetaClass> perInstanceMetaClassMap
softBundleback to summary
private static final ReferenceBundle softBundle
strongMetaClassback to summary
private MetaClass strongMetaClass
versionback to summary
private final AtomicInteger version
weakBundleback to summary
private static final ReferenceBundle weakBundle
weakMetaClassback to summary
private ManagedReference<MetaClass> weakMetaClass

Constructor Detail

ClassInfoback to summary
pack-priv ClassInfo(Class<T> klazz)

Method Detail

clearModifiedExpandosback to summary
public static void clearModifiedExpandos()
createCachedClassback to summary
private static CachedClass createCachedClass(Class<T> klazz, ClassInfo classInfo)
finalizeReferenceback to summary
public void finalizeReference()

Implements org.codehaus.groovy.util.Finalizable.finalizeReference.

Annotations
@Override
fullSizeback to summary
public static int fullSize()
getAllClassInfoback to summary
public static Collection<ClassInfo> getAllClassInfo()
getAllGlobalClassInfoback to summary
private static Collection<ClassInfo> getAllGlobalClassInfo()
getArtifactClassLoaderback to summary
public ClassLoaderForClassArtifacts getArtifactClassLoader()
getCachedClassback to summary
public CachedClass getCachedClass()
getClassInfoback to summary
public static ClassInfo getClassInfo(Class<T> cls)
getMetaClassback to summary
public final MetaClass getMetaClass()

Returns the MetaClass for the Class associated with this ClassInfo. If no MetaClass exists one will be created.

It is not safe to call this method without a Class associated with this ClassInfo. It is advisable to aways retrieve a ClassInfo instance from the cache by using the static factory method ClassInfo#getClassInfo(Class) to ensure the referenced Class is strongly reachable.

Returns:MetaClass

a MetaClass instance

getMetaClassback to summary
public MetaClass getMetaClass(Object obj)
getMetaClassForClassback to summary
public MetaClass getMetaClassForClass()
getMetaClassUnderLockback to summary
private MetaClass getMetaClassUnderLock()
getModifiedExpandoback to summary
public ExpandoMetaClass getModifiedExpando()
getPerInstanceMetaClassback to summary
public MetaClass getPerInstanceMetaClass(Object obj)
getStrongMetaClassback to summary
public MetaClass getStrongMetaClass()
getTheClassback to summary
public final Class<?> getTheClass()

Returns the Class associated with this ClassInfo.

This method can return null if the Class is no longer reachable through any strong or soft references. A non-null return value indicates that this ClassInfo is valid.

Returns:Class<?>

the Class associated with this ClassInfo, else null

getVersionback to summary
public int getVersion()
getWeakMetaClassback to summary
public MetaClass getWeakMetaClass()
hasPerInstanceMetaClassesback to summary
public boolean hasPerInstanceMetaClasses()
incVersionback to summary
public void incVersion()
isSAMback to summary
private static boolean isSAM(Class<?> c)
isValidWeakMetaClassback to summary
private static boolean isValidWeakMetaClass(MetaClass metaClass)
isValidWeakMetaClassback to summary
private static boolean isValidWeakMetaClass(MetaClass metaClass, MetaClassRegistry.MetaClassCreationHandle mccHandle)

if EMC.enableGlobally() is OFF, return whatever the cached answer is. but if EMC.enableGlobally() is ON and the cached answer is not an EMC, come up with a fresh answer

lockback to summary
public void lock()
onAllClassInfoback to summary
public static void onAllClassInfo(ClassInfo.ClassInfoAction action)
removeback to summary
public static void remove(Class<?> cls)

Removes a ClassInfo from the cache. This is useful in cases where the Class is parsed from a script, such as when using GroovyClassLoader#parseClass, and is executed for its result but the Class is not retained or cached. Removing the ClassInfo associated with the Class will make the Class and its ClassLoader eligible for garbage collection sooner that it would otherwise.

Parameters
cls:Class<?>

the Class associated with the ClassInfo to remove from cache

replaceWeakMetaClassRefback to summary
private void replaceWeakMetaClassRef(ManagedReference<MetaClass> newRef)
setPerInstanceMetaClassback to summary
public void setPerInstanceMetaClass(Object obj, MetaClass metaClass)
setStrongMetaClassback to summary
public void setStrongMetaClass(MetaClass answer)
setWeakMetaClassback to summary
public void setWeakMetaClass(MetaClass answer)
sizeback to summary
public static int size()
unlockback to summary
public void unlock()
org.codehaus.groovy.reflection back to summary

public Interface ClassInfo.ClassInfoAction


Method Summary

Modifier and TypeMethod and Description
public void

Method Detail

onClassInfoback to summary
public void onClassInfo(ClassInfo classInfo)
org.codehaus.groovy.reflection back to summary

private Class ClassInfo.GlobalClassSet

extends Object
Class Inheritance

Field Summary

Modifier and TypeField and Description
private final ManagedConcurrentLinkedQueue<ClassInfo>

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
public void
add(ClassInfo value)

public int
public int
size()

public Collection<ClassInfo>
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

itemsback to summary
private final ManagedConcurrentLinkedQueue<ClassInfo> items

Constructor Detail

GlobalClassSetback to summary
private GlobalClassSet()

Method Detail

addback to summary
public void add(ClassInfo value)
fullSizeback to summary
public int fullSize()
sizeback to summary
public int size()
valuesback to summary
public Collection<ClassInfo> values()
org.codehaus.groovy.reflection back to summary

private Class ClassInfo.LazyCachedClassRef

extends LazyReference<CachedClass>
Class Inheritance

Field Summary

Modifier and TypeField and Description
private final ClassInfo
private static final long

Constructor Summary

AccessConstructor and Description
pack-priv

Method Summary

Modifier and TypeMethod and Description
public CachedClass
Inherited from org.codehaus.groovy.util.LazyReference:
cleargettoString

Field Detail

infoback to summary
private final ClassInfo info
serialVersionUIDback to summary
private static final long serialVersionUID

Hides org.codehaus.groovy.util.LazyReference.serialVersionUID.

Constructor Detail

LazyCachedClassRefback to summary
pack-priv LazyCachedClassRef(ReferenceBundle bundle, ClassInfo info)

Method Detail

initValueback to summary
public CachedClass initValue()

Implements abstract org.codehaus.groovy.util.LazyReference.initValue.

org.codehaus.groovy.reflection back to summary

private Class ClassInfo.LazyClassLoaderRef

extends LazyReference<ClassLoaderForClassArtifacts>
Class Inheritance

Field Summary

Modifier and TypeField and Description
private final ClassInfo
private static final long

Constructor Summary

AccessConstructor and Description
pack-priv

Method Summary

Modifier and TypeMethod and Description
public ClassLoaderForClassArtifacts
Inherited from org.codehaus.groovy.util.LazyReference:
cleargettoString

Field Detail

infoback to summary
private final ClassInfo info
serialVersionUIDback to summary
private static final long serialVersionUID

Hides org.codehaus.groovy.util.LazyReference.serialVersionUID.

Constructor Detail

LazyClassLoaderRefback to summary
pack-priv LazyClassLoaderRef(ReferenceBundle bundle, ClassInfo info)

Method Detail

initValueback to summary
public ClassLoaderForClassArtifacts initValue()

Implements abstract org.codehaus.groovy.util.LazyReference.initValue.