// Path: core/src/main/java/com/pascalwelsch/compositeandroid/core/AbstractDelegate.java
// public class AbstractDelegate<T, P extends AbstractPlugin> {
// 
//     protected final T mOriginal;
// 
//     protected List<P> mPlugins = new CopyOnWriteArrayList<>();
// 
//     public AbstractDelegate(final T original) {
//         mOriginal = original;
//     }
// 
//     @SuppressWarnings("unchecked")
//     public Removable addPlugin(final P plugin) {
//         plugin.addToDelegate(this, mOriginal);
//         mPlugins.add(plugin);
// 
//         return new Removable() {
//             @Override
//             public void remove() {
//                 mPlugins.remove(plugin);
//                 plugin.removeFromDelegate();
//             }
//         };
//     }
// 
//     public T getOriginal() {
//         return mOriginal;
//     }
// 
// }
// 
// Path: core/src/main/java/com/pascalwelsch/compositeandroid/core/CallFun0.java
// public abstract class CallFun0<R> extends NamedSuperCall {
// 
//     public CallFun0(final String methodName) {
//         super(methodName);
//     }
// 
//     public abstract R call();
// }
// 
// Path: core/src/main/java/com/pascalwelsch/compositeandroid/core/CallFun1.java
// public abstract class CallFun1<R, T1> extends NamedSuperCall {
// 
//     public CallFun1(final String methodName) {
//         super(methodName);
//     }
// 
//     public abstract R call(final T1 p1);
// }
// 
// Path: core/src/main/java/com/pascalwelsch/compositeandroid/core/CallFun2.java
// public abstract class CallFun2<R, T1, T2> extends NamedSuperCall {
// 
//     public CallFun2(final String methodName) {
//         super(methodName);
//     }
// 
//     public abstract R call(final T1 p1, final T2 p2);
// }
// 
// Path: core/src/main/java/com/pascalwelsch/compositeandroid/core/CallVoid0.java
// public abstract class CallVoid0 extends NamedSuperCall {
// 
//     public CallVoid0(final String methodName) {
//         super(methodName);
//     }
// 
//     public abstract void call();
// }
// 
// Path: core/src/main/java/com/pascalwelsch/compositeandroid/core/CallVoid1.java
// public abstract class CallVoid1<T1> extends NamedSuperCall {
// 
//     public CallVoid1(final String methodName) {
//         super(methodName);
//     }
// 
//     public abstract void call(final T1 p1);
// }
// 
// Path: core/src/main/java/com/pascalwelsch/compositeandroid/core/CallVoid2.java
// public abstract class CallVoid2<T1, T2> extends NamedSuperCall {
// 
//     public CallVoid2(final String methodName) {
//         super(methodName);
//     }
// 
//     public abstract void call(final T1 p1, final T2 p2);
// }
// 
// Path: core/src/main/java/com/pascalwelsch/compositeandroid/core/Removable.java
// public interface Removable {
// 
//     void remove();
// }


