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 }