/* Soot - a J*va Optimization Framework * Copyright (C) 2003 Jennifer Lhotak * * This library 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 library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ package ca.mcgill.sable.soot.attributes; import java.util.*; public class SootAttribute { private int javaEndLn; private int javaStartLn; private int jimpleEndLn; private int jimpleStartLn; private int jimpleStartPos; private int jimpleEndPos; private int javaStartPos; private int javaEndPos; private ArrayList colorList; private ArrayList textList; private ArrayList linkList; private int jimpleLength; private int javaLength; public ArrayList getAnalysisTypes(){ ArrayList types = new ArrayList(); if (getTextList() != null){ Iterator it = getTextList().iterator(); while (it.hasNext()){ TextAttribute ta = (TextAttribute)it.next(); if (!types.contains(ta.getType())){ types.add(ta.getType()); } } } if (getLinkList() != null){ Iterator lit = getLinkList().iterator(); while (lit.hasNext()){ LinkAttribute la = (LinkAttribute)lit.next(); if (!types.contains(la.getType())){ types.add(la.getType()); } } } if (getColorList() != null){ Iterator cit = getColorList().iterator(); while (cit.hasNext()){ ColorAttribute ca = (ColorAttribute)cit.next(); if (!types.contains(ca.type())){ types.add(ca.type()); } } } return types; } public void addColorAttr(ColorAttribute color){ if (getColorList() == null){ setColorList(new ArrayList()); } getColorList().add(color); } private static final String NEWLINE = "\n"; public void addLinkAttr(LinkAttribute link){ if (getLinkList() == null){ setLinkList(new ArrayList()); } getLinkList().add(link); TextAttribute ta = new TextAttribute(); ta.setInfo(link.getLabel()); ta.setType(link.getType()); addTextAttr(ta); } public ArrayList getAllLinkAttrs(){ return getLinkList(); } public void addTextAttr(TextAttribute text){ if (getTextList() == null){ setTextList(new ArrayList()); } text.setInfo(formatText(text.getInfo())); getTextList().add(text); } public String formatText(String text){ text = text.replaceAll("<", "<"); text = text.replaceAll(">", ">"); text = text.replaceAll("&", "&"); return text; } public StringBuffer getAllTextAttrs(String lineSep){ StringBuffer sb = new StringBuffer(); if (getTextList() != null){ Iterator it = getTextList().iterator(); while (it.hasNext()){ TextAttribute ta = (TextAttribute)it.next(); String next = ta.getInfo(); if (lineSep.equals("<br>")){ // implies java tooltip next = convertHTMLTags(next); } sb.append(next); sb.append(lineSep); } } return sb; } public StringBuffer getTextAttrsForType(String lineSep, String type){ StringBuffer sb = new StringBuffer(); if (getTextList() != null){ Iterator it = getTextList().iterator(); while (it.hasNext()){ TextAttribute ta = (TextAttribute)it.next(); if (ta.getType().equals(type)){ String next = ta.getInfo(); if (lineSep.equals("<br>")){ // implies java tooltip next = convertHTMLTags(next); } sb.append(next); sb.append(lineSep); } } } return sb; } public String convertHTMLTags(String next){ if (next == null) return null; else { next = next.replaceAll("<", "<"); next = next.replaceAll(">", ">"); return next; } } // these two are maybe not accurate maybe // need to check if ln in question is between // the start and end ln's public boolean attrForJimpleLn(int jimple_ln) { if (getJimpleStartLn() == jimple_ln) return true; else return false; } public boolean attrForJavaLn(int java_ln) { if (getJavaStartLn() == java_ln) return true; else return false; } public SootAttribute() { } /** * @return */ public int getJimpleEndPos() { return jimpleEndPos; } /** * @return */ public int getJimpleStartPos() { return jimpleStartPos; } /** * @param i */ public void setJimpleEndPos(int i) { jimpleEndPos = i; } /** * @param i */ public void setJimpleStartPos(int i) { jimpleStartPos = i; } /** * @return */ public ArrayList getTextList() { return textList; } /** * @param list */ public void setTextList(ArrayList list) { textList = list; } /** * @return */ public ArrayList getLinkList() { return linkList; } /** * @param list */ public void setLinkList(ArrayList list) { linkList = list; } /** * @return */ public int getJavaEndPos() { return javaEndPos; } /** * @return */ public int getJavaStartPos() { return javaStartPos; } /** * @param i */ public void setJavaEndPos(int i) { javaEndPos = i; } /** * @param i */ public void setJavaStartPos(int i) { javaStartPos = i; } /** * @return */ public int getJavaEndLn() { return javaEndLn; } /** * @return */ public int getJavaStartLn() { return javaStartLn; } /** * @return */ public int getJimpleEndLn() { return jimpleEndLn; } /** * @return */ public int getJimpleStartLn() { return jimpleStartLn; } /** * @param i */ public void setJavaEndLn(int i) { javaEndLn = i; } /** * @param i */ public void setJavaStartLn(int i) { javaStartLn = i; } /** * @param i */ public void setJimpleEndLn(int i) { jimpleEndLn = i; } /** * @param i */ public void setJimpleStartLn(int i) { jimpleStartLn = i; } /** * @return */ public int getJavaLength() { return javaLength; } /** * @return */ public int getJimpleLength() { return jimpleLength; } /** * @param i */ public void setJavaLength(int i) { javaLength = i; } /** * @param i */ public void setJimpleLength(int i) { jimpleLength = i; } /** * @return */ public ArrayList getColorList() { return colorList; } /** * @param list */ public void setColorList(ArrayList list) { colorList = list; } }