import java.io.*;
import java.util.*;
import ajparser.*;
class AspectJCollector extends AspectJParser {
protected Statistics stats = new Statistics();
static protected int failures = 0;
AspectJCollector(InputStream in) {
super(in);
}
public boolean parseFile(String filename) throws FileNotFoundException, IOException {
return parseString(loadFile(filename));
}
private StringBuffer loadFile(String fileName) throws FileNotFoundException, IOException {
StringBuffer fileContent = new StringBuffer();
FileReader f = new FileReader(fileName);
char[] buf = new char[1000];
int sz = 0;
int l = 0;
while ( (sz = f.read(buf)) > 0)
{
fileContent.append(buf);
l += sz;
}
fileContent.setLength(l);
return fileContent;
}
boolean parseString(StringBuffer buffer) {
StringReader reader = new StringReader(buffer.toString());
System.out.println(buffer.toString());
ReInit(reader);
try {
long startTime = System.currentTimeMillis();
CompilationUnit();
long parseTime = System.currentTimeMillis() - startTime;
return true;
} catch (ParseException e) {
System.out.println(e.getMessage());
return false;
}
}
public static void main (String[] args) {
AspectJCollector parser = new AspectJCollector(System.in);
if (args.length == 0) {
System.out.println(parserName + ": Reading from standard input . . .");
try {
parser.CompilationUnit();
} catch (ParseException e) {
System.out.println(e.getMessage());
System.out.println(parserName + ": Encountered errors during parse.");
}
} else {
for(int i = 0; i < args.length; i++) {
try {
System.out.println("looking for files...");
Vector files = parser.getFileNames(new File(args[i]), null);
for(int j = 0; j < files.size(); j++) {
System.out.println("analyzing file: " + ((File)files.get(j)).getName());
if(!parser.parseFile(((File)files.get(j)).getPath())) {
System.out.println("failure parsing " + ((File)files.get(j)).getPath() + "!");
failures++;
} else {
parser.stats.file_count++;
}
}
} catch(FileNotFoundException e) {
System.out.println("*** File not found: " + args[i] + ":\n" + e);
} catch(IOException e) {
System.out.println("*** IO error: " + args[i] + ":\n" + e);
}
}
}
parser.printStatistics();
System.out.println("===");
if(failures == 0)
System.out.println("all files have been parsed");
else
System.out.println("" + failures + " file(s) could not been parsed");
}
protected Vector getFileNames(File file, Vector vec) {
if(vec == null)
vec = new Vector();
if(file.isFile()) {
vec.add(file);
return vec;
} else {
System.out.println("including directory: " + file.getPath());
File[] files = file.listFiles(new AspectJFileFilter());
if(files != null) {
for(int i = 0; i < files.length; i++) {
vec = getFileNames(files[i], vec);
}
}
}
return vec;
}
protected void printStatistics() {
stats.print();
}
}