Top Description Inners Fields Constructors Methods
org.eclipse.persistence.internal.jpa.metadata.accessors.objects

public Class MetadataAsmFactory

extends MetadataFactory
Class Inheritance
Imports
java.io.IOException, .InputStream, java.security.AccessController, .PrivilegedAction, java.util.ArrayList, .List, org.eclipse.persistence.asm.ASMFactory, .AnnotationVisitor, .EclipseLinkAnnotationVisitor, .Attribute, .ClassReader, .EclipseLinkClassVisitor, .EclipseLinkFieldVisitor, .EclipseLinkClassReader, .FieldVisitor, .EclipseLinkMethodVisitor, .MethodVisitor, .Type, org.eclipse.persistence.internal.helper.Helper, org.eclipse.persistence.internal.jpa.metadata.MetadataDescriptor, .MetadataLogger, org.eclipse.persistence.internal.localization.ExceptionLocalization, org.eclipse.persistence.internal.security.PrivilegedAccessHelper, org.eclipse.persistence.logging.AbstractSessionLog, .SessionLog, .SessionLogEntry

INTERNAL: A metadata factory that uses ASM technology and no reflection whatsoever to process the metadata model.
Author
James Sutherland
Since
EclipseLink 1.2

Nested and Inner Type Summary

Modifier and TypeClass and Description
public class
MetadataAsmFactory.ClassMetadataVisitor

Walk the class byte codes and collect the class info.

pack-priv class
MetadataAsmFactory.MetadataAnnotationArrayVisitor

Specialized visitor to handle the population of arrays of annotation values.

pack-priv class
MetadataAsmFactory.MetadataAnnotationVisitor

AnnotationVisitor used to process class, field , and method annotations populating a MetadataAnnotation and its nested state.

pack-priv class
MetadataAsmFactory.MetadataFieldVisitor

Factory for the creation of MetadataField handling basic type, generics, and annotations.

pack-priv class
MetadataAsmFactory.MetadataMethodVisitor

Factory for the creation of MetadataMethod handling basic type, generics, and annotations.

Field Summary

Modifier and TypeField and Description
public static final String
PRIMITIVES

Set of primitive type codes.

public static final String
TOKENS

Set of desc token characters.

Inherited from org.eclipse.persistence.internal.jpa.metadata.accessors.objects.MetadataFactory:
ALLOW_JDKm_loaderm_loggerm_metadataClasses

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
private static Object
annotationValue(String description, Object value)

Convert the annotation value into the value used in the meta model

protected void
buildClassMetadata(MetadataClass metadataClass, String className, boolean isLazy)

Build the class metadata for the class name using ASM to read the class byte codes.

public MetadataClass
getMetadataClass(String className)

Implements abstract org.eclipse.persistence.internal.jpa.metadata.accessors.objects.MetadataFactory.getMetadataClass.

Return the class metadata for the class name.
public MetadataClass
getMetadataClass(String className, boolean isLazy)

Implements abstract org.eclipse.persistence.internal.jpa.metadata.accessors.objects.MetadataFactory.getMetadataClass.

Return the class metadata for the class name.
private static String
getPrimitiveName(char primitive)

Return the Java type name for the primitive code.

private MetadataClass

Returns:

MetadataClass
getVirtualMetadataClass
(String
class which has not been found
className
)

Get MetadataClass for a class which can not be found

private static List<String>
processDescription(String desc, boolean isGeneric)

Process the byte-code argument description and return the array of Java class names.

private InputStream
public void
resolveGenericTypes(MetadataClass child, List<String> genericTypes, MetadataClass parent, MetadataDescriptor descriptor)

Implements abstract org.eclipse.persistence.internal.jpa.metadata.accessors.objects.MetadataFactory.resolveGenericTypes.

INTERNAL: This method resolves generic types based on the ASM class metadata.
private static String
toClassName(String classDescription)

Inherited from org.eclipse.persistence.internal.jpa.metadata.accessors.objects.MetadataFactory:
addMetadataClassaddMetadataClassgetLoadergetLoggergetMetadataClassesmetadataClassExistssetLoadersetLogger

Field Detail

PRIMITIVESback to summary
public static final String PRIMITIVES

Set of primitive type codes.

TOKENSback to summary
public static final String TOKENS

Set of desc token characters.

Constructor Detail

MetadataAsmFactoryback to summary
public MetadataAsmFactory(MetadataLogger logger, ClassLoader loader)

INTERNAL:

Method Detail

annotationValueback to summary
private static Object annotationValue(String description, Object value)

Convert the annotation value into the value used in the meta model

buildClassMetadataback to summary
protected void buildClassMetadata(MetadataClass metadataClass, String className, boolean isLazy)

Build the class metadata for the class name using ASM to read the class byte codes.

getMetadataClassback to summary
public MetadataClass getMetadataClass(String className)

Implements abstract org.eclipse.persistence.internal.jpa.metadata.accessors.objects.MetadataFactory.getMetadataClass.

Return the class metadata for the class name.

Annotations
@Override
getMetadataClassback to summary
public MetadataClass getMetadataClass(String className, boolean isLazy)

Implements abstract org.eclipse.persistence.internal.jpa.metadata.accessors.objects.MetadataFactory.getMetadataClass.

Return the class metadata for the class name.

Annotations
@Override
getPrimitiveNameback to summary
private static String getPrimitiveName(char primitive)

Return the Java type name for the primitive code.

getVirtualMetadataClassback to summary
private MetadataClass getVirtualMetadataClass(String className)

Get MetadataClass for a class which can not be found

Parameters
className:String

class which has not been found

Returns:MetadataClass

MetadataClass

processDescriptionback to summary
private static List<String> processDescription(String desc, boolean isGeneric)

Process the byte-code argument description and return the array of Java class names. i.e. "(Lorg/foo/Bar;Z)Ljava/lang/Boolean;"=>[org.foo.Bar,boolean ,java.lang.Boolean]

readResourceback to summary
private InputStream readResource(String name)
resolveGenericTypesback to summary
public void resolveGenericTypes(MetadataClass child, List<String> genericTypes, MetadataClass parent, MetadataDescriptor descriptor)

Implements abstract org.eclipse.persistence.internal.jpa.metadata.accessors.objects.MetadataFactory.resolveGenericTypes.

INTERNAL: This method resolves generic types based on the ASM class metadata. Unless every other factory (e.g. APT mirror factory) respects the generic format as built from ASM this method will not work since it is very tied to it.

Annotations
@Override
toClassNameback to summary
private static String toClassName(String classDescription)
org.eclipse.persistence.internal.jpa.metadata.accessors.objects back to summary

public Class MetadataAsmFactory.ClassMetadataVisitor

extends EclipseLinkClassVisitor
Class Inheritance

Walk the class byte codes and collect the class info.

Field Summary

Modifier and TypeField and Description
private MetadataClass
private boolean
private boolean

Constructor Summary

AccessConstructor and Description
pack-priv
ClassMetadataVisitor(MetadataClass metadataClass, boolean isLazy)

Method Summary

Modifier and TypeMethod and Description
public void
visit(int version, int access, String name, String signature, String superName, String[] interfaces)

Overrides org.eclipse.persistence.asm.ClassVisitor.visit.

public AnnotationVisitor
public void
public FieldVisitor
visitField(int access, String name, String desc, String signature, Object value)

Overrides org.eclipse.persistence.asm.ClassVisitor.visitField.

public MethodVisitor
visitMethod(int access, String name, String desc, String signature, String[] exceptions)

Overrides org.eclipse.persistence.asm.ClassVisitor.visitMethod.

Inherited from org.eclipse.persistence.asm.EclipseLinkClassVisitor:
visit

Field Detail

classMetadataback to summary
private MetadataClass classMetadata
isLazyback to summary
private boolean isLazy
processedMemeberback to summary
private boolean processedMemeber

Constructor Detail

ClassMetadataVisitorback to summary
pack-priv ClassMetadataVisitor(MetadataClass metadataClass, boolean isLazy)

Method Detail

visitback to summary
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces)

Overrides org.eclipse.persistence.asm.ClassVisitor.visit.

Annotations
@Override
visitAnnotationback to summary
public AnnotationVisitor visitAnnotation(String desc, boolean visible)

Implements abstract org.eclipse.persistence.asm.EclipseLinkClassVisitor.visitAnnotation.

Annotations
@Override
visitEndback to summary
public void visitEnd()

Overrides org.eclipse.persistence.asm.ClassVisitor.visitEnd.

Annotations
@Override
visitFieldback to summary
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value)

Overrides org.eclipse.persistence.asm.ClassVisitor.visitField.

Annotations
@Override
visitMethodback to summary
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions)

