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