以编程方式停用所有Codan Checkers

问题描述 投票:1回答:1

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

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

一种实现方法是修改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-plugin eclipse-cdt
1个回答
1
投票

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

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

扩展点允许您指定从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;
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.