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

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.List;
import java.util.Map;

/**
 *
 * @author Ranides Atterwim {@literal <ranides@gmail.com>}
 */
public class ForIArguments {
    
    public ForIArguments(List<String> list) { }
    
    public ForIArguments(int a, int b) { }
    
    public ForIArguments() { }
    
    public void fun1(int a, int b) { }
    
    public void fun2(float a, float b) { }
    
    public void fun3(Integer ia, Integer ib) { }
    
    public void fun4(Map<Integer, String> map) { }
    
    public void fun5(List<Integer> ilist) { }
    
    public void fun6(List<String> slist) { }
    
    public void fun7(char x, boolean y) { }
    
    public void fun8(boolean x, char y) { }
    
    public void fun9(
        @Deprecated boolean reserved, 
        @AboutParam(name = "yparam") List<String> list
    ) { }

    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.PARAMETER})
    public @interface AboutParam {

        String name() default "";

        String partName() default "";

        String targetNamespace() default "";

        Mode mode() default Mode.IN;

        boolean header() default false;

        enum Mode { IN, OUT, INOUT }
    }

    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD})
    public @interface AboutMethod {
        String operationName() default "";

        String action() default "";

        boolean exclude() default false;
    }
}
