/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.compiler.parser; import com.intellij.openapi.compiler.CompileContext; import com.intellij.openapi.compiler.CompilerMessageCategory; import com.intellij.openapi.fileEditor.OpenFileDescriptor; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import gw.lang.parser.IParseIssue; import gw.lang.parser.exceptions.ParseResultsException; import org.jetbrains.annotations.NotNull; import java.util.List; public class CompilerIssues { private static int reportIssuesImpl(@NotNull CompileContext context, @NotNull VirtualFile file, @NotNull List<IParseIssue> issues, CompilerMessageCategory category) { final Project project = context.getProject(); for (IParseIssue issue : issues) { final String url = VirtualFileManager.constructUrl(LocalFileSystem.PROTOCOL, file.getPath()); final int column = issue.getColumn(); final int line = issue.getLine(); final OpenFileDescriptor descriptor = new OpenFileDescriptor(project, file, issue.getTokenStart()); context.addMessage(category, issue.getUIMessage(), url, line, column, descriptor); } return issues.size(); } /** * Reports issues from exception to compiler context. * * @param context * @param file * @param e * @return {@code true} if errors were reported */ public static boolean reportIssues(@NotNull CompileContext context, @NotNull VirtualFile file, @NotNull ParseResultsException e) { reportIssuesImpl(context, file, e.getParseWarnings(), CompilerMessageCategory.WARNING); final int errorCount = reportIssuesImpl(context, file, e.getParseExceptions(), CompilerMessageCategory.ERROR); return errorCount > 0; } }