/*
 * @author Ranides Atterwim <ranides@gmail.com>
 * @copyright Ranides Atterwim
 * @license WTFPL
 * @url http://ranides.net/projects/assira
 */
package net.ranides.assira.reflection.mockup;

import java.io.Serializable;
import java.util.Comparator;
import java.util.List;
import net.ranides.assira.annotations.Meta;

/**
 *
 * @author Ranides Atterwim <ranides@gmail.com>
 */
@SuppressWarnings("PMD")
public class ForMethodUtils {
    
    public static class Root {
        
        public void fun1(int a) { }
        
        public String fun2(int a) { return null; }
        
        public void fun3(int x, int y) {}
        
        void fun4(String z) {}
        
        private void fun5(float x) { }
        
    }
    
    public static class NoRoot {
        
        public void fun1(int a) { }
        
        public Float fun2(int a) { return null; }
        
    }

    public static class A extends Root {
        
        @Override
        public void fun1(int a) { }
        
        public void fun1c(int a) { }
        
        @Override
        public String fun2(int a) { return null; }
        
        public void fun3(int x, char y) {}
        
        @Override
        void fun4(String z) { }
        
        private strictfp void fun5(float x) { }
        
    }
    
    public static class B extends Root {
        
        public void fun1c(int a) { }
        
    }
    
    public void funV1(int... args) { }
    
    public void funV2(Integer... args) { }
    
    public static class MC implements Comparator<Integer>, Serializable {
        
        private static final long serialVersionUID = 1L;

        @Override
        public int compare(Integer a, Integer b) {
            throw new UnsupportedOperationException();
        }

    }
    
    public static class MCP<T> implements Comparator<T>, Serializable {
        
        private static final long serialVersionUID = 1L;
        
        @Override
        public int compare(T a, T b) {
            throw new UnsupportedOperationException();
        }
        
        public <Q> int fun6(Q a, List<Q> b, int value) {
            throw new UnsupportedOperationException();
        }
        
        public int fun7(List<T> input) {
            throw new UnsupportedOperationException();
        }
        
        public int some1() { 
            return 777;
        }
        
        @Meta.Unsafe
        public Integer some2() { 
            return 444;
        }
        
        @Deprecated
        public Float some3() { 
            throw new UnsupportedOperationException();
        }
        
        @Meta.Unsafe
        @Deprecated
        public void some4() { 
            throw new UnsupportedOperationException();
        }

    }
    
    public static final class C {
        
        public void func1(int x) { }
        
        public void func2(Integer x) { }
        
        public void func3(int x, int y) { }
        
        public void func4(int x) { }
        
        public void func4(String x) { }
        
        public void func5(CharSequence x) { }
        
        public void func6(String x) { }
        
        public void func7(Object x) { }
        
    }
}
