package com.baselet.custom; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.baselet.control.constants.Constants; public class CompileError { // Pattern for error messages from custom element compiler (1. Group = LineNr, 2. Group = line, 3. Group = error) private static final Pattern error_pattern = Pattern.compile(".*ERROR.*at line ([0-9]+).*\\n(.*)\\n.*\\n(.*)"); // EXAMPLE: // 1. ERROR in C:\Users\Andi\AppData\Local\Temp\CustomElementImpl.java (at line 27) // int y=textHeight(); // ^^^^^^^^^^^^ // Type mismatch: cannot convert from float to int private final int lineNr; private final String line; private final String error; public static List<CompileError> getListFromString(String errorString, int beforecodelines) { List<CompileError> returnList = new ArrayList<CompileError>(); String[] splitErrors = errorString.replaceAll("\r\n", Constants.NEWLINE).split(Constants.NEWLINE + "----------" + Constants.NEWLINE); for (String error : splitErrors) { Matcher m = error_pattern.matcher(error); if (m.find()) { Integer newLineNr = Integer.parseInt(m.group(1)) - beforecodelines; String newLine = m.group(2); String newError = m.group(3); returnList.add(new CompileError(newLineNr, newLine, newError)); } } return returnList; } private CompileError(int lineNr, String line, String error) { super(); this.lineNr = lineNr; this.line = line; this.error = error; } public int getLineNr() { return lineNr; } public String getLine() { return line; } public String getError() { return error; } }