package com.puppycrawl.tools.checkstyle.javadoc;

import java.io.Serializable;

/**
 * Some javadoc.
 * 
 * @since Some javadoc.
 * @version 1.0 //warn //warn
 * @deprecated Some javadoc.
 * @see Some javadoc. //warn
 * @author max //warn
 */
class WithAnnotations1 implements Serializable
{
	/**
     * The client's first name.
     * @serial
     */
    private String fFirstName;
     
    /**
     * The client's first name.
     * @serial
     */
    private String sSecondName;
      
    /**
     * The client's first name.
     * @serialField
     */
    private String tThirdName;
	
    /**
     * Some text.
     * @param aString Some text.
     * @return Some text.
     * @serialData Some javadoc.
     * @deprecated Some text.
     * @throws Exception Some text. //warn
     */
    String method(String aString) throws Exception
    {
        return "null";
    }

    /**
     * Some text.
     * @serialData Some javadoc.
     * @return Some text. //warn
     * @param aString Some text. //warn
     * @throws Exception Some text.
     */
    String method1(String aString) throws Exception
    {
        return "null";
    }

    /**
     * Some text.
     * @throws Exception Some text.
     * @param aString Some text. //warn
     */
    void method2(String aString) throws Exception {}
    
    /**
     * Some text.
     * @deprecated Some text.
     * @throws Exception Some text. //warn
     */
    void method3() throws Exception {}
    
    /**
     * Some text.
     * @return Some text.
     * @throws Exception Some text.
     */
    String method4() throws Exception
    {
        return "null";
    }

    /**
     * Some text.
     * @deprecated Some text.
     * @return Some text. //warn
     * @param aString Some text. //warn
     */
    String method5(String aString)
    {
        return "null";
    }
    
    /**
     * Some text.
     * @param aString Some text.
     * @return Some text.
     * @serialData Some javadoc.
     * @param aInt Some text. //warn
     * @throws Exception Some text.
     * @param aBoolean Some text. //warn
     * @deprecated Some text.
     */
    String method6(String aString, int aInt, boolean aBoolean) throws Exception
    {
        return "null";
    }
    
    /**
     * Some javadoc.
     * 
     * @version 1.0
     * @since Some javadoc.
     * @serialData Some javadoc.
     * @author max //warn
     */
    class InnerClassWithAnnotations
    {
        /**
         * Some text.
         * @return Some text.
         * @deprecated Some text.
         * @param aString Some text. //warn
         * @throws Exception Some text.
         */
        String method(String aString) throws Exception
        {
            return "null";
        }

        /**
         * Some text.
         * @throws Exception Some text.
         * @return Some text. //warn
         * @param aString Some text. //warn
         */
        String method1(String aString) throws Exception
        {
            return "null";
        }

        /**
         * Some text.
         * @serialData Some javadoc.
         * @param aString Some text. //warn
         * @throws Exception Some text.
         */
        void method2(String aString) throws Exception {}
        
        /**
         * Some text.
         * @deprecated Some text.
         * @throws Exception Some text. //warn
         */
        void method3() throws Exception {}
        
        /**
         * Some text.
         * @throws Exception Some text.
         * @serialData Some javadoc.
         * @return Some text. //warn
         */
        String method4() throws Exception
        {
            return "null";
        }

        /**
         * Some text.
         * @param aString Some text.
         * @deprecated Some text.
         * @return Some text. //warn
         */
        String method5(String aString)
        {
            return "null";
        }
        
        /**
         * Some text.
         * @param aString Some text.
         * @return Some text.
         * @param aInt Some text. //warn
         * @throws Exception Some text.
         * @param aBoolean Some text. //warn
         * @deprecated Some text.
         */
        String method6(String aString, int aInt, boolean aBoolean) throws Exception
        {
            return "null";
        }
    }
    
    InnerClassWithAnnotations anon = new InnerClassWithAnnotations()
    {
        /**
         * Some text.
         * @throws Exception Some text.
         * @param aString Some text. //warn
         * @serialData Some javadoc.
         * @deprecated Some text.
         * @return Some text. //warn
         */
        String method(String aString) throws Exception
        {
            return "null";
        }

        /**
         * Some text.
         * @param aString Some text.
         * @throws Exception Some text.
         * @return Some text. //warn
         */
        String method1(String aString) throws Exception
        {
            return "null";
        }

        /**
         * Some text.
         * @throws Exception Some text.
         * @param aString Some text. //warn
         */
        void method2(String aString) throws Exception {}
        
        /**
         * Some text.
         * @deprecated Some text.
         * @throws Exception Some text. //warn
         */
        void method3() throws Exception {}
        
        /**
         * Some text.
         * @throws Exception Some text.
         * @return Some text. //warn
         */
        String method4() throws Exception
        {
            return "null";
        }

        /**
         * Some text.
         * @deprecated Some text.
         * @return Some text. //warn
         * @param aString Some text. //warn
         */
        String method5(String aString)
        {
            return "null";
        }
        
        /**
         * Some text.
         * @param aString Some text.
         * @return Some text.
         * @param aInt Some text. //warn
         * @throws Exception Some text.
         * @param aBoolean Some text. //warn
         * @deprecated Some text.
         */
        String method6(String aString, int aInt, boolean aBoolean) throws Exception
        {
            return "null";
        }
    };
}

/**
 * Some javadoc.
 * 
 * @since Some javadoc.
 * @version 1.0 //warn //warn
 * @deprecated Some javadoc.
 * @see Some javadoc. //warn
 * @author max //warn
 */
enum Foo4 {}

/**
 * Some javadoc.
 * 
 * @version 1.0
 * @since Some javadoc.
 * @serialData Some javadoc.
 * @author max //warn
 */
interface FooIn {}

@@ -42,16 +42,41 @@
 avadoc;%0A
+/** Javadoc for import */
 %0Aimport 
@@ -6591,10 +6591,102 @@
  FooIn %7B
+%0A    /**%0A     * @value tag without specified order by default%0A     */%0A    int CONSTANT = 0;%0A
 %7D%0A

Add test coverage to AtclauseOrder check. #1308