package com.siberika.idea.pascal.jps.builder;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.util.io.URLUtil;
import com.siberika.idea.pascal.jps.compiler.CompilerMessager;
import org.jetbrains.jps.incremental.CompileContext;
import org.jetbrains.jps.incremental.messages.BuildMessage;
import org.jetbrains.jps.incremental.messages.CompilerMessage;
import java.util.regex.Matcher;
/**
* Author: George Bakhtadze
* Date: 20/05/2015
*/
class PascalCompilerMessager implements CompilerMessager {
private final CompileContext context;
private final String name;
public PascalCompilerMessager(String name, CompileContext context) {
this.name = name;
this.context = context;
}
static void createMessage(CompilerMessageCategory category, String line, Matcher matcher, CompilerMessager messager) {
int lineNum = -1;
int colNum = -1;
String message = null;
String url = "";
if (null != matcher) {
int groupCount = matcher.groupCount();
if (groupCount >= 4) {
url = matcher.group(2);
if (url != null) {
url = VirtualFileManager.extractPath(VirtualFileManager.constructUrl(URLUtil.FILE_PROTOCOL, url));
}
try {
lineNum = Integer.parseInt(matcher.group(3));
colNum = Integer.parseInt(matcher.group(4));
} catch (NumberFormatException ignore) {}
}
message = matcher.group(groupCount);
}
if (null == message) message = line;
if (CompilerMessageCategory.ERROR.equals(category)) {
messager.error(message, url, lineNum, colNum);
} else if (CompilerMessageCategory.WARNING.equals(category)) {
messager.warning(message, url, lineNum, colNum);
} else {
messager.info(message, url, lineNum, colNum);
}
}
@Override
public void info(String msg, String path, long line, long column) {
context.processMessage(new CompilerMessage(name, BuildMessage.Kind.INFO, msg, path, -1l, -1l, -1l, line, column));
}
@Override
public void warning(String msg, String path, long line, long column) {
context.processMessage(new CompilerMessage(name, BuildMessage.Kind.WARNING, msg, path, -1l, -1l, -1l, line, column));
}
@Override
public void error(String msg, String path, long line, long column) {
context.processMessage(new CompilerMessage(name, BuildMessage.Kind.ERROR, msg, path, -1l, -1l, -1l, line, column));
}
}