public abstract interface foo/Ann : java/lang/Object, java/lang/annotation/Annotation {

}

public abstract interface foo/Ann2 : java/lang/Object, java/lang/annotation/Annotation {

}

public abstract interface foo/Ann3 : java/lang/Object, java/lang/annotation/Annotation {

}

public abstract interface foo/Ann4 : java/lang/Object, java/lang/annotation/Annotation {

}

<T:Ljava/lang/Object;>Ljava/lang/Object;
public final class foo/Bar : java/lang/Object {
    public void <init>()
}

public final class foo/Kotlin : java/lang/Object {
    public void <init>()

    (Lfoo/Outer$Inner<Ljava/lang/String;>;)V
    public final void foo(foo.Outer$Inner s)
        @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0

    ()Lfoo/Outer$Inner<Ljava/lang/String;>;
    public final foo.Outer$Inner foo()
      @Lorg/jetbrains/annotations/Nullable;([]) // invisible

    ([Lfoo/Outer$Inner<Ljava/lang/String;>;)V
    public final void fooArray(foo.Outer$Inner[] s)
      @Lfoo/Ann;([]) : METHOD_FORMAL_PARAMETER 0, null
        @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0

    ()[Lfoo/Outer$Inner<Ljava/lang/String;>;
    public final foo.Outer$Inner[] fooArray()
      @Lorg/jetbrains/annotations/Nullable;([]) // invisible
      @Lfoo/Ann;([]) : METHOD_RETURN, null

    public final void fooArrayIn(java.lang.Object[] s)
      @Lfoo/Ann;([]) : METHOD_FORMAL_PARAMETER 0, null
        @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0

    ()[Lfoo/Outer$Inner<Ljava/lang/String;>;
    public final foo.Outer$Inner[] fooArrayOut()
      @Lorg/jetbrains/annotations/Nullable;([]) // invisible
      @Lfoo/Ann;([]) : METHOD_RETURN, null

    <T:Ljava/lang/Object;>(Lfoo/Bar<-TT;>;)V
    public final void fooGenericIn(foo.Bar s)
      @Lfoo/Ann;([]) : METHOD_FORMAL_PARAMETER 0, null
        @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0

    <T:Ljava/lang/Object;>(Lfoo/Bar<+TT;>;)V
    public final void fooGenericOut(foo.Bar s)
      @Lfoo/Ann;([]) : METHOD_FORMAL_PARAMETER 0, null
        @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0

    <T:Lfoo/Bar<Lfoo/Outer$Inner<Lfoo/Outer;>;>;>()V
    public final void innerClassInBound()
}

<T:Ljava/lang/Object;>Ljava/lang/Object;
public final class foo/Outer$Inner : java/lang/Object {
    final foo.Outer this$0

    ()V
    public void <init>(foo.Outer this$0)
}

public final class foo/Outer : java/lang/Object {
    public void <init>()
}

<T:Lfoo/Bar<Lfoo/Outer$Inner<Lfoo/Outer;>;>;>Ljava/lang/Object;
public final class foo/WithBound : java/lang/Object {
    public void <init>()
}
