当前位置: 首页>>代码示例>>Java>>正文


Java Bytecode.add方法代码示例

本文整理汇总了Java中scouter.javassist.bytecode.Bytecode.add方法的典型用法代码示例。如果您正苦于以下问题:Java Bytecode.add方法的具体用法?Java Bytecode.add怎么用?Java Bytecode.add使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在scouter.javassist.bytecode.Bytecode的用法示例。


在下文中一共展示了Bytecode.add方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: defaultConstructor

import scouter.javassist.bytecode.Bytecode; //导入方法依赖的package包/类
/**
 * Creates a default (public) constructor.
 *
 * <p>The created constructor takes no parameter.  It calls
 * <code>super()</code>.
 */
public static CtConstructor defaultConstructor(CtClass declaring)
    throws CannotCompileException
{
    CtConstructor cons = new CtConstructor((CtClass[])null, declaring);

    ConstPool cp = declaring.getClassFile2().getConstPool();
    Bytecode code = new Bytecode(cp, 1, 1);
    code.addAload(0);
    try {
        code.addInvokespecial(declaring.getSuperclass(),
                              "<init>", "()V");
    }
    catch (NotFoundException e) {
        throw new CannotCompileException(e);
    }

    code.add(Bytecode.RETURN);

    // no need to construct a stack map table.
    cons.getMethodInfo2().setCodeAttribute(code.toCodeAttribute());
    return cons;
}
 
开发者ID:scouter-project,项目名称:bytescope,代码行数:29,代码来源:CtNewConstructor.java

示例2: compile

import scouter.javassist.bytecode.Bytecode; //导入方法依赖的package包/类
/**
 * Produces codes in which a new object is created and assigned to
 * the field as the initial value.
 */
