Package org.jpox.enhancer

Examples of org.jpox.enhancer.ClassField


    protected void initialiseFieldsList()
    {
        if (cmd.getPersistenceCapableSuperclass() == null)
        {
            // Root persistent class fields
            fieldsToAdd.add(new ClassField(this, FN_StateManager, Constants.ACC_PROTECTED | Constants.ACC_TRANSIENT, OT_StateManager));
            fieldsToAdd.add(new ClassField(this, FN_Flag, Constants.ACC_PROTECTED | Constants.ACC_TRANSIENT, OT_Flag));
        }

        if (requiresDetachable())
        {
            // Detachable fields
            fieldsToAdd.add(new ClassField(this, FN_JdoDetachedState, Constants.ACC_PROTECTED, OT_ObjectArray));
        }

        fieldsToAdd.add(new ClassField(this, FN_FieldFlags, Constants.ACC_PRIVATE | Constants.ACC_STATIC | Constants.ACC_FINAL,
                new ArrayType(Type.BYTE, 1)));
        fieldsToAdd.add(new ClassField(this, FN_PersistenceCapableSuperclass,
                Constants.ACC_PRIVATE | Constants.ACC_STATIC | Constants.ACC_FINAL, OT_CLASS));
        fieldsToAdd.add(new ClassField(this, FN_FieldTypes, Constants.ACC_PRIVATE | Constants.ACC_STATIC | Constants.ACC_FINAL,
                new ArrayType(Class.class.getName(), 1)));
        fieldsToAdd.add(new ClassField(this, FN_FieldNames, Constants.ACC_PRIVATE | Constants.ACC_STATIC | Constants.ACC_FINAL,
                new ArrayType(Type.STRING, 1)));
        fieldsToAdd.add(new ClassField(this, FN_JdoInheritedFieldCount, Constants.ACC_PRIVATE | Constants.ACC_STATIC | Constants.ACC_FINAL,
                Type.INT));

        try
        {
            // serialVersionUID if not specified
            if (BCELUtils.isInstanceof(oldClass, Serializable.class) &&
                BCELUtils.getFieldByName(FN_serialVersionUID, newClass) == null)
            {
                fieldsToAdd.add(new ClassField(this, FN_serialVersionUID,
                    Constants.ACC_PRIVATE | Constants.ACC_STATIC | Constants.ACC_FINAL, Type.LONG));
                addSerialVersionUID = new SerialVersionUID().computeSerialVersionUID(oldClass);
            }
        }
        catch (ClassNotFoundException e)
View Full Code Here


     */
    protected void enhanceFields()
    {
        for (int i = 0; i < fieldsToAdd.size(); i++)
        {
            ClassField cf = (ClassField) fieldsToAdd.get(i);

            FieldGen gen = new FieldGen(cf.getAccess(), (Type) cf.getType(), cf.getName(), constantPoolGen);
            Field f = gen.getField();
            newClass.addField(f);
            BCELUtils.addSynthetic(f, constantPoolGen);
            if (JPOXLogger.ENHANCER.isDebugEnabled())
            {
View Full Code Here

            // Add any new fields
            List fields = enhancer.getFieldsList();
            Iterator fieldsIter = fields.iterator();
            while (fieldsIter.hasNext())
            {
                ClassField field = (ClassField)fieldsIter.next();
                if (JPOXLogger.ENHANCER.isDebugEnabled())
                {
                    JPOXLogger.ENHANCER.debug(LOCALISER.msg("Enhancer.AddField",
                        ((Class)field.getType()).getName() + " " + field.getName()));
                }
                cv.visitField(field.getAccess(), field.getName(), Type.getDescriptor((Class)field.getType()), null, null);
            }

            if (!hasStaticInitialisation)
            {
                // Add a static initialisation block for the class since nothing added yet
                InitClass method = InitClass.getInstance(enhancer);
                method.initialise(cv);
                method.execute();
                method.close();
            }

            if (!hasDefaultConstructor)
            {
                // Add a default constructor
                DefaultConstructor ctr = DefaultConstructor.getInstance(enhancer);
                ctr.initialise(cv);
                ctr.execute();
                ctr.close();
            }

            // Add any new methods
            List methods = enhancer.getMethodsList();
            Iterator methodsIter = methods.iterator();
            while (methodsIter.hasNext())
            {
                ASMClassMethod method = (ASMClassMethod)methodsIter.next();

                method.initialise(cv);
                method.execute();
                method.close();
            }

            if (Serializable.class.isAssignableFrom(enhancer.cls))
            {
                // Class is Serializable
                if (!hasSerialVersionUID)
                {
                    // Needs "serialVersionUID" field
                    Long uid = null;
                    try
                    {
                        uid = new Long(ObjectStreamClass.lookup(enhancer.getClassEnhanced()).getSerialVersionUID());
                    }
                    catch (Throwable e)
                    {
                        JPOXLogger.ENHANCER.warn(StringUtils.getStringFromStackTrace(e));
                    }
                    ClassField cf = new ClassField(enhancer, ClassEnhancer.FN_serialVersionUID,
                        Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC | Opcodes.ACC_FINAL, long.class, uid);
                    if (JPOXLogger.ENHANCER.isDebugEnabled())
                    {
                        JPOXLogger.ENHANCER.debug(LOCALISER.msg("Enhancer.AddField",
                            ((Class)cf.getType()).getName() + " " + cf.getName()));
                    }
                    cv.visitField(cf.getAccess(), cf.getName(), Type.getDescriptor((Class)cf.getType()), null, cf.getInitialValue());
                }
                if (!hasWriteObject)
                {
                    ASMClassMethod method = WriteObject.getInstance(enhancer);
                    method.initialise(cv);
View Full Code Here

        {
            // Check for required PersistenceCapable fields/methods
            Iterator fieldsIter = fieldsRequired.iterator();
            while (fieldsIter.hasNext())
            {
                ClassField field = (ClassField)fieldsIter.next();
                reportError(LOCALISER.msg("Enhancer.Check.FieldMissing", enhancer.className, field.getName()));
            }

            Iterator methodsIter = methodsRequired.iterator();
            while (methodsIter.hasNext())
            {
View Full Code Here

    public FieldVisitor visitField(int access, String name, String desc, String signature, Object value)
    {
        Iterator iter = fieldsRequired.iterator();
        while (iter.hasNext())
        {
            ClassField field = (ClassField)iter.next();
            if (field.getName().equals(name))
            {
                if (field.getAccess() != access)
                {
                    reportError(LOCALISER.msg("Enhancer.Check.FieldIncorrectAccess", enhancer.className, name));
                }
                else if (!desc.equals(Type.getDescriptor((Class)field.getType())))
                {
                    reportError(LOCALISER.msg("Enhancer.Check.FieldIncorrectType", enhancer.className, name));
                }
                else
                {
View Full Code Here

    protected void initialiseFieldsList()
    {
        if (cmd.getPersistenceCapableSuperclass() == null)
        {
            // Root persistent class fields
            fieldsToAdd.add(new ClassField(this, FN_StateManager,
                Opcodes.ACC_PROTECTED | Opcodes.ACC_TRANSIENT, javax.jdo.spi.StateManager.class));
            fieldsToAdd.add(new ClassField(this, FN_Flag,
                Opcodes.ACC_PROTECTED | Opcodes.ACC_TRANSIENT, byte.class));
        }

        if (requiresDetachable())
        {
            // Detachable fields
            fieldsToAdd.add(new ClassField(this, FN_JdoDetachedState,
                Opcodes.ACC_PROTECTED, Object[].class));
        }

        fieldsToAdd.add(new ClassField(this, FN_FieldFlags,
            Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC | Opcodes.ACC_FINAL, byte[].class));
        fieldsToAdd.add(new ClassField(this, FN_PersistenceCapableSuperclass,
            Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC | Opcodes.ACC_FINAL, Class.class));
        fieldsToAdd.add(new ClassField(this, FN_FieldTypes,
            Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC | Opcodes.ACC_FINAL, Class[].class));
        fieldsToAdd.add(new ClassField(this, FN_FieldNames,
            Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC | Opcodes.ACC_FINAL, String[].class));
        fieldsToAdd.add(new ClassField(this, FN_JdoInheritedFieldCount,
            Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC | Opcodes.ACC_FINAL, int.class));
    }
View Full Code Here

TOP

Related Classes of org.jpox.enhancer.ClassField

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.