Search in sources :

Example 1 with EclipseLinkASMClassWriter

use of org.eclipse.persistence.internal.libraries.asm.EclipseLinkASMClassWriter in project eclipselink by eclipse-ee4j.

the class RestAdapterClassWriter method writeClass.

@Override
public byte[] writeClass(DynamicClassLoader loader, String className) throws ClassNotFoundException {
    EclipseLinkASMClassWriter cw = new EclipseLinkASMClassWriter(0);
    cw.visit(ACC_PUBLIC + ACC_SUPER, getASMClassName(), "L" + REFERENCE_ADAPTER_SHORT_SIGNATURE + "<L" + getASMParentClassName() + ";>;", REFERENCE_ADAPTER_SHORT_SIGNATURE, null);
    MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
    mv.visitCode();
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, REFERENCE_ADAPTER_SHORT_SIGNATURE, "<init>", "()V", false);
    mv.visitInsn(RETURN);
    mv.visitMaxs(1, 1);
    mv.visitEnd();
    mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(Ljava/lang/String;Lorg/eclipse/persistence/jpa/rs/PersistenceContext;)V", null, null);
    mv.visitCode();
    mv.visitVarInsn(ALOAD, 0);
    mv.visitVarInsn(ALOAD, 1);
    mv.visitVarInsn(ALOAD, 2);
    mv.visitMethodInsn(INVOKESPECIAL, REFERENCE_ADAPTER_SHORT_SIGNATURE, "<init>", "(Ljava/lang/String;Lorg/eclipse/persistence/jpa/rs/PersistenceContext;)V", false);
    mv.visitInsn(RETURN);
    mv.visitMaxs(3, 3);
    mv.visitEnd();
    cw.visitEnd();
    return cw.toByteArray();
}
Also used : EclipseLinkASMClassWriter(org.eclipse.persistence.internal.libraries.asm.EclipseLinkASMClassWriter) MethodVisitor(org.eclipse.persistence.internal.libraries.asm.MethodVisitor)

Example 2 with EclipseLinkASMClassWriter

use of org.eclipse.persistence.internal.libraries.asm.EclipseLinkASMClassWriter in project eclipselink by eclipse-ee4j.

the class RestCollectionAdapterClassWriter method writeClass.

/**
 * public class _EntityRestCollectionAdapter extends RestCollectionAdapter&lt;Entity&gt; {
 *     public _EntityRestCollectionAdapter() {
 *         super();
 *     }
 *
 *     public _EntityRestCollectionAdapter(PersistentContext context) {
 *         super(context);
 *     }
 * }
 */
@Override
public byte[] writeClass(DynamicClassLoader loader, String className) throws ClassNotFoundException {
    // Class signature
    final EclipseLinkASMClassWriter cw = new EclipseLinkASMClassWriter(0);
    cw.visit(ACC_PUBLIC + ACC_SUPER, getASMClassName(), "L" + REFERENCE_ADAPTER_SHORT_SIGNATURE + "<L" + getASMParentClassName() + ";>;", REFERENCE_ADAPTER_SHORT_SIGNATURE, null);
    // Default constructor
    MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
    mv.visitCode();
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, REFERENCE_ADAPTER_SHORT_SIGNATURE, "<init>", "()V", false);
    mv.visitInsn(RETURN);
    mv.visitMaxs(1, 1);
    mv.visitEnd();
    // Another constructor
    mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(Lorg/eclipse/persistence/jpa/rs/PersistenceContext;)V", null, null);
    mv.visitCode();
    mv.visitVarInsn(ALOAD, 0);
    mv.visitVarInsn(ALOAD, 1);
    mv.visitMethodInsn(INVOKESPECIAL, REFERENCE_ADAPTER_SHORT_SIGNATURE, "<init>", "(Lorg/eclipse/persistence/jpa/rs/PersistenceContext;)V", false);
    mv.visitInsn(RETURN);
    mv.visitMaxs(2, 2);
    mv.visitEnd();
    return cw.toByteArray();
}
Also used : EclipseLinkASMClassWriter(org.eclipse.persistence.internal.libraries.asm.EclipseLinkASMClassWriter) MethodVisitor(org.eclipse.persistence.internal.libraries.asm.MethodVisitor)

