⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adaptermaker.java

📁 无线通信的主要编程软件,是无线通信工作人员的必备工具,关天相关教程我会在后续传上.
💻 JAVA
字号:
// Copyright (c) Corporation for National Research Initiativespackage org.python.compiler;import java.util.Hashtable;import java.util.Enumeration;import java.lang.reflect.Method;import java.io.*;public class AdapterMaker extends ProxyMaker{    public AdapterMaker(Class interfac) {        super(interfac.getName()+"$Adapter", interfac);    }    public void build() throws Exception {        names = new Hashtable();        //Class superclass = org.python.core.PyAdapter.class;        int access = ClassFile.PUBLIC | ClassFile.SYNCHRONIZED;        classfile = new ClassFile(myClass, "java/lang/Object", access);        classfile.addInterface(mapClass(interfaces[0]));        addMethods(interfaces[0], new Hashtable());        addConstructors(Object.class);        doConstants();    }    public static String makeAdapter(Class interfac, OutputStream ostream)        throws Exception    {        AdapterMaker pm = new AdapterMaker(interfac);        pm.build();        pm.classfile.write(ostream);        return pm.myClass;    }    public void doConstants() throws Exception {        for (Enumeration e=names.keys(); e.hasMoreElements();)  {            String name = (String)e.nextElement();            classfile.addField(name, "Lorg/python/core/PyObject;",                               ClassFile.PUBLIC);        }    }    public void addMethod(Method method, int access) throws Exception {        Class[] parameters = method.getParameterTypes();        Class ret = method.getReturnType();        String sig = makeSignature(parameters, ret);        String name = method.getName();        //System.out.println(name+": "+sig);        names.put(name, name);        Code code = classfile.addMethod(name, sig, ClassFile.PUBLIC);        code.aload(0);        int pyfunc = code.pool.Fieldref(classfile.name, name,                                        "Lorg/python/core/PyObject;");        code.getfield(pyfunc);        code.dup();        Label returnNull = code.getLabel();        code.ifnull(returnNull);        callMethod(code, name, parameters, ret, method.getExceptionTypes());        returnNull.setPosition();        doNullReturn(code, ret);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -