以编程方式停用所有 Codan Checkers

Deactivate all Codan Checkers programmatically

如何以编程方式为我的内容类型或在我的编辑器中停用所有 Codan Checkers?

我知道我可以在 Window -> Preferences -> C/C++ -> Code Analysis 中关闭跳棋。但我需要以编程方式执行此操作。

一种实现方法是修改 org.eclipse.cdt.codan.internal.core.CodanRunner 中的方法 runInEditor()processResource()

public static void runInEditor(Object model, IResource resource, IProgressMonitor monitor) {
    if (resource != null && !resource.toString().endsWith("blub)) {
        processResource(resource, model, CheckerLaunchMode.RUN_AS_YOU_TYPE, monitor);
    }
}

public static void processResource(IResource resource, CheckerLaunchMode checkerLaunchMode, IProgressMonitor monitor) {
    if (resource != null && !resource.toString().endsWith("blub")) {
        processResource(resource, null, checkerLaunchMode, monitor);
    }
}

对于 Unresolved Inclusion 警告,我可以覆盖 CPreprocessor 并且 return 在覆盖的 handleProblem() 方法中什么都不做。

有没有办法在不修改 CDT 代码的情况下抑制 Codan Checkers?

您应该可以使用 org.eclipse.cdt.codan.core.checkerEnablement 扩展点执行此操作。

我找不到为它生成的文档,但您可以看到它的架构 here

扩展点允许您指定一个 class 继承自 org.eclipse.cdt.codan.internal.core.ICheckerEnablementVerifier 并提供一个方法 boolean isCheckerEnabled(IChecker, IResource, CheckerLaunchMode) 来确定给定的检查器是否可以 运行 在给定的资源上在给定的启动模式下。如果任何启用验证器 returns 为假,则检查器不是 运行.

在插件的 plugin.xml:

中注册您自己的 ICheckerEnablementVerifier 实现
<extension
    point="org.eclipse.cdt.codan.core.checkerEnablement">
  <verifier class="path.to.MyCheckerEnablementVerifier" />
</extension>

以下实现检查内容类型:

public class MyCheckerEnablementVerifier implements ICheckerEnablementVerifier {

    @Override
    public boolean isCheckerEnabled(IChecker checker, IResource resource, CheckerLaunchMode mode) {
        IContentTypeManager contentTypeManager = Platform.getContentTypeManager();
        IContentType contentType = contentTypeManager.findContentTypeFor(resource.getLocation().toOSString());
        if (contentType.getId().equals("contenttypeid")) {
            return false;
        } else {
            return true;
        }
    }
}