<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://findbugs.sourceforge.net/filter/3.0.0" elementFormDefault="unqualified"
    xmlns="http://www.w3.org/2001/XMLSchema" xmlns:fb="http://findbugs.sourceforge.net/filter/3.0.0">

    <element name="FindBugsFilter" type="fb:FindBugsFilterType"></element>

    <element name="Match" type="fb:MatchType"></element>

    <element name="Bug" type="fb:BugType">
        <annotation>
            <documentation>This element specifies a particular bug pattern or patterns to match.
                If more than one attribute is specified on the same Bug element, all bug patterns that match either one of specified
                pattern names, abbreviations, or categories will be matched.</documentation>
        </annotation>
    </element>

    <element name="BugCode" type="fb:BugCodeType">
        <annotation>
            <documentation>This element specifies a particular bug code or multiple bug codes to match.
            </documentation>
        </annotation>
    </element>

    <element name="BugPattern" type="fb:BugPatternType">
        <annotation>
            <documentation>This element specifies a particular bug pattern or multiple patterns to match.</documentation>
        </annotation>
    </element>

    <element name="Priority" type="fb:PriorityType">
        <annotation>
            <documentation>This element matches warnings with a particular priority.
            This is deprecated, 'Confidence' should be used instead</documentation>
        </annotation>
    </element>

    <element name="Confidence" type="fb:ConfidenceType">
        <annotation>
            <documentation>This element matches warnings with a particular confidence.</documentation>
        </annotation>
    </element>

    <element name="Rank" type="fb:RankType">
        <annotation>
            <documentation>This element matches warnings with a particular rank.</documentation>
        </annotation>
    </element>

    <element name="Package" type="fb:PackageType">
        <annotation>
            <documentation>This element matches warnings associated with classes within the package specified using name
                attribute.</documentation>
        </annotation>
    </element>

    <element name="Class" type="fb:ClassType">
        <annotation>
            <documentation>This element matches warnings associated with a particular class.</documentation>
        </annotation>
    </element>

    <element name="Type" type="fb:TypeType">
        <annotation>
            <documentation>This element matches warnings associated with a particular type.</documentation>
        </annotation>
    </element>

    <element name="Source" type="fb:SourceType">
        <annotation>
            <documentation>This element matches warnings associated with a particular source file name.</documentation>
        </annotation>
    </element>

    <element name="Method" type="fb:MethodType">
        <annotation>
            <documentation>This element specifies a method.</documentation>
        </annotation>
    </element>

    <element name="Field" type="fb:FieldType">
        <annotation>
            <documentation>This element specifies a field.</documentation>
        </annotation>
    </element>

    <element name="Local" type="fb:LocalType">
        <annotation>
            <documentation>This element specifies a local variable.</documentation>
        </annotation>
    </element>

    <element name="Or" type="fb:OrType">
        <annotation>
            <documentation>This element combines Match clauses as disjuncts.
            I.e., you can put two Method elements in an Or clause in order to match either method.</documentation>
        </annotation>
    </element>

    <element name="And" type="fb:AndType">
        <annotation>
            <documentation>This element combines Match clauses which both must evaluate to true.
            I.e., you can put Bug and Confidence elements in an And clause in order to match specific bugs with given confidence only.</documentation>
        </annotation>
    </element>

    <element name="Not" type="fb:NotType">
        <annotation>
            <documentation>This element inverts the included child Match.
            I.e., you can put a Bug element in a Not clause in order to match any bug excluding the given one.</documentation>
        </annotation>
    </element>

    <complexType name="FindBugsFilterType">
        <sequence>
            <element ref="fb:Match" maxOccurs="unbounded" minOccurs="0"></element>
        </sequence>
    </complexType>


    <complexType name="BugCodeType">
        <annotation>
            <documentation></documentation>
        </annotation>
        <attribute name="name" type="string">
            <annotation>
                <documentation>A comma-separated list of bug code types. You can find the bug code types for particular warnings by looking at the output produced by the -xml output option (the type attribute of BugInstance elements), or from the bug descriptions document.</documentation>
            </annotation>
        </attribute>
    </complexType>

    <complexType name="BugPatternType">
        <annotation>
            <documentation></documentation>
        </annotation>
        <attribute name="name" type="string">
            <annotation>
                <documentation>A comma-separated list of bug pattern types. You can find the bug pattern types for particular warnings by looking at the output produced by the -xml output option (the type attribute of BugInstance elements), or from the bug descriptions document.</documentation>
            </annotation>
        </attribute>
    </complexType>

    <complexType name="BugType">
        <annotation>
            <documentation></documentation>
        </annotation>
        <attribute name="pattern" type="string">
            <annotation>
                <documentation>A comma-separated list of bug pattern types. You can find the bug pattern types for particular warnings by looking at the output produced by the -xml output option (the type attribute of BugInstance elements), or from the bug descriptions document.</documentation>
            </annotation></attribute>
        <attribute name="code" type="string">
            <annotation>
                <documentation>A comma-separated list of bug abbreviations.</documentation>
            </annotation></attribute>
        <attribute name="category" type="string">
            <annotation>
                <documentation>A comma separated list of bug category names.</documentation>
            </annotation></attribute>
    </complexType>

    <complexType name="ClassType">
        <annotation>
            <documentation></documentation>
        </annotation>
        <attribute name="name" type="string">
            <annotation>
                <documentation>The exact or regex match pattern for a class name. If the name starts with the ~ character the rest of attribute content is interpreted as a Java regular expression.</documentation>
            </annotation></attribute>
        <attribute name="role" type="string">
            <annotation>
                <documentation>The class role</documentation>
            </annotation></attribute>
    </complexType>

    <complexType name="TypeType">
        <annotation>
            <documentation></documentation>
        </annotation>
        <attribute name="descriptor" type="string">
            <annotation>
                <documentation>The exact or regex match pattern for type descriptor. If the descriptor starts with the ~ character the rest of attribute content is interpreted as a Java regular expression.</documentation>
            </annotation></attribute>
        <attribute name="role" type="string">
            <annotation>
                <documentation>The type role</documentation>
            </annotation></attribute>
        <attribute name="typeParameters" type="string">
            <annotation>
                <documentation>The type parameters</documentation>
            </annotation></attribute>
    </complexType>

    <complexType name="SourceType">
        <annotation>
            <documentation></documentation>
        </annotation>
        <attribute name="name" type="string">
            <annotation>
                <documentation>The exact or regex match pattern for a source file name. If the name starts with the ~ character the rest of attribute content is interpreted as a Java regular expression.</documentation>
            </annotation></attribute>
    </complexType>

    <complexType name="FieldType">
        <annotation>
            <documentation></documentation>
        </annotation>
        <attribute name="name" type="string">
            <annotation>
                <documentation>The exact or regex match pattern for a field name. If the name starts with the ~ character the rest of attribute content is interpreted as a Java regular expression.</documentation>
            </annotation></attribute>
        <attribute name="type" type="string">
            <annotation>
                <documentation>Fully qualified type of the field</documentation>
            </annotation></attribute>
        <attribute name="role" type="string">
            <annotation>
                <documentation>The field's role</documentation>
            </annotation></attribute>
    </complexType>

    <complexType name="LocalType">
        <annotation>
            <documentation></documentation>
        </annotation>
        <attribute name="name" type="string">
            <annotation>
                <documentation>The exact or regex match pattern for a local variable name. If the name starts with the ~ character the rest of attribute content is interpreted as a Java regular expression.</documentation></annotation></attribute>
    </complexType>

    <complexType name="MethodType">
        <annotation>
            <documentation></documentation>
        </annotation>
        <attribute name="name" type="string">
            <annotation>
                <documentation>The exact or regex match pattern for a method name.. If the name starts with the ~ character the rest of attribute content is interpreted as a Java regular expression.</documentation>
            </annotation></attribute>
        <attribute name="params" type="string">
            <annotation>
                <documentation>A comma-separated list of the fully qualified  types of the method's parameters.</documentation>
            </annotation></attribute>
        <attribute name="returns" type="string">
            <annotation>
                <documentation>The method's fully qualified return type</documentation>
            </annotation></attribute>
        <attribute name="role" type="string">
            <annotation>
                <documentation>The method's role</documentation>
            </annotation></attribute>
    </complexType>

    <complexType name="PackageType">
        <annotation>
            <documentation></documentation>
        </annotation>
        <attribute name="name" type="string">
            <annotation>
                <documentation>The exact or regex match pattern for a package name. Nested packages are not included (along the lines of Java import statement). If the name starts with the ~ character the rest of attribute content is interpreted as a Java regular expression.</documentation>
            </annotation></attribute>
    </complexType>

    <complexType name="PriorityType">
        <annotation>
            <documentation>Deprecated. Use ConfidenceType instead</documentation>
        </annotation>
        <attribute name="value" type="fb:PriorityValueType">
            <annotation>
                <documentation>1: high-priority warnings, 2: medium-priority warnings, 3: low-priority warnings</documentation>
            </annotation></attribute>
    </complexType>

    <complexType name="ConfidenceType">
        <annotation>
            <documentation></documentation>
        </annotation>
        <attribute name="value" type="fb:ConfidenceValueType">
            <annotation>
                <documentation>1: high-priority warnings, 2: medium-priority warnings, 3: low-priority warnings</documentation>
            </annotation></attribute>
    </complexType>

    <complexType name="RankType">
        <annotation>
            <documentation></documentation>
        </annotation>
        <attribute name="value" type="fb:RankValueType">
            <annotation>
                <documentation>1 to 4 are scariest, 5 to 9 scary, 10 to 14 troubling, and 15 to 20 of concern bugs.</documentation>
            </annotation></attribute>
    </complexType>

    <simpleType name="PriorityValueType">
        <restriction base="int">
            <minInclusive value="1"></minInclusive>
            <maxInclusive value="3"></maxInclusive>
        </restriction>
    </simpleType>

    <simpleType name="ConfidenceValueType">
        <restriction base="int">
            <minInclusive value="1"></minInclusive>
            <maxInclusive value="3"></maxInclusive>
        </restriction>
    </simpleType>

    <simpleType name="RankValueType">
        <restriction base="int">
            <minInclusive value="1"></minInclusive>
            <maxInclusive value="20"></maxInclusive>
        </restriction>
    </simpleType>

    <complexType name="MatchType">
        <sequence maxOccurs="unbounded" minOccurs="0">
            <element ref="fb:Bug" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Class" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Source" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Field" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Local" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Method" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Or" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:And" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Package" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Priority" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Confidence" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Rank" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Not" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:BugCode" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:BugPattern" maxOccurs="unbounded" minOccurs="0"></element>
        </sequence>
    </complexType>

    <complexType name="NotType">
        <annotation>
            <documentation></documentation>
        </annotation>
        <sequence maxOccurs="unbounded" minOccurs="0">
            <element ref="fb:And" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Bug" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:BugCode" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:BugPattern" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Class" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Confidence" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Field" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Local" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Method" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Not" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Or" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Package" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Priority" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Rank" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Source" maxOccurs="unbounded" minOccurs="0"></element>
        </sequence>
    </complexType>

    <complexType name="OrType">
        <annotation>
            <documentation></documentation>
        </annotation>
        <sequence maxOccurs="unbounded" minOccurs="0">
            <element ref="fb:And" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Bug" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:BugCode" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:BugPattern" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Class" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Confidence" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Field" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Local" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Method" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Not" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Or" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Package" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Priority" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Rank" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Source" maxOccurs="unbounded" minOccurs="0"></element>
        </sequence>
    </complexType>

    <complexType name="AndType">
        <annotation>
            <documentation></documentation>
        </annotation>
        <sequence maxOccurs="unbounded" minOccurs="0">
            <element ref="fb:And" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Bug" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:BugCode" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:BugPattern" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Class" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Confidence" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Field" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Local" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Method" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Not" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Or" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Package" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Priority" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Rank" maxOccurs="unbounded" minOccurs="0"></element>
            <element ref="fb:Source" maxOccurs="unbounded" minOccurs="0"></element>
        </sequence>
    </complexType>
</schema>
