在执行操作之前检查项目错误

时间:2011-10-07 14:14:44

标签: eclipse-plugin

我有一个eclipse插件,它提供了一个菜单项,可以选择该菜单项在当前活动文件上运行命令。我希望插件在当前活动文件上有任何错误时显示警告消息(如在Problems视图中报告的那样),类似于当您尝试运行有错误的java项目时Eclipse的行为。

2 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但我找到了类似于提议的解决方案。执行所描述内容的代码位于org.eclipse.debug.core.model.LaunchConfigurationDelegate中。它检查项目是否有错误,并在需要时显示对话框。以下是Eclipse Luna的相关代码:

/**
 * Returns whether the given project contains any problem markers of the
 * specified severity.
 *
 * @param proj the project to search
 * @return whether the given project contains any problems that should
 *  stop it from launching
 * @throws CoreException if an error occurs while searching for
 *  problem markers
 */
protected boolean existsProblems(IProject proj) throws CoreException {
    IMarker[] markers = proj.findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE);
    if (markers.length > 0) {
        for (int i = 0; i < markers.length; i++) {
            if (isLaunchProblem(markers[i])) {
                return true;
            }
        }
    }
    return false;
}

/**
 * Returns whether the given problem should potentially abort the launch.
 * By default if the problem has an error severity, the problem is considered
 * a potential launch problem. Subclasses may override to specialize error
 * detection.
 *
 * @param problemMarker candidate problem
 * @return whether the given problem should potentially abort the launch
 * @throws CoreException if any exceptions occur while accessing marker attributes
 */
protected boolean isLaunchProblem(IMarker problemMarker) throws CoreException {
    Integer severity = (Integer)problemMarker.getAttribute(IMarker.SEVERITY);
    if (severity != null) {
        return severity.intValue() >= IMarker.SEVERITY_ERROR;
    }

    return false;
}

相同的代码可以在任何IResource上运行,而不是IProject

我设法通过在显示对话框时从调试器挂起并在相关类上设置断点并从那里追溯来轻松找到它。

答案 1 :(得分:0)

错误通常在资源上保存为IMarkers(在您的情况下为IFile),因此您可以在IFile中查询您要查找的标记。

在查找之前,您需要知道标记的类型(通过调试并获取所有当前标记,或者查看在文件验证过程中贡献它们的代码)。

希望有所帮助。