KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > soot > BodyTransformer


1 /* Soot - a J*va Optimization Framework
2  * Copyright (C) 1997-1999 Patrick Lam
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */

19
20 /*
21  * Modified by the Sable Research Group and others 1997-1999.
22  * See the 'credits' file distributed with Soot for the complete list of
23  * contributors. (Soot is distributed at http://www.sable.mcgill.ca/soot)
24  */

25
26 package soot;
27
28 import java.util.*;
29
30 /**
31  * An abstract class which acts on a Body. This class provides a harness and acts as an
32  * interface for classes that wish to transform a Body. Subclasses
33  * provide the actual Body transformation implementation.
34  */

35
36 public abstract class BodyTransformer extends Transformer
37 {
38     /**
39      * Called by clients of the transformation. Acts as a generic interface
40      * for BodyTransformers.
41      * Calls internalTransform with the optionsString properly set up.
42      * That is, the options in optionsString override those in the Scene.
43      * @param b the body on which to apply the transformation
44      * @param phaseName phaseName for the transform. Used to retrieve options from the Scene.
45      */

46     public final void transform(Body b, String JavaDoc phaseName, Map options)
47     {
48         if(!PhaseOptions.getBoolean(options, "enabled"))
49             return;
50
51         internalTransform(b, phaseName, options);
52     }
53
54     public final void transform(Body b, String JavaDoc phaseName)
55     {
56         HashMap dummyOptions = new HashMap();
57         dummyOptions.put( "enabled", "true" );
58         transform(b, phaseName, dummyOptions);
59     }
60
61     public final void transform(Body b)
62     {
63     transform(b, "");
64     }
65
66     /**
67      * This method is called to perform the transformation itself. It is declared
68      * abstract; subclasses must implement this method by making it the entry point
69      * to their actual Body transformation.
70      * @param b the body on which to apply the transformation
71      * @param phaseName the phasename for this transform; not typically used by implementations.
72      * @param options the actual computed options; a combination of default options and Scene specified options.
73      */

74     protected abstract void internalTransform(Body b, String JavaDoc phaseName, Map options);
75
76 }
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Popular Tags