1 cananian 1.1.2.4 // ThreadToRealtimeThread.java, created Tue Jan 23 16:09:50 2001 by wbeebee 2 wbeebee 1.1.2.1 // Copyright (C) 2000 Wes Beebee <wbeebee@mit.edu> 3 wbeebee 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 wbeebee 1.1.2.1 package harpoon.Analysis.Realtime; 5 wbeebee 1.1.2.1 6 wbeebee 1.1.2.1 import java.util.Iterator; 7 wbeebee 1.1.2.1 8 wbeebee 1.1.2.1 import harpoon.Analysis.ClassHierarchy; 9 wbeebee 1.1.2.1 import harpoon.Analysis.Transformation.MethodMutator; 10 wbeebee 1.1.2.1 11 wbeebee 1.1.2.1 import harpoon.ClassFile.HClass; 12 wbeebee 1.1.2.1 import harpoon.ClassFile.HCode; 13 wbeebee 1.1.2.1 import harpoon.ClassFile.HCodeAndMaps; 14 wbeebee 1.1.2.1 import harpoon.ClassFile.HCodeFactory; 15 wbeebee 1.1.2.3 import harpoon.ClassFile.HConstructor; 16 wbeebee 1.1.2.1 import harpoon.ClassFile.HMethod; 17 wbeebee 1.1.2.1 import harpoon.ClassFile.Linker; 18 wbeebee 1.1.2.1 19 wbeebee 1.1.2.1 import harpoon.IR.Quads.CALL; 20 wbeebee 1.1.2.1 import harpoon.IR.Quads.NEW; 21 wbeebee 1.1.2.1 import harpoon.IR.Quads.Quad; 22 wbeebee 1.1.2.1 import harpoon.IR.Quads.QuadVisitor; 23 wbeebee 1.1.2.1 import harpoon.IR.Quads.QuadWithTry; 24 wbeebee 1.1.2.1 25 wbeebee 1.1.2.1 import harpoon.Util.Util; 26 wbeebee 1.1.2.1 27 wbeebee 1.1.2.1 /** 28 wbeebee 1.1.2.3 * <code>ThreadToRealtimeThread</code> is a <code>ClassReplacer</code> which 29 wbeebee 1.1.2.1 * replaces <code>java.lang.Thread</code> with 30 wbeebee 1.1.2.2 * <code>javax.realtime.RealtimeThread</code>. 31 wbeebee 1.1.2.1 * 32 cananian 1.1.2.4 * @author Wes Beebee <wbeebee@mit.edu> 33 cananian 1.6 * @version $Id: ThreadToRealtimeThread.java,v 1.6 2004/02/08 03:20:13 cananian Exp $ 34 wbeebee 1.1.2.1 */ 35 wbeebee 1.1.2.1 36 wbeebee 1.1.2.3 class ThreadToRealtimeThread extends ClassReplacer { 37 wbeebee 1.1.2.1 38 wbeebee 1.1.2.1 /** Creates a new <code>ThreadToRealtimeThread</code> using code from the 39 wbeebee 1.1.2.1 * <code>HCodeFactory</code>. Use 40 wbeebee 1.1.2.1 * (new ThreadToRealtimeThread(hcf)).codeFactory() to link it into the 41 wbeebee 1.1.2.1 * chain of </code>HCodeFactory</code>s. 42 wbeebee 1.1.2.1 */ 43 wbeebee 1.1.2.1 44 wbeebee 1.1.2.3 ThreadToRealtimeThread(HCodeFactory parent, Linker linker) { 45 wbeebee 1.1.2.3 super(parent, 46 wbeebee 1.1.2.3 linker.forName("java.lang.Thread"), 47 wbeebee 1.1.2.3 linker.forName("javax.realtime.RealtimeThread")); 48 wbeebee 1.1.2.3 addIgnorePackage("javax.realtime"); 49 wbeebee 1.5 mapAll(linker.forName("java.lang.Thread"), linker.forName("javax.realtime.RealtimeThread")); 50 wbeebee 1.1.2.1 } 51 wbeebee 1.1.2.1 52 wbeebee 1.1.2.1 /** Updates the <code>ClassHierarchy</code> so that all classes that 53 wbeebee 1.1.2.1 * inherited from <code>java.lang.Thread</code> now inherit 54 wbeebee 1.1.2.2 * from <code>javax.realtime.RealtimeThread</code>. 55 wbeebee 1.1.2.1 */ 56 wbeebee 1.1.2.1 57 wbeebee 1.1.2.1 static void updateClassHierarchy(Linker linker, ClassHierarchy ch) { 58 wbeebee 1.1.2.1 HClass thread = linker.forName("java.lang.Thread"); 59 wbeebee 1.1.2.2 HClass realtimeThread = linker.forName("javax.realtime.RealtimeThread"); 60 cananian 1.6 for (Object childO : ch.children(thread)) { 61 cananian 1.6 HClass child = (HClass) childO; 62 wbeebee 1.1.2.1 if (child != realtimeThread) { 63 cananian 1.3.2.1 assert child != null; 64 wbeebee 1.1.2.1 child.getMutator().setSuperclass(realtimeThread); 65 wbeebee 1.1.2.1 } 66 wbeebee 1.1.2.1 } 67 wbeebee 1.1.2.1 } 68 cananian 1.2 }