package com.google.jstestdriver.idea.execution; import com.google.jstestdriver.idea.common.JsErrorMessage; import com.intellij.execution.filters.Filter; import com.intellij.execution.filters.HyperlinkInfo; import com.intellij.execution.filters.OpenFileHyperlinkInfo; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ObjectUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.File; public class JsErrorFilter implements Filter { private static final Logger LOG = Logger.getInstance(JsErrorFilter.class); private final Project myProject; private final File myBasePath; public JsErrorFilter(@NotNull Project project, @NotNull File basePath) { myProject = project; myBasePath = basePath; } @Nullable @Override public Result applyFilter(String line, int entireLength) { JsErrorMessage message; try { message = JsErrorMessage.parseFromText(line, myBasePath); } catch (Exception e) { LOG.error("Can't parse error message from '" + line + "'", e); return null; } if (message == null) { return null; } VirtualFile virtualFile = VfsUtil.findFileByIoFile(message.getFileWithError(), false); if (virtualFile == null || !virtualFile.isValid()) { return null; } int column = ObjectUtils.notNull(message.getColumnNumber(), 0); HyperlinkInfo hyperlinkInfo = new OpenFileHyperlinkInfo(myProject, virtualFile, message.getLineNumber() - 1, column); return new Filter.Result(message.getHyperlinkStartInclusiveInd(), message.getHyperlinkEndExclusiveInd(), hyperlinkInfo); } }