/* Soot - a J*va Optimization Framework
* Copyright (C) 2004 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.*;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.ui.texteditor.MarkerUtilities;
public class SootAttrJavaIconGenerator implements Runnable{
private IFile rec;
private SootAttributesHandler handler;
public void run(){
removeOldMarkers();
addSootAttributeMarkers();
}
private boolean typesContainsOneOf(ArrayList list){
boolean result = false;
Iterator it = list.iterator();
while (it.hasNext()){
if (getHandler().getTypesToShow().contains(it.next())) {
result = true;
break;
}
}
return result;
}
public void addSootAttributeMarkers(){//SootAttributesHandler handler, IFile rec) {
if (getHandler().getAttrList() == null) return;
Iterator it = getHandler().getAttrList().iterator();
HashMap markerAttr = new HashMap();
while (it.hasNext()) {
SootAttribute sa = (SootAttribute)it.next();
if (getHandler().isShowAllTypes() || typesContainsOneOf(sa.getAnalysisTypes())) {
if (((sa.getAllTextAttrs("<br>") == null) || (sa.getAllTextAttrs("<br>").length() == 0)) &&
((sa.getAllLinkAttrs() == null) || (sa.getAllLinkAttrs().size() ==0))) continue;
markerAttr.put(IMarker.LINE_NUMBER, new Integer(sa.getJavaStartLn()));
try {
MarkerUtilities.createMarker(getRec(), markerAttr, "ca.mcgill.sable.soot.sootattributemarker");
}
catch(CoreException e) {
System.out.println(e.getMessage());
}
}
}
}
public void removeOldMarkers(){//IFile file){
try{
getRec().deleteMarkers("ca.mcgill.sable.soot.sootattributemarker", true, IResource.DEPTH_INFINITE);
}
catch(CoreException e){
}
}
/**
* @return
*/
public SootAttributesHandler getHandler() {
return handler;
}
/**
* @return
*/
public IFile getRec() {
return rec;
}
/**
* @param handler
*/
public void setHandler(SootAttributesHandler handler) {
this.handler = handler;
}
/**
* @param file
*/
public void setRec(IFile file) {
rec = file;
}
}