ProxyClassLoader.java
上传用户:shenzhenrh
上传日期:2013-05-12
资源大小:2904k
文件大小:2k
源码类别:

信息检索与抽取

开发平台:

Unix_Linux

  1. // Swarm library. Copyright (C) 1999-2000 Swarm Development Group.
  2. // This program is free software; you can redistribute it and/or
  3. // modify it under the terms of the GNU General Public License as
  4. // published by the Free Software Foundation; either version 2 of the
  5. // License, or (at your option) any later version.
  6. //
  7. // This program is distributed in the hope that it will be useful, but
  8. // WITHOUT ANY WARRANTY; without even the implied warranty of
  9. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  10. // General Public License for more details.
  11. //
  12. // You should have received a copy of the GNU General Public License
  13. // along with this program; if not, write to the Free Software
  14. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  15. // USA
  16. // 
  17. // The Swarm Development Group can be reached via our website at:
  18. // http://www.swarm.org/
  19. package swarm;
  20. import java.io.IOException;
  21. import gnu.bytecode.ClassType;
  22. import gnu.bytecode.Access;
  23. import gnu.bytecode.Type;
  24. import gnu.bytecode.Method;
  25. public class ProxyClassLoader extends ClassLoader {
  26.   public Class findClass (String name) {
  27.     try {
  28.       ClassType clas = new ClassType (name);
  29.       ClassType superClass = ClassType.make ("swarm.ObjCProxy");
  30.       clas.setSuper (superClass);
  31.       Method constructor = clas.addMethod ("<init>", Type.typeArray0,
  32.                                            Type.void_type, Access.PUBLIC);
  33.       Method superConstructor =
  34.         superClass.addMethod ("<init>", Type.typeArray0,
  35.                               Type.void_type, Access.PUBLIC);
  36.       
  37.       constructor.init_param_slots ();
  38.       gnu.bytecode.CodeAttr code = constructor.getCode();
  39.       code.emitPushThis();
  40.       code.emitInvokeSpecial (superConstructor);
  41.       code.emitReturn();
  42.       
  43.       byte[] b = clas.writeToArray ();
  44.       return defineClass (name, b, 0, b.length);
  45.     } catch (IOException e) {
  46.       e.printStackTrace (System.err);
  47.       System.exit (1);
  48.     }
  49.     return null;
  50.   }
  51. }