Overrides org.eclipse.persistence.asm.ClassVisitor.visitMethod.

Annotations
@Override
org.eclipse.persistence.internal.jpa.metadata.accessors.objects back to summary

pack-priv Class MetadataAsmFactory.MetadataAnnotationArrayVisitor

extends EclipseLinkAnnotationVisitor
Class Inheritance

Specialized visitor to handle the population of arrays of annotation values.

Field Summary

Modifier and TypeField and Description
private MetadataAnnotation
private String
private List<Object>

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public void
public AnnotationVisitor
public void
public void
Inherited from org.eclipse.persistence.asm.EclipseLinkAnnotationVisitor:
unwrapvisitArray

Field Detail

annotationback to summary
private MetadataAnnotation annotation
attributeNameback to summary
private String attributeName
valuesback to summary
private List<Object> values

Constructor Detail

MetadataAnnotationArrayVisitorback to summary
public MetadataAnnotationArrayVisitor(MetadataAnnotation annotation, String name)

Method Detail

visitback to summary
public void visit(String name, Object value)

Overrides org.eclipse.persistence.asm.EclipseLinkAnnotationVisitor.visit.

Annotations
@Override
visitAnnotationback to summary
public AnnotationVisitor visitAnnotation(String name, String desc)

Overrides org.eclipse.persistence.asm.EclipseLinkAnnotationVisitor.visitAnnotation.

Annotations
@Override
visitEndback to summary
public void visitEnd()

Overrides org.eclipse.persistence.asm.EclipseLinkAnnotationVisitor.visitEnd.

Annotations
@Override
visitEnumback to summary
public void visitEnum(String name, String desc, String value)

Overrides org.eclipse.persistence.asm.EclipseLinkAnnotationVisitor.visitEnum.

Annotations
@Override
org.eclipse.persistence.internal.jpa.metadata.accessors.objects back to summary

pack-priv Class MetadataAsmFactory.MetadataAnnotationVisitor

extends EclipseLinkAnnotationVisitor
Class Inheritance

AnnotationVisitor used to process class, field , and method annotations populating a MetadataAnnotation and its nested state.
See Also
{@link MetadataAnnotationArrayVisitor} for population of array attributes

Field Summary

Modifier and TypeField and Description
private MetadataAnnotation
private MetadataAnnotatedElement
element

Element the annotation is being applied to.

Constructor Summary

AccessConstructor and Description
pack-priv
pack-priv
MetadataAnnotationVisitor(MetadataAnnotatedElement element, String name, boolean isRegular)

public

Method Summary

Modifier and TypeMethod and Description
public void
public AnnotationVisitor
public AnnotationVisitor
public void
public void
Inherited from org.eclipse.persistence.asm.EclipseLinkAnnotationVisitor:
unwrap

Field Detail

annotationback to summary
private MetadataAnnotation annotation

MetadataAnnotation being populated

elementback to summary
private MetadataAnnotatedElement element

Element the annotation is being applied to. If this is null the MetadataAnnotation being constructed is a nested annotation and is already referenced from its parent.

Constructor Detail

MetadataAnnotationVisitorback to summary
pack-priv MetadataAnnotationVisitor(MetadataAnnotatedElement element, String name)
MetadataAnnotationVisitorback to summary
pack-priv MetadataAnnotationVisitor(MetadataAnnotatedElement element, String name, boolean isRegular)
MetadataAnnotationVisitorback to summary
public MetadataAnnotationVisitor(MetadataAnnotation annotation)

Method Detail

visitback to summary
public void visit(String name, Object value)

Overrides org.eclipse.persistence.asm.EclipseLinkAnnotationVisitor.visit.

Annotations
@Override
visitAnnotationback to summary
public AnnotationVisitor visitAnnotation(String name, String desc)

Overrides org.eclipse.persistence.asm.EclipseLinkAnnotationVisitor.visitAnnotation.

Annotations
@Override
visitArrayback to summary
public AnnotationVisitor visitArray(String name)

Overrides org.eclipse.persistence.asm.EclipseLinkAnnotationVisitor.visitArray.

Annotations
@Override
visitEndback to summary
public void visitEnd()

Overrides org.eclipse.persistence.asm.EclipseLinkAnnotationVisitor.visitEnd.

Annotations
@Override
visitEnumback to summary
public void visitEnum(String name, String desc, String value)

