serp.bytecode.BCClass.declareMethod()方法的使用及代码示例

x33g5p2x  于2022-01-17 转载在 其他  
字(12.5k)|赞(0)|评价(0)|浏览(70)

本文整理了Java中serp.bytecode.BCClass.declareMethod()方法的一些代码示例,展示了BCClass.declareMethod()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。BCClass.declareMethod()方法的具体详情如下:
包路径:serp.bytecode.BCClass
类名称:BCClass
方法名:declareMethod

BCClass.declareMethod介绍

[英]Add a method to this class. Note that in bytecode, constructors are named <init> and static initializers are named <clinit>.
[中]将方法添加到此类。请注意,在字节码中,构造函数名为<init>,静态初始值设定项名为<clinit>

代码示例

代码示例来源:origin: org.apache.openjpa/openjpa-all

private void addGetData(BCClass bc) {
  // return getObjectField(i);
  BCMethod method = bc.declareMethod("getData", Object.class,
    new Class[]{ int.class });
  Code code = method.getCode(true);
  code.aload().setThis();
  code.iload().setParam(0);
  code.invokevirtual().setMethod("getObject", Object.class,
    new Class[]{ int.class });
  code.areturn();
  code.calculateMaxLocals();
  code.calculateMaxStack();
}

代码示例来源:origin: org.apache.openjpa/openjpa-kernel

private void addGetData(BCClass bc) {
  // return getObjectField(i);
  BCMethod method = bc.declareMethod("getData", Object.class,
    new Class[]{ int.class });
  Code code = method.getCode(true);
  code.aload().setThis();
  code.iload().setParam(0);
  code.invokevirtual().setMethod("getObject", Object.class,
    new Class[]{ int.class });
  code.areturn();
  code.calculateMaxLocals();
  code.calculateMaxStack();
}

代码示例来源:origin: org.apache.openejb.patch/openjpa-kernel

private void addGetData(BCClass bc) {
  // return getObjectField(i);
  BCMethod method = bc.declareMethod("getData", Object.class,
    new Class[]{ int.class });
  Code code = method.getCode(true);
  code.aload().setThis();
  code.iload().setParam(0);
  code.invokevirtual().setMethod("getObject", Object.class,
    new Class[]{ int.class });
  code.areturn();
  code.calculateMaxLocals();
  code.calculateMaxStack();
}

代码示例来源:origin: org.apache.openjpa/com.springsource.org.apache.openjpa

private void addGetData(BCClass bc) {
  // return getObjectField(i);
  BCMethod method = bc.declareMethod("getData", Object.class,
    new Class[]{ int.class });
  Code code = method.getCode(true);
  code.aload().setThis();
  code.iload().setParam(0);
  code.invokevirtual().setMethod("getObject", Object.class,
    new Class[]{ int.class });
  code.areturn();
  code.calculateMaxLocals();
  code.calculateMaxStack();
}

代码示例来源:origin: org.apache.openejb.patch/openjpa

private void addGetData(BCClass bc) {
  // return getObjectField(i);
  BCMethod method = bc.declareMethod("getData", Object.class,
    new Class[]{ int.class });
  Code code = method.getCode(true);
  code.aload().setThis();
  code.iload().setParam(0);
  code.invokevirtual().setMethod("getObject", Object.class,
    new Class[]{ int.class });
  code.areturn();
  code.calculateMaxLocals();
  code.calculateMaxStack();
}

代码示例来源:origin: org.apache.openjpa/openjpa-all

/**
 * Proxy the given method with one that overrides it by calling into the
 * given helper.
 */
private void proxyOverrideMethod(BCClass bc, Method meth, 
  Method helper, Class[] params) {
  BCMethod m = bc.declareMethod(meth.getName(), meth.getReturnType(),
    meth.getParameterTypes());
  m.makePublic();
  Code code = m.getCode(true);
  code.aload().setThis();
  for (int i = 1; i < params.length; i++)
    code.xload().setParam(i - 1).setType(params[i]);
  code.invokestatic().setMethod(helper);
  code.xreturn().setType(meth.getReturnType());
  code.calculateMaxStack();
  code.calculateMaxLocals();
}

