// 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.cf;

import java.util.*;
import org.objectweb.asm.*;

public class AlwaysNullGetItemTest {
  public static void main(String[] args) {
    try {
      System.out.println(foo());
      System.out.println(bar());
      System.out.println(hello().hello());
      System.out.println(goodbye().hello());
      throw new RuntimeException("Expected NullPointerException");
    } catch (NullPointerException e) {
      System.out.println("NullPointerException");
    }
  }

  private static Object foo() {
    return ((Object[]) null)[0];
  }

  private static Object bar() {
    return getObjectArray()[0];
  }

  private static A hello() {
    return getTypedArray()[0].hello();
  }

  private static A goodbye() {
    return getTypedArray()[0].goodbye();
  }

  private static Object[] getObjectArray() {
    return null;
  }

  private static A[] getTypedArray() {
    return null;
  }

  private static class A {
    A hello() {
      return this;
    }

    A goodbye() {
      return null;
    }
  }
}
