From b2eba5aaf78d5018bd7259c2b3d423a87ffa1c49 Mon Sep 17 00:00:00 2001 From: Rafiduzzaman Sonnet Date: Fri, 13 Nov 2020 17:26:08 +0100 Subject: [PATCH 1/6] Add commit to fix nested ContributesAndroidInjector issue https://github.com/JakeWharton/dagger-reflect/pull/196/commits/a03f4c1c1507f3720c3aabf361410c9c833fad01 --- .../ReflectiveJustInTimeLookupFactory.java | 8 +- .../src/main/java/dagger/reflect/Scope.java | 5 ++ .../main/java/dagger/reflect/TypeUtil.java | 10 +++ ...TimeContributesAndroidInjectorBinding.java | 79 +++++++++++++++++++ 4 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 reflect/src/main/java/dagger/reflect/UnlinkedJustInTimeContributesAndroidInjectorBinding.java diff --git a/reflect/src/main/java/dagger/reflect/ReflectiveJustInTimeLookupFactory.java b/reflect/src/main/java/dagger/reflect/ReflectiveJustInTimeLookupFactory.java index 40bba4a0..11526a32 100644 --- a/reflect/src/main/java/dagger/reflect/ReflectiveJustInTimeLookupFactory.java +++ b/reflect/src/main/java/dagger/reflect/ReflectiveJustInTimeLookupFactory.java @@ -43,7 +43,13 @@ final class ReflectiveJustInTimeLookupFactory implements JustInTimeLookup.Factor } Annotation scope = findScope(cls.getAnnotations()); - Binding binding = new UnlinkedJustInTimeBinding<>(cls, target, typeArguments); + Binding binding; + if (TypeUtil.isAndroidInjectorFactory(type)) { + binding = + new UnlinkedJustInTimeContributesAndroidInjectorBinding<>(cls, target, typeArguments); + } else { + binding = new UnlinkedJustInTimeBinding<>(cls, target, typeArguments); + } return new JustInTimeLookup(scope, binding); } diff --git a/reflect/src/main/java/dagger/reflect/Scope.java b/reflect/src/main/java/dagger/reflect/Scope.java index b1189125..c2b68dcb 100644 --- a/reflect/src/main/java/dagger/reflect/Scope.java +++ b/reflect/src/main/java/dagger/reflect/Scope.java @@ -35,6 +35,11 @@ private Scope( this.parent = parent; } + @Nullable + public Scope getParent() { + return parent; + } + @Override public String toString() { return "Scope" + annotations; diff --git a/reflect/src/main/java/dagger/reflect/TypeUtil.java b/reflect/src/main/java/dagger/reflect/TypeUtil.java index 36e98c10..ff6ca86a 100644 --- a/reflect/src/main/java/dagger/reflect/TypeUtil.java +++ b/reflect/src/main/java/dagger/reflect/TypeUtil.java @@ -15,6 +15,7 @@ */ package dagger.reflect; +import dagger.android.DispatchingAndroidInjector; import java.lang.reflect.GenericArrayType; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; @@ -28,6 +29,15 @@ final class TypeUtil { private TypeUtil() {} + static boolean isAndroidInjectorFactory(Type type) { + if (type instanceof ParameterizedType) { + ParameterizedType parameterizedKeyType = (ParameterizedType) type; + Type rawKeyType = parameterizedKeyType.getRawType(); + return DispatchingAndroidInjector.class.equals(rawKeyType); + } + return false; + } + /** * Returns a type that is functionally equal but not necessarily equal according to {@link * Object#equals(Object) Object.equals()}. diff --git a/reflect/src/main/java/dagger/reflect/UnlinkedJustInTimeContributesAndroidInjectorBinding.java b/reflect/src/main/java/dagger/reflect/UnlinkedJustInTimeContributesAndroidInjectorBinding.java new file mode 100644 index 00000000..47f0d48c --- /dev/null +++ b/reflect/src/main/java/dagger/reflect/UnlinkedJustInTimeContributesAndroidInjectorBinding.java @@ -0,0 +1,79 @@ +package dagger.reflect; + +import static dagger.reflect.Reflection.findQualifier; + +import dagger.MembersInjector; +import java.lang.annotation.Annotation; +import java.lang.reflect.Constructor; +import java.lang.reflect.Type; +import java.util.Arrays; +import java.util.Map; +import org.jetbrains.annotations.Nullable; + +final class UnlinkedJustInTimeContributesAndroidInjectorBinding extends Binding.UnlinkedBinding { + private final Class cls; + private final Constructor constructor; + // Type arguments might be used as types for this binding's parameterized constructor parameters. + private @Nullable Type[] concreteTypeArguments; + + UnlinkedJustInTimeContributesAndroidInjectorBinding( + Class cls, Constructor constructor, @Nullable Type[] concreteTypeArguments) { + this.cls = cls; + this.constructor = constructor; + this.concreteTypeArguments = concreteTypeArguments; + } + + @Override + public LinkedBinding link(Linker linker, Scope scope) { + Type[] parameterTypes = constructor.getGenericParameterTypes(); + Annotation[][] parameterAnnotations = constructor.getParameterAnnotations(); + + LinkedBinding[] bindings = new LinkedBinding[parameterTypes.length]; + for (int i = 0; i < parameterTypes.length; i++) { + Type parameterType = parameterTypes[i]; + Key key = Key.of(findQualifier(parameterAnnotations[i]), parameterType); + bindings[i] = linker.get(key); + addParentMappings(key, scope.getParent(), linker); + } + + MembersInjector membersInjector = ReflectiveMembersInjector.create(cls, scope); + + return new LinkedJustInTimeBinding<>(constructor, bindings, membersInjector); + } + + private void addParentMappings(Key key, @Nullable Scope parentScope, Linker linker) { + if (parentScope == null) { + return; + } + + Binding.LinkedBinding bindingLinked = linker.get(key); + Object value = bindingLinked.get(); + + if (value instanceof Map) { + Map, Binding> bindingValue = (Map, Binding>) value; + Binding.LinkedBinding parentBinding = parentScope.getBinding(key); + if (parentBinding != null) { + Object parentBindingValue = parentBinding.get(); + if (parentBindingValue instanceof Map) { + Map, LinkedBinding> parentBindingValueMap = + (Map, LinkedBinding>) parentBindingValue; + bindingValue.putAll(parentBindingValueMap); + } + } + } + + addParentMappings(key, parentScope.getParent(), linker); + } + + @Override + public String toString() { + return "@Inject[" + cls.getName() + getTypeArgumentsStringOrEmpty() + ".(…)]"; + } + + private String getTypeArgumentsStringOrEmpty() { + if (concreteTypeArguments == null) { + return ""; + } + return Arrays.toString(concreteTypeArguments); + } +} From 6807897da4504942d18f08ffaa2413a1c904d7f6 Mon Sep 17 00:00:00 2001 From: Rafiduzzaman Sonnet Date: Fri, 13 Nov 2020 18:23:32 +0100 Subject: [PATCH 2/6] Add fragment-has-interface sample and test --- .../src/main/AndroidManifest.xml | 1 + .../main/java/com/example/ActivityModule.java | 22 ++++++++ .../main/java/com/example/AppComponent.java | 4 +- .../java/com/example/ExampleActivity.java | 7 --- .../java/com/example/ExampleFragment.java | 53 +++++++++++++++++++ .../ExampleFragmentInjectionActivity.java | 34 ++++++++++++ .../ExampleFragmentInjectionActivityTest.java | 27 ++++++++++ 7 files changed, 139 insertions(+), 9 deletions(-) create mode 100644 integration-tests/android-has-interface/src/main/java/com/example/ActivityModule.java create mode 100644 integration-tests/android-has-interface/src/main/java/com/example/ExampleFragment.java create mode 100644 integration-tests/android-has-interface/src/main/java/com/example/ExampleFragmentInjectionActivity.java create mode 100644 integration-tests/android-has-interface/src/test/java/com/example/ExampleFragmentInjectionActivityTest.java 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..3c7fbb07 --- /dev/null +++ b/integration-tests/android-has-interface/src/main/java/com/example/ActivityModule.java @@ -0,0 +1,22 @@ +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 + static abstract 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..d639519b 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,13 +1,13 @@ 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, + ActivityModule.class, ExampleServiceModule.class, AndroidInjectionModule.class, StringModule.class diff --git a/integration-tests/android-has-interface/src/main/java/com/example/ExampleActivity.java b/integration-tests/android-has-interface/src/main/java/com/example/ExampleActivity.java index 5ddcee62..b021992a 100644 --- a/integration-tests/android-has-interface/src/main/java/com/example/ExampleActivity.java +++ b/integration-tests/android-has-interface/src/main/java/com/example/ExampleActivity.java @@ -9,7 +9,6 @@ import dagger.Module; import dagger.Provides; import dagger.android.AndroidInjection; -import dagger.android.ContributesAndroidInjector; import javax.inject.Inject; import static android.util.TypedValue.COMPLEX_UNIT_DIP; @@ -36,12 +35,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 { diff --git a/integration-tests/android-has-interface/src/main/java/com/example/ExampleFragment.java b/integration-tests/android-has-interface/src/main/java/com/example/ExampleFragment.java new file mode 100644 index 00000000..fb94bb32 --- /dev/null +++ b/integration-tests/android-has-interface/src/main/java/com/example/ExampleFragment.java @@ -0,0 +1,53 @@ +package com.example; + +import android.app.Activity; +import android.app.Fragment; +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 javax.inject.Inject; + +import dagger.android.AndroidInjection; +import dagger.android.AndroidInjector; +import dagger.android.DispatchingAndroidInjector; +import dagger.android.HasAndroidInjector; + +import static android.util.TypedValue.COMPLEX_UNIT_DIP; +import static android.view.Gravity.CENTER; +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; + +public class ExampleFragment extends Fragment implements HasAndroidInjector { + @Inject DispatchingAndroidInjector androidInjector; + @Inject String string; + @Inject long aLong; + @Inject int anInt; + + + @Override + public void onAttach(Activity activity) { + AndroidInjection.inject(this); + super.onAttach(activity); + } + + @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; + } + + @Override + public AndroidInjector androidInjector() { + return androidInjector; + } +} diff --git a/integration-tests/android-has-interface/src/main/java/com/example/ExampleFragmentInjectionActivity.java b/integration-tests/android-has-interface/src/main/java/com/example/ExampleFragmentInjectionActivity.java new file mode 100644 index 00000000..55f30f13 --- /dev/null +++ b/integration-tests/android-has-interface/src/main/java/com/example/ExampleFragmentInjectionActivity.java @@ -0,0 +1,34 @@ +package com.example; + +import android.app.Activity; +import android.os.Bundle; + +import androidx.annotation.Nullable; + +import javax.inject.Inject; + +import dagger.android.AndroidInjection; +import dagger.android.AndroidInjector; +import dagger.android.DispatchingAndroidInjector; +import dagger.android.HasAndroidInjector; + +public class ExampleFragmentInjectionActivity extends Activity implements HasAndroidInjector { + @Inject DispatchingAndroidInjector androidInjector; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + AndroidInjection.inject(this); + super.onCreate(savedInstanceState); + + if (savedInstanceState == null) { + getFragmentManager().beginTransaction() + .replace(android.R.id.content, new ExampleFragment(), "ExampleFragment") + .commit(); + } + } + + @Override + public AndroidInjector androidInjector() { + return androidInjector; + } +} diff --git a/integration-tests/android-has-interface/src/test/java/com/example/ExampleFragmentInjectionActivityTest.java b/integration-tests/android-has-interface/src/test/java/com/example/ExampleFragmentInjectionActivityTest.java new file mode 100644 index 00000000..8a53ddbd --- /dev/null +++ b/integration-tests/android-has-interface/src/test/java/com/example/ExampleFragmentInjectionActivityTest.java @@ -0,0 +1,27 @@ +package com.example; + +import androidx.test.core.app.ActivityScenario; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; + +import static androidx.lifecycle.Lifecycle.State.CREATED; +import static androidx.test.core.app.ActivityScenario.launch; +import static com.google.common.truth.Truth.assertThat; + +@RunWith(RobolectricTestRunner.class) // +public class ExampleFragmentInjectionActivityTest { + @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); + }); + } + } +} From e7e87304b92da8f1d8fbdadb2a291a49eef8ebc3 Mon Sep 17 00:00:00 2001 From: Rafiduzzaman Sonnet Date: Fri, 13 Nov 2020 18:30:39 +0100 Subject: [PATCH 3/6] Add fragment-base-class sample and test --- .../src/main/AndroidManifest.xml | 1 + .../main/java/com/example/ActivityModule.java | 22 ++++++++++++ .../main/java/com/example/AppComponent.java | 5 ++- .../java/com/example/ExampleActivity.java | 6 ---- .../java/com/example/ExampleFragment.java | 35 +++++++++++++++++++ .../ExampleFragmentInjectionActivity.java | 21 +++++++++++ .../ExampleFragmentInjectionActivityTest.java | 27 ++++++++++++++ 7 files changed, 108 insertions(+), 9 deletions(-) create mode 100644 integration-tests/android-base-class/src/main/java/com/example/ActivityModule.java create mode 100644 integration-tests/android-base-class/src/main/java/com/example/ExampleFragment.java create mode 100644 integration-tests/android-base-class/src/main/java/com/example/ExampleFragmentInjectionActivity.java create mode 100644 integration-tests/android-base-class/src/test/java/com/example/ExampleFragmentInjectionActivityTest.java 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..502ec6b3 --- /dev/null +++ b/integration-tests/android-base-class/src/main/java/com/example/ActivityModule.java @@ -0,0 +1,22 @@ +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 + static abstract 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..2d89e0f6 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,14 +1,13 @@ 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, + ActivityModule.class, ExampleServiceModule.class, AndroidInjectionModule.class, StringModule.class 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..b7285a18 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 @@ -35,12 +35,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 { 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..b956848f --- /dev/null +++ b/integration-tests/android-base-class/src/main/java/com/example/ExampleFragment.java @@ -0,0 +1,35 @@ +package com.example; + +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 javax.inject.Inject; + +import dagger.android.DaggerFragment; + +import static android.util.TypedValue.COMPLEX_UNIT_DIP; +import static android.view.Gravity.CENTER; +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; + +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..2d4e4941 --- /dev/null +++ b/integration-tests/android-base-class/src/main/java/com/example/ExampleFragmentInjectionActivity.java @@ -0,0 +1,21 @@ +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/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..8a53ddbd --- /dev/null +++ b/integration-tests/android-base-class/src/test/java/com/example/ExampleFragmentInjectionActivityTest.java @@ -0,0 +1,27 @@ +package com.example; + +import androidx.test.core.app.ActivityScenario; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; + +import static androidx.lifecycle.Lifecycle.State.CREATED; +import static androidx.test.core.app.ActivityScenario.launch; +import static com.google.common.truth.Truth.assertThat; + +@RunWith(RobolectricTestRunner.class) // +public class ExampleFragmentInjectionActivityTest { + @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); + }); + } + } +} From bf5bba87cee5bcdc76c3f27045987221b5ae9cd0 Mon Sep 17 00:00:00 2001 From: Rafiduzzaman Sonnet Date: Fri, 13 Nov 2020 18:42:03 +0100 Subject: [PATCH 4/6] Format code with googleJavaFormat task --- .../main/java/com/example/ActivityModule.java | 21 +++--- .../main/java/com/example/AppComponent.java | 17 +++-- .../java/com/example/ExampleActivity.java | 12 ++-- .../src/main/java/com/example/ExampleApp.java | 3 +- .../java/com/example/ExampleFragment.java | 44 ++++++------ .../ExampleFragmentInjectionActivity.java | 19 +++-- .../main/java/com/example/ExampleService.java | 3 +- .../main/java/com/example/StringModule.java | 3 +- .../java/com/example/ExampleActivityTest.java | 25 +++---- .../ExampleFragmentInjectionActivityTest.java | 35 +++++----- .../main/java/com/example/ActivityModule.java | 21 +++--- .../main/java/com/example/AppComponent.java | 14 ++-- .../java/com/example/ExampleActivity.java | 10 ++- .../src/main/java/com/example/ExampleApp.java | 3 +- .../java/com/example/ExampleFragment.java | 69 +++++++++---------- .../ExampleFragmentInjectionActivity.java | 38 +++++----- .../main/java/com/example/ExampleService.java | 3 +- .../main/java/com/example/StringModule.java | 3 +- .../java/com/example/ExampleActivityTest.java | 22 +++--- .../ExampleFragmentInjectionActivityTest.java | 35 +++++----- 20 files changed, 195 insertions(+), 205 deletions(-) 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 index 502ec6b3..ed29d87a 100644 --- 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 @@ -5,18 +5,15 @@ @Module public abstract class ActivityModule { - @ContributesAndroidInjector(modules = ExampleActivity.LongModule.class) - abstract ExampleActivity contributeExampleActivity(); + @ContributesAndroidInjector(modules = ExampleActivity.LongModule.class) + abstract ExampleActivity contributeExampleActivity(); - @ContributesAndroidInjector(modules = { - ExampleActivity.LongModule.class, - FragmentModule.class - }) - abstract ExampleFragmentInjectionActivity contributeExampleFragmentInjectionActivity(); + @ContributesAndroidInjector(modules = {ExampleActivity.LongModule.class, FragmentModule.class}) + abstract ExampleFragmentInjectionActivity contributeExampleFragmentInjectionActivity(); - @Module - static abstract class FragmentModule { - @ContributesAndroidInjector - abstract ExampleFragment exampleFragment(); - } + @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 2d89e0f6..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,19 +1,18 @@ package com.example; import com.example.ExampleService.ExampleServiceModule; - import dagger.Component; import dagger.android.AndroidInjectionModule; import dagger.android.AndroidInjector; -@Component(modules = { - ActivityModule.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 b7285a18..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; @@ -42,7 +40,6 @@ static class LongModule { static long provideLong() { return 10L; } - } @Module @@ -53,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 applicationInjector() { + @Override + protected AndroidInjector 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 index b956848f..d6381b2b 100644 --- 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 @@ -1,35 +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 javax.inject.Inject; - import dagger.android.DaggerFragment; - -import static android.util.TypedValue.COMPLEX_UNIT_DIP; -import static android.view.Gravity.CENTER; -import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; +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; - } + @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 index 2d4e4941..ec495dd3 100644 --- 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 @@ -1,21 +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); + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); - if (savedInstanceState == null) { - getFragmentManager().beginTransaction() - .replace(android.R.id.content, new ExampleFragment(), "ExampleFragment") - .commit(); - } + 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 index 8a53ddbd..0e879c56 100644 --- 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 @@ -1,27 +1,30 @@ package com.example; -import androidx.test.core.app.ActivityScenario; +import static androidx.lifecycle.Lifecycle.State.CREATED; +import static androidx.test.core.app.ActivityScenario.launch; +import static com.google.common.truth.Truth.assertThat; +import androidx.test.core.app.ActivityScenario; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import static androidx.lifecycle.Lifecycle.State.CREATED; -import static androidx.test.core.app.ActivityScenario.launch; -import static com.google.common.truth.Truth.assertThat; - @RunWith(RobolectricTestRunner.class) // public class ExampleFragmentInjectionActivityTest { - @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); - }); - } + @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/java/com/example/ActivityModule.java b/integration-tests/android-has-interface/src/main/java/com/example/ActivityModule.java index 3c7fbb07..ed29d87a 100644 --- 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 @@ -5,18 +5,15 @@ @Module public abstract class ActivityModule { - @ContributesAndroidInjector(modules = ExampleActivity.LongModule.class) - abstract ExampleActivity contributeExampleActivity(); + @ContributesAndroidInjector(modules = ExampleActivity.LongModule.class) + abstract ExampleActivity contributeExampleActivity(); - @ContributesAndroidInjector(modules = { - ExampleActivity.LongModule.class, - FragmentModule.class - }) - abstract ExampleFragmentInjectionActivity contributeExampleFragmentInjectionActivity(); + @ContributesAndroidInjector(modules = {ExampleActivity.LongModule.class, FragmentModule.class}) + abstract ExampleFragmentInjectionActivity contributeExampleFragmentInjectionActivity(); - @Module - static abstract class FragmentModule { - @ContributesAndroidInjector - abstract ExampleFragment exampleFragment(); - } + @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 d639519b..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.ExampleService.ExampleServiceModule; - import dagger.Component; import dagger.android.AndroidInjectionModule; import dagger.android.DispatchingAndroidInjector; -@Component(modules = { - ActivityModule.class, - ExampleServiceModule.class, - AndroidInjectionModule.class, - StringModule.class -}) +@Component( + modules = { + ActivityModule.class, + ExampleServiceModule.class, + AndroidInjectionModule.class, + StringModule.class + }) interface AppComponent { DispatchingAndroidInjector androidInjector(); } diff --git a/integration-tests/android-has-interface/src/main/java/com/example/ExampleActivity.java b/integration-tests/android-has-interface/src/main/java/com/example/ExampleActivity.java index b021992a..82f2c40b 100644 --- a/integration-tests/android-has-interface/src/main/java/com/example/ExampleActivity.java +++ b/integration-tests/android-has-interface/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.app.Activity; import android.content.Intent; import android.os.Bundle; @@ -11,10 +15,6 @@ import dagger.android.AndroidInjection; 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 Activity { @Inject String string; @Inject long aLong; @@ -42,7 +42,6 @@ static class LongModule { static long provideLong() { return 10L; } - } @Module @@ -53,5 +52,4 @@ static int provideInt() { return 20; } } - } diff --git a/integration-tests/android-has-interface/src/main/java/com/example/ExampleApp.java b/integration-tests/android-has-interface/src/main/java/com/example/ExampleApp.java index d37b08d0..d080c488 100644 --- a/integration-tests/android-has-interface/src/main/java/com/example/ExampleApp.java +++ b/integration-tests/android-has-interface/src/main/java/com/example/ExampleApp.java @@ -8,7 +8,8 @@ public final class ExampleApp extends Application implements HasAndroidInjector { private AppComponent component; - @Override public void onCreate() { + @Override + public void onCreate() { super.onCreate(); component = Dagger.create(AppComponent.class); diff --git a/integration-tests/android-has-interface/src/main/java/com/example/ExampleFragment.java b/integration-tests/android-has-interface/src/main/java/com/example/ExampleFragment.java index fb94bb32..841271ec 100644 --- a/integration-tests/android-has-interface/src/main/java/com/example/ExampleFragment.java +++ b/integration-tests/android-has-interface/src/main/java/com/example/ExampleFragment.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.app.Activity; import android.app.Fragment; import android.os.Bundle; @@ -7,47 +11,40 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; - import androidx.annotation.Nullable; - -import javax.inject.Inject; - import dagger.android.AndroidInjection; import dagger.android.AndroidInjector; import dagger.android.DispatchingAndroidInjector; import dagger.android.HasAndroidInjector; - -import static android.util.TypedValue.COMPLEX_UNIT_DIP; -import static android.view.Gravity.CENTER; -import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; +import javax.inject.Inject; public class ExampleFragment extends Fragment implements HasAndroidInjector { - @Inject DispatchingAndroidInjector androidInjector; - @Inject String string; - @Inject long aLong; - @Inject int anInt; - - - @Override - public void onAttach(Activity activity) { - AndroidInjection.inject(this); - super.onAttach(activity); - } - - @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; - } - - @Override - public AndroidInjector androidInjector() { - return androidInjector; - } + @Inject DispatchingAndroidInjector androidInjector; + @Inject String string; + @Inject long aLong; + @Inject int anInt; + + @Override + public void onAttach(Activity activity) { + AndroidInjection.inject(this); + super.onAttach(activity); + } + + @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; + } + + @Override + public AndroidInjector androidInjector() { + return androidInjector; + } } diff --git a/integration-tests/android-has-interface/src/main/java/com/example/ExampleFragmentInjectionActivity.java b/integration-tests/android-has-interface/src/main/java/com/example/ExampleFragmentInjectionActivity.java index 55f30f13..d0a66009 100644 --- a/integration-tests/android-has-interface/src/main/java/com/example/ExampleFragmentInjectionActivity.java +++ b/integration-tests/android-has-interface/src/main/java/com/example/ExampleFragmentInjectionActivity.java @@ -2,33 +2,31 @@ import android.app.Activity; import android.os.Bundle; - import androidx.annotation.Nullable; - -import javax.inject.Inject; - import dagger.android.AndroidInjection; import dagger.android.AndroidInjector; import dagger.android.DispatchingAndroidInjector; import dagger.android.HasAndroidInjector; +import javax.inject.Inject; public class ExampleFragmentInjectionActivity extends Activity implements HasAndroidInjector { - @Inject DispatchingAndroidInjector androidInjector; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - AndroidInjection.inject(this); - super.onCreate(savedInstanceState); - - if (savedInstanceState == null) { - getFragmentManager().beginTransaction() - .replace(android.R.id.content, new ExampleFragment(), "ExampleFragment") - .commit(); - } + @Inject DispatchingAndroidInjector androidInjector; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + AndroidInjection.inject(this); + super.onCreate(savedInstanceState); + + if (savedInstanceState == null) { + getFragmentManager() + .beginTransaction() + .replace(android.R.id.content, new ExampleFragment(), "ExampleFragment") + .commit(); } + } - @Override - public AndroidInjector androidInjector() { - return androidInjector; - } + @Override + public AndroidInjector androidInjector() { + return androidInjector; + } } diff --git a/integration-tests/android-has-interface/src/main/java/com/example/ExampleService.java b/integration-tests/android-has-interface/src/main/java/com/example/ExampleService.java index f6ecbf6d..213d81a6 100644 --- a/integration-tests/android-has-interface/src/main/java/com/example/ExampleService.java +++ b/integration-tests/android-has-interface/src/main/java/com/example/ExampleService.java @@ -7,7 +7,6 @@ import dagger.Module; import dagger.android.AndroidInjection; import dagger.android.ContributesAndroidInjector; - import javax.inject.Inject; public final class ExampleService extends Service { @@ -29,7 +28,7 @@ public void onCreate() { } @Module - static abstract class ExampleServiceModule { + abstract static class ExampleServiceModule { @ContributesAndroidInjector abstract ExampleService service(); } diff --git a/integration-tests/android-has-interface/src/main/java/com/example/StringModule.java b/integration-tests/android-has-interface/src/main/java/com/example/StringModule.java index 710ec1c4..424523f4 100644 --- a/integration-tests/android-has-interface/src/main/java/com/example/StringModule.java +++ b/integration-tests/android-has-interface/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-has-interface/src/test/java/com/example/ExampleActivityTest.java b/integration-tests/android-has-interface/src/test/java/com/example/ExampleActivityTest.java index 4201fe58..9736e36c 100644 --- a/integration-tests/android-has-interface/src/test/java/com/example/ExampleActivityTest.java +++ b/integration-tests/android-has-interface/src/test/java/com/example/ExampleActivityTest.java @@ -1,24 +1,26 @@ 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 androidx.test.core.app.ActivityScenario; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import static androidx.lifecycle.Lifecycle.State.CREATED; -import static androidx.test.core.app.ActivityScenario.launch; -import static com.google.common.truth.Truth.assertThat; - @RunWith(RobolectricTestRunner.class) // public final class ExampleActivityTest { - @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-has-interface/src/test/java/com/example/ExampleFragmentInjectionActivityTest.java b/integration-tests/android-has-interface/src/test/java/com/example/ExampleFragmentInjectionActivityTest.java index 8a53ddbd..0e879c56 100644 --- a/integration-tests/android-has-interface/src/test/java/com/example/ExampleFragmentInjectionActivityTest.java +++ b/integration-tests/android-has-interface/src/test/java/com/example/ExampleFragmentInjectionActivityTest.java @@ -1,27 +1,30 @@ package com.example; -import androidx.test.core.app.ActivityScenario; +import static androidx.lifecycle.Lifecycle.State.CREATED; +import static androidx.test.core.app.ActivityScenario.launch; +import static com.google.common.truth.Truth.assertThat; +import androidx.test.core.app.ActivityScenario; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import static androidx.lifecycle.Lifecycle.State.CREATED; -import static androidx.test.core.app.ActivityScenario.launch; -import static com.google.common.truth.Truth.assertThat; - @RunWith(RobolectricTestRunner.class) // public class ExampleFragmentInjectionActivityTest { - @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); - }); - } + @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); + }); } + } } From 890415dcabb662bf097c77789a3b923eeefa53e3 Mon Sep 17 00:00:00 2001 From: Rafiduzzaman Sonnet Date: Fri, 13 Nov 2020 21:46:22 +0100 Subject: [PATCH 5/6] Add missing dependency for integration tests --- integration-tests/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/integration-tests/build.gradle b/integration-tests/build.gradle index aa1f6127..605be554 100644 --- a/integration-tests/build.gradle +++ b/integration-tests/build.gradle @@ -10,6 +10,7 @@ dependencies { testImplementation deps.junit testImplementation deps.truth + testImplementation deps.dagger.androidRuntimeJar testImplementation project(':reflect') testImplementation project(':codegen') testAnnotationProcessor deps.auto.value.compiler From 87d349d56438f24d71636033202adaebb944c3e8 Mon Sep 17 00:00:00 2001 From: Rafiduzzaman Sonnet Date: Fri, 13 Nov 2020 23:06:04 +0100 Subject: [PATCH 6/6] Ignore known failing test case --- .../com/example/ExampleFragmentInjectionActivityTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) 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 index 0e879c56..e35623c1 100644 --- 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 @@ -3,14 +3,22 @@ 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 =