代码示例来源:origin: org.apache.openejb.patch/openjpa-kernel

/**
 * Proxy the given method with one that overrides it by calling into the
 * given helper.
 */
private void proxyOverrideMethod(BCClass bc, Method meth, 
  Method helper, Class[] params) {
  BCMethod m = bc.declareMethod(meth.getName(), meth.getReturnType(),
    meth.getParameterTypes());
  m.makePublic();
  Code code = m.getCode(true);
  code.aload().setThis();
  for (int i = 1; i < params.length; i++)
    code.xload().setParam(i - 1).setType(params[i]);
  code.invokestatic().setMethod(helper);
  code.xreturn().setType(meth.getReturnType());
  code.calculateMaxStack();
  code.calculateMaxLocals();
}

代码示例来源:origin: org.apache.openejb.patch/openjpa

/**
 * Proxy the given method with one that overrides it by calling into the
 * given helper.
 */
private void proxyOverrideMethod(BCClass bc, Method meth, 
  Method helper, Class[] params) {
  BCMethod m = bc.declareMethod(meth.getName(), meth.getReturnType(),
    meth.getParameterTypes());
  m.makePublic();
  Code code = m.getCode(true);
  code.aload().setThis();
  for (int i = 1; i < params.length; i++)
    code.xload().setParam(i - 1).setType(params[i]);
  code.invokestatic().setMethod(helper);
  code.xreturn().setType(meth.getReturnType());
  code.calculateMaxStack();
  code.calculateMaxLocals();
}

代码示例来源:origin: org.apache.openjpa/openjpa-all

/**
 * Add method which defers to AbstractPCData.
 */
protected void callAbstractPCData(BCClass bc, String name, Class<?> retType,
  Class<?>[] args) {
  BCMethod meth = bc.declareMethod(name, retType, args);
  Code code = meth.getCode(true);
  code.aload().setThis();
  for (int i = 0; i < args.length; i++)
    code.xload().setParam(i).setType(args[i]);
  code.invokevirtual().setMethod(AbstractPCData.class, name, retType,
    args);
  if (!void.class.equals(retType))
    code.xreturn().setType(retType);
  code.calculateMaxLocals();
  code.calculateMaxStack();
}

代码示例来源:origin: org.apache.openjpa/com.springsource.org.apache.openjpa

private void replaceNewEmbeddedPCData(BCClass bc) {
  BCMethod meth = bc.declareMethod("newEmbeddedPCData", 
    AbstractPCData.class, new Class[]{ OpenJPAStateManager.class });
  Code code = meth.getCode(true);
  // return new DataCachePCDataImpl(sm.getObjectId(), sm.getMetaData());
  code.anew().setType(DataCachePCDataImpl.class);
  code.dup();
  code.aload().setParam(0);
  code.invokeinterface().setMethod(OpenJPAStateManager.class, "getId", 
    Object.class, null);
  code.aload().setParam(0);
  code.invokeinterface().setMethod(OpenJPAStateManager.class, 
    "getMetaData", ClassMetaData.class, null);
  code.invokespecial().setMethod(DataCachePCDataImpl.class, "<init>",
    void.class, new Class[] { Object.class, ClassMetaData.class });
  code.areturn();
  code.calculateMaxLocals();
  code.calculateMaxStack();
}

代码示例来源:origin: org.apache.openejb.patch/openjpa-kernel

/**
 * Add method which defers to AbstractPCData.
 */
protected void callAbstractPCData(BCClass bc, String name, Class<?> retType,
  Class<?>[] args) {
  BCMethod meth = bc.declareMethod(name, retType, args);
  Code code = meth.getCode(true);
  code.aload().setThis();
  for (int i = 0; i < args.length; i++)
    code.xload().setParam(i).setType(args[i]);
  code.invokevirtual().setMethod(AbstractPCData.class, name, retType,
    args);
  if (!void.class.equals(retType))
    code.xreturn().setType(retType);
  code.calculateMaxLocals();
  code.calculateMaxStack();
}