Overrides org.eclipse.persistence.asm.EclipseLinkAnnotationVisitor.visitEnum.

Annotations
@Override
org.eclipse.persistence.internal.jpa.metadata.accessors.objects back to summary

pack-priv Class MetadataAsmFactory.MetadataFieldVisitor

extends EclipseLinkFieldVisitor
Class Inheritance

Factory for the creation of MetadataField handling basic type, generics, and annotations.

Field Summary

Modifier and TypeField and Description
private MetadataField

Constructor Summary

AccessConstructor and Description
public
MetadataFieldVisitor(MetadataClass classMetadata, int access, String name, String desc, String signature, Object value)

Method Summary

Modifier and TypeMethod and Description
public AnnotationVisitor
public void
Inherited from org.eclipse.persistence.asm.EclipseLinkFieldVisitor:
unwrap

Field Detail

fieldback to summary
private MetadataField field

Constructor Detail

MetadataFieldVisitorback to summary
public MetadataFieldVisitor(MetadataClass classMetadata, int access, String name, String desc, String signature, Object value)

Method Detail

visitAnnotationback to summary
public AnnotationVisitor visitAnnotation(String desc, boolean visible)

Overrides org.eclipse.persistence.asm.EclipseLinkFieldVisitor.visitAnnotation.

Annotations
@Override
visitEndback to summary
public void visitEnd()

Overrides org.eclipse.persistence.asm.EclipseLinkFieldVisitor.visitEnd.

Annotations
@Override
org.eclipse.persistence.internal.jpa.metadata.accessors.objects back to summary

pack-priv Class MetadataAsmFactory.MetadataMethodVisitor

extends EclipseLinkMethodVisitor
Class Inheritance

Factory for the creation of MetadataMethod handling basic type, generics, and annotations.

Field Summary

Modifier and TypeField and Description
private MetadataMethod
Inherited from org.eclipse.persistence.asm.EclipseLinkMethodVisitor:
methodVisitor

Constructor Summary

AccessConstructor and Description
public
MetadataMethodVisitor(MetadataClass classMetadata, int access, String name, String desc, String signature, String[] exceptions)

Method Summary

Modifier and TypeMethod and Description
public AnnotationVisitor
public void
public void
visitEnd()

Overrides org.eclipse.persistence.asm.EclipseLinkMethodVisitor.visitEnd.

At the end of visiting this method add it to the MetadataClass and handle duplicate method names by chaining them.
Inherited from org.eclipse.persistence.asm.EclipseLinkMethodVisitor:
unwrapvisitAnnotationSupervisitAttributeSupervisitCodevisitFieldInsnvisitFieldInsnSupervisitFramevisitIincInsnvisitIincInsnSupervisitInsnvisitInsnSupervisitIntInsnvisitIntInsnSupervisitJumpInsnvisitJumpInsnSupervisitLabelvisitLabelSupervisitLdcInsnvisitLdcInsnSupervisitLineNumbervisitLineNumberSupervisitLocalVariablevisitLocalVariableSupervisitLookupSwitchInsnvisitLookupSwitchInsnSupervisitMaxsvisitMaxsSupervisitMethodInsnvisitMethodInsnSupervisitMultiANewArrayInsnvisitMultiANewArrayInsnSupervisitTableSwitchInsnvisitTableSwitchInsnSupervisitTryCatchBlockvisitTryCatchBlockSupervisitTypeInsnvisitTypeInsnSupervisitVarInsnvisitVarInsnSuper

Field Detail

methodback to summary
private MetadataMethod method

Constructor Detail

MetadataMethodVisitorback to summary
public MetadataMethodVisitor(MetadataClass classMetadata, int access, String name, String desc, String signature, String[] exceptions)

Method Detail

visitAnnotationback to summary
public AnnotationVisitor visitAnnotation(String desc, boolean visible)

Overrides org.eclipse.persistence.asm.EclipseLinkMethodVisitor.visitAnnotation.

Annotations
@Override
visitAttributeback to summary
public void visitAttribute(Attribute attr)

Overrides org.eclipse.persistence.asm.EclipseLinkMethodVisitor.visitAttribute.

Annotations
@Override
visitEndback to summary
public void visitEnd()

Overrides org.eclipse.persistence.asm.EclipseLinkMethodVisitor.visitEnd.

At the end of visiting this method add it to the MetadataClass and handle duplicate method names by chaining them.

Annotations
@Override