如何以编程方式为我的内容类型或编辑器内部停用所有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?
您应该能够使用org.eclipse.cdt.codan.core.checkerEnablement
扩展点执行此操作。
我找不到为它生成的文档,但您可以在此处查看它的架构。
扩展点允许您指定从org.eclipse.cdt.codan.internal.core.ICheckerEnablementVerifier
继承的类,并提供一个方法boolean isCheckerEnabled(IChecker, IResource, CheckerLaunchMode)
该方法确定给定的检查器是否可以在给定的启动模式下在给定的资源上运行。如果任何启用验证程序返回 false,则不会运行检查器。
在插件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;
}
}
}