import android.animation.Animator;
import android.app.Activity;
import android.app.Dialog;
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.ViewModelStore;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentSender;
import android.content.IntentSender.SendIntentException;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.LoaderManager;
import android.support.v4.app.SharedElementCallback;
import android.util.AttributeSet;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import com.pascalwelsch.compositeandroid.core.AbstractDelegate;
import com.pascalwelsch.compositeandroid.core.CallFun0;
import com.pascalwelsch.compositeandroid.core.CallFun1;
import com.pascalwelsch.compositeandroid.core.CallFun2;
import com.pascalwelsch.compositeandroid.core.CallVoid0;
import com.pascalwelsch.compositeandroid.core.CallVoid1;
import com.pascalwelsch.compositeandroid.core.CallVoid2;
import com.pascalwelsch.compositeandroid.core.Removable;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ListIterator;
    public Context getContext() {
        return mFragmentDelegate.getContext();
    }

    public Dialog getDialog() {
        if (mPlugins.isEmpty()) {
            return getOriginal().super_getDialog();
        }

        final ListIterator<DialogFragmentPlugin> iterator = mPlugins.listIterator(mPlugins.size());

        final CallFun0<Dialog> superCall = new CallFun0<Dialog>("getDialog()") {

            @Override
            public Dialog call() {
                if (iterator.hasPrevious()) {
                    return iterator.previous().getDialog(this);
                } else {
                    return getOriginal().super_getDialog();
                }
            }
        };
        return superCall.call();
    }

    public Object getEnterTransition() {
        return mFragmentDelegate.getEnterTransition();
    }

    public void setEnterTransition(@Nullable Object transition) {
// Path: core/src/main/java/com/pascalwelsch/compositeandroid/core/AbstractDelegate.java
// public class AbstractDelegate<T, P extends AbstractPlugin> {
// 
//     protected final T mOriginal;
// 
//     protected List<P> mPlugins = new CopyOnWriteArrayList<>();
// 
//     public AbstractDelegate(final T original) {
//         mOriginal = original;
//     }
// 
//     @SuppressWarnings("unchecked")
//     public Removable addPlugin(final P plugin) {
//         plugin.addToDelegate(this, mOriginal);
//         mPlugins.add(plugin);
// 
//         return new Removable() {
//             @Override
//             public void remove() {
//                 mPlugins.remove(plugin);
//                 plugin.removeFromDelegate();
//             }
//         };
//     }
// 
//     public T getOriginal() {
//         return mOriginal;
//     }
// 
// }
// 
// Path: core/src/main/java/com/pascalwelsch/compositeandroid/core/CallFun0.java
// public abstract class CallFun0<R> extends NamedSuperCall {
// 
//     public CallFun0(final String methodName) {
//         super(methodName);
//     }
// 
//     public abstract R call();
// }
// 
// Path: core/src/main/java/com/pascalwelsch/compositeandroid/core/CallFun1.java
// public abstract class CallFun1<R, T1> extends NamedSuperCall {
// 
//     public CallFun1(final String methodName) {
//         super(methodName);
//     }
// 
//     public abstract R call(final T1 p1);
// }
// 
// Path: core/src/main/java/com/pascalwelsch/compositeandroid/core/CallFun2.java
// public abstract class CallFun2<R, T1, T2> extends NamedSuperCall {
// 
//     public CallFun2(final String methodName) {
//         super(methodName);
//     }
// 
//     public abstract R call(final T1 p1, final T2 p2);
// }
// 
// Path: core/src/main/java/com/pascalwelsch/compositeandroid/core/CallVoid0.java
// public abstract class CallVoid0 extends NamedSuperCall {
// 
//     public CallVoid0(final String methodName) {
//         super(methodName);
//     }
// 
//     public abstract void call();
// }
// 
// Path: core/src/main/java/com/pascalwelsch/compositeandroid/core/CallVoid1.java
// public abstract class CallVoid1<T1> extends NamedSuperCall {
// 
//     public CallVoid1(final String methodName) {
//         super(methodName);
//     }
// 
//     public abstract void call(final T1 p1);
// }
// 
// Path: core/src/main/java/com/pascalwelsch/compositeandroid/core/CallVoid2.java
// public abstract class CallVoid2<T1, T2> extends NamedSuperCall {
// 
//     public CallVoid2(final String methodName) {
//         super(methodName);
//     }
// 
//     public abstract void call(final T1 p1, final T2 p2);
// }
// 
// Path: core/src/main/java/com/pascalwelsch/compositeandroid/core/Removable.java
// public interface Removable {
// 
//     void remove();
// }


// Path: fragment/src/main/java/com/pascalwelsch/compositeandroid/fragment/DialogFragmentDelegate.java
import android.animation.Animator;
import android.app.Activity;
import android.app.Dialog;
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.ViewModelStore;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentSender;
import android.content.IntentSender.SendIntentException;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.LoaderManager;
import android.support.v4.app.SharedElementCallback;
import android.util.AttributeSet;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import com.pascalwelsch.compositeandroid.core.AbstractDelegate;
import com.pascalwelsch.compositeandroid.core.CallFun0;
import com.pascalwelsch.compositeandroid.core.CallFun1;
import com.pascalwelsch.compositeandroid.core.CallFun2;
import com.pascalwelsch.compositeandroid.core.CallVoid0;
import com.pascalwelsch.compositeandroid.core.CallVoid1;
import com.pascalwelsch.compositeandroid.core.CallVoid2;
import com.pascalwelsch.compositeandroid.core.Removable;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ListIterator;

    public Context getContext() {
        return mFragmentDelegate.getContext();
    }

    public Dialog getDialog() {
        if (mPlugins.isEmpty()) {
            return getOriginal().super_getDialog();
        }

        final ListIterator<DialogFragmentPlugin> iterator = mPlugins.listIterator(mPlugins.size());

        final CallFun0<Dialog> superCall = new CallFun0<Dialog>("getDialog()") {

            @Override
            public Dialog call() {
                if (iterator.hasPrevious()) {
                    return iterator.previous().getDialog(this);
                } else {
                    return getOriginal().super_getDialog();
                }
            }
        };
        return superCall.call();
    }

    public Object getEnterTransition() {
        return mFragmentDelegate.getEnterTransition();
    }

    public void setEnterTransition(@Nullable Object transition) {
        mFragmentDelegate.setEnterTransition(transition);