diff --git a/integration-tests/android-base-class/src/main/AndroidManifest.xml b/integration-tests/android-base-class/src/main/AndroidManifest.xml
index 5a595e1f..a8fdaffd 100644
--- a/integration-tests/android-base-class/src/main/AndroidManifest.xml
+++ b/integration-tests/android-base-class/src/main/AndroidManifest.xml
@@ -18,6 +18,7 @@
+
diff --git a/integration-tests/android-base-class/src/main/java/com/example/ActivityModule.java b/integration-tests/android-base-class/src/main/java/com/example/ActivityModule.java
new file mode 100644
index 00000000..ed29d87a
--- /dev/null
+++ b/integration-tests/android-base-class/src/main/java/com/example/ActivityModule.java
@@ -0,0 +1,19 @@
+package com.example;
+
+import dagger.Module;
+import dagger.android.ContributesAndroidInjector;
+
+@Module
+public abstract class ActivityModule {
+ @ContributesAndroidInjector(modules = ExampleActivity.LongModule.class)
+ abstract ExampleActivity contributeExampleActivity();
+
+ @ContributesAndroidInjector(modules = {ExampleActivity.LongModule.class, FragmentModule.class})
+ abstract ExampleFragmentInjectionActivity contributeExampleFragmentInjectionActivity();
+
+ @Module
+ abstract static class FragmentModule {
+ @ContributesAndroidInjector
+ abstract ExampleFragment exampleFragment();
+ }
+}
diff --git a/integration-tests/android-base-class/src/main/java/com/example/AppComponent.java b/integration-tests/android-base-class/src/main/java/com/example/AppComponent.java
index 6cbb5081..526bd67d 100644
--- a/integration-tests/android-base-class/src/main/java/com/example/AppComponent.java
+++ b/integration-tests/android-base-class/src/main/java/com/example/AppComponent.java
@@ -1,20 +1,18 @@
package com.example;
-import com.example.ExampleActivity.ExampleActivityModule;
import com.example.ExampleService.ExampleServiceModule;
import dagger.Component;
import dagger.android.AndroidInjectionModule;
import dagger.android.AndroidInjector;
-import dagger.android.DispatchingAndroidInjector;
-@Component(modules = {
- ExampleActivityModule.class,
- ExampleServiceModule.class,
- AndroidInjectionModule.class,
- StringModule.class
-})
+@Component(
+ modules = {
+ ActivityModule.class,
+ ExampleServiceModule.class,
+ AndroidInjectionModule.class,
+ StringModule.class
+ })
public interface AppComponent extends AndroidInjector {
@Component.Factory
- interface Factory extends AndroidInjector.Factory {
- }
+ interface Factory extends AndroidInjector.Factory {}
}
diff --git a/integration-tests/android-base-class/src/main/java/com/example/ExampleActivity.java b/integration-tests/android-base-class/src/main/java/com/example/ExampleActivity.java
index 9dd481a8..6a07e53c 100644
--- a/integration-tests/android-base-class/src/main/java/com/example/ExampleActivity.java
+++ b/integration-tests/android-base-class/src/main/java/com/example/ExampleActivity.java
@@ -1,5 +1,9 @@
package com.example;
+import static android.util.TypedValue.COMPLEX_UNIT_DIP;
+import static android.view.Gravity.CENTER;
+import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
+
import android.content.Intent;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
@@ -7,15 +11,9 @@
import androidx.annotation.Nullable;
import dagger.Module;
import dagger.Provides;
-import dagger.android.AndroidInjection;
-import dagger.android.ContributesAndroidInjector;
import dagger.android.DaggerActivity;
import javax.inject.Inject;
-import static android.util.TypedValue.COMPLEX_UNIT_DIP;
-import static android.view.Gravity.CENTER;
-import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
-
public final class ExampleActivity extends DaggerActivity {
@Inject String string;
@Inject long aLong;
@@ -35,12 +33,6 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
startService(new Intent(this, ExampleService.class));
}
- @Module
- static abstract class ExampleActivityModule {
- @ContributesAndroidInjector(modules = LongModule.class)
- abstract ExampleActivity activity();
- }
-
@Module(includes = IntegerModule.class)
static class LongModule {
@@ -48,7 +40,6 @@ static class LongModule {
static long provideLong() {
return 10L;
}
-
}
@Module
@@ -59,5 +50,4 @@ static int provideInt() {
return 20;
}
}
-
}
diff --git a/integration-tests/android-base-class/src/main/java/com/example/ExampleApp.java b/integration-tests/android-base-class/src/main/java/com/example/ExampleApp.java
index 84093814..bb2402ca 100644
--- a/integration-tests/android-base-class/src/main/java/com/example/ExampleApp.java
+++ b/integration-tests/android-base-class/src/main/java/com/example/ExampleApp.java
@@ -4,7 +4,8 @@
import dagger.android.DaggerApplication;
public final class ExampleApp extends DaggerApplication {
- @Override protected AndroidInjector extends DaggerApplication> applicationInjector() {
+ @Override
+ protected AndroidInjector extends DaggerApplication> applicationInjector() {
return DaggerAppComponent.factory().create(this);
}
}
diff --git a/integration-tests/android-base-class/src/main/java/com/example/ExampleFragment.java b/integration-tests/android-base-class/src/main/java/com/example/ExampleFragment.java
new file mode 100644
index 00000000..d6381b2b
--- /dev/null
+++ b/integration-tests/android-base-class/src/main/java/com/example/ExampleFragment.java
@@ -0,0 +1,33 @@
+package com.example;
+
+import static android.util.TypedValue.COMPLEX_UNIT_DIP;
+import static android.view.Gravity.CENTER;
+import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+import androidx.annotation.Nullable;
+import dagger.android.DaggerFragment;
+import javax.inject.Inject;
+
+public class ExampleFragment extends DaggerFragment {
+ @Inject String string;
+ @Inject long aLong;
+ @Inject int anInt;
+
+ @Nullable
+ @Override
+ public View onCreateView(
+ LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
+ TextView textView = new TextView(getActivity());
+ textView.setLayoutParams(new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));
+ textView.setGravity(CENTER);
+ textView.setTextSize(COMPLEX_UNIT_DIP, 40);
+ textView.setText(string);
+
+ return textView;
+ }
+}
diff --git a/integration-tests/android-base-class/src/main/java/com/example/ExampleFragmentInjectionActivity.java b/integration-tests/android-base-class/src/main/java/com/example/ExampleFragmentInjectionActivity.java
new file mode 100644
index 00000000..ec495dd3
--- /dev/null
+++ b/integration-tests/android-base-class/src/main/java/com/example/ExampleFragmentInjectionActivity.java
@@ -0,0 +1,20 @@
+package com.example;
+
+import android.os.Bundle;
+import androidx.annotation.Nullable;
+import dagger.android.DaggerActivity;
+
+public class ExampleFragmentInjectionActivity extends DaggerActivity {
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ if (savedInstanceState == null) {
+ getFragmentManager()
+ .beginTransaction()
+ .replace(android.R.id.content, new ExampleFragment(), "ExampleFragment")
+ .commit();
+ }
+ }
+}
diff --git a/integration-tests/android-base-class/src/main/java/com/example/ExampleService.java b/integration-tests/android-base-class/src/main/java/com/example/ExampleService.java
index f7cc9c8e..674a4f77 100644
--- a/integration-tests/android-base-class/src/main/java/com/example/ExampleService.java
+++ b/integration-tests/android-base-class/src/main/java/com/example/ExampleService.java
@@ -4,7 +4,6 @@
import android.os.IBinder;
import android.widget.Toast;
import dagger.Module;
-import dagger.android.AndroidInjection;
import dagger.android.ContributesAndroidInjector;
import dagger.android.DaggerService;
import javax.inject.Inject;
@@ -27,7 +26,7 @@ public void onCreate() {
}
@Module
- static abstract class ExampleServiceModule {
+ abstract static class ExampleServiceModule {
@ContributesAndroidInjector
abstract ExampleService service();
}
diff --git a/integration-tests/android-base-class/src/main/java/com/example/StringModule.java b/integration-tests/android-base-class/src/main/java/com/example/StringModule.java
index 710ec1c4..424523f4 100644
--- a/integration-tests/android-base-class/src/main/java/com/example/StringModule.java
+++ b/integration-tests/android-base-class/src/main/java/com/example/StringModule.java
@@ -5,7 +5,8 @@
@Module
abstract class StringModule {
- @Provides static String string() {
+ @Provides
+ static String string() {
return "Hello!";
}
}
diff --git a/integration-tests/android-base-class/src/test/java/com/example/ExampleActivityTest.java b/integration-tests/android-base-class/src/test/java/com/example/ExampleActivityTest.java
index cc2e2026..d3ab792b 100644
--- a/integration-tests/android-base-class/src/test/java/com/example/ExampleActivityTest.java
+++ b/integration-tests/android-base-class/src/test/java/com/example/ExampleActivityTest.java
@@ -1,16 +1,15 @@
package com.example;
+import static androidx.lifecycle.Lifecycle.State.CREATED;
+import static androidx.test.core.app.ActivityScenario.launch;
+import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assume.assumeFalse;
+
import androidx.test.core.app.ActivityScenario;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
-import org.robolectric.annotation.Config;
-
-import static androidx.lifecycle.Lifecycle.State.CREATED;
-import static androidx.test.core.app.ActivityScenario.launch;
-import static com.google.common.truth.Truth.assertThat;
-import static org.junit.Assume.assumeFalse;
@RunWith(RobolectricTestRunner.class) //
public final class ExampleActivityTest {
@@ -20,14 +19,16 @@ public static void beforeClass() {
assumeFalse(BuildConfig.FLAVOR.equals("reflect"));
}
- @Test public void activityInjection() {
+ @Test
+ public void activityInjection() {
try (ActivityScenario scenario = launch(ExampleActivity.class)) {
scenario.moveToState(CREATED);
- scenario.onActivity(activity -> {
- assertThat(activity.string).isEqualTo("Hello!");
- assertThat(activity.aLong).isEqualTo(10L);
- assertThat(activity.anInt).isEqualTo(20);
- });
+ scenario.onActivity(
+ activity -> {
+ assertThat(activity.string).isEqualTo("Hello!");
+ assertThat(activity.aLong).isEqualTo(10L);
+ assertThat(activity.anInt).isEqualTo(20);
+ });
}
}
}
diff --git a/integration-tests/android-base-class/src/test/java/com/example/ExampleFragmentInjectionActivityTest.java b/integration-tests/android-base-class/src/test/java/com/example/ExampleFragmentInjectionActivityTest.java
new file mode 100644
index 00000000..e35623c1
--- /dev/null
+++ b/integration-tests/android-base-class/src/test/java/com/example/ExampleFragmentInjectionActivityTest.java
@@ -0,0 +1,38 @@
+package com.example;
+
+import static androidx.lifecycle.Lifecycle.State.CREATED;
+import static androidx.test.core.app.ActivityScenario.launch;
+import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assume.assumeFalse;
+
+import androidx.test.core.app.ActivityScenario;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class) //
+public class ExampleFragmentInjectionActivityTest {
+ @BeforeClass
+ public static void beforeClass() {
+ // TODO https://github.com/JakeWharton/dagger-reflect/issues/202
+ assumeFalse(BuildConfig.FLAVOR.equals("reflect"));
+ }
+ @Test
+ public void activityFragmentInjection() {
+ try (ActivityScenario scenario =
+ launch(ExampleFragmentInjectionActivity.class)) {
+ scenario.moveToState(CREATED);
+ scenario.onActivity(
+ activity -> {
+ ExampleFragment fragment =
+ (ExampleFragment)
+ activity.getFragmentManager().findFragmentByTag("ExampleFragment");
+ assertThat(fragment.string).isEqualTo("Hello!");
+ assertThat(fragment.aLong).isEqualTo(10L);
+ assertThat(fragment.anInt).isEqualTo(20);
+ });
+ }
+ }
+}
diff --git a/integration-tests/android-has-interface/src/main/AndroidManifest.xml b/integration-tests/android-has-interface/src/main/AndroidManifest.xml
index 5a595e1f..a8fdaffd 100644
--- a/integration-tests/android-has-interface/src/main/AndroidManifest.xml
+++ b/integration-tests/android-has-interface/src/main/AndroidManifest.xml
@@ -18,6 +18,7 @@
+
diff --git a/integration-tests/android-has-interface/src/main/java/com/example/ActivityModule.java b/integration-tests/android-has-interface/src/main/java/com/example/ActivityModule.java
new file mode 100644
index 00000000..ed29d87a
--- /dev/null
+++ b/integration-tests/android-has-interface/src/main/java/com/example/ActivityModule.java
@@ -0,0 +1,19 @@
+package com.example;
+
+import dagger.Module;
+import dagger.android.ContributesAndroidInjector;
+
+@Module
+public abstract class ActivityModule {
+ @ContributesAndroidInjector(modules = ExampleActivity.LongModule.class)
+ abstract ExampleActivity contributeExampleActivity();
+
+ @ContributesAndroidInjector(modules = {ExampleActivity.LongModule.class, FragmentModule.class})
+ abstract ExampleFragmentInjectionActivity contributeExampleFragmentInjectionActivity();
+
+ @Module
+ abstract static class FragmentModule {
+ @ContributesAndroidInjector
+ abstract ExampleFragment exampleFragment();
+ }
+}
diff --git a/integration-tests/android-has-interface/src/main/java/com/example/AppComponent.java b/integration-tests/android-has-interface/src/main/java/com/example/AppComponent.java
index f3b1dc42..c90b70ac 100644
--- a/integration-tests/android-has-interface/src/main/java/com/example/AppComponent.java
+++ b/integration-tests/android-has-interface/src/main/java/com/example/AppComponent.java
@@ -1,17 +1,17 @@
package com.example;
-import com.example.ExampleActivity.ExampleActivityModule;
import com.example.ExampleService.ExampleServiceModule;
import dagger.Component;
import dagger.android.AndroidInjectionModule;
import dagger.android.DispatchingAndroidInjector;
-@Component(modules = {
- ExampleActivityModule.class,
- ExampleServiceModule.class,
- AndroidInjectionModule.class,
- StringModule.class
-})
+@Component(
+ modules = {
+ ActivityModule.class,
+ ExampleServiceModule.class,
+ AndroidInjectionModule.class,
+ StringModule.class
+ })
interface AppComponent {
DispatchingAndroidInjector