// Path: app/src/main/java/com/vestrel00/daggerbutterknifemvp/ui/common/view/BaseFragmentModule.java
// @Module
// public abstract class BaseFragmentModule {
// 
//     /**
//      * See {@link BaseChildFragmentModule} class documentation regarding the need for this name.
//      */
//     public static final String FRAGMENT = "BaseFragmentModule.fragment";
// 
//     static final String CHILD_FRAGMENT_MANAGER = "BaseFragmentModule.childFragmentManager";
// 
//     @Provides
//     @Named(CHILD_FRAGMENT_MANAGER)
//     @PerFragment
//     static FragmentManager childFragmentManager(@Named(FRAGMENT) Fragment fragment) {
//         return fragment.getChildFragmentManager();
//     }
// }
// 
// Path: app/src/main/java/com/vestrel00/daggerbutterknifemvp/ui/example_3/child_fragment/view/Example3ChildFragment.java
// public final class Example3ChildFragment extends BaseViewFragment<Example3ChildPresenter>
//         implements Example3ChildView {
// 
//     @BindView(R.id.some_text)
//     TextView someText;
// 
//     @Override
//     public View onCreateView(LayoutInflater inflater, ViewGroup container,
//                              Bundle savedInstanceState) {
//         return inflater.inflate(R.layout.example_3_child_fragment, container, false);
//     }
// 
//     @Override
//     public void showSomething(String something) {
//         someText.setText(something);
//     }
// 
//     @OnClick(R.id.do_something)
//     void onDoSomethingClicked() {
//         presenter.onDoSomething();
//     }
// }
// 
// Path: app/src/main/java/com/vestrel00/daggerbutterknifemvp/ui/example_3/child_fragment/view/Example3ChildFragmentModule.java
// @Module(includes = {
//         BaseChildFragmentModule.class,
//         Example3ChildPresenterModule.class
// })
// public abstract class Example3ChildFragmentModule {
// 
//     /**
//      * As per the contract specified in {@link BaseChildFragmentModule}; "This must be included in
//      * all child fragment modules, which must provide a concrete implementation of the child
//      * {@link Fragment} and named {@link BaseChildFragmentModule#CHILD_FRAGMENT}..
//      *
//      * @param example3ChildFragment the example 3 child fragment
//      * @return the fragment
//      */
//     @Binds
//     @Named(BaseChildFragmentModule.CHILD_FRAGMENT)
//     @PerChildFragment
//     abstract Fragment fragment(Example3ChildFragment example3ChildFragment);
// 
//     @Binds
//     @PerChildFragment
//     abstract Example3ChildView example3ChildView(Example3ChildFragment example3ChildFragment);
// }
// 
// Path: app/src/main/java/com/vestrel00/daggerbutterknifemvp/ui/example_3/parent_fragment/presenter/Example3ParentPresenterModule.java
// @Module
// public abstract class Example3ParentPresenterModule {
// 
//     @Binds
//     @PerFragment
//     abstract Example3ParentPresenter
//     example3ParentPresenter(Example3ParentPresenterImpl example3ParentPresenterImpl);
// }


import android.app.Fragment;
import com.vestrel00.daggerbutterknifemvp.inject.PerChildFragment;
import com.vestrel00.daggerbutterknifemvp.inject.PerFragment;
import com.vestrel00.daggerbutterknifemvp.ui.common.view.BaseFragmentModule;
import com.vestrel00.daggerbutterknifemvp.ui.example_3.child_fragment.view.Example3ChildFragment;
import com.vestrel00.daggerbutterknifemvp.ui.example_3.child_fragment.view.Example3ChildFragmentModule;
import com.vestrel00.daggerbutterknifemvp.ui.example_3.parent_fragment.presenter.Example3ParentPresenterModule;
import javax.inject.Named;
import dagger.Binds;
import dagger.Module;
import dagger.android.ContributesAndroidInjector;
/*
 * Copyright 2018 Vandolf Estrellado
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.vestrel00.daggerbutterknifemvp.ui.example_3.parent_fragment.view;





/**
 * Provides example 3 parent fragment dependencies.
 */
@Module(includes = {
        BaseFragmentModule.class,
        Example3ParentPresenterModule.class
})
public abstract class Example3ParentFragmentModule {

    /**
     * Provides the injector for the {@link Example3ChildFragment}, which has access to the
     * dependencies provided by this fragment and activity and application instance
     * (singleton scoped objects).
     */
    @PerChildFragment
    @ContributesAndroidInjector(modules = Example3ChildFragmentModule.class)
    abstract Example3ChildFragment example3ChildFragmentInjector();

