1 cananian 1.1.2.1 // RuntimeInformation.java, created Mon Jan 17 08:06:29 2000 by cananian
 2 cananian 1.1.2.1 // Copyright (C) 1999 C. Scott Ananian <cananian@alumni.princeton.edu>
 3 cananian 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details.
 4 cananian 1.1.2.1 package harpoon.Backend.Runtime1;
 5 cananian 1.1.2.1 
 6 cananian 1.1.2.1 import harpoon.ClassFile.HClass;
 7 cananian 1.1.2.1 import harpoon.ClassFile.HMethod;
 8 cananian 1.1.2.1 import harpoon.ClassFile.Linker;
 9 cananian 1.1.2.1 import harpoon.Util.ArraySet;
10 cananian 1.1.2.1 
11 cananian 1.1.2.1 import java.util.Collections;
12 cananian 1.1.2.1 import java.util.Set;
13 cananian 1.1.2.1 /**
14 cananian 1.1.2.1  * <code>RuntimeInformation</code>
15 cananian 1.1.2.1  * 
16 cananian 1.1.2.1  * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
17 cananian 1.2      * @version $Id: RuntimeInformation.java,v 1.2 2002/02/25 21:02:20 cananian Exp $
18 cananian 1.1.2.1  */
19 cananian 1.1.2.1 public class RuntimeInformation
20 cananian 1.1.2.1     extends harpoon.Backend.Generic.RuntimeInformation {
21 cananian 1.1.2.1     harpoon.Backend.Generic.RuntimeInformation proxy;
22 cananian 1.1.2.1     
23 cananian 1.1.2.1     /** Creates a <code>RuntimeInformation</code>. */
24 cananian 1.1.2.1     public RuntimeInformation(harpoon.Backend.Generic.RuntimeInformation proxy)
25 cananian 1.1.2.1     {
26 cananian 1.1.2.1         super(proxy.linker); this.proxy = proxy;
27 cananian 1.1.2.1         HCcharA = linker.forDescriptor("[C");
28 cananian 1.1.2.1         HCproperties = linker.forName("java.util.Properties");
29 cananian 1.1.2.1         HCstring = linker.forName("java.lang.String");
30 cananian 1.1.2.1         HCsystem = linker.forName("java.lang.System");
31 cananian 1.1.2.1         HMsysInitProp = HCsystem
32 cananian 1.1.2.1             .getMethod("initProperties", new HClass[]{ HCproperties });
33 cananian 1.1.2.1         HMpropSetProp = HCproperties
34 cananian 1.1.2.1             .getMethod("setProperty", new HClass[] { HCstring, HCstring });
35 cananian 1.1.2.1     }
36 cananian 1.1.2.1     private final HClass HCcharA, HCproperties, HCstring, HCsystem;
37 cananian 1.1.2.1     private final HMethod HMsysInitProp, HMpropSetProp;
38 cananian 1.1.2.1 
39 cananian 1.1.2.1     public Set baseClasses() {
40 cananian 1.1.2.1         return proxy.baseClasses(); 
41 cananian 1.1.2.1     }
42 cananian 1.1.2.1     public Set methodsCallableFrom(HMethod m) {
43 cananian 1.1.2.1         Set s = proxy.methodsCallableFrom(m);
44 cananian 1.1.2.1         if (m.equals(HMsysInitProp)) {
45 cananian 1.1.2.1             s = union(s, Collections.singleton(HMpropSetProp));
46 cananian 1.1.2.1         }
47 cananian 1.1.2.1         return s;
48 cananian 1.1.2.1     }
49 cananian 1.1.2.1     public Set initiallyCallableMethods() {
50 cananian 1.1.2.1         Set s = union(proxy.initiallyCallableMethods(),
51 cananian 1.1.2.1                       new ArraySet(new HMethod[] {
52 cananian 1.1.2.1                           linker.forName("java.lang.NoClassDefFoundError")
53 cananian 1.1.2.1                             .getConstructor(new HClass[] { HCstring }),
54 cananian 1.1.2.1                           linker.forName("java.lang.NoSuchMethodError")
55 cananian 1.1.2.1                             .getConstructor(new HClass[] { HCstring }),
56 cananian 1.1.2.1                           linker.forName("java.lang.NoSuchFieldError")
57 cananian 1.1.2.1                             .getConstructor(new HClass[] { HCstring }),
58 cananian 1.1.2.1                           HCstring.getConstructor(new HClass[] { HCcharA }),
59 cananian 1.1.2.1                           HCstring.getMethod("length", "()I"),
60 cananian 1.1.2.1                           HCstring.getMethod("toCharArray","()[C"),
61 cananian 1.1.2.1                       }));
62 cananian 1.1.2.1         return s;
63 cananian 1.1.2.1     }
64 cananian 1.2     }