All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.episode6.hackit.mockspresso.dagger.DaggerLazyMaker Maven / Gradle / Ivy

package com.episode6.hackit.mockspresso.dagger;

import com.episode6.hackit.mockspresso.api.DependencyProvider;
import com.episode6.hackit.mockspresso.api.SpecialObjectMaker;
import com.episode6.hackit.mockspresso.reflect.DependencyKey;
import com.episode6.hackit.mockspresso.reflect.TypeToken;
import dagger.Lazy;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * An implementation of SpecialObjectMaker for {@link dagger.Lazy}.
 *
 * @deprecated This functionality is now exposed by the kotlin extension method `automaticLazies()` and its
 * JavaSupport counterpart {@link MockspressoDaggerPluginsJavaSupport#automaticLazies()}
 *
 * This class will be marked internal/protected in a future release
 */
@Deprecated
public class DaggerLazyMaker implements SpecialObjectMaker {

  @Override
  public boolean canMakeObject(DependencyKey key) {
    return key.typeToken.getRawType() == Lazy.class &&
        key.typeToken.getType() instanceof ParameterizedType;
  }

  @SuppressWarnings("unchecked")
  @Override
  public  T makeObject(DependencyProvider dependencyProvider, DependencyKey key) {
    if (!canMakeObject(key)) {
      return null;
    }

    Type paramType = ((ParameterizedType)key.typeToken.getType()).getActualTypeArguments()[0];
    DependencyKey subKey = DependencyKey.of(TypeToken.of(paramType), key.identityAnnotation);
    return (T) new DependencyInstanceLazy(dependencyProvider, subKey);
  }

  private static class DependencyInstanceLazy implements Lazy {
    private final DependencyProvider mDependencyProvider;
    private final DependencyKey mDependencyKey;

    private DependencyInstanceLazy(
        DependencyProvider dependencyProvider,
        DependencyKey dependencyKey) {
      mDependencyProvider = dependencyProvider;
      mDependencyKey = dependencyKey;
    }

    @Override
    public V get() {
      return mDependencyProvider.get(mDependencyKey);
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy