package test;

/**
 * public abstract class test/BundleProperty<T#0 (* AA *)> : test/NullableBundleProperty<T#0> {
 *
 *   // signature: <init>(Ljava/lang/String;)V
 *   public constructor(key: kotlin/String?)
 *
 *   // signature: getValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object;
 *   public final operator fun getValue(thisRef: kotlin/Any, property: kotlin/reflect/KProperty<*>): T#0
 *
 *   // signature: setNullableValue(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
 *   public final fun setNullableValue(bundle: kotlin/Any, key: kotlin/String, value: T#0?): kotlin/Unit
 *
 *   // signature: setValue(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
 *   public abstract fun setValue(bundle: kotlin/Any, key: kotlin/String, value: T#0): kotlin/Unit
 *
 *   // signature: setValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;Ljava/lang/Object;)V
 *   public final operator fun setValue(thisRef: kotlin/Any, property: kotlin/reflect/KProperty<*>, value: T#0?): kotlin/Unit
 *
 *   // module name: main
 * }
 */
@kotlin.Metadata()
public abstract class BundleProperty<AA extends java.lang.Object> extends test.NullableBundleProperty<AA> {

    public BundleProperty(@org.jetbrains.annotations.Nullable()
    java.lang.String key) {
        super(null);
    }

    @java.lang.Override()
    public final void setValue(@org.jetbrains.annotations.NotNull()
    java.lang.Object thisRef, @org.jetbrains.annotations.NotNull()
    kotlin.reflect.KProperty<?> property, @org.jetbrains.annotations.Nullable()
    AA value) {
    }

    @java.lang.Override()
    public final AA getValue(@org.jetbrains.annotations.NotNull()
    java.lang.Object thisRef, @org.jetbrains.annotations.NotNull()
    kotlin.reflect.KProperty<?> property) {
        return null;
    }

    @java.lang.Override()
    public final void setNullableValue(@org.jetbrains.annotations.NotNull()
    java.lang.Object bundle, @org.jetbrains.annotations.NotNull()
    java.lang.String key, @org.jetbrains.annotations.Nullable()
    AA value) {
    }

    public abstract void setValue(@org.jetbrains.annotations.NotNull()
    java.lang.Object bundle, @org.jetbrains.annotations.NotNull()
    java.lang.String key, AA value);
}

////////////////////

package test;

/**
 * package {
 *
 *   // signature: charSequence(Ljava/lang/String;)Ltest/BundleProperty;
 *   public final inline fun charSequence(key: kotlin/String? (* = ... *)): test/BundleProperty<kotlin/CharSequence>
 *
 *   // module name: main
 * }
 */
@kotlin.Metadata()
@kotlin.Suppress(names = {"NOTHING_TO_INLINE"})
public final class Kt27126Kt {

    @org.jetbrains.annotations.NotNull()
    public static final test.BundleProperty<java.lang.CharSequence> charSequence(@org.jetbrains.annotations.Nullable()
    java.lang.String key) {
        return null;
    }
}

////////////////////

package test;

/**
 * public abstract class test/NullableBundleProperty<T#0 (* EE *)> : kotlin/properties/ReadWriteProperty<kotlin/Any, T#0?> {
 *
 *   // signature: <init>(Ljava/lang/String;)V
 *   public constructor(key: kotlin/String?)
 *
 *   // signature: getValue(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
 *   public abstract fun getValue(bundle: kotlin/Any, key: kotlin/String): T#0?
 *
 *   // signature: getValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object;
 *   public open operator fun getValue(thisRef: kotlin/Any, property: kotlin/reflect/KProperty<*>): T#0?
 *
 *   // signature: setNullableValue(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
 *   public abstract fun setNullableValue(bundle: kotlin/Any, key: kotlin/String, value: T#0?): kotlin/Unit
 *
 *   // signature: setValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;Ljava/lang/Object;)V
 *   public open operator fun setValue(thisRef: kotlin/Any, property: kotlin/reflect/KProperty<*>, value: T#0?): kotlin/Unit
 *
 *   // signature: toKey(Lkotlin/reflect/KProperty;)Ljava/lang/String;
 *   private final inline fun kotlin/reflect/KProperty<*>.toKey(): kotlin/String
 *
 *   // field: key:Ljava/lang/String;
 *   private final val key: kotlin/String?
 *     private final get
 *
 *   // module name: main
 * }
 */
@kotlin.Metadata()
public abstract class NullableBundleProperty<EE extends java.lang.Object> implements kotlin.properties.ReadWriteProperty<java.lang.Object, EE> {
    @org.jetbrains.annotations.Nullable()
    private final java.lang.String key = null;

    public NullableBundleProperty(@org.jetbrains.annotations.Nullable()
    java.lang.String key) {
        super();
    }

    private final java.lang.String toKey(kotlin.reflect.KProperty<?> $this$toKey) {
        return null;
    }

    @java.lang.Override()
    @org.jetbrains.annotations.Nullable()
    public EE getValue(@org.jetbrains.annotations.NotNull()
    java.lang.Object thisRef, @org.jetbrains.annotations.NotNull()
    kotlin.reflect.KProperty<?> property) {
        return null;
    }

    @java.lang.Override()
    public void setValue(@org.jetbrains.annotations.NotNull()
    java.lang.Object thisRef, @org.jetbrains.annotations.NotNull()
    kotlin.reflect.KProperty<?> property, @org.jetbrains.annotations.Nullable()
    EE value) {
    }

    @org.jetbrains.annotations.Nullable()
    public abstract EE getValue(@org.jetbrains.annotations.NotNull()
    java.lang.Object bundle, @org.jetbrains.annotations.NotNull()
    java.lang.String key);

    public abstract void setNullableValue(@org.jetbrains.annotations.NotNull()
    java.lang.Object bundle, @org.jetbrains.annotations.NotNull()
    java.lang.String key, @org.jetbrains.annotations.Nullable()
    EE value);
}
