首页 > 解决方案 > 以编程方式停用所有 Codan Checkers

问题描述

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

我知道我可以在Window -> Preferences -> C/C++ -> Code Analysis. 但我需要以编程方式做到这一点。

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

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中什么都不做。handleProblem()

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

标签: eclipse-plugineclipse-cdt

解决方案


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

我找不到为其生成的文档,但您可以在此处查看它的架构。

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

ICheckerEnablementVerifier在插件中注册您自己的实现plugin.xml

<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;
        }
    }
}

推荐阅读