import java.io.FileNotFoundException;
import java.util.*;

interface PrivilegedExceptionAction <E extends Exception> {
    void run() throws E;
}

class AccessController {
    public static <E extends Exception> Object doPrivileged(PrivilegedExceptionAction<E> action) throws E {
        return null;
    }
}
class Test {
    public static void main(String[] args) {
        try {
            AccessController.doPrivileged(
                    new PrivilegedExceptionAction<FileNotFoundException>() {
                        public void run() throws FileNotFoundException {
                        }
                    });
        } catch (FileNotFoundException f) {
        }
    }

// @#@! mock JDK Class does not take params
//    static <T> T create(Class<T> t) throws InstantiationException, IllegalAccessException {
//        return t.newInstance();
//    }
}

//IDEADEV-6390
class Printer<T> {
    private final List<T> _elements;

    private Printer(final Collection<? extends T> col) {
        _elements = new ArrayList<T>(col);
    }

    public static <T> Printer<T> build(final Collection<? extends T> col) {
        return new Printer<T>(col);
    }

    public static <T, S extends T> Printer<T> build(final S... elements) {
        return new Printer<T>(Arrays.asList(elements));
    }

    public void print() {
        for (final T element : _elements) {
            System.out.println(element);
        }

    }

    public static void main(final String[] args) {
        final Printer<?> objects =  build(Integer.valueOf(5), Boolean.TRUE, "A String!"); //this is OK
         objects.print();
    }

}
//end of IDEADEV-6390

//IDEADEV-6738
interface I1<P1 extends I1<P1,P2>, P2 extends I2<P1,P2>>{}
interface I2<P1 extends I1<P1,P2>, P2 extends I2<P1,P2>>{}

class C1 implements I1<C1,C2>{}
class C2 implements I2<C1,C2>{}

class U {
    public static <P1 extends I1<P1,P2>, P2 extends I2<P1,P2>> P1 test(P1 p1) {
        return null;
    }
    {
        C1 c = new C1();
        U.test(c); //this should be OK
    }
}
//end of IDEADEV-6738

///////////////////////////////////
class Err {
    void f() {
        Decl[] extensions = getExtensions(Decl.EXTENSION_POINT_NAME);
    }

    static <T> T[] getExtensions(List<T> tExtensionPointName) {
        return null;
    }

    public static class Decl<K,V> {
        public static List<Decl> EXTENSION_POINT_NAME = null;
    }

}
/////////////////////////////////////