代码示例来源:origin: org.apache.openjpa/openjpa-kernel

/**
 * Proxy the given method with one that overrides it by calling into the
 * given helper.
 */
private void proxyOverrideMethod(BCClass bc, Method meth, 
  Method helper, Class[] params) {
  BCMethod m = bc.declareMethod(meth.getName(), meth.getReturnType(),
    meth.getParameterTypes());
  m.makePublic();
  Code code = m.getCode(true);
  code.aload().setThis();
  for (int i = 1; i < params.length; i++)
    code.xload().setParam(i - 1).setType(params[i]);
  code.invokestatic().setMethod(helper);
  code.xreturn().setType(meth.getReturnType());
  code.calculateMaxStack();
  code.calculateMaxLocals();
}

代码示例来源:origin: org.apache.openjpa/com.springsource.org.apache.openjpa

/**
 * Proxy the given method with one that overrides it by calling into the
 * given helper.
 */
private void proxyOverrideMethod(BCClass bc, Method meth, 
  Method helper, Class[] params) {
  BCMethod m = bc.declareMethod(meth.getName(), meth.getReturnType(),
    meth.getParameterTypes());
  m.makePublic();
  Code code = m.getCode(true);
  code.aload().setThis();
  for (int i = 1; i < params.length; i++)
    code.xload().setParam(i - 1).setType(params[i]);
  code.invokestatic().setMethod(helper);
  code.xreturn().setType(meth.getReturnType());
  code.calculateMaxStack();
  code.calculateMaxLocals();
}

代码示例来源:origin: org.apache.openjpa/com.springsource.org.apache.openjpa

/**
 * Add method which defers to AbstractPCData.
 */
protected void callAbstractPCData(BCClass bc, String name, Class retType,
  Class[] args) {
  BCMethod meth = bc.declareMethod(name, retType, args);
  Code code = meth.getCode(true);
  code.aload().setThis();
  for (int i = 0; i < args.length; i++)
    code.xload().setParam(i).setType(args[i]);
  code.invokevirtual().setMethod(AbstractPCData.class, name, retType,
    args);
  if (!void.class.equals(retType))
    code.xreturn().setType(retType);
  code.calculateMaxLocals();
  code.calculateMaxStack();
}

代码示例来源:origin: org.apache.openejb.patch/openjpa

/**
 * Add method which defers to AbstractPCData.
 */
protected void callAbstractPCData(BCClass bc, String name, Class<?> retType,
  Class<?>[] args) {
  BCMethod meth = bc.declareMethod(name, retType, args);
  Code code = meth.getCode(true);
  code.aload().setThis();
  for (int i = 0; i < args.length; i++)
    code.xload().setParam(i).setType(args[i]);
  code.invokevirtual().setMethod(AbstractPCData.class, name, retType,
    args);
  if (!void.class.equals(retType))
    code.xreturn().setType(retType);
  code.calculateMaxLocals();
  code.calculateMaxStack();
}

代码示例来源:origin: org.apache.openjpa/openjpa-kernel

private void addNewEmbedded(BCClass bc) {
  // void newEmbeddedPCData(OpenJPAStateManager embedded)
  BCMethod meth = bc.declareMethod("newEmbeddedPCData", PCData.class,
    new Class[]{ OpenJPAStateManager.class });
  Code code = meth.getCode(true);
  // return getStorageGenerator().generatePCData
  // 		(sm.getId(), sm.getMetaData());
  code.aload().setThis();
  code.getfield().setField("storageGenerator", PCDataGenerator.class);
  code.aload().setParam(0);
  code.invokeinterface().setMethod(OpenJPAStateManager.class,
    "getId", Object.class, null);
  code.aload().setParam(0);
  code.invokeinterface().setMethod(OpenJPAStateManager.class,
    "getMetaData", ClassMetaData.class, null);
  code.invokevirtual().setMethod(PCDataGenerator.class,
    "generatePCData", PCData.class, new Class[]
    { Object.class, ClassMetaData.class });
  code.areturn();
  code.calculateMaxLocals();
  code.calculateMaxStack();
}

