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

import net.ranides.assira.annotations.Meta;
import net.ranides.assira.collection.map.LazyMap;

/**
 *
 * @author Ranides Atterwim <ranides@gmail.com>
 */
@SuppressWarnings({"all","PMD"})
public final class ForClassInspector {
    
    private ForClassInspector() {
        // utility class
    }
    
    public static class NCA {
        
        public void pub1(int i) { }
        
    }
    
    public static class NCB extends NCA {
        
        public void pub1(int i) { }
        
    }
    
    public static class A {
        
        public A() { }
        
        public A(int f) { }
        
        public A(float x, float y) { }
        
        public void pubA(int i) { }
        
        private void prvA(int i) { }
        
        private void prvA(float i) { }
        
        protected void tecA(int i) { }
        
    }
    
    public static class B extends A implements I1 {
        
        public B() { }
        
        public B(double param) { }
        
        public B(String id) { }
        
        public void pubB(int i) { }
        
        private void prvB(int i) { }
        
        protected void tecB(int i) { }
        
    }
    
    public static class C1 extends B  implements I1  {
        
        @Override
        public void pubA(int i) { }
        
        public void pubC1(int i) { }
    }
    
    public static class C2 extends B  implements I1, III3  {
        
        public C2(double param) { }
        
        protected C2(String id) { }
        
        private C2(String id, int x, int y) { }
        
        @Override
        public void pubA(int i) { }
        
        @Override
        public void pubB(int i) { }
        
        public void pubC2(int i) { }
        
        private void prvC2(int i) { }
        
        protected void tecC2(int i) { }
        
        @Override
        protected void tecB(int i) { }
    }
    
    
    public interface I0 { }
    
    public interface I1 { }
    
    public interface I2 { }
    
    public interface I3 { }
    
    public interface II3 extends I3 { }
    
    public interface III3 extends II3, I3 { }
    
    public static class Annotated {
        
        public Annotated(int x, int y) { }
        
        @Meta.Generated
        public Annotated(int x, int y, int z) { }
        
        public void load(int x, int y) { }
        
        @Meta.Generated
        public void load(int x, int y, int z) { }
        
    }
    
    public static class CovariantBoxing {
        
        public void sum1(int a, int b) {  }
        
        public void sum2(Integer a, Integer b) {  }
        
        public void sum3(Number a, Number b) {  }
        
        public void sum4(Object a, Object b) {  }
        
        public int div(I1 arg) { throw new UnsupportedOperationException(); }
        
        public Integer div(I2 arg) { throw new UnsupportedOperationException(); }
        
        public Number div(I3 arg) { throw new UnsupportedOperationException(); }
        
        public Object div(I0 arg) { throw new UnsupportedOperationException(); }
        
    }
    
    public static class MapA extends LazyMap<String, Integer> {
        @Override
        public Integer apply(String source) {
            throw new UnsupportedOperationException();
        }
    }
    
    public static class MapB extends MapA {
        @Override
        public Integer apply(String source) {
            throw new UnsupportedOperationException();
        }
        protected void refresh() {
            throw new UnsupportedOperationException();
        }
    }
    
    public static class MapC extends MapB { }
    
    public interface IntA { }
    
    public interface IntB { }
    
    public class CA implements IntA { }
    
    public class CB extends CA implements IntB { }
    
    public class CC extends CB { }
}
