Package org.jibx.binding.classes

Examples of org.jibx.binding.classes.BranchWrapper


            ClassFile cf = bndclas.getMungedFile();
            ExceptionMethodBuilder smeth = new ExceptionMethodBuilder
                (CUSTOM_ENUM_SERIALIZER_NAME, sersig, cf,
                Constants.ACC_PUBLIC | Constants.ACC_STATIC);
            smeth.appendLoadLocal(0);
            BranchWrapper nonnull = smeth.appendIFNONNULL(smeth);
            smeth.appendACONST_NULL();
            smeth.appendReturn("java.lang.String");
            smeth.targetNext(nonnull);
            smeth.appendLoadLocal(0);
            smeth.appendCallVirtual(evfull, "()Ljava/lang/String;");
            smeth.appendReturn("java.lang.String");
            bndclas.getUniqueNamed(smeth);
           
            // create the deserializer method
            ExceptionMethodBuilder dmeth = new ExceptionMethodBuilder
                (CUSTOM_ENUM_DESERIALIZER_NAME, dsersig, cf,
                Constants.ACC_PUBLIC | Constants.ACC_STATIC);
            dmeth.addException(MethodBuilder.FRAMEWORK_EXCEPTION_CLASS);
           
            // start by handling the null string case
            dmeth.appendLoadLocal(0);
            nonnull = dmeth.appendIFNONNULL(dmeth);
            dmeth.appendACONST_NULL();
            dmeth.appendReturn(type);
            dmeth.targetNext(nonnull);
           
            // set up locals for array of values and decrementing index
            dmeth.appendCallStatic(type + ".values", "()[" + typesig);
            dmeth.appendDUP();
            int arraylocal = dmeth.addLocal("values",
                ClassItem.typeFromName(type + "[]"));
            dmeth.appendARRAYLENGTH();
            int arrayindex = dmeth.addLocal("index",
                ClassItem.typeFromName("int"));
           
            // start comparison loop with check for off bottom of array
            BranchTarget start = dmeth.appendTargetNOP();
            dmeth.appendIncrementLocal(-1, arrayindex);
            dmeth.appendLoadLocal(arrayindex);
            BranchWrapper loadnext = dmeth.appendIFGE(dmeth);
           
            // throw an exception for value not found
            dmeth.appendCreateNew("java.lang.StringBuffer");
            dmeth.appendDUP();
            dmeth.appendLoadConstant("No match found for value '");
            dmeth.appendCallInit("java.lang.StringBuffer",
                "(Ljava/lang/String;)V");
            dmeth.appendLoadLocal(0);
            dmeth.appendCallVirtual("java.lang.StringBuffer.append",
                "(Ljava/lang/String;)Ljava/lang/StringBuffer;");
            dmeth.appendLoadConstant("' in enum class " + type);
            dmeth.appendCallVirtual("java.lang.StringBuffer.append",
                "(Ljava/lang/String;)Ljava/lang/StringBuffer;");
            dmeth.appendCallVirtual("java.lang.StringBuffer.toString",
                "()Ljava/lang/String;");
            dmeth.appendCreateNew(MethodBuilder.FRAMEWORK_EXCEPTION_CLASS);
            dmeth.appendDUP_X1();
            dmeth.appendSWAP();
            dmeth.appendCallInit(MethodBuilder.FRAMEWORK_EXCEPTION_CLASS,
                MethodBuilder.EXCEPTION_CONSTRUCTOR_SIGNATURE1);
            dmeth.appendThrow();
           
            // load and compare the value
            dmeth.targetNext(loadnext);
            dmeth.appendLoadLocal(0);
            dmeth.appendLoadLocal(arraylocal);
            dmeth.appendLoadLocal(arrayindex);
            dmeth.appendALOAD(type);
            dmeth.appendCallVirtual(evfull, "()Ljava/lang/String;");
            dmeth.appendCallVirtual("java.lang.Object.equals",
                "(Ljava/lang/Object;)Z");
            BranchWrapper tonext = dmeth.appendIFEQ(dmeth);
            tonext.setTarget(start, dmeth);
           
            // return the matching instance
            dmeth.appendLoadLocal(arraylocal);
            dmeth.appendLoadLocal(arrayindex);
            dmeth.appendALOAD(type);
View Full Code Here


        mb.appendCallVirtual("java.lang.Class.getName", "()Ljava/lang/String;");
        mb.appendCallInterface(GETMARSHALLER_METHOD, GETMARSHALLER_SIGNATURE);
        mb.appendDUP();
        mb.appendLoadConstant(getMappingName());
        mb.appendCallInterface(CHECKEXTENDS_FULLNAME, CHECKEXTENDS_SIGNATURE);
        BranchWrapper ifvalid = mb.appendIFNE(this);
        
        // generate and throw exception describing the problem
        mb.appendCreateNew("java.lang.StringBuffer");
        mb.appendDUP();
        mb.appendLoadConstant("Mapping for type ");