代码示例来源:origin: org.apache.openjpa/openjpa-all

private void replaceNewEmbeddedPCData(BCClass bc) {
  BCMethod meth = bc.declareMethod("newEmbeddedPCData", 
    AbstractPCData.class, new Class[]{ OpenJPAStateManager.class });
  Code code = meth.getCode(true);
  // return new DataCachePCDataImpl(sm.getObjectId(), sm.getMetaData());
  code.anew().setType(DataCachePCDataImpl.class);
  code.dup();
  code.aload().setParam(0);
  code.invokeinterface().setMethod(OpenJPAStateManager.class, "getId", 
    Object.class, null);
  code.aload().setParam(0);
  code.invokeinterface().setMethod(OpenJPAStateManager.class, 
    "getMetaData", ClassMetaData.class, null);
  code.invokespecial().setMethod(DataCachePCDataImpl.class, "<init>",
    void.class, new Class[] { Object.class, ClassMetaData.class });
  code.areturn();
  code.calculateMaxLocals();
  code.calculateMaxStack();
}

代码示例来源:origin: org.apache.openejb.patch/openjpa-kernel

private void replaceNewEmbeddedPCData(BCClass bc) {
  BCMethod meth = bc.declareMethod("newEmbeddedPCData", 
    AbstractPCData.class, new Class[]{ OpenJPAStateManager.class });
  Code code = meth.getCode(true);
  // return new DataCachePCDataImpl(sm.getObjectId(), sm.getMetaData());
  code.anew().setType(DataCachePCDataImpl.class);
  code.dup();
  code.aload().setParam(0);
  code.invokeinterface().setMethod(OpenJPAStateManager.class, "getId", 
    Object.class, null);
  code.aload().setParam(0);
  code.invokeinterface().setMethod(OpenJPAStateManager.class, 
    "getMetaData", ClassMetaData.class, null);
  code.invokespecial().setMethod(DataCachePCDataImpl.class, "<init>",
    void.class, new Class[] { Object.class, ClassMetaData.class });
  code.areturn();
  code.calculateMaxLocals();
  code.calculateMaxStack();
}

代码示例来源:origin: org.apache.openejb.patch/openjpa

private void replaceNewEmbeddedPCData(BCClass bc) {
  BCMethod meth = bc.declareMethod("newEmbeddedPCData", 
    AbstractPCData.class, new Class[]{ OpenJPAStateManager.class });
  Code code = meth.getCode(true);
  // return new DataCachePCDataImpl(sm.getObjectId(), sm.getMetaData());
  code.anew().setType(DataCachePCDataImpl.class);
  code.dup();
  code.aload().setParam(0);
  code.invokeinterface().setMethod(OpenJPAStateManager.class, "getId", 
    Object.class, null);
  code.aload().setParam(0);
  code.invokeinterface().setMethod(OpenJPAStateManager.class, 
    "getMetaData", ClassMetaData.class, null);
  code.invokespecial().setMethod(DataCachePCDataImpl.class, "<init>",
    void.class, new Class[] { Object.class, ClassMetaData.class });
  code.areturn();
  code.calculateMaxLocals();
  code.calculateMaxStack();
}

代码示例来源:origin: org.apache.openjpa/openjpa-kernel

/**
 * Add method which defers to AbstractPCData.
 */
protected void callAbstractPCData(BCClass bc, String name, Class<?> retType,
  Class<?>[] args) {
  BCMethod meth = bc.declareMethod(name, retType, args);
  Code code = meth.getCode(true);
  code.aload().setThis();
  for (int i = 0; i < args.length; i++)
    code.xload().setParam(i).setType(args[i]);
  code.invokevirtual().setMethod(AbstractPCData.class, name, retType,
    args);
  if (!void.class.equals(retType))
    code.xreturn().setType(retType);
  code.calculateMaxLocals();
  code.calculateMaxStack();
}

相关文章

微信公众号

最新文章

更多