我如何以编程方式为我的内容类型或在编辑器中停用所有的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?
您应该可以使用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;
}
}
}