// Copyright (c) 2018, 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.ir.regalloc;

import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.junit.Assert.assertThat;

import com.android.tools.r8.TestBase;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import org.junit.Test;

public class B79405526 extends TestBase {
  @Test
  public void test() throws Exception {
    AndroidApp app = compileWithD8(readClasses(TestClass.class));
    CodeInspector inspector = new CodeInspector(app);
    ClassSubject clazz = inspector.clazz(TestClass.class);
    assertThat(clazz, isPresent());
    // Throws if a method in TestClass does not verify.
    runOnArt(app, TestClass.class.getName());
  }

  private static class TestClass {
    public static void main(String[] args) {}

    public void method() {
      Object x = this;
      TestClass y = this;
      nop(null, getObject("", this));
      TestClass z = getObject(null);
      nop(null, getObject("", this, X.Y.getLong(getLong() - 0L)));
      if (getBoolean()) {
        z = getObject(this);
        nop1(null, null);
      }
      nop2(null, null, null, null);
    }

    public static void nop(Object a, Object b, Object... c) {}

    public static void nop1(Object... a) {}

    private void nop2(Object a, Object b, Object c, Object d, Object... e) {}

    public boolean getBoolean() {
      return true;
    }

    public long getLong() {
      return 0L;
    }

    private TestClass getObject(Object a) {
      return null;
    }

    private static TestClass getObject(Object a, Object... c) {
      return null;
    }

    public enum X {
      Y {};

      public long getLong(long var1) {
        return 0L;
      }
    }
  }
}
