KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > soot > xml > JavaAttribute


1 /* Soot - a J*va Optimization Framework
2  * Copyright (C) 2004 Jennifer 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.xml;
21
22 import soot.*;
23 import soot.jimple.toolkits.annotation.tags.*;
24 import soot.jimple.toolkits.pointer.*;
25 import soot.util.*;
26 import soot.tagkit.*;
27 import java.util.*;
28 import java.io.*;
29
30 public class JavaAttribute {
31
32     private int startLn;
33     private ArrayList tags;
34     private ArrayList vbAttrs;
35     public PrintWriter writerOut;
36     
37     public JavaAttribute(){
38     }
39     
40     public int startLn(){
41         return startLn;
42     }
43
44
45     public void startLn(int x){
46         startLn = x;
47     }
48
49
50     public ArrayList tags(){
51         return tags;
52     }
53
54     public ArrayList vbAttrs(){
55         return vbAttrs;
56     }
57     
58     public void addTag(Tag t){
59         if (tags == null){
60             tags = new ArrayList();
61         }
62         tags.add(t);
63     }
64
65     public void addVbAttr(PosColorAttribute vbAttr){
66         if (vbAttrs == null) {
67             vbAttrs = new ArrayList();
68         }
69         vbAttrs.add(vbAttr);
70     }
71
72     public boolean hasColorTag(){
73         if (tags != null){
74             Iterator it = tags.iterator();
75             while (it.hasNext()){
76                 Tag t = (Tag)it.next();
77                 if (t instanceof ColorTag) return true;
78             }
79         }
80         if (vbAttrs != null){
81             Iterator vbIt = vbAttrs.iterator();
82             while (vbIt.hasNext()){
83                 PosColorAttribute t = (PosColorAttribute)vbIt.next();
84                 if (t.hasColor()) return true;
85             }
86         }
87         return false;
88     }
89     
90     private void printAttributeTag(Tag t) {
91         if (t instanceof LineNumberTag) {
92             int lnNum = (new Integer JavaDoc(((LineNumberTag)t).toString())).intValue();
93             printJavaLnAttr(lnNum, lnNum);
94         }
95         else if (t instanceof JimpleLineNumberTag) {
96             JimpleLineNumberTag jlnTag = (JimpleLineNumberTag)t;
97             printJimpleLnAttr(jlnTag.getStartLineNumber(), jlnTag.getEndLineNumber());
98         }
99         /*else if (t instanceof SourceLineNumberTag) {
100             SourceLineNumberTag jlnTag = (SourceLineNumberTag)t;
101             printJavaLnAttr(jlnTag.getStartLineNumber(), jlnTag.getEndLineNumber());
102         }*/

