package org.erlide.core.internal.builder;
import java.util.Iterator;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.erlide.engine.MarkerUtils;
import com.google.common.base.Splitter;
public class ErlcMessageParser implements IMessageParser {
private final IProject project;
public ErlcMessageParser(final IProject project) {
this.project = project;
}
/**
* Parses messages from erlc and creates the markers on the appropriate
* resource. Returns true if any marker was created.
*
* Format is filename:line: message
*
*/
@Override
public boolean createMarkers(final String msg) {
boolean result = false;
final Iterable<String> pars = Splitter.on(':').limit(3).split(msg);
if (pars.iterator().next().equals("ERROR")) {
MarkerUtils.createProblemMarker(project, null, pars.iterator().next(), -1,
IMarker.SEVERITY_ERROR);
result = true;
} else {
final Iterator<String> iterator = pars.iterator();
try {
final String filename = iterator.next();
final int line = Integer.parseInt(iterator.next());
final String rawmessage = iterator.next().trim();
String message;
int severity;
if (rawmessage.startsWith("Warning: ")) {
message = rawmessage.substring("Warning: ".length());
severity = IMarker.SEVERITY_WARNING;
} else {
message = rawmessage;
severity = IMarker.SEVERITY_ERROR;
}
final IResource resource = project.findMember(filename);
if (resource != null) {
MarkerUtils.createProblemMarker(resource, null, message, line,
severity);
result = true;
}
} catch (final Exception e) {
}
}
return result;
}
}