int compile(CtClass type, String name, Bytecode code,
            CtClass[] parameters, Javac drv)
    throws CannotCompileException
{
    int stacksize;

    code.addAload(0);
    code.addNew(objectType);
    code.add(Bytecode.DUP);
    code.addAload(0);

    if (stringParams == null)
        stacksize = 4;
    else
        stacksize = compileStringParameter(code) + 4;

    if (withConstructorParams)
        stacksize += CtNewWrappedMethod.compileParameterList(code,
                                                    parameters, 1);

    code.addInvokespecial(objectType, "<init>", getDescriptor());
    code.addPutfield(Bytecode.THIS, name, Descriptor.of(type));
    return stacksize;
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:29,代码来源:CtField.java

示例3: compileIfStatic

import scouter.javassist.bytecode.Bytecode; //导入方法依赖的package包/类
/**
 * Produces codes for a static field.
 */
int compileIfStatic(CtClass type, String name, Bytecode code,
                    Javac drv) throws CannotCompileException
{
    String desc;

    code.addNew(objectType);
    code.add(Bytecode.DUP);

    int stacksize = 2;
    if (stringParams == null)
        desc = "()V";
    else {
        desc = "([Ljava/lang/String;)V";
        stacksize += compileStringParameter(code);
    }

    code.addInvokespecial(objectType, "<init>", desc);
    code.addPutstatic(Bytecode.THIS, name, Descriptor.of(type));
    return stacksize;
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:24,代码来源:CtField.java

示例4: doit

import scouter.javassist.bytecode.Bytecode; //导入方法依赖的package包/类
public void doit(JvstCodeGen gen, Bytecode bytecode, ASTList args)
    throws CompileError
{
    if (args != null && !gen.isParamListName(args))
        throw new CompileError(Javac.proceedName
                + "() cannot take a parameter for field reading");

    int stack;
    if (isStatic(opcode))
        stack = 0;
    else {
        stack = -1;
        bytecode.addAload(targetVar);
    }

    if (fieldType instanceof CtPrimitiveType)
        stack += ((CtPrimitiveType)fieldType).getDataSize();
    else
        ++stack;

    bytecode.add(opcode);
    bytecode.addIndex(index);
    bytecode.growStack(stack);
    gen.setType(fieldType);
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:26,代码来源:FieldAccess.java

示例5: doit

import scouter.javassist.bytecode.Bytecode; //导入方法依赖的package包/类
public void doit(JvstCodeGen gen, Bytecode bytecode, ASTList args)
    throws CompileError
{
    int num = gen.getMethodArgsLength(args); 
    if (num != dimension)
        throw new CompileError(Javac.proceedName
                + "() with a wrong number of parameters");

    gen.atMethodArgs(args, new int[num],
                     new int[num], new String[num]);
    bytecode.addOpcode(opcode);
    if (opcode == Opcode.ANEWARRAY)
        bytecode.addIndex(index);
    else if (opcode == Opcode.NEWARRAY)
        bytecode.add(index);
    else /* if (opcode == Opcode.MULTIANEWARRAY) */ {
        bytecode.addIndex(index);
        bytecode.add(dimension);
        bytecode.growStack(1 - dimension);
    }

    gen.setType(arrayType);
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:24,代码来源:NewArray.java

示例6: compileStringParameter

import scouter.javassist.bytecode.Bytecode; //导入方法依赖的package包/类
protected final int compileStringParameter(Bytecode code)
    throws CannotCompileException
{
    int nparam = stringParams.length;
    code.addIconst(nparam);
    code.addAnewarray(javaLangString);
    for (int j = 0; j < nparam; ++j) {
        code.add(Bytecode.DUP);         // dup
        code.addIconst(j);                      // iconst_<j>
        code.addLdc(stringParams[j]);   // ldc ...
        code.add(Bytecode.AASTORE);             // aastore
    }

    return 4;
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:16,代码来源:CtField.java

示例7: makeBody

import scouter.javassist.bytecode.Bytecode; //导入方法依赖的package包/类
protected static Bytecode makeBody(CtClass declaring, ClassFile classfile,
                                   int howToCallSuper,
                                   CtMethod wrappedBody,
                                   CtClass[] parameters,
                                   ConstParameter cparam)
    throws CannotCompileException
{
    int stacksize, stacksize2;

    int superclazz = classfile.getSuperclassId();
    Bytecode code = new Bytecode(classfile.getConstPool(), 0, 0);
    code.setMaxLocals(false, parameters, 0);
    code.addAload(0);
    if (howToCallSuper == PASS_NONE) {
        stacksize = 1;
        code.addInvokespecial(superclazz, "<init>", "()V");
    }
    else if (howToCallSuper == PASS_PARAMS) {
        stacksize = code.addLoadParameters(parameters, 1) + 1;
        code.addInvokespecial(superclazz, "<init>",
                              Descriptor.ofConstructor(parameters));
    }
    else {
        stacksize = compileParameterList(code, parameters, 1);
        String desc;
        if (cparam == null) {
            stacksize2 = 2;
            desc = ConstParameter.defaultConstDescriptor();
        }
        else {
            stacksize2 = cparam.compile(code) + 2;
            desc = cparam.constDescriptor();
        }

        if (stacksize < stacksize2)
            stacksize = stacksize2;

        code.addInvokespecial(superclazz, "<init>", desc);
    }

    if (wrappedBody == null)
        code.add(Bytecode.RETURN);
    else {
        stacksize2 = makeBody0(declaring, classfile, wrappedBody,
                               false, parameters, CtClass.voidType,
                               cparam, code);
        if (stacksize < stacksize2)
            stacksize = stacksize2;
    }

    code.setMaxStack(stacksize);
    return code;
}
 
开发者ID:scouter-project,项目名称:bytescope,代码行数:54,代码来源:CtNewWrappedConstructor.java

示例8: makeBody

import scouter.javassist.bytecode.Bytecode; //导入方法依赖的package包/类
protected static Bytecode makeBody(CtClass declaring, ClassFile classfile,
                                   int howToCallSuper,
                                   CtMethod wrappedBody,
                                   CtClass[] parameters,
                                   CtMethod.ConstParameter cparam)
    throws CannotCompileException
{
    int stacksize, stacksize2;

    int superclazz = classfile.getSuperclassId();
    Bytecode code = new Bytecode(classfile.getConstPool(), 0, 0);
    code.setMaxLocals(false, parameters, 0);
    code.addAload(0);
    if (howToCallSuper == PASS_NONE) {
        stacksize = 1;
        code.addInvokespecial(superclazz, "<init>", "()V");
    }
    else if (howToCallSuper == PASS_PARAMS) {
        stacksize = code.addLoadParameters(parameters, 1) + 1;
        code.addInvokespecial(superclazz, "<init>",
                              Descriptor.ofConstructor(parameters));
    }
    else {
        stacksize = compileParameterList(code, parameters, 1);
        String desc;
        if (cparam == null) {
            stacksize2 = 2;
            desc = CtMethod.ConstParameter.defaultConstDescriptor();
        }
        else {
            stacksize2 = cparam.compile(code) + 2;
            desc = cparam.constDescriptor();
        }

        if (stacksize < stacksize2)
            stacksize = stacksize2;

        code.addInvokespecial(superclazz, "<init>", desc);
    }

    if (wrappedBody == null)
        code.add(Bytecode.RETURN);
    else {
        stacksize2 = makeBody0(declaring, classfile, wrappedBody,
                               false, parameters, CtClass.voidType,
                               cparam, code);
        if (stacksize < stacksize2)
            stacksize = stacksize2;
    }

    code.setMaxStack(stacksize);
    return code;
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:54,代码来源:CtNewWrappedConstructor.java


注:本文中的scouter.javassist.bytecode.Bytecode.add方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。