Example 3 with EclipseLinkASMClassWriter

use of org.eclipse.persistence.internal.libraries.asm.EclipseLinkASMClassWriter in project eclipselink by eclipse-ee4j.

the class MappingsGenerator method generateMapEntryClass.

private Class<?> generateMapEntryClass(String className, String keyType, String valueType) {
    EclipseLinkASMClassWriter cw = new EclipseLinkASMClassWriter();
    String qualifiedInternalClassName = className.replace('.', '/');
    String qualifiedInternalKeyClassName = keyType.replace('.', '/');
    String qualifiedInternalValueClassName = valueType.replace('.', '/');
    // non-array type
    String valuePrefix = "L";
    if (qualifiedInternalValueClassName.startsWith("[L") && qualifiedInternalValueClassName.endsWith(";")) {
        // array type
        valuePrefix = "[L";
        qualifiedInternalValueClassName = qualifiedInternalValueClassName.substring(2, qualifiedInternalValueClassName.length() - 1);
    }
    String sig = "Ljava/lang/Object;Lorg/eclipse/persistence/internal/jaxb/many/MapEntry<L" + qualifiedInternalKeyClassName + ";" + valuePrefix + qualifiedInternalValueClassName + ";>;";
    cw.visit(Opcodes.ACC_PUBLIC + Opcodes.ACC_SUPER, qualifiedInternalClassName, sig, "java/lang/Object", new String[] { "org/eclipse/persistence/internal/jaxb/many/MapEntry" });
    cw.visitField(Opcodes.ACC_PRIVATE, "key", "L" + qualifiedInternalKeyClassName + ";", null, null);
    cw.visitField(Opcodes.ACC_PRIVATE, "value", valuePrefix + qualifiedInternalValueClassName + ";", null, null);
    MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null);
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
    mv.visitInsn(Opcodes.RETURN);
    mv.visitMaxs(1, 1);
    mv.visitEnd();
    mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "getKey", "()L" + qualifiedInternalKeyClassName + ";", null, null);
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitFieldInsn(Opcodes.GETFIELD, qualifiedInternalClassName, "key", "L" + qualifiedInternalKeyClassName + ";");
    mv.visitInsn(Opcodes.ARETURN);
    mv.visitMaxs(1, 1);
    mv.visitEnd();
    mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "setKey", "(L" + qualifiedInternalKeyClassName + ";)V", null, null);
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitVarInsn(Opcodes.ALOAD, 1);
    mv.visitFieldInsn(Opcodes.PUTFIELD, qualifiedInternalClassName, "key", "L" + qualifiedInternalKeyClassName + ";");
    mv.visitInsn(Opcodes.RETURN);
    mv.visitMaxs(2, 2);
    mv.visitEnd();
    mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "getValue", "()" + valuePrefix + qualifiedInternalValueClassName + ";", null, null);
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitFieldInsn(Opcodes.GETFIELD, qualifiedInternalClassName, "value", valuePrefix + qualifiedInternalValueClassName + ";");
    mv.visitInsn(Opcodes.ARETURN);
    mv.visitMaxs(1, 1);
    mv.visitEnd();
    mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "setValue", "(" + valuePrefix + qualifiedInternalValueClassName + ";)V", null, null);
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitVarInsn(Opcodes.ALOAD, 1);
    mv.visitFieldInsn(Opcodes.PUTFIELD, qualifiedInternalClassName, "value", valuePrefix + qualifiedInternalValueClassName + ";");
    mv.visitInsn(Opcodes.RETURN);
    mv.visitMaxs(2, 2);
    mv.visitEnd();
    if (!qualifiedInternalValueClassName.equals("java/lang/Object")) {
        mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_BRIDGE + Opcodes.ACC_SYNTHETIC, "getValue", "()Ljava/lang/Object;", null, null);
        mv.visitVarInsn(Opcodes.ALOAD, 0);
        mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, qualifiedInternalClassName, "getValue", "()" + valuePrefix + qualifiedInternalValueClassName + ";", false);
        mv.visitInsn(Opcodes.ARETURN);
        mv.visitMaxs(1, 1);
        mv.visitEnd();
        mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_BRIDGE + Opcodes.ACC_SYNTHETIC, "setValue", "(Ljava/lang/Object;)V", null, null);
        mv.visitVarInsn(Opcodes.ALOAD, 0);
        mv.visitVarInsn(Opcodes.ALOAD, 1);
        // CHECKCAST is slightly different for array types
        if (valuePrefix.equals("[L")) {
            mv.visitTypeInsn(Opcodes.CHECKCAST, valuePrefix + qualifiedInternalValueClassName + ";");
        } else {
            mv.visitTypeInsn(Opcodes.CHECKCAST, qualifiedInternalValueClassName);
        }
        mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, qualifiedInternalClassName, "setValue", "(" + valuePrefix + qualifiedInternalValueClassName + ";)V", false);
        mv.visitInsn(Opcodes.RETURN);
        mv.visitMaxs(2, 2);
        mv.visitEnd();
    }
    if (!qualifiedInternalKeyClassName.equals("java/lang/Object")) {
        mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_BRIDGE + Opcodes.ACC_SYNTHETIC, "getKey", "()Ljava/lang/Object;", null, null);
        mv.visitVarInsn(Opcodes.ALOAD, 0);
        mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, qualifiedInternalClassName, "getKey", "()L" + qualifiedInternalKeyClassName + ";", false);
        mv.visitInsn(Opcodes.ARETURN);
        mv.visitMaxs(1, 1);
        mv.visitEnd();
        mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_BRIDGE + Opcodes.ACC_SYNTHETIC, "setKey", "(Ljava/lang/Object;)V", null, null);
        mv.visitVarInsn(Opcodes.ALOAD, 0);
        mv.visitVarInsn(Opcodes.ALOAD, 1);
        mv.visitTypeInsn(Opcodes.CHECKCAST, qualifiedInternalKeyClassName);
        mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, qualifiedInternalClassName, "setKey", "(L" + qualifiedInternalKeyClassName + ";)V", false);
        mv.visitInsn(Opcodes.RETURN);
        mv.visitMaxs(2, 2);
        mv.visitEnd();
    }
    cw.visitEnd();
    byte[] classBytes = cw.toByteArray();
    Class<?> generatedClass = getJaxbClassLoader().generateClass(className, classBytes);
    return generatedClass;
}
Also used : EclipseLinkASMClassWriter(org.eclipse.persistence.internal.libraries.asm.EclipseLinkASMClassWriter) MethodVisitor(org.eclipse.persistence.internal.libraries.asm.MethodVisitor)

