快速修正处理器

org.eclipse.jdt.ui.quickFixProcessors

扩展点的起始版本为 3.0。元素 handledMarkerTypes 的起始版本为 3.2。

此扩展点允许添加快速修正处理器以对 Java 问题提供新的快速修正。

从 3.2 开始,扩展可以指定它能够处理的问题标记类型。它将仅处理这些类型的问题。如果未指定所处理的标记类型,处理器就会仅处理 org.eclipse.jdt.core.problem、org.eclipse.jdt.core.buildpath_problem 和 org.eclipse.jdt.core.task 类型的问题(与 3.2 以前的行为兼容)。

此扩展点支持 enablement 标记。要测试的属性是:

  • compilationUnit: type ICompilationUnit; - 要应用快速辅助的编译单元
  • projectNatures: type Collection; - 当前项目的所有项目性质
  • sourceLevel: type String; - 当前项目的源代码一致性级别
  • <!ELEMENT extension (quickFixProcessor*)>

    <!ATTLIST extension

    point CDATA #REQUIRED

    id    CDATA #IMPLIED

    name  CDATA #IMPLIED>


    <!ELEMENT quickFixProcessor (enablement , handledMarkerTypes*)>

    <!ATTLIST quickFixProcessor

    id                  CDATA #REQUIRED

    name                CDATA #IMPLIED

    class               CDATA #REQUIRED

    requiredSourceLevel CDATA #IMPLIED>


    <!ELEMENT handledMarkerTypes (markerType+)>

    指定此快速修正处理器能够处理的问题的标记类型。如果未指定所处理的标记类型,处理器就会仅处理 org.eclipse.jdt.core.problem、org.eclipse.jdt.core.buildpath_problem 和 org.eclipse.jdt.core.task 类型的问题。



    <!ELEMENT markerType EMPTY>

    <!ATTLIST markerType

    id CDATA #REQUIRED>


    <!ELEMENT enablement (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

    通用根元素。可以在扩展点内使用该元素来定义它的支持表达式。将使用 and 运算符来组合 enablement 表达式的子代。



    <!ELEMENT not (not | and | or | instanceof | test | systemTest | equals | count | with | resolve | adapt | iterate)>

    此元素表示对其子元素表达式求值的结果的 NOT 操作。



    <!ELEMENT and (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

    此元素表示对其所有子元素表达式求值的结果执行 AND 操作。



    <!ELEMENT or (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

    此元素表示对其所有子元素表达式求值的结果执行 OR 操作。



    <!ELEMENT instanceof EMPTY>

    <!ATTLIST instanceof

    value CDATA #REQUIRED>

    此元素用来对焦点中的对象执行 instanceof 检查。如果对象的类型是由属性值指定的类型的子类型,则表达式返回 EvaluationResult.TRUE。否则,将返回 EvaluationResult.FALSE。



    <!ELEMENT test EMPTY>

    <!ATTLIST test

    property CDATA #REQUIRED

    args     CDATA #IMPLIED

    value    CDATA #IMPLIED>

    此元素用来对焦点中对象的属性状态进行评估。可以使用属性测试程序扩展点来扩展可测试属性的集合。如果尚未装入执行实际测试的属性测试程序,则测试表达式返回 EvaluationResult.NOT_LOADED。



    <!ELEMENT systemTest EMPTY>

    <!ATTLIST systemTest

    property CDATA #REQUIRED

    value    CDATA #REQUIRED>

    通过调用 System.getProperty 方法来测试系统属性并将结果与通过值属性指定的值进行比较。



    <!ELEMENT equals EMPTY>

    <!ATTLIST equals

    value CDATA #REQUIRED>

    此元素用来对焦点中的对象执行等于检查。如果对象等于由属性值提供的值,则表达式返回 EvaluationResult.TRUE。否则,将返回 EvaluationResult.FALSE。



    <!ELEMENT count EMPTY>

    <!ATTLIST count

    value CDATA #REQUIRED>

    此元素用来测试集合中的元素数。



    <!ELEMENT with (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

    <!ATTLIST with

    variable CDATA #REQUIRED>

    此元素将把要检查以获取其所有子元素的对象更改为由给定变量引用的对象。如果不能解析变量,则表达式将在对变量求值时抛出 ExpressionException。将使用 and 运算符来组合 with 表达式的子代。



    <!ELEMENT resolve (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

    <!ATTLIST resolve

    variable CDATA #REQUIRED

    args     CDATA #IMPLIED>

    此元素将把要检查以获取其所有子元素的对象更改为由给定变量引用的对象。如果不能解析变量,则表达式将在对变量求值时抛出 ExpressionException。将使用 and 运算符来组合 with 表达式的子代。



    <!ELEMENT adapt (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

    <!ATTLIST adapt

    type CDATA #REQUIRED>

    此元素用来使焦点中的对象适用于由属性类型指定的类型。如果尚未装入适配器或引用的类型,则表达式返回 not loaded。如果类型名称根本不存在,则表达式在求值期间将抛出 ExpressionException。将使用 and 运算符来组合 adapt 表达式的子代。



    <!ELEMENT iterate (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

    <!ATTLIST iterate

    operator (or|and) >

    此元素用来叠代类型为 java.util.Collection 的变量。如果焦点中对象的类型不是 java.util.Collection,则当对表达式求值时将抛出 ExpressionException。



    以下是快速修正处理器添加项的示例:

     

    <extension point=

    "org.eclipse.jdt.ui.quickFixProcessors"

    >

    <quickFixProcessor id=

    "AdvancedQuickFixProcessor"

    name=

    "Advanced Quick Fix Processor"

    requiredSourceLevel=

    "1.5"

    class=

    "com.example.AdvancedQuickFixProcessor"

    >

    <handledMarkerTypes>

    <markerType id=

    "org.eclipse.myplugin.audits"

    />

    </handledMarkerTypes>

    <enablement>

    <with variable=

    "projectNatures"

    >

    <iterate operator=

    "or"

    >

    <equals value=

    "org.eclipse.jdt.core.javanature"

    />

    </iterate>

    </with>

    </enablement>

    </quickFixProcessor>

    </extension>

    提供的类必须实现 org.eclipse.jdt.ui.text.java.IQuickFixProcessor