// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

package horizontalclassmerging;

import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;

@NeverClassInline
public class NestHostB {
  @NeverInline
  public NestHostB() {
    privatePrint("NestHostB");
  }

  @NeverInline
  private void privatePrint(String v) {
    System.out.println(v);
  }

  @NeverInline
  private static void privateStaticPrint(String v) {
    System.out.println(v);
  }

  @NeverClassInline
  public static class NestMemberA {
    @NeverInline
    public NestMemberA() {
      NestHostB.privateStaticPrint("NestHostB$NestMemberA");
    }
  }

  @NeverClassInline
  public static class NestMemberB {
    @NeverInline
    public NestMemberB(NestHostB host) {
      host.privatePrint("NestHostB$NestMemberB");
    }
  }
}
