////////////////////////////////////////////////////////////////////////////////
// Test case file for checkstyle.
////////////////////////////////////////////////////////////////////////////////

package com.puppycrawl.tools.checkstyle.filters;

/**
 * Test input for using comments to suppress errors.
 *
 * @author Trevor Robinson
 **/
@SuppressWarnings("foo") // coverage: no following AST
class InputSuppressWarningsFilter
{
    // AST coverage
    @SuppressWarnings("foo") interface I { }
    @SuppressWarnings("foo") enum E { }
    @SuppressWarnings("foo") InputSuppressWarningsFilter() { }
    @SuppressWarnings("foo") @interface A { }

    // include a non-checkstyle suppression; suppression on same line
    @SuppressWarnings("unused") private int I; // should fail MemberNameCheck
    @SuppressWarnings({"membername"})
    private int J; // should NOT fail MemberNameCheck
    private int K; // should fail MemberNameCheck

    // DO NOT REFORMAT: L and X should be on the same line
    @SuppressWarnings(value="membername")
    private int L; private int X; // L should NOT fail, X should

    // test "checkstyle:" prefix
    @SuppressWarnings("checkstyle:ConstantName")
    private static final int m = 0; // should NOT fail ConstantNameCheck
    private static final int n = 0; // should fail ConstantNameCheck

    // test explicit warning alias
    @SuppressWarnings("paramnum")
    // should NOT fail ParameterNumberCheck
    public void needsLotsOfParameters(@SuppressWarnings("unused") int a,
        int b, int c, int d, int e, int f, int g, int h)
    {
        @SuppressWarnings("unused") int z;
        try {
        }
        catch (Exception ex) {
            // should fail IllegalCatchCheck
        }
    }

    // test fully qualified annotation name
    @java.lang.SuppressWarnings("illegalCatch")
    public void needsToCatchException()
    {
        try {
        }
        catch (Exception ex) {
            // should NOT fail IllegalCatchCheck
        }
    }

    enum AnEnum {
        @SuppressWarnings("rawtypes")
        ELEMENT;
    }
    private static final String UNUSED="UnusedDeclaration";

    @SuppressWarnings(UNUSED)
    public void annotationUsingStringConstantValue(){
    }

    @SuppressWarnings("checkstyle:uncommentedmain")
    public static void main(String[] args) {

    }

    static class TestClass1 {
        @SuppressWarnings("uncommentedmain")
        public static void main(String[] args) {

        }
    }

    static class TestClass2 {
        @SuppressWarnings("UncommentedMain")
        public static void main(String[] args) {

        }
    }

    static class TestClass3 {
        @SuppressWarnings("checkstyle:UncommentedMain")
        public static void main(String[] args) {

        }
    }

    @SuppressWarnings("checkstyle:javadoctype")
    public static abstract class Task {
    }
}
