// Copyright (c) 2022, 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.

// ***********************************************************************************
// GENERATED FILE. DO NOT EDIT! See GenerateCovariantReturnTypeMethodsTest.java.
// ***********************************************************************************

package com.android.tools.r8.androidapi;

import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexMethod;
import java.util.function.Consumer;

public class CovariantReturnTypeMethods {
  public static void registerMethodsWithCovariantReturnType(
      DexItemFactory factory, Consumer<DexMethod> consumer) {
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/ByteBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/ByteBuffer;")),
            "clear"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/ByteBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/ByteBuffer;")),
            "flip"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/ByteBuffer;"),
            factory.createProto(
                factory.createType("Ljava/nio/ByteBuffer;"), factory.createType("I")),
            "limit"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/ByteBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/ByteBuffer;")),
            "mark"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/ByteBuffer;"),
            factory.createProto(
                factory.createType("Ljava/nio/ByteBuffer;"), factory.createType("I")),
            "position"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/ByteBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/ByteBuffer;")),
            "reset"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/ByteBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/ByteBuffer;")),
            "rewind"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/CharBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/CharBuffer;")),
            "clear"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/CharBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/CharBuffer;")),
            "flip"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/CharBuffer;"),
            factory.createProto(
                factory.createType("Ljava/nio/CharBuffer;"), factory.createType("I")),
            "limit"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/CharBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/CharBuffer;")),
            "mark"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/CharBuffer;"),
            factory.createProto(
                factory.createType("Ljava/nio/CharBuffer;"), factory.createType("I")),
            "position"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/CharBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/CharBuffer;")),
            "reset"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/CharBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/CharBuffer;")),
            "rewind"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/DoubleBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/DoubleBuffer;")),
            "clear"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/DoubleBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/DoubleBuffer;")),
            "flip"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/DoubleBuffer;"),
            factory.createProto(
                factory.createType("Ljava/nio/DoubleBuffer;"), factory.createType("I")),
            "limit"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/DoubleBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/DoubleBuffer;")),
            "mark"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/DoubleBuffer;"),
            factory.createProto(
                factory.createType("Ljava/nio/DoubleBuffer;"), factory.createType("I")),
            "position"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/DoubleBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/DoubleBuffer;")),
            "reset"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/DoubleBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/DoubleBuffer;")),
            "rewind"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/FloatBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/FloatBuffer;")),
            "clear"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/FloatBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/FloatBuffer;")),
            "flip"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/FloatBuffer;"),
            factory.createProto(
                factory.createType("Ljava/nio/FloatBuffer;"), factory.createType("I")),
            "limit"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/FloatBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/FloatBuffer;")),
            "mark"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/FloatBuffer;"),
            factory.createProto(
                factory.createType("Ljava/nio/FloatBuffer;"), factory.createType("I")),
            "position"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/FloatBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/FloatBuffer;")),
            "reset"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/FloatBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/FloatBuffer;")),
            "rewind"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/IntBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/IntBuffer;")),
            "clear"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/IntBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/IntBuffer;")),
            "flip"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/IntBuffer;"),
            factory.createProto(
                factory.createType("Ljava/nio/IntBuffer;"), factory.createType("I")),
            "limit"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/IntBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/IntBuffer;")),
            "mark"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/IntBuffer;"),
            factory.createProto(
                factory.createType("Ljava/nio/IntBuffer;"), factory.createType("I")),
            "position"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/IntBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/IntBuffer;")),
            "reset"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/IntBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/IntBuffer;")),
            "rewind"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/LongBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/LongBuffer;")),
            "clear"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/LongBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/LongBuffer;")),
            "flip"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/LongBuffer;"),
            factory.createProto(
                factory.createType("Ljava/nio/LongBuffer;"), factory.createType("I")),
            "limit"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/LongBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/LongBuffer;")),
            "mark"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/LongBuffer;"),
            factory.createProto(
                factory.createType("Ljava/nio/LongBuffer;"), factory.createType("I")),
            "position"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/LongBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/LongBuffer;")),
            "reset"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/LongBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/LongBuffer;")),
            "rewind"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/ShortBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/ShortBuffer;")),
            "clear"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/ShortBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/ShortBuffer;")),
            "flip"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/ShortBuffer;"),
            factory.createProto(
                factory.createType("Ljava/nio/ShortBuffer;"), factory.createType("I")),
            "limit"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/ShortBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/ShortBuffer;")),
            "mark"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/ShortBuffer;"),
            factory.createProto(
                factory.createType("Ljava/nio/ShortBuffer;"), factory.createType("I")),
            "position"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/ShortBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/ShortBuffer;")),
            "reset"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/nio/ShortBuffer;"),
            factory.createProto(factory.createType("Ljava/nio/ShortBuffer;")),
            "rewind"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/time/LocalDate;"),
            factory.createProto(factory.createType("Ljava/time/chrono/IsoEra;")),
            "getEra"));
    consumer.accept(
        factory.createMethod(
            factory.createType("Ljava/util/concurrent/ConcurrentHashMap;"),
            factory.createProto(
                factory.createType("Ljava/util/concurrent/ConcurrentHashMap$KeySetView;")),
            "keySet"));
  }
}
