package test.pkg;

import android.support.annotation.CallSuper;

import java.util.List;
import java.util.Map;

@SuppressWarnings("UnusedDeclaration")
public class CallSuperTest {
    private static class Child extends Parent {
        protected void test1() { // ERROR
        }

        protected void test2() { // ERROR
        }

        protected void test3() { // ERROR
        }

        protected void test4(int arg) { // ERROR
        }

        protected void test4(String arg) { // OK
        }

        protected void test5(int arg1, boolean arg2, Map<List<String>,?> arg3,  // ERROR
                             int[][] arg4, int... arg5) {
        }

        protected void test5() { // ERROR
            super.test6(); // (wrong super)
        }

        protected void test6() { // OK
            int x = 5;
            super.test6();
            System.out.println(x);
        }
    }

    private static class Parent extends ParentParent {
        @CallSuper
        protected void test1() {
        }

        protected void test3() {
            super.test3();
        }

        @CallSuper
        protected void test4(int arg) {
        }

        protected void test4(String arg) {
        }

        @CallSuper
        protected void test5() {
        }

        @CallSuper
        protected void test5(int arg1, boolean arg2, Map<List<String>,?> arg3,
                             int[][] arg4, int... arg5) {
        }
    }

    private static class ParentParent extends ParentParentParent {
        @CallSuper
        protected void test2() {
        }

        @CallSuper
        protected void test3() {
        }

        @CallSuper
        protected void test6() {
        }

        @CallSuper
        protected void test7() {
        }


    }

    private static class ParentParentParent {

    }
}
