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     }