Example 4 with EclipseLinkASMClassWriter

use of org.eclipse.persistence.internal.libraries.asm.EclipseLinkASMClassWriter in project eclipselink by eclipse-ee4j.

the class AnnotationsProcessor method generateWrapperForMapClass.

private Class<?> generateWrapperForMapClass(JavaClass mapClass, JavaClass keyClass, JavaClass valueClass, TypeMappingInfo typeMappingInfo) {
    String packageName = JAXB_DEV;
    NamespaceResolver combinedNamespaceResolver = new NamespaceResolver();
    if (!helper.isBuiltInJavaType(keyClass)) {
        String keyPackageName = keyClass.getPackageName();
        packageName = packageName + DOT_CHR + keyPackageName;
        NamespaceInfo keyNamespaceInfo = getPackageInfoForPackage(keyClass).getNamespaceInfo();
        if (keyNamespaceInfo != null) {
            java.util.Vector<Namespace> namespaces = keyNamespaceInfo.getNamespaceResolver().getNamespaces();
            for (Namespace n : namespaces) {
                combinedNamespaceResolver.put(n.getPrefix(), n.getNamespaceURI());
            }
        }
    }
    if (!helper.isBuiltInJavaType(valueClass)) {
        String valuePackageName = valueClass.getPackageName();
        packageName = packageName + DOT_CHR + valuePackageName;
        NamespaceInfo valueNamespaceInfo = getPackageInfoForPackage(valueClass).getNamespaceInfo();
        if (valueNamespaceInfo != null) {
            java.util.Vector<Namespace> namespaces = valueNamespaceInfo.getNamespaceResolver().getNamespaces();
            for (Namespace n : namespaces) {
                combinedNamespaceResolver.put(n.getPrefix(), n.getNamespaceURI());
            }
        }
    }
    String namespace = this.defaultTargetNamespace;
    if (namespace == null) {
        namespace = EMPTY_STRING;
    }
    PackageInfo packageInfo = packageToPackageInfoMappings.get(mapClass.getPackageName());
    if (packageInfo == null) {
        packageInfo = getPackageToPackageInfoMappings().get(packageName);
    } else {
        if (packageInfo.getNamespace() != null) {
            namespace = packageInfo.getNamespace();
        }
        getPackageToPackageInfoMappings().put(packageName, packageInfo);
    }
    if (packageInfo == null) {
        packageInfo = new PackageInfo();
        packageInfo.setNamespaceInfo(new NamespaceInfo());
        packageInfo.setNamespace(namespace);
        packageInfo.setNamespaceResolver(combinedNamespaceResolver);
        getPackageToPackageInfoMappings().put(packageName, packageInfo);
    }
    int beginIndex = keyClass.getName().lastIndexOf(DOT_CHR) + 1;
    String keyName = keyClass.getName().substring(beginIndex);
    int dollarIndex = keyName.indexOf(DOLLAR_SIGN_CHR);
    if (dollarIndex > -1) {
        keyName = keyName.substring(dollarIndex + 1);
    }
    beginIndex = valueClass.getName().lastIndexOf(DOT_CHR) + 1;
    String valueName = valueClass.getName().substring(beginIndex);
    dollarIndex = valueName.indexOf(DOLLAR_SIGN_CHR);
    if (dollarIndex > -1) {
        valueName = valueName.substring(dollarIndex + 1);
    }
    String collectionClassShortName = mapClass.getRawName().substring(mapClass.getRawName().lastIndexOf(DOT_CHR) + 1);
    String suggestedClassName = keyName + valueName + collectionClassShortName;
    String qualifiedClassName = packageName + DOT_CHR + suggestedClassName;
    qualifiedClassName = getNextAvailableClassName(qualifiedClassName);
    String qualifiedInternalClassName = qualifiedClassName.replace(DOT_CHR, SLASH_CHR);
    String internalKeyName = keyClass.getQualifiedName().replace(DOT_CHR, SLASH_CHR);
    String internalValueName = valueClass.getQualifiedName().replace(DOT_CHR, SLASH_CHR);
    Type mapType = Type.getType(L + mapClass.getRawName().replace(DOT_CHR, SLASH_CHR) + SEMI_COLON);
    EclipseLinkASMClassWriter cw = new EclipseLinkASMClassWriter();
    String sig = "Lorg/eclipse/persistence/internal/jaxb/many/MapValue<L" + mapType.getInternalName() + "<L" + internalKeyName + ";L" + internalValueName + ";>;>;";
    cw.visit(Opcodes.ACC_PUBLIC + Opcodes.ACC_SUPER, qualifiedInternalClassName, sig, "org/eclipse/persistence/internal/jaxb/many/MapValue", null);
    // Write Field: @... public Map entry
    String fieldSig = L + mapType.getInternalName() + "<L" + internalKeyName + ";L" + internalValueName + ";>;";
    FieldVisitor fv = cw.visitField(Opcodes.ACC_PUBLIC, "entry", L + mapType.getInternalName() + SEMI_COLON, fieldSig, null);
    fv.visitAnnotation(Type.getDescriptor(XmlElement.class), true);
    if (typeMappingInfo != null) {
        Annotation[] annotations = typeMappingInfo.getAnnotations();
        if (annotations != null) {
            for (Annotation nextAnnotation : annotations) {
                if (nextAnnotation != null && !(nextAnnotation instanceof XmlElement) && !(nextAnnotation instanceof XmlJavaTypeAdapter)) {
                    String annotationClassName = nextAnnotation.annotationType().getName();
                    AnnotationVisitor av = fv.visitAnnotation(L + annotationClassName.replace(DOT_CHR, SLASH_CHR) + SEMI_COLON, true);
                    for (Method next : nextAnnotation.annotationType().getDeclaredMethods()) {
                        try {
                            Object nextValue = next.invoke(nextAnnotation);
                            if (nextValue instanceof Class) {
                                Type nextType = Type.getType(L + ((Class) nextValue).getName().replace(DOT_CHR, SLASH_CHR) + SEMI_COLON);
                                nextValue = nextType;
                            }
                            av.visit(next.getName(), nextValue);
                        } catch (InvocationTargetException ignored) {
                        // ignore the invocation target exception here.
                        } catch (IllegalAccessException ignored) {
                        // ignore the illegal access exception here.
                        }
                    }
                    av.visitEnd();
                }
            }
        }
    }
    fv.visitEnd();
    MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null);
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "org/eclipse/persistence/internal/jaxb/many/MapValue", "<init>", "()V", false);
    mv.visitInsn(Opcodes.RETURN);
    mv.visitMaxs(1, 1);
    mv.visitEnd();
    // Write: @XmlTransient public void setItem(???)
    String methodSig = "(L" + mapType.getInternalName() + "<L" + internalKeyName + ";L" + internalValueName + ";>;)V";
    mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "setItem", "(L" + mapType.getInternalName() + ";)V", methodSig, null);
    // TODO: Verify that we really want to put @XmlTranient on setItem
    // method
    mv.visitAnnotation("Ljakarta/xml/bind/annotation/XmlTransient;", true);
    Label l0 = new Label();
    mv.visitLabel(l0);
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitVarInsn(Opcodes.ALOAD, 1);
    mv.visitFieldInsn(Opcodes.PUTFIELD, qualifiedInternalClassName, "entry", L + mapType.getInternalName() + SEMI_COLON);
    mv.visitInsn(Opcodes.RETURN);
    Label l1 = new Label();
    mv.visitLabel(l1);
    // Replacement?:LocalVariableTypeTableAttribute cvAttr = new
    // LocalVariableTypeTableAttribute();
    // mv.visitAttribute(cvAttr);
    mv.visitMaxs(2, 2);
    mv.visitEnd();
    // Write @XmlTransient public ??? getItem()
    methodSig = "()L" + mapType.getInternalName() + "<L" + internalKeyName + ";L" + internalValueName + ";>;";
    mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "getItem", "()L" + mapType.getInternalName() + SEMI_COLON, methodSig, null);
    mv.visitAnnotation("Ljakarta/xml/bind/annotation/XmlTransient;", true);
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitFieldInsn(Opcodes.GETFIELD, qualifiedInternalClassName, "entry", L + mapType.getInternalName() + SEMI_COLON);
    mv.visitInsn(Opcodes.ARETURN);
    mv.visitMaxs(1, 1);
    mv.visitEnd();
    mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_BRIDGE + Opcodes.ACC_SYNTHETIC, "getItem", "()Ljava/lang/Object;", null, null);
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, qualifiedInternalClassName, "getItem", "()L" + mapType.getInternalName() + SEMI_COLON, false);
    mv.visitInsn(Opcodes.ARETURN);
    mv.visitMaxs(1, 1);
    mv.visitEnd();
    mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_BRIDGE + Opcodes.ACC_SYNTHETIC, "setItem", "(Ljava/lang/Object;)V", null, null);
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitVarInsn(Opcodes.ALOAD, 1);
    mv.visitTypeInsn(Opcodes.CHECKCAST, mapType.getInternalName());
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, qualifiedInternalClassName, "setItem", "(L" + mapType.getInternalName() + ";)V", false);
    mv.visitInsn(Opcodes.RETURN);
    mv.visitMaxs(2, 2);
    mv.visitEnd();
    // Write @XmlType(namespace)
    AnnotationVisitor av = cw.visitAnnotation("Ljakarta/xml/bind/annotation/XmlType;", true);
    av.visit("namespace", namespace);
    cw.visitEnd();
    byte[] classBytes = cw.toByteArray();
    return generateClassFromBytes(qualifiedClassName, classBytes);
}
Also used : XmlJavaTypeAdapter(jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter) Label(org.eclipse.persistence.internal.libraries.asm.Label) EclipseLinkASMClassWriter(org.eclipse.persistence.internal.libraries.asm.EclipseLinkASMClassWriter) Method(java.lang.reflect.Method) JavaMethod(org.eclipse.persistence.jaxb.javamodel.JavaMethod) FieldVisitor(org.eclipse.persistence.internal.libraries.asm.FieldVisitor) Namespace(org.eclipse.persistence.internal.oxm.Namespace) JavaAnnotation(org.eclipse.persistence.jaxb.javamodel.JavaAnnotation) Annotation(java.lang.annotation.Annotation) InvocationTargetException(java.lang.reflect.InvocationTargetException) MethodVisitor(org.eclipse.persistence.internal.libraries.asm.MethodVisitor) Type(org.eclipse.persistence.internal.libraries.asm.Type) XmlType(jakarta.xml.bind.annotation.XmlType) XmlAccessorType(jakarta.xml.bind.annotation.XmlAccessorType) ParameterizedType(java.lang.reflect.ParameterizedType) XmlMimeType(jakarta.xml.bind.annotation.XmlMimeType) XmlAccessType(org.eclipse.persistence.jaxb.xmlmodel.XmlAccessType) XmlSchemaType(jakarta.xml.bind.annotation.XmlSchemaType) AnnotationVisitor(org.eclipse.persistence.internal.libraries.asm.AnnotationVisitor) NamespaceResolver(org.eclipse.persistence.oxm.NamespaceResolver) XmlElement(jakarta.xml.bind.annotation.XmlElement) JavaClass(org.eclipse.persistence.jaxb.javamodel.JavaClass)

