// Copyright (c) 2017, 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 com.android.tools.r8.graph.invokesuper;

import com.android.tools.r8.errors.Unreachable;

/**
 * This class is a stub class needed to compile the dependent Java classes. The actual
 * implementation that will be used at runtime is generated by {@link InvokerClassDump} and {@link
 * InvokerClassFailingDump}.
 */
public class InvokerClass extends SubLevel2 {

  public void invokeSuperMethodOnSubLevel2() {
    stubIsUnreachable();
  }

  public void invokeSuperMethodOnSubLevel1() {
    stubIsUnreachable();
  }

  public void invokeSuperMethodOnSuper() {
    stubIsUnreachable();
  }

  public void invokeSubLevel1MethodOnSubLevel2() {
    stubIsUnreachable();
  }

  public void invokeSubLevel1MethodOnSubLevel1() {
    stubIsUnreachable();
  }

  public void invokeSubLevel1MethodOnSuper() {
    stubIsUnreachable();
  }

  public void invokeSubLevel2MethodOnSubLevel2() {
    stubIsUnreachable();
  }

  public void invokeSubLevel2MethodOnSubClassOfInvokerClass() {
    stubIsUnreachable();
  }

  private static void stubIsUnreachable() {
    throw new Unreachable("Stub should never be called.");
  }
}
