源验证器 (org.eclipse.wst.sse.ui.sourcevalidation) 是与编辑器相关还是仅与内容类型相关?

Is the source validator (org.eclipse.wst.sse.ui.sourcevalidation) related with the editor or just with the content-type?

目前我有源代码验证器(org.eclipse.wst.sse.ui.sourcevalidation)来检查 html 源代码:

<extension point="org.eclipse.wst.sse.ui.sourcevalidation">
    <validator
        scope="total"
        class="com.test.HtmlValidator"
        id="com.test.HtmlValidator.total">
        <contentTypeIdentifier
            id="org.eclipse.wst.html.core.htmlsource">
            <partitionType id="org.eclipse.wst.html.HTML_DEFAULT"/>
            <partitionType id="org.eclipse.wst.html.HTML_DECLARATION"/>
            <partitionType id="org.eclipse.wst.html.HTML_COMMENT"/>
        </contentTypeIdentifier>
    </validator>

源验证器在默认 html 编辑器 (org.eclipse.wst.html.core.htmlsource.source) 中按预期工作,但如果我使用 Eclipse 通用编辑器 (org.eclipse.ui.genericeditor.GenericEditor、Eclipse Wild Web Developer 打开相同的文件使用它来打开所有 Web 开发文件)源代码验证器不起作用。

直到我知道源代码验证器直接与内容类型一起工作而不是与编辑器一起工作,我的问题是我应该怎么做才能使验证器与两个编辑器一起工作?

为了解决这个问题我找到了使用org.eclipse.core.filebuffers.documentSetup扩展点的解决方法,这个扩展点执行方法IDocumentSetupParticipant.setup(IDocument document),这个扩展点的优点是它是独立于编辑器。 org.eclipse.core.filebuffers.documentSetup 当使用任何编辑器打开具有特定内容类型的文件时执行。

<extension
       point="org.eclipse.core.filebuffers.documentSetup">
   <participant
      class="setup.HTMLDocumentSetup"
      contentTypeId="org.eclipse.wst.html.core.htmlsource">
    </participant>
 </extension>

在IDocumentSetupParticipant.setup中我们可以注册一个IDocumentListener,这个接口定义了2个方法:

  1. 关于ToBeChanged 的​​文件
  2. 文档已更改

如果我们使用 documentChanged,每次用户在编辑器中键入内容时,该方法都会执行。