KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > soot > jimple > spark > builder > GlobalNodeFactory


1 /* Soot - a J*va Optimization Framework
2  * Copyright (C) 2003 Ondrej Lhotak
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 package soot.jimple.spark.builder;
21 import soot.jimple.spark.*;
22 import soot.jimple.spark.pag.*;
23 import soot.jimple.*;
24 import soot.*;
25 import soot.util.*;
26 import soot.toolkits.scalar.Pair;
27 import soot.jimple.spark.internal.*;
28 import soot.jimple.toolkits.callgraph.Edge;
29 import java.util.*;
30
31 /** Factory for nodes not specific to a given method.
32  * @author Ondrej Lhotak
33  */

34 public class GlobalNodeFactory {
35     public GlobalNodeFactory( PAG pag ) {
36     this.pag = pag;
37     }
38     
39     final public Node caseDefaultClassLoader() {
40     AllocNode a = pag.makeAllocNode(
41         PointsToAnalysis.DEFAULT_CLASS_LOADER,
42         AnySubType.v( RefType.v( "java.lang.ClassLoader" ) ), null );
43     VarNode v = pag.makeGlobalVarNode(
44         PointsToAnalysis.DEFAULT_CLASS_LOADER_LOCAL,
45         RefType.v( "java.lang.ClassLoader" ) );
46     pag.addEdge( a, v );
47     return v;
48     }
49     final public Node caseMainClassNameString() {
50     AllocNode a = pag.makeAllocNode(
51         PointsToAnalysis.MAIN_CLASS_NAME_STRING,
52         RefType.v( "java.lang.String" ), null );
53     VarNode v = pag.makeGlobalVarNode(
54         PointsToAnalysis.MAIN_CLASS_NAME_STRING_LOCAL,
55         RefType.v( "java.lang.String" ) );
56     pag.addEdge( a, v );
57     return v;
58     }
59     final public Node caseMainThreadGroup() {
60     AllocNode threadGroupNode = pag.makeAllocNode(
61         PointsToAnalysis.MAIN_THREAD_GROUP_NODE,
62         RefType.v("java.lang.ThreadGroup"), null );
63     VarNode threadGroupNodeLocal = pag.makeGlobalVarNode(
64         PointsToAnalysis.MAIN_THREAD_GROUP_NODE_LOCAL,
65         RefType.v("java.lang.ThreadGroup") );
66     pag.addEdge( threadGroupNode, threadGroupNodeLocal );
67     return threadGroupNodeLocal;
68     }
69     final public Node caseMainThread() {
70     AllocNode threadNode = pag.makeAllocNode(
71         PointsToAnalysis.MAIN_THREAD_NODE,
72         RefType.v("java.lang.Thread"), null );
73     VarNode threadNodeLocal = pag.makeGlobalVarNode(
74         PointsToAnalysis.MAIN_THREAD_NODE_LOCAL,
75         RefType.v("java.lang.Thread") );
76     pag.addEdge( threadNode, threadNodeLocal );
77     return threadNodeLocal;
78     }
79     final public Node caseArgv() {
80     AllocNode argv = pag.makeAllocNode(
81         PointsToAnalysis.STRING_ARRAY_NODE,
82         ArrayType.v(RefType.v( "java.lang.String" ), 1), null );
83         VarNode sanl = pag.makeGlobalVarNode(
84                 PointsToAnalysis.STRING_ARRAY_NODE_LOCAL,
85                 ArrayType.v(RefType.v( "java.lang.String" ), 1) );
86     AllocNode stringNode = pag.makeAllocNode(
87         PointsToAnalysis.STRING_NODE,
88         RefType.v( "java.lang.String" ), null );
89     VarNode stringNodeLocal = pag.makeGlobalVarNode(
90         PointsToAnalysis.STRING_NODE_LOCAL,
91         RefType.v( "java.lang.String" ) );
92     pag.addEdge( argv, sanl );
93     pag.addEdge( stringNode, stringNodeLocal );
94     pag.addEdge( stringNodeLocal,
95                 pag.makeFieldRefNode( sanl, ArrayElement.v() ) );
96     return sanl;
97     }
98
99     final public Node caseNewInstance( VarNode cls ) {
100         if( cls instanceof ContextVarNode ) cls = pag.findLocalVarNode( cls.getVariable() );
101         AllocNode site = pag.makeAllocNode( cls, AnySubType.v( RefType.v( "java.lang.Object" ) ), null );
102     VarNode local = pag.makeGlobalVarNode( site, RefType.v( "java.lang.Object" ) );
103         pag.addEdge( site, local );
104         return local;
105     }
106
107     public Node caseThrow() {
108     VarNode ret = pag.makeGlobalVarNode( PointsToAnalysis.EXCEPTION_NODE,
109             RefType.v("java.lang.Throwable") );
110         ret.setInterProcTarget();
111         ret.setInterProcSource();
112         return ret;
113     }
114     /* End of public methods. */
115     /* End of package methods. */
116
117     protected PAG pag;
118 }
119
120
Popular Tags