Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: ClassLib/ibm13_linux/Interface.java


1   // Interface.java, created Fri Jan 11 17:07:15 2002 by joewhaley
2   // Copyright (C) 2001-3 John Whaley <jwhaley@alum.mit.edu>
3   // Licensed under the terms of the GNU LGPL; see COPYING for details.
4   package ClassLib.ibm13_linux;
5   
6   import java.util.Iterator;
7   
8   import Bootstrap.ObjectTraverser;
9   import Bootstrap.PrimordialClassLoader;
10  import ClassLib.ClassLibInterface;
11  import Clazz.jq_Class;
12  import Main.jq;
13  
14  /**
15   * Interface
16   *
17   * @author  John Whaley <jwhaley@alum.mit.edu>
18   * @version $Id: Interface.java,v 1.25 2003/05/12 10:04:54 joewhaley Exp $
19   */
20  public final class Interface extends ClassLib.Common.InterfaceImpl {
21  
22      /** Creates new Interface */
23      public Interface() {}
24  
25      public Iterator getImplementationClassDescs(UTF.Utf8 desc) {
26          if (ClassLibInterface.USE_JOEQ_CLASSLIB && (desc.toString().startsWith("Ljava/") ||
27                                                      desc.toString().startsWith("Lcom/ibm/jvm/"))) {
28              UTF.Utf8 u = UTF.Utf8.get("LClassLib/ibm13_linux/"+desc.toString().substring(1));
29              return new Util.Collections.AppendIterator(super.getImplementationClassDescs(desc),
30                                              java.util.Collections.singleton(u).iterator());
31          }
32          return super.getImplementationClassDescs(desc);
33      }
34      
35      public ObjectTraverser getObjectTraverser() {
36          return ibm13_linuxObjectTraverser.INSTANCE;
37      }
38      
39      public static class ibm13_linuxObjectTraverser extends CommonObjectTraverser {
40          public static ibm13_linuxObjectTraverser INSTANCE = new ibm13_linuxObjectTraverser();
41          protected ibm13_linuxObjectTraverser() {}
42          public void initialize() {
43              super.initialize();
44              
45              // access the ISO-8859-1 character encoding, as it is used during bootstrapping
46              try {
47                  String s = new String(new byte[0], 0, 0, "ISO-8859-1");
48              } catch (java.io.UnsupportedEncodingException x) {}
49              PrimordialClassLoader.loader.getOrCreateBSType("Lsun/io/CharToByteISO8859_1;");
50      
51              jq_Class k = (jq_Class)PrimordialClassLoader.loader.getOrCreateBSType("Ljava/net/URLClassLoader$ClassFinder;");
52              nullInstanceFields.add(k.getOrCreateInstanceField("name", "Ljava/lang/String;"));
53              
54              k = (jq_Class)PrimordialClassLoader.loader.getOrCreateBSType("Lsun/misc/Launcher;");
55              nullStaticFields.add(k.getOrCreateStaticField("launcher", "Lsun/misc/Launcher;"));
56              //k = (jq_Class)PrimordialClassLoader.loader.getOrCreateBSType("Ljava/net/URLClassLoader;");
57              //nullStaticFields.add(k.getOrCreateStaticField("extLoader", "Ljava/net/URLClassLoader;"));
58              k = PrimordialClassLoader.getJavaLangString();
59              nullStaticFields.add(k.getOrCreateStaticField("btcConverter", "Ljava/lang/ThreadLocal;"));
60              nullStaticFields.add(k.getOrCreateStaticField("ctbConverter", "Ljava/lang/ThreadLocal;"));
61              k = (jq_Class)PrimordialClassLoader.loader.getOrCreateBSType("Ljava/util/zip/ZipFile;");
62              nullStaticFields.add(k.getOrCreateStaticField("inflaters", "Ljava/util/Vector;"));
63              
64              // we need to reinitialize the inflaters array on startup.
65              if (jq.on_vm_startup != null) {
66                  Object[] args = { } ;
67                  Clazz.jq_Method init_inflaters = k.getOrCreateStaticMethod("init_inflaters", "()V");
68                  Bootstrap.MethodInvocation mi = new Bootstrap.MethodInvocation(init_inflaters, args);
69                  jq.on_vm_startup.add(mi);
70                  System.out.println("Added call to reinitialize java.util.zip.ZipFile.inflaters field on joeq startup: "+mi);
71              }
72          }
73          
74          public java.lang.Object mapInstanceField(java.lang.Object o, Clazz.jq_InstanceField f) {
75              if (IGNORE_THREAD_LOCALS) {
76                  jq_Class c = f.getDeclaringClass();
77                  if (c == PrimordialClassLoader.getJavaLangThread()) {
78                      String fieldName = f.getName().toString();
79                      if (fieldName.equals("threadLocals"))
80                          return java.util.Collections.EMPTY_MAP;
81                      if (fieldName.equals("inheritableThreadLocals"))
82                          return java.util.Collections.EMPTY_MAP;
83                  }
84              }
85              return super.mapInstanceField(o, f);
86          }
87      }
88  }