Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve AutoMapping by using Map #17

Open
sockeqwe opened this issue May 5, 2015 · 2 comments
Open

Improve AutoMapping by using Map #17

sockeqwe opened this issue May 5, 2015 · 2 comments
Projects
Milestone

Comments

@sockeqwe
Copy link
Owner

sockeqwe commented May 5, 2015

No description provided.

@AndreasBoehm
Copy link
Contributor

Hi @sockeqwe, could you provide more details on this so i can take a look and implement it?
Thanks!

@sockeqwe
Copy link
Owner Author

sockeqwe commented Jul 19, 2017

Yeah, not sure if we should do this in 4.0

Right now the internal generated code of FragmentArgs.inject(this); is a big if-else like

public final class AutoFragmentArgInjector
    implements FragmentArgsInjector {

  public void inject(Object target) {

    Class<?> targetClass = target.getClass();
    String targetName = targetClass.getCanonicalName();

    if ( com.hannesdorfmann.fragmentargstest.NativeDialogFragment.class.getName().equals(targetName) ) {
      com.hannesdorfmann.fragmentargstest.NativeDialogFragmentBuilder.injectArguments( ( com.hannesdorfmann.fragmentargstest.NativeDialogFragment ) target);
      return;
    }

    if ( com.hannesdorfmann.fragmentargstest.PlaceholderFragment.class.getName().equals(targetName) ) {
      com.hannesdorfmann.fragmentargstest.PlaceholderFragmentBuilder.injectArguments( ( com.hannesdorfmann.fragmentargstest.PlaceholderFragment ) target);
      return;
    }

    if ( com.hannesdorfmann.fragmentargstest.DeprecatedC.class.getName().equals(targetName) ) {
      com.hannesdorfmann.fragmentargstest.DeprecatedCBuilder.injectArguments( ( com.hannesdorfmann.fragmentargstest.DeprecatedC ) target);
      return;
    }

    if ( com.hannesdorfmann.fragmentargstest.SimpleFragment.class.getName().equals(targetName) ) {
      com.hannesdorfmann.fragmentargstest.SimpleFragmentBuilder.injectArguments( ( com.hannesdorfmann.fragmentargstest.SimpleFragment ) target);
      return;
    }

    if ( com.hannesdorfmann.fragmentargstest.OnlyOptionalFragments.class.getName().equals(targetName) ) {
      com.hannesdorfmann.fragmentargstest.OnlyOptionalFragmentsBuilder.injectArguments( ( com.hannesdorfmann.fragmentargstest.OnlyOptionalFragments ) target);
      return;
    }

    if ( com.hannesdorfmann.fragmentargstest.C.class.getName().equals(targetName) ) {
      com.hannesdorfmann.fragmentargstest.CBuilder.injectArguments( ( com.hannesdorfmann.fragmentargstest.C ) target);
      return;
    }

    if ( com.hannesdorfmann.fragmentargstest.ExtendingAbstractFragment.class.getName().equals(targetName) ) {
      com.hannesdorfmann.fragmentargstest.ExtendingAbstractFragmentBuilder.injectArguments( ( com.hannesdorfmann.fragmentargstest.ExtendingAbstractFragment ) target);
      return;
    }

    if ( com.hannesdorfmann.fragmentargstest.ArgumentLessFragment.class.getName().equals(targetName) ) {
      com.hannesdorfmann.fragmentargstest.ArgumentLessFragmentBuilder.injectArguments( ( com.hannesdorfmann.fragmentargstest.ArgumentLessFragment ) target);
      return;
    }

    if ( com.hannesdorfmann.fragmentargstest.bug.LoginFragment.class.getName().equals(targetName) ) {
      com.hannesdorfmann.fragmentargstest.bug.LoginFragmentBuilder.injectArguments( ( com.hannesdorfmann.fragmentargstest.bug.LoginFragment ) target);
      return;
    }

    if ( com.hannesdorfmann.fragmentargstest.support.SupportFragment.class.getName().equals(targetName) ) {
      com.hannesdorfmann.fragmentargstest.support.SupportFragmentBuilder.injectArguments( ( com.hannesdorfmann.fragmentargstest.support.SupportFragment ) target);
      return;
    }

    if ( com.hannesdorfmann.fragmentargstest.EmptyFragment.class.getName().equals(targetName) ) {
      com.hannesdorfmann.fragmentargstest.EmptyFragmentBuilder.injectArguments( ( com.hannesdorfmann.fragmentargstest.EmptyFragment ) target);
      return;
    }

    if ( com.hannesdorfmann.fragmentargstest.KotlinFragment.class.getName().equals(targetName) ) {
      com.hannesdorfmann.fragmentargstest.KotlinFragmentBuilder.injectArguments( ( com.hannesdorfmann.fragmentargstest.KotlinFragment ) target);
      return;
    }
  }
}

We could use a Map instead (better performance, although performance is not the biggest issue).

Another idea was to support FragmentArgs.inject(this); also in android library (isn't in 3.0 where you have to define an annotation processor option).

I think this issue can be addressed somewhen in FragmentArgs 5.0 as I haven't heard a lot of demand for it.

@sockeqwe sockeqwe modified the milestones: Backlog, 4.0 Jul 20, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Development

No branches or pull requests

2 participants