View Full Code Here

       
        // first part of generated code just checks if an object has
        //  been supplied; if it has, this can just go direct to
        //  unmarshalling
        mb.loadObject();
        BranchWrapper ifnnull = mb.appendIFNONNULL(this);
       
        // check for extension mapping handling required
        if (m_extensions != null) {
           
            // generate name comparison unless an abstract mapping
            BranchWrapper ifthis = null;
            if (hasname) {
               
                // test if at defined element name
                mb.addException(MethodBuilder.FRAMEWORK_EXCEPTION_CLASS);
                mb.loadContext();
View Full Code Here

       
        // check for extension mapping handling required
        if (m_extensions != null) {
           
            // return immediately if this mapping name check successful
            BranchWrapper ifthis = null;
            if (hasname) {
                ifthis = mb.appendIFNE(this);
            }
           
            // build code to check each extension mapping in turn;
            //  return "true" if one matches, or "false" if none do
            mb.addException(MethodBuilder.FRAMEWORK_EXCEPTION_CLASS);
            BranchWrapper[] iffounds =
                new BranchWrapper[m_extensions.size()];
            for (int i = 0; i < iffounds.length; i++) {
                IMapping map = (IMapping)m_extensions.get(i);
                mb.loadContext();
                mb.appendLoadConstant(map.getMappingName());
                mb.appendCallInterface(GETUNMARSHALLER_METHOD,
                    GETUNMARSHALLER_SIGNATURE);
                mb.loadContext();
                mb.appendCallInterface(UNMARSHALLERPRESENT_METHOD,
                    UNMARSHALLERPRESENT_SIGNATURE);
                iffounds[i] = mb.appendIFNE(this);
            }
            mb.appendICONST_0();
            mb.appendReturn("int");
            mb.initStackState(iffounds[0]);
            BranchTarget found = mb.appendTargetLoadConstant(1);
            if (ifthis != null) {
                ifthis.setTarget(found, mb);
            }
            for (int i = 0; i < iffounds.length; i++) {
                iffounds[i].setTarget(found, mb);
            }
           
View Full Code Here

                    if (index >= 0) {
                        mb.appendLoadLocal(1);
                        mb.appendLoadConstant((String)tnames.get(i));
                        mb.appendCallVirtual("java.lang.String.equals",
                            "(Ljava/lang/Object;)Z");
                        BranchWrapper onfail = mb.appendIFEQ(this);
                        mb.appendLoadConstant(index);
                        mb.appendReturn(Type.INT);
                        mb.targetNext(onfail);
                    }
                }
                mb.appendLoadConstant(-1);
               
            } else {
               
                // use map constructed in initializer
                mb.appendLoadLocal(0);
                mb.appendGetField(tmap);
                mb.appendLoadLocal(1);
                mb.appendCallVirtual(STRINGINTGET_METHOD,
                    STRINGINTGET_SIGNATURE);
               
            }
        } else {
           
            // no types to handle, just always return failure
            mb.appendLoadConstant(-1);
           
        }
        mb.appendReturn(Type.INT);
        mb.codeComplete(false);
        mb.addMethod();
       
        // finish with instance creation method
        mb = new ExceptionMethodBuilder(GETINST_METHODNAME,
            ClassItem.typeFromName(FACTORY_INTERFACE), new Type[0], cf,
            (short)(Constants.ACC_PUBLIC | Constants.ACC_STATIC));
        mb.appendGetStatic(inst);
        BranchWrapper ifdone = mb.appendIFNONNULL(this);
        mb.appendCreateNew(cf.getName());
        mb.appendDUP();
        mb.appendCallInit(cf.getName(), "()V");
        mb.appendPutStatic(inst);
        mb.targetNext(ifdone);
View Full Code Here

                Constants.ACC_PUBLIC|Constants.ACC_STATIC, 0,
                m_class.getClassName(), 1, UNMARSHALLING_CONTEXT);
           
            // check if actually need to create a new instance
            mb.loadObject();
            BranchWrapper haveinst = mb.appendIFNONNULL(this);
           
            // check for factory supplied to create instance
            boolean haveobj = true;
            if (m_factoryMethod == null) {
                if (m_createClass.isArray()) {
View Full Code Here

TOP

Related Classes of org.jibx.binding.classes.BranchWrapper

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.