package soot.JastAddJ; import java.util.HashSet;import java.util.LinkedHashSet;import java.io.File;import java.util.*;import beaver.*;import java.util.ArrayList;import java.util.zip.*;import java.io.*;import java.io.FileNotFoundException;import java.util.Collection;import soot.*;import soot.util.*;import soot.jimple.*;import soot.coffi.ClassFile;import soot.coffi.method_info;import soot.coffi.CONSTANT_Utf8_info;import soot.tagkit.SourceFileTag;import soot.coffi.CoffiMethodSource; // load files from a folder public class FolderPart extends PathPart { // Declared in ClassPath.jrag at line 383 private HashMap map = new HashMap(); // Declared in ClassPath.jrag at line 384 private File folder; // Declared in ClassPath.jrag at line 386 public FolderPart(File folder) { this.folder = folder; } // Declared in ClassPath.jrag at line 390 public boolean hasPackage(String name) { return filesInPackage(name) != null; } // Declared in ClassPath.jrag at line 394 public boolean hasCompilationUnit(String canonicalName) { int index = canonicalName.lastIndexOf('.'); String packageName = index == -1 ? "" : canonicalName.substring(0, index); String typeName = canonicalName.substring(index + 1, canonicalName.length()); Collection c = filesInPackage(packageName); boolean result = c != null && c.contains(typeName + fileSuffix()); return result; } // Declared in ClassPath.jrag at line 403 private Collection filesInPackage(String packageName) { if(!map.containsKey(packageName)) { File f = new File(folder, packageName.replace('.', File.separatorChar)); Collection c = Collections.EMPTY_LIST; if(f.exists() && f.isDirectory()) { String[] files = f.list(); if(files.length > 0) { c = new HashSet(); for(int i = 0; i < files.length; i++) c.add(files[i]); } } else c = null; map.put(packageName, c); } return (Collection)map.get(packageName); } // Declared in ClassPath.jrag at line 422 public boolean selectCompilationUnit(String canonicalName) throws IOException { if(hasCompilationUnit(canonicalName)) { String fileName = canonicalName.replace('.', File.separatorChar); File classFile = new File(folder, fileName + fileSuffix()); if(classFile.isFile()) { is = new FileInputStream(classFile); age = classFile.lastModified(); pathName = classFile.getAbsolutePath(); relativeName = fileName + fileSuffix(); fullName = canonicalName; return true; } } return false; } }