    /**
     * As per the contract specified in {@link BaseFragmentModule}; "This must be included in all
     * fragment modules, which must provide a concrete implementation of {@link Fragment}
     * and named {@link BaseFragmentModule#FRAGMENT}.
     *
     * @param example3ParentFragment the example 3 parent fragment
     * @return the fragment
     */
    @Binds
// Path: app/src/main/java/com/vestrel00/daggerbutterknifemvp/ui/common/view/BaseFragmentModule.java
// @Module
// public abstract class BaseFragmentModule {
// 
//     /**
//      * See {@link BaseChildFragmentModule} class documentation regarding the need for this name.
//      */
//     public static final String FRAGMENT = "BaseFragmentModule.fragment";
// 
//     static final String CHILD_FRAGMENT_MANAGER = "BaseFragmentModule.childFragmentManager";
// 
//     @Provides
//     @Named(CHILD_FRAGMENT_MANAGER)
//     @PerFragment
//     static FragmentManager childFragmentManager(@Named(FRAGMENT) Fragment fragment) {
//         return fragment.getChildFragmentManager();
//     }
// }
// 
// Path: app/src/main/java/com/vestrel00/daggerbutterknifemvp/ui/example_3/child_fragment/view/Example3ChildFragment.java
// public final class Example3ChildFragment extends BaseViewFragment<Example3ChildPresenter>
//         implements Example3ChildView {
// 
//     @BindView(R.id.some_text)
//     TextView someText;
// 
//     @Override
//     public View onCreateView(LayoutInflater inflater, ViewGroup container,
//                              Bundle savedInstanceState) {
//         return inflater.inflate(R.layout.example_3_child_fragment, container, false);
//     }
// 
//     @Override
//     public void showSomething(String something) {
//         someText.setText(something);
//     }
// 
//     @OnClick(R.id.do_something)
//     void onDoSomethingClicked() {
//         presenter.onDoSomething();
//     }
// }
// 
// Path: app/src/main/java/com/vestrel00/daggerbutterknifemvp/ui/example_3/child_fragment/view/Example3ChildFragmentModule.java
// @Module(includes = {
//         BaseChildFragmentModule.class,
//         Example3ChildPresenterModule.class
// })
// public abstract class Example3ChildFragmentModule {
// 
//     /**
//      * As per the contract specified in {@link BaseChildFragmentModule}; "This must be included in
//      * all child fragment modules, which must provide a concrete implementation of the child
//      * {@link Fragment} and named {@link BaseChildFragmentModule#CHILD_FRAGMENT}..
//      *
//      * @param example3ChildFragment the example 3 child fragment
//      * @return the fragment
//      */
//     @Binds
//     @Named(BaseChildFragmentModule.CHILD_FRAGMENT)
//     @PerChildFragment
//     abstract Fragment fragment(Example3ChildFragment example3ChildFragment);
// 
//     @Binds
//     @PerChildFragment
//     abstract Example3ChildView example3ChildView(Example3ChildFragment example3ChildFragment);
// }
// 
// Path: app/src/main/java/com/vestrel00/daggerbutterknifemvp/ui/example_3/parent_fragment/presenter/Example3ParentPresenterModule.java
// @Module
// public abstract class Example3ParentPresenterModule {
// 
//     @Binds
//     @PerFragment
//     abstract Example3ParentPresenter
//     example3ParentPresenter(Example3ParentPresenterImpl example3ParentPresenterImpl);
// }


// Path: app/src/main/java/com/vestrel00/daggerbutterknifemvp/ui/example_3/parent_fragment/view/Example3ParentFragmentModule.java
import android.app.Fragment;
import com.vestrel00.daggerbutterknifemvp.inject.PerChildFragment;
import com.vestrel00.daggerbutterknifemvp.inject.PerFragment;
import com.vestrel00.daggerbutterknifemvp.ui.common.view.BaseFragmentModule;
import com.vestrel00.daggerbutterknifemvp.ui.example_3.child_fragment.view.Example3ChildFragment;
import com.vestrel00.daggerbutterknifemvp.ui.example_3.child_fragment.view.Example3ChildFragmentModule;
import com.vestrel00.daggerbutterknifemvp.ui.example_3.parent_fragment.presenter.Example3ParentPresenterModule;
import javax.inject.Named;
import dagger.Binds;
import dagger.Module;
import dagger.android.ContributesAndroidInjector;

/*
 * Copyright 2018 Vandolf Estrellado
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.vestrel00.daggerbutterknifemvp.ui.example_3.parent_fragment.view;





/**
 * Provides example 3 parent fragment dependencies.
 */
@Module(includes = {
        BaseFragmentModule.class,
        Example3ParentPresenterModule.class
})
public abstract class Example3ParentFragmentModule {

    /**
     * Provides the injector for the {@link Example3ChildFragment}, which has access to the
     * dependencies provided by this fragment and activity and application instance
     * (singleton scoped objects).
     */
    @PerChildFragment
    @ContributesAndroidInjector(modules = Example3ChildFragmentModule.class)
    abstract Example3ChildFragment example3ChildFragmentInjector();

    /**
     * As per the contract specified in {@link BaseFragmentModule}; "This must be included in all
     * fragment modules, which must provide a concrete implementation of {@link Fragment}
     * and named {@link BaseFragmentModule#FRAGMENT}.
     *
     * @param example3ParentFragment the example 3 parent fragment
     * @return the fragment
     */
    @Binds
    @Named(BaseFragmentModule.FRAGMENT)