Example 5 with EclipseLinkASMClassWriter

use of org.eclipse.persistence.internal.libraries.asm.EclipseLinkASMClassWriter in project eclipselink by eclipse-ee4j.

the class AnnotationsProcessor method generateMultiDimensionalManyValueClass.

private byte[] generateMultiDimensionalManyValueClass(TypeMappingInfo typeMappingInfo, String namespace, Class<?> superType, String classNameSeparatedBySlash, JavaClass componentType, JavaClass containerType) {
    EclipseLinkASMClassWriter cw = new EclipseLinkASMClassWriter();
    generateManyValueClass(cw, typeMappingInfo, namespace, superType, classNameSeparatedBySlash, componentType, containerType);
    generateMultiDimensionalManyValueClass(cw, componentType);
    cw.visitEnd();
    return cw.toByteArray();
}
Also used : EclipseLinkASMClassWriter(org.eclipse.persistence.internal.libraries.asm.EclipseLinkASMClassWriter)

Aggregations

EclipseLinkASMClassWriter (org.eclipse.persistence.internal.libraries.asm.EclipseLinkASMClassWriter)15 MethodVisitor (org.eclipse.persistence.internal.libraries.asm.MethodVisitor)12 AnnotationVisitor (org.eclipse.persistence.internal.libraries.asm.AnnotationVisitor)2 FieldVisitor (org.eclipse.persistence.internal.libraries.asm.FieldVisitor)2 Label (org.eclipse.persistence.internal.libraries.asm.Label)2 XmlAccessorType (jakarta.xml.bind.annotation.XmlAccessorType)1 XmlElement (jakarta.xml.bind.annotation.XmlElement)1 XmlMimeType (jakarta.xml.bind.annotation.XmlMimeType)1 XmlSchemaType (jakarta.xml.bind.annotation.XmlSchemaType)1 XmlType (jakarta.xml.bind.annotation.XmlType)1 XmlJavaTypeAdapter (jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter)1 Annotation (java.lang.annotation.Annotation)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Method (java.lang.reflect.Method)1 ParameterizedType (java.lang.reflect.ParameterizedType)1 EnumInfo (org.eclipse.persistence.dynamic.DynamicClassLoader.EnumInfo)1 JaxbClassLoader (org.eclipse.persistence.internal.jaxb.JaxbClassLoader)1 WrappedValue (org.eclipse.persistence.internal.jaxb.WrappedValue)1 Type (org.eclipse.persistence.internal.libraries.asm.Type)1 Namespace (org.eclipse.persistence.internal.oxm.Namespace)1