All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
soot.xml.JavaAttribute Maven / Gradle / Ivy
package soot.xml;
/*-
* #%L
* Soot - a J*va Optimization Framework
* %%
* Copyright (C) 2004 Jennifer Lhotak
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 2.1 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Lesser Public License for more details.
*
* You should have received a copy of the GNU General Lesser Public
* License along with this program. If not, see
* .
* #L%
*/
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import soot.tagkit.ColorTag;
import soot.tagkit.Host;
import soot.tagkit.JimpleLineNumberTag;
import soot.tagkit.LineNumberTag;
import soot.tagkit.LinkTag;
import soot.tagkit.PositionTag;
import soot.tagkit.SourceLnPosTag;
import soot.tagkit.SourcePositionTag;
import soot.tagkit.StringTag;
import soot.tagkit.Tag;
public class JavaAttribute {
private static final Logger logger = LoggerFactory.getLogger(JavaAttribute.class);
private int startLn;
private ArrayList tags;
private ArrayList vbAttrs;
public PrintWriter writerOut;
public JavaAttribute() {
}
public int startLn() {
return startLn;
}
public void startLn(int x) {
startLn = x;
}
public ArrayList tags() {
return tags;
}
public ArrayList vbAttrs() {
return vbAttrs;
}
public void addTag(Tag t) {
if (tags == null) {
tags = new ArrayList();
}
tags.add(t);
}
public void addVbAttr(PosColorAttribute vbAttr) {
if (vbAttrs == null) {
vbAttrs = new ArrayList();
}
vbAttrs.add(vbAttr);
}
public boolean hasColorTag() {
if (tags != null) {
Iterator it = tags.iterator();
while (it.hasNext()) {
Tag t = it.next();
if (t instanceof ColorTag) {
return true;
}
}
}
if (vbAttrs != null) {
Iterator vbIt = vbAttrs.iterator();
while (vbIt.hasNext()) {
PosColorAttribute t = vbIt.next();
if (t.hasColor()) {
return true;
}
}
}
return false;
}
private void printAttributeTag(Tag t) {
if (t instanceof LineNumberTag) {
int lnNum = (new Integer(((LineNumberTag) t).toString())).intValue();
printJavaLnAttr(lnNum, lnNum);
} else if (t instanceof JimpleLineNumberTag) {
JimpleLineNumberTag jlnTag = (JimpleLineNumberTag) t;
printJimpleLnAttr(jlnTag.getStartLineNumber(), jlnTag.getEndLineNumber());
}
/*
* else if (t instanceof SourceLineNumberTag) { SourceLineNumberTag jlnTag = (SourceLineNumberTag)t;
* printJavaLnAttr(jlnTag.getStartLineNumber(), jlnTag.getEndLineNumber()); }
*/
else if (t instanceof LinkTag) {
LinkTag lt = (LinkTag) t;
Host h = lt.getLink();
printLinkAttr(formatForXML(lt.toString()), getJimpleLnOfHost(h), getJavaLnOfHost(h), lt.getClassName());
} else if (t instanceof StringTag) {
printTextAttr(formatForXML(((StringTag) t).toString()));
} else if (t instanceof SourcePositionTag) {
SourcePositionTag pt = (SourcePositionTag) t;
printSourcePositionAttr(pt.getStartOffset(), pt.getEndOffset());
} else if (t instanceof PositionTag) {
PositionTag pt = (PositionTag) t;
printJimplePositionAttr(pt.getStartOffset(), pt.getEndOffset());
} else if (t instanceof ColorTag) {
ColorTag ct = (ColorTag) t;
printColorAttr(ct.getRed(), ct.getGreen(), ct.getBlue(), ct.isForeground());
} else {
printTextAttr(t.toString());
}
}
private void printJavaLnAttr(int start_ln, int end_ln) {
writerOut.println("" + start_ln + " ");
writerOut.println("" + end_ln + " ");
}
private void printJimpleLnAttr(int start_ln, int end_ln) {
writerOut.println("" + start_ln + " ");
writerOut.println("" + end_ln + " ");
}
private void printTextAttr(String text) {
writerOut.println("" + text + " ");
}
private void printLinkAttr(String label, int jimpleLink, int javaLink, String className) {
writerOut.println("");
writerOut.println("" + label + " ");
writerOut.println("" + jimpleLink + " ");
writerOut.println("" + javaLink + " ");
writerOut.println("" + className + " ");
writerOut.println(" ");
}
private void startPrintValBoxAttr() {
writerOut.println("");
}
private void printSourcePositionAttr(int start, int end) {
writerOut.println("" + start + " ");
writerOut.println("" + end + " ");
}
private void printJimplePositionAttr(int start, int end) {
writerOut.println("" + start + " ");
writerOut.println("" + end + " ");
}
private void printColorAttr(int r, int g, int b, boolean fg) {
writerOut.println("" + r + " ");
writerOut.println("" + g + " ");
writerOut.println("" + b + " ");
if (fg) {
writerOut.println("1 ");
} else {
writerOut.println("0 ");
}
}
private void endPrintValBoxAttr() {
writerOut.println(" ");
}
// prints all tags
public void printAllTags(PrintWriter writer) {
this.writerOut = writer;
if (tags != null) {
Iterator it = tags.iterator();
while (it.hasNext()) {
printAttributeTag(it.next());
}
}
if (vbAttrs != null) {
Iterator vbIt = vbAttrs.iterator();
while (vbIt.hasNext()) {
PosColorAttribute attr = vbIt.next();
if (attr.hasColor()) {
startPrintValBoxAttr();
printSourcePositionAttr(attr.javaStartPos(), attr.javaEndPos());
printJimplePositionAttr(attr.jimpleStartPos(), attr.jimpleEndPos());
// printColorAttr(attr.color().red(), attr.color().green(), attr.color().blue(), attr.color().fg());
endPrintValBoxAttr();
}
}
}
}
// prints only tags related to strings and links (no pos tags)
public void printInfoTags(PrintWriter writer) {
this.writerOut = writer;
Iterator it = tags.iterator();
while (it.hasNext()) {
printAttributeTag(it.next());
}
}
private String formatForXML(String in) {
in = in.replaceAll("<", "<");
in = in.replaceAll(">", ">");
in = in.replaceAll("&", "&");
return in;
}
private int getJavaLnOfHost(Host h) {
Iterator it = h.getTags().iterator();
while (it.hasNext()) {
Tag t = it.next();
// logger.debug(""+t.getClass().toString());
if (t instanceof SourceLnPosTag) {
// logger.debug("t is LineNumberTag");
return ((SourceLnPosTag) t).startLn();
} else if (t instanceof LineNumberTag) {
return (new Integer(((LineNumberTag) t).toString())).intValue();
}
}
return 0;
}
private int getJimpleLnOfHost(Host h) {
Iterator it = h.getTags().iterator();
while (it.hasNext()) {
Tag t = it.next();
if (t instanceof JimpleLineNumberTag) {
return ((JimpleLineNumberTag) t).getStartLineNumber();
}
}
return 0;
}
}