103         else if (t instanceof LinkTag) {
104             LinkTag lt = (LinkTag)t;
105             Host h = lt.getLink();
106             printLinkAttr(formatForXML(lt.toString()), getJimpleLnOfHost(h), getJavaLnOfHost(h), lt.getClassName());
107
108         }
109         else if (t instanceof StringTag) {
110             printTextAttr(formatForXML(((StringTag)t).toString()));
111         }
112         else if (t instanceof SourcePositionTag){
113             SourcePositionTag pt = (SourcePositionTag)t;
114             printSourcePositionAttr(pt.getStartOffset(), pt.getEndOffset());
115         }
116         else if (t instanceof PositionTag){
117             PositionTag pt = (PositionTag)t;
118             printJimplePositionAttr(pt.getStartOffset(), pt.getEndOffset());
119         }
120         else if (t instanceof ColorTag){
121             ColorTag ct = (ColorTag)t;
122             printColorAttr(ct.getRed(), ct.getGreen(), ct.getBlue(), ct.isForeground());
123         }
124         else {
125             printTextAttr(t.toString());
126         }
127     }
128     
129     private void printJavaLnAttr(int start_ln, int end_ln){
130         writerOut.println("<javaStartLn>"+start_ln+"</javaStartLn>");
131         writerOut.println("<javaEndLn>"+end_ln+"</javaEndLn>");
132     }
133
134
135     private void printJimpleLnAttr(int start_ln, int end_ln){
136         writerOut.println("<jimpleStartLn>"+start_ln+"</jimpleStartLn>");
137         writerOut.println("<jimpleEndLn>"+end_ln+"</jimpleEndLn>");
138     }
139
140     private void printTextAttr(String JavaDoc text){
141         writerOut.println("<text>"+text+"</text>");
142     }
143     
144     private void printLinkAttr(String JavaDoc label, int jimpleLink, int javaLink, String JavaDoc className){
145         writerOut.println("<link_attribute>");
146         writerOut.println("<link_label>"+label+"</link_label>");
147         writerOut.println("<jimple_link>"+jimpleLink+"</jimple_link>");
148         writerOut.println("<java_link>"+javaLink+"</java_link>");
149         writerOut.println("<className>"+className+"</className>");
150         writerOut.println("</link_attribute>");
151     }
152     
153     private void startPrintValBoxAttr(){
154         writerOut.println("<value_box_attribute>");
155     }
156
157     private void printSourcePositionAttr(int start, int end){
158         writerOut.println("<javaStartPos>"+start+"</javaStartPos>");
159         writerOut.println("<javaEndPos>"+end+"</javaEndPos>");
160     }
161     
162     private void printJimplePositionAttr(int start, int end){
163         writerOut.println("<jimpleStartPos>"+start+"</jimpleStartPos>");
164         writerOut.println("<jimpleEndPos>"+end+"</jimpleEndPos>");
165     }
166     
167     private void printColorAttr(int r, int g, int b, boolean fg){
168         writerOut.println("<red>"+r+"</red>");
169         writerOut.println("<green>"+g+"</green>");
170         writerOut.println("<blue>"+b+"</blue>");
171         if (fg) {
172             writerOut.println("<fg>1</fg>");
173         }
174         else {
175             writerOut.println("<fg>0</fg>");
176         }
177     }
178     
179     private void endPrintValBoxAttr(){
180         writerOut.println("</value_box_attribute>");
181     }
182
183     // prints all tags
184
public void printAllTags(PrintWriter writer){
185         this.writerOut = writer;
186         if (tags != null) {
187             Iterator it = tags.iterator();
188             while (it.hasNext()){
189                 printAttributeTag((Tag)it.next());
190             }
191         }
192         if (vbAttrs != null) {
193             Iterator vbIt = vbAttrs.iterator();
194             while (vbIt.hasNext()){
195                 PosColorAttribute attr = (PosColorAttribute)vbIt.next();
196                 if (attr.hasColor()){
197                     startPrintValBoxAttr();
198                     printSourcePositionAttr(attr.javaStartPos(), attr.javaEndPos());
199                     printJimplePositionAttr(attr.jimpleStartPos(), attr.jimpleEndPos());
200                     //printColorAttr(attr.color().red(), attr.color().green(), attr.color().blue(), attr.color().fg());
201
endPrintValBoxAttr();
202                 }
203             }
204         }
205     }
206
207     // prints only tags related to strings and links (no pos tags)
208
public void printInfoTags(PrintWriter writer){
209         this.writerOut = writer;
210         Iterator it = tags.iterator();
211         while (it.hasNext()){
212             printAttributeTag((Tag)it.next());
213         }
214     }
215     
216     private String JavaDoc formatForXML(String JavaDoc in) {
217         in = StringTools.replaceAll(in, "<", "&lt;");
218         in = StringTools.replaceAll(in, ">", "&gt;");
219         in = StringTools.replaceAll(in, "&", "&amp;");
220         return in;
221     }
222     
223     private int getJavaLnOfHost(Host h){
224         Iterator it = h.getTags().iterator();
225         while (it.hasNext()){
226             Tag t = (Tag)it.next();
227             //G.v().out.println(t.getClass().toString());
228
if (t instanceof SourceLnPosTag) {
229                 //G.v().out.println("t is LineNumberTag");
230
return ((SourceLnPosTag)t).startLn();
231             }
232             else if (t instanceof LineNumberTag){
233                 return (new Integer JavaDoc(((LineNumberTag)t).toString())).intValue();
234             }
235         }
236         return 0;
237     }
238     
239     private int getJimpleLnOfHost(Host h){
240         Iterator it = h.getTags().iterator();
241         while (it.hasNext()){
242             Tag t = (Tag)it.next();
243             if (t instanceof JimpleLineNumberTag) {
244                 return ((JimpleLineNumberTag)t).getStartLineNumber();
245             }
246         }
247         return 0;
248     }
249 }
250
Popular Tags