package x10.parser;
import polyglot.util.SilentErrorQueue;
import polyglot.util.ErrorInfo;
import polyglot.util.Position;
import polyglot.main.Main;
import java.util.ArrayList;
import java.io.File;
import x10.util.RunTestSuite;
/**
* Runs the compiler on a single source file (args[0])
* and add "// ERR" markers on the lines with errors.
* The errors can only appear in args[0].
*/
public class AddErrMarkers {
public static void main(String[] args) {
if (args.length==0) {
System.err.println("You need to run AddErrMarkers like the x10 compiler, with at least one argument: INPUT_OUTPUT_FILE\nFor example: java AddErrMarkers Bla.x10\n");
System.exit(-1);
}
File source = new File(args[0]);
assert source.exists();
ArrayList<ErrorInfo> errors = RunTestSuite.runCompiler(args);
if (errors.size()==0) {
System.err.println("No errors found.");
return; // no errors
}
System.err.println("Adding "+errors.size()+" ERR markers to file "+source);
ArrayList<String> lines = AutoGenSentences.readFile(source);
// remove old ERR markers
for (int i=0; i<lines.size(); i++) {
final String line = lines.get(i);
final int index = line.indexOf("// ERR");
if (index!=-1) lines.set(i, line.substring(0,index));
}
for (ErrorInfo err : errors) {
final Position position = err.getPosition();
if (position==null || !new File(position.file()).equals(source)) {
System.err.println("Found an error without a position or in a different file:\n"+position+"\nError: "+err);
} else {
int lineNo = position.line()-1; // line no starts with 1
lines.set(lineNo,lines.get(lineNo)+"// ERR ("+err.toString().replace('\n','\t')+")");
}
}
AutoGenSentences.writeFile(source,lines);
}
}