Annotation Processing Library. Generates proxy class on top of interface/abstract class, that allows to intercept calls. Also known as a design pattern: proxy, delegate, interceptor.

Overview

1. AutoProxy

Build Status Download

Annotation Processing Library.

Generates proxy class on top of interface/abstract class, that allows to intercept calls.

Also known as a design pattern: proxy, delegate, interceptor.

Diagram

UML PROXY PATTERN:

Wikipedia Proxy Pattern

Proxy Pattern

2. Why should I use it?

2.1. Use Cases

  1. create proxy class that ignore all calls till UI is in a right lifecycle state; Library solves common Mvp View problem: call of view from presenter when view is already detached from Activity. (delayed updated call)
  2. inject side-effects on top of existing implementation. Example: log all the calls to proxy, control sequence and performance;
  3. Lazy initialization, record all calls and playback them on instance that reach a specific state;
  4. Mutability injection into AutoValue Builder (complex data migration from one AutoValue instance to another). AutoValue classes as DB with automatic Primary Key auto-increment;
  5. Mocks vs Fakes. Generate a fake implementation by annotating primary interface/abstract class
  6. Composing Adapter (Frontend) for another API

Library gives a bigger freedom if you think for a second about it:

  • auto-generated Proxy class is simple and does not have any performance impacts. No Reflection. All resolved during the compilation time.
  • Survive ProGuard optimization/obfuscation.
  • used in library approach allows custom generators of code/results. Unknown types is super easy to support.
  • Allows to decouple main application business logic from different side-effects and dependencies (mediator injecting in code)

3. Concepts

3.1. Predicate

Intercept call before the inner instance call. If returns TRUE, than allowed inner instance call. On FALSE developer should decide what to do. Default behavior: throw exception.

  public final Observable<Boolean> dummyCall(final List<String> generic) {
    if (!predicate( "dummyCall", generic )) {
      // @com.olku.annotations.AutoProxy.Yield(adapter=com.olku.generators.RetRxGenerator.class, value="empty")
      return Observable.empty();
    }
    return this.inner.dummyCall(generic);
  }

3.2. AfterCall

From time to time exists situations when we need to intercept and modify results of the inner call.

In that case library provides @AutoProxy.AfterCall annotation, it allows to mark specific method that requires this feature. @AutoProxy(flags = AutoProxy.Flags.AFTER_CALL) enables that for all methods in class/interface.

AutoValue Builder Sample

Declaration:

/** Abstract class. */
@AutoValue
public abstract class ParkingArea {

    @AutoValue.Builder
    @AutoProxy
    public static abstract class Builder {
        @AutoProxy.AfterCall
        @NonNull
        public abstract Builder id(final long id);
    }
}

Generated class will contains after that two methods:

public abstract class Proxy_ParkingArea$Builder extends ParkingArea.Builder {
  protected final ParkingArea.Builder inner;

  public abstract boolean predicate(final String methodName, final Object... args);

  public abstract <R> R afterCall(final String methodName, final R result);

  /* ... other methods ... */
}

Change of internal proxy pattern:

  public final ParkingArea build() {
    if (!predicate( "build" )) {
      throw new UnsupportedOperationException("cannot resolve return type.");
    }

    return afterCall("build", this.inner.build());
  }

4. Setup Guide

You can use it as a submodule or as compiled libs.

4.1. Configure Dependencies

/* include repository */
repositories {
    maven {
        url  "https://dl.bintray.com/kucherenko-alex/android"
    }
}
/* add dependencies */
dependencies{
    /* AutoProxy generator */
    compileOnly 'com.olku:autoproxy-annotations:+'
    compileOnly 'com.olku:autoproxy-rx-annotations:+'
    compileOnly 'com.olku:autoproxy-rx3-generators:+'

    annotationProcessor 'com.olku:autoproxy-rx3-generators:+'
    annotationProcessor 'com.olku:autoproxy-processor:+'
}
With RxJava v1.xx Support
/* add dependencies */
dependencies{
    /* AutoProxy generator */
    compileOnly 'com.olku:autoproxy-annotations:+'
    compileOnly 'com.olku:autoproxy-rx-annotations:+'
    compileOnly 'com.olku:autoproxy-rx-generators:+' /* RxJava v1.xx */

    annotationProcessor 'com.olku:autoproxy-rx-generators:+' /* RxJava v1.xx */
    annotationProcessor 'com.olku:autoproxy-processor:+'

}
With RxJava v2.xx Support
/* add dependencies */
dependencies{
    /* AutoProxy generator */
    compileOnly 'com.olku:autoproxy-annotations:+'
    compileOnly 'com.olku:autoproxy-rx-annotations:+'
    compileOnly 'com.olku:autoproxy-rx2-generators:+' /* RxJava v2.xx */

    annotationProcessor 'com.olku:autoproxy-rx2-generators:+' /* RxJava v2.xx */
    annotationProcessor 'com.olku:autoproxy-processor:+'
}
With RxJava v3.xx Support
/* add dependencies */
dependencies{
    /* AutoProxy generator */
    compileOnly 'com.olku:autoproxy-annotations:+'
    compileOnly 'com.olku:autoproxy-rx-annotations:+'
    compileOnly 'com.olku:autoproxy-rx3-generators:+' /* RxJava v3.xx */

    annotationProcessor 'com.olku:autoproxy-rx3-generators:+' /* RxJava v3.xx */
    annotationProcessor 'com.olku:autoproxy-processor:+'
}
OR attach as a submodule

attach repository as a submodule:

# initialize project for submodules usage
git submodule init

# add submodule
git submodule add https://github.com/OleksandrKucherenko/autoproxy.git modules/autoproxy

# update project recursively and pull all submodules
git submodule update --init --recursive

include submodule into project

app/build.gradle:

    /* AutoProxy generator */
    compileOnly project(':modules:autoproxy:autoproxy-annotations')
    compileOnly project(':modules:autoproxy:autoproxy-rx-annotations')
    compileOnly project(':modules:autoproxy:autoproxy-rx-generators') /* RxJava v1.xx */
    compileOnly project(':modules:autoproxy:autoproxy-rx2-generators') /* RxJava v2.xx */

    /* For Java Projects */
    annotationProcessor project(':modules:autoproxy:autoproxy-rx-generators') /* RxJava v1.xx */
    annotationProcessor project(':modules:autoproxy:autoproxy-rx2-generators') /* RxJava v2.xx */
    annotationProcessor project(':modules:autoproxy:autoproxy-processor')

    /* OR for Kotlin Projects */
    kapt project(':modules:autoproxy-rx-generators') /* RxJava v1.xx */
    kapt project(':modules:autoproxy-rx2-generators') /* RxJava v2.xx */
    kapt project(':modules:autoproxy-processor')

settings.gradle:

include ':modules:autoproxy:autoproxy-annotations'
include ':modules:autoproxy:autoproxy-generators'
include ':modules:autoproxy:autoproxy-rx-annotations'
include ':modules:autoproxy:autoproxy-rx-generators'
include ':modules:autoproxy:autoproxy-rx2-generators'
include ':modules:autoproxy:autoproxy-processor'

4.2. Make Proxy Class Specification

/** Simplest case */
@AutoProxy
public interface MvpView {
  /* ... declare method ... */
}

OR check the bigger example bellow.

Declarations - Show code
@AutoProxy(flags = AutoProxy.Flags.ALL)
public interface MvpView {
    /** Returns NULL if predicate returns False. */
    @AutoProxy.Yield(Returns.NULL)
    Observable<Boolean> dummyCall();

    /** Returns Observable.empty() */
    @AutoProxy.Yield(adapter = RetRxGenerator.class, value = RetRx.EMPTY)
    Observable<Boolean> dummyCall(final List<String> generic);

    /** Throws exception on False result from predicate. */
    @AutoProxy.Yield(Returns.THROWS)
    Observable<Boolean> dummyCall(final String message, final List<String> args);

    /** Returns Observable.error(...) on False result from predicate. */
    @AutoProxy.Yield(adapter = RetRxGenerator.class, value = RetRx.ERROR)
    Observable<Boolean> dummyCall(final String message, final Object... args);

    /** Returns ZERO on False result from predicate. */
    @AutoProxy.Yield(RetNumber.ZERO)
    double numericCall();

    /** Returns FALSE on False result from predicate. */
    @AutoProxy.Yield(RetBool.FALSE)
    boolean booleanCall();

    /** Does direct call independent to predicate result. */
    @AutoProxy.Yield(Returns.DIRECT)
    boolean dispatchDeepLink(@NonNull final Uri deepLink);

    /** Returns Observable.just(true) on False result from predicate. */
    @AutoProxy.Yield(adapter = JustRxGenerator.class, value = "true")
    Observable<Boolean> startHearthAnimation();
}
AutoGenerate Code - Show code
public abstract class Proxy_MvpView implements MvpView {
  protected final MvpView inner;

  public Proxy_MvpView(@NonNull final MvpView instance) {
    this.inner = instance;
  }

  public abstract boolean predicate(@Methods @NonNull final String methodName,
      final Object... args);

  public final Observable<Boolean> dummyCall() {
    if (!predicate( Methods.DUMMYCALL )) {
      // @com.olku.annotations.AutoProxy.Yield("null")
      return (Observable<Boolean>)null;
    }
    return this.inner.dummyCall();
  }

  public final Observable<Boolean> dummyCall(final List<String> generic) {
    if (!predicate( M.DUMMYCALL, generic )) {
      // @com.olku.annotations.AutoProxy.Yield(adapter=com.olku.generators.RetRxGenerator.class, value="empty")
      return Observable.empty();
    }
    return this.inner.dummyCall(generic);
  }

  public final Observable<Boolean> dummyCall(final String message, final List<String> args) {
    if (!predicate( M.DUMMYCALL, message, args )) {
      // @com.olku.annotations.AutoProxy.Yield
      throw new UnsupportedOperationException("cannot resolve return value.");
    }
    return this.inner.dummyCall(message, args);
  }

  public final Observable<Boolean> dummyCall(final String message, final Object... args) {
    if (!predicate( M.DUMMYCALL, message, args )) {
      // @com.olku.annotations.AutoProxy.Yield(adapter=com.olku.generators.RetRxGenerator.class, value="error")
      return Observable.error(new UnsupportedOperationException("unsupported method call"));
    }
    return this.inner.dummyCall(message, args);
  }

  public final double numericCall() {
    if (!predicate( M.NUMERICCALL )) {
      // @com.olku.annotations.AutoProxy.Yield("0")
      return 0;
    }
    return this.inner.numericCall();
  }

  public final boolean booleanCall() {
    if (!predicate( M.BOOLEANCALL )) {
      // @com.olku.annotations.AutoProxy.Yield("false")
      return false;
    }
    return this.inner.booleanCall();
  }

  public final boolean dispatchDeepLink(@NonNull final Uri deepLink) {
    if (!predicate( M.DISPATCHDEEPLINK, deepLink )) {
      // @com.olku.annotations.AutoProxy.Yield("direct")
      // direct call, ignore predicate result
    }
    return this.inner.dispatchDeepLink(deepLink);
  }

  public final Observable<Boolean> startHearthAnimation() {
    if (!predicate( M.STARTHEARTHANIMATION )) {
      // @com.olku.annotations.AutoProxy.Yield(adapter=com.olku.generators.JustRxGenerator.class, value="true")
      return Observable.just(true);
    }
    return this.inner.startHearthAnimation();
  }

  /* ... other generated helpers customized by flags ... */
}

4.3. Usage in project (aka usage with Dagger)

/** Get instance of View. */
@Provides
@PerFragment
MvpView providesView() {
    // Proxy class isolates Presenter from direct View calls. View
    // will receive calls only when Fragment that implements that
    // interface is in updateable state (attached to activity, not
    // destroyed or any other inproper state).
    return new Proxy_MvpView(this.view) {
        @Override
        public boolean predicate(@Methods @NonNull final String methodName, final Object... args) {
            return ((BaseFragment) inner).isUpdatable();
        }
    };
}

Simplified Java8 lambda version (from sample above):

@NonNull
public MvpView getProxy() {
    return Proxy_MvpView.create(this.view, (m, args) -> ((BaseFragment) inner).isUpdatable());
}

4.4. Customization of Generated Code

By providing special flags you can customize output of AutoProxy generator:

@AutoProxy(flags = AutoProxy.Flags.ALL)
Supported Flags - Show code
/** Special code generation modifier flags. */
@interface Flags {
    /** Default value. */
    int NONE = 0x0000;
    /** Compose static method for easier instance creation. */
    int CREATOR = 0x0001;
    /** Compose afterCall(...) method for all methods in class. */
    int AFTER_CALL = 0x0002;
    /** Compose dispatchByName(...) method that maps string name to a method call. */
    int MAPPING = 0x004;

    /** Compose all additional methods. */
    int ALL = CREATOR | AFTER_CALL | MAPPING;
}
Auto Generated Code (CREATOR) - Show code

Outputs:

  /**
   * Copy this declaration to fix method demands for old APIs:
   *
   * <pre>
   * package java.util.function;
   *
   * public interface BiFunction&lt;T, U, R&gt; {
   *     R apply(T t, U u);
   * }
   * </pre>
   */
  public static KotlinAbstractMvpView create(final KotlinAbstractMvpView instance,
      final BiFunction<String, Object[], Boolean> action) {
    return new Proxy_KotlinAbstractMvpView(instance) {

      @Override
      public boolean predicate(final String methodName, final Object... args) {
        return action.apply(methodName, args);
      }

      @Override
      public <T> T afterCall(final String methodName, final T result) {
        return result;
      };
    };
  }
Auto Generated Code (AFTER_CALL & MAPPING) - Show code

Outputs:

  public abstract <T> T afterCall(@M @NonNull final String methodName, final T result);

  public <T> T dispatchByName(@M @NonNull final String methodName, final Object... args) {
    final Object result;
    if(M.BOOLEANCALL.equals(methodName)) {
      return (T)(result = this.inner.booleanCall());
    }
    if(M.DISPATCHDEEPLINK_DEEPLINK.equals(methodName)) {
      return (T)(result = this.inner.dispatchDeepLink((android.net.Uri)args[0] /*deepLink*/));
    }
    if(M.DUMMYCALL.equals(methodName)) {
      return (T)(result = this.inner.dummyCall());
    }
    if(M.DUMMYCALL_GENERIC.equals(methodName)) {
      return (T)(result = this.inner.dummyCall((java.util.List<java.lang.String>)args[0] /*generic*/));
    }
    if(M.DUMMYCALL_MESSAGE_ARGS.equals(methodName)) {
      return (T)(result = this.inner.dummyCall((java.lang.String)args[0] /*message*/, (java.lang.Object[])args[1] /*args*/));
    }
    if(M.NUMERICCALL.equals(methodName)) {
      return (T)(result = this.inner.numericCall());
    }
    if(M.STARTHEARTHANIMATION.equals(methodName)) {
      return (T)(result = this.inner.startHearthAnimation());
    }
    return (T)null;
  }

In addition generated several parts of the code depends on other options:

Auto Generated Code (@Proxy_MvpView.M) - Show code
@Generated("AutoProxy Auto Generated Code")
public abstract class Proxy_MvpView implements MvpView {
  /* ... other code ... */

  @StringDef({M.BOOLEANCALL, M.DISPATCHDEEPLINK_DEEPLINK, M.DUMMYCALL, M.DUMMYCALL_GENERIC, M.DUMMYCALL_MESSAGE_ARGS, M.NUMERICCALL, M.STARTHEARTHANIMATION})
  public @interface M {
    /** {@link #booleanCall()} */
    String BOOLEANCALL = "booleanCall";

    /** {@link #dispatchDeepLink(android.net.Uri)} */
    String DISPATCHDEEPLINK_DEEPLINK = "dispatchDeepLink_deepLink";

    /** {@link #dummyCall()} */
    String DUMMYCALL = "dummyCall";

    /** {@link #dummyCall(java.util.List<java.lang.String>)} */
    String DUMMYCALL_GENERIC = "dummyCall_generic";

    /** {@link #dummyCall(java.lang.String, java.lang.Object[])} */
    String DUMMYCALL_MESSAGE_ARGS = "dummyCall_message_args";

    /** {@link #numericCall()} */
    String NUMERICCALL = "numericCall";

    /** {@link #startHearthAnimation()} */
    String STARTHEARTHANIMATION = "startHearthAnimation";
  }
}

Binder is a simple method that wrap final class into proxy interface, make it available for chained calls and other features.

Auto Generated Code (BINDER) - Show code
@NonNull
protected static MimicFinalClass bind(@NonNull final FinalClass instance) {
  return new MimicFinalClass() {
    @Override
    public final void dummyCall() {
      instance.dummyCall();
    }

    @Override
    public final boolean returnBoolean() {
      return instance.returnBoolean();
    }

    @Override
    public final void consumer(final String data) {
      instance.consumer(data);
    }

    @Override
    public final void bi_consumer(final String data, final String options) {
      instance.bi_consumer(data, options);
    }

    @Override
    public final String et_function(final String data) {
      return instance.et_function(data);
    }

    @Override
    public final String bi_function(final String data, final String options) {
      return instance.bi_function(data, options);
    }
  };
}

5. Advanced Usage (Patterns)

5.1. Mimic final class interface

Mimic Final Class Feature

Problem: system provides class that is impossible to inherit, override or mock (fake). Often it means that class declared as final and method of it declared as final.

Solution: Mimic Final Class Feature. It can be used for decoupling the code implementation from system (or 3rd party) final class that is impossible to mock or fake.

Generated code can be treated as a binding by method name and signature when proxy class resolves which method to call of the inner instance in last possible moment (runtime).

@AutoProxy(innerType = FinalClass.class) - enables this approach.

Code Sample
/** Step 0: identify final class for proxy */
public final class FinalClass {
    final void dummyCall() { /* do something */ }

    final boolean returnBoolean() { /* do something */ }
}

/** Step 1: create interface with all needed methods that we will need. */
@AutoProxy(innerType = FinalClass.class, flags = AutoProxy.Flags.ALL)
public interface MimicFinalClass {
  /* declare methods of final class that you plan to use.
     Annotate each method by AutoProxy.Yield customization */
}

/** Step 2: replace usage of FinalClass by MimicFinalClass in code. */

/** Step 3: Compose instance of proxy. */
@NonNull
static MimicFinalClass proxy(FinalClass instance) {
    // simplest way to forward all to inner instance
    return Proxy_MimicFinalClass.create(instance, (m, args) -> true);
    // alternative:
    // return Proxy_MimicFinalClass.create(Proxy_MimicFinalClass.bind(instance), (m, args) -> true);
}

Code:

5.2. Side effects

Chained Side Effects

How it works? Each instance of customized proxy wrap the instance of another proxy. As result we have wrapped calls that is the another representation of the chain of calls. Think about it as diving into call-stack, on each wrapper we go deeper and deeper.

@AutoProxy(flags = AutoProxy.Flags.CREATE) feature simplifying wrap's customization.

Code sample

Declaration:

/** Step #0: Create class declaration */
@AutoProxy(flags = AutoProxy.Flags.CREATE)
public abstract class MyClass {
  // Default AutoProxy behavior is THROW exception when predicate() returns FALSE
  void firstMethod();

  @AutoProxy.Yield(RetBool.FALSE)
  boolean secondMethod();
}

Customization:

/** Step #1: Compose side effect */
static MyClass withLogging(MyClass instance) {
  return Proxy_MyClass.create(instance, (m, args) -> {
      Log.i("Called method: " + m + "with args: " + Arrays.toString(args));
      return true;
    });
}

/** Step #2: Another side effect */
static MyClass withFailFirstMethod(MyClass instance) {
  return Proxy_MyClass.create(instance, (m, args) -> {
    return (!M.FIRSTMETHOD.equals(m));
  });
}

/** Step #3: Another side effect */
static MyClass withFalseSecondMethod(MyClass instance) {
  return Proxy_MyClass.create(instance, (m, args) -> {
    return (M.SECONDMETHOD.equals(m) ? false : true);
  });
}

Usage:

/* Usage of chain. */
final MyClass instance = 
  withLogging(
    withFailFirstMethod(
      withFalseSecondMethod(
        new MyClassImpl()
  )));

/* ... Use instance in code ... */    

5.3. Runtime defined output value

Runtime defined output value

@AutoProxy.Yield(Returns.SKIP) - feature

Feature enables:

  • Skipped inner class call
  • predicate result ignored, yield section is empty
  • afterCall is responsible for return value

5.3.1. Skip Inner Class Call and Simple Return

Code sample
@AutoProxy(flags = AutoProxy.Flags.CREATOR)
abstract class RxJava1Sample {
    @AutoProxy.Yield(Returns.SKIP)
    abstract fun chainedCallSkip(): Boolean?

    /* ... */
}
/** Usage: simple case */
final RxJava1Sample instance = /* ... */;
final RxJava1Sample proxy = new Proxy_RxJava1Sample(instance) {
    /* ... */

    @Override
    public <T> T afterCall(@NonNull String methodName, T result) {
        if (M.CHAINEDCALLSKIP.equals(methodName)) {
            return (T) computeSomething();
        }

        return result;
    }
};

private Boolean computeSomething() {
    /* TODO: do own code here */
}

5.3.2. Skip Inner Class Call and Return Self Reference

Code sample
@AutoProxy(flags = AutoProxy.Flags.CREATOR)
abstract class KotlinAbstractMvpViewRxJava1 {
    @AutoProxy.Yield(Returns.SKIP)
    abstract fun chainedCallSkip(): KotlinAbstractMvpViewRxJava1

    /* ... */
}
/** Usage: of custom return type. */
final AtomicReference<RxJava1Sample> proxy = new AtomicReference<>();
final RxJava1Sample instance = /* ... */;
proxy.set(new Proxy_RxJava1Sample(instance) {
    /* ... */

    @Override
    public <T> T afterCall(@NonNull String methodName, T result) {
        if (Proxy_RxJava1Sample.M.CHAINEDCALLSKIP.equals(methodName)) {
            return (T) proxy.get();
        }

        return result;
    }
});

Output:

  @NotNull
  public final KotlinAbstractMvpViewRxJava1 chainedCallSkip() {
    if (!predicate( M.CHAINEDCALLSKIP )) {
      // @com.olku.annotations.AutoProxy.Yield("skipped")
      // skipped call, ignore predicate result. afterCall will be used for return composing.
    }
    final KotlinAbstractMvpViewRxJava1 forAfterCall = null;
    return afterCall(M.CHAINEDCALLSKIP, forAfterCall);
  }

5.4. Customize Yield Return Types (Custom return type adapter)

Library provides three generators:

  • rxJava v1.xx: RetRxGenerator, JustRxGenerator
  • rxJava v2.xx: RetRx2Generator, JustRx3Generator
  • rxJava v3.xx: RetRx2Generator, JustRx3Generator
Code sample
@AutoProxy.Yield(adapter = RetRxGenerator::class, value = RetRx.EMPTY)
abstract fun observableMethod(): Observable<Boolean>

@AutoProxy.Yield(adapter = RetRxGenerator::class, value = RetRx.ERROR)
abstract fun observableMethod(): Observable<Boolean>

@AutoProxy.Yield(adapter = RetRx2Generator::class, value = RetRx.NEVER)
abstract fun flowableMethod(): Flowable<Boolean>

@AutoProxy.Yield(adapter = JustRx2Generator::class, value = "false")
abstract fun flowableMethod(): Flowable<Boolean>

@AutoProxy.Yield(adapter = RetRx3Generator::class, value = RetRx.ERROR)
abstract fun maybeMethod(): Maybe<Boolean>

@AutoProxy.Yield(adapter = JustRx3Generator::class, value = "ignored")
abstract fun completableMethod(): Completable

5.5. Decouple MVC, MVP, MVVM patterns (inject mediator)

MVC pattern

MVP pattern

MVVM pattern

All based on several refactoring steps:

  • introduce IView interface and extract to it common actions/methods from View
  • refactor Controler, Model, Presenter, ViewPresenter to use IView instead of View
  • annotate IVew as AutoProxy enabled
  • instead of instace of IView (VIEW is an implementation of it) start use instance of Proxy_IView.
  • that will break relation 1..1 and will make possible implementation 0..1 (or N..1)

5.6. Compose FAKE class (experimental)

Create a class for Unit Tests that fake the real implementation. It's and alternative to Mocking approach.

final FinalClass instance = new FinalClass();
final MimicFinalClass proxy =
        // return TRUE
        when(M.RETURNBOOLEAN, (s, o) -> true, 
          // call another implementation
          when(M.DUMMYCALL, MyClass::anotherAction, 
            // No Operation
            when(M.BI_CONSUMER_DATA_OPTIONS, MyClass::noOp,
              // convert final class instance to MimicFinalClass instance
              $MimicFinalClass.bind(instance) 
            )
          )
        );

proxy.returnBoolean(); // will return `true`
proxy.dummyCall(); // ~> forwarded to MyClass::anotherAction
proxy.bi_consumer("data", "options"); // ~> forwarded to MyClass::noOp
Show helper code
@Test
public void chainedCalls() {
    final FinalClass instance = new FinalClass();
    final MimicFinalClass bindToInstance = $MimicFinalClass.bind(instance);

    Mockito.when(mockAfterCall.apply(anyString(), any())).thenReturn(null);
    Mockito.when(mockAfterCall2.apply(anyString(), any())).thenReturn(null);

    final MimicFinalClass proxy =
            when(M.RETURNBOOLEAN, (s, o) -> true,
                    when(M.DUMMYCALL, mockAfterCall,
                            when(M.BI_CONSUMER_DATA_OPTIONS, mockAfterCall2,
                                    bindToInstance
                            )
                    )
            );

    assertThat(proxy.returnBoolean(), equalTo(true));

    proxy.dummyCall();
    Mockito.verify(mockAfterCall).apply(anyString(), any());

    proxy.bi_consumer("data", "options");
    Mockito.verify(mockAfterCall2).apply(anyString(), any());
}
/** After call lambda injector. */
@NonNull
static MimicFinalClass create(MimicFinalClass instance,
                              final BiFunction<String, Object, ?> afterCall) {
    return create(instance, (m, args) -> true, afterCall);
}

/** Lambda injection helper. */
static MimicFinalClass create(final MimicFinalClass instance,
                              final BiFunction<String, Object[], Boolean> predicate,
                              final BiFunction<String, Object, ?> afterCall) {
    return new $MimicFinalClass(instance) {

        @Override
        public boolean predicate(@NonNull @M final String methodName, final Object... args) {
            return predicate.apply(methodName, args);
        }

        @SuppressWarnings("unchecked")
        @Override
        public <T> T afterCall(@NonNull @M final String methodName, final T result) {
            return (T) afterCall.apply(methodName, result);
        }
    };
}

/** Customize return of the specific method. */
@NonNull
static MimicFinalClass when(@NonNull @M String method,
                            @NonNull final BiFunction<String, Object, ?> afterCall,
                            @NonNull final MimicFinalClass instance) {
    return create(instance,
            // just forward result, or call afterCall
            (String m, Object r) -> (method.equals(m)) ? afterCall.apply(m, r) : r
    );
}

Code:

6. Troubles

http://www.vogella.com/tutorials/GitSubmodules/article.html

6.1. Reset submodule to remote repository version

git submodule foreach 'git reset --hard'
# including nested submodules
git submodule foreach --recursive 'git reset --hard'

6.2. Enable Tracing

Add those lines to local.properties file:

#
# Make Kotlin Annotation Processor verbose
#
kapt.verbose=true

6.3. How to Debug?

Pre-steps:

  • gradle/version-up.sh for composing version.properties file with a future version
  • ./gradlew install to publish version in local maven repository

Debugging:

  1. Go to terminal and execute ./gradlew --stop
  2. Enable/UnComment in gradle.properties line #org.gradle.debug=true
  3. Switch IDE to run configuration Debug Annotation Processor
  4. Run IDE configuration
  5. Open terminal and execute ./gradlew clean assembleDebug

more details ...

6.4. How to Change/Generate GPG signing key?

brew install gpg
gpg --gen-key

# pub   rsa2048 2020-04-21 [SC] [expires: 2022-04-21]
#       6B38C8BB4161F9AF99133B4B8DF78BA02F1868F9
# uid                      Oleksandr Kucherenko <[email protected]>
# sub   rsa2048 2020-04-21 [E] [expires: 2022-04-21]
gpg -a --export 6B38C8BB4161F9AF99133B4B8DF78BA02F1868F9 >gpg.public.key
gpg -a --export-secret-key 6B38C8BB4161F9AF99133B4B8DF78BA02F1868F9 >gpg.private.key
  • open https://bintray.com/profile/edit
  • Select GPG Signing
  • First set the public key and press Update
  • Than press Private Key Click to Change and upload private key
  • Store Passpharse in credentials.gradle
- ext.gpg_password = '<secret>'
+ ext.gpg_password = 'my_new_and_secure_passphrase'

6.5. How to Publish?

Edit file credentials.gradle in the root of the project:

- ext.bintray_dryrun = true
+ ext.bintray_dryrun = false

Disable DRY_RUN mode, that will allow binaries upload to the bintray side. Than Run:

./gradlew bintrayUpload

7. Roadmap

  • Incremental Annotation Processing
  • Create constants class for method names
  • method name parameter annotated by custom annotation with @StringDef
  • static create method that allows proxy creation with use of lambda
  • dispatchByName method that calls specific inner instance method with provided parameters
  • customization auto-generation flags, configure demands to helper code
  • Proxy for final classes
  • Yield predicate with customizable return (lambda expression) (use SKIP approach)
  • Add Support for RxJava v2
  • Add Support for RxJava v3
  • customize Prefix of generated class "Proxy_" can be replaced by "Fake_" or "Stub_"
  • Allow Mutable inner instance, replace instance in runtime for proxy
  • Add Support for Kotlin language (generate code in Kotlin)

8. License

MIT © Oleksander Kucherenko (ArtfulBits IT AB), 2017-2020

Comments
  • Attempt to update Gradle resulted in AutoProxy to break.

    Attempt to update Gradle resulted in AutoProxy to break.

    We tried to upgrade gradle plugin version but AutoProxy is broken when we did that. Do you have any clue why it does so ? Or can you help us raising gradle plugin version in your project where this lib is used and see if you face the problem. If you face, how you could solve it ?

    opened by gurappa 12
  • Bump javapoet from 1.9.0 to 1.11.1

    Bump javapoet from 1.9.0 to 1.11.1

    Bumps javapoet from 1.9.0 to 1.11.1.

    Changelog

    Sourced from javapoet's changelog.

    JavaPoet 1.11.1 (2018-05-16)

    • Fix: JavaPoet 1.11 had a regression where TypeName.get() would throw on error types, masking other errors in an annotation processing round. This is fixed with a test to prevent future regressions!

    JavaPoet 1.11.0 (2018-04-29)

    • New: Support TYPE_USE annotations on each enclosing ClassName.
    • New: Work around a compiler bug in TypeName.get(TypeElement). There was a problem getting an element's kind when building from source ABIs.

    JavaPoet 1.10.0 (2018-01-27)

    • JavaPoet now requires Java 8 or newer.
    • New: $Z as an optional newline (zero-width space) if a line may exceed 100 chars.
    • New: CodeBlock.join() and CodeBlock.joining() let you join codeblocks by delimiters.
    • New: Add CodeBlock.Builder.isEmpty().
    • New: addStatement(CodeBlock) overloads for CodeBlock and MethodSpec.
    • Fix: Include annotations when emitting type variables.
    • Fix: Use the right imports for annotated type parameters.
    • Fix: Don't incorrectly escape classnames that start with $.
    Commits
    • a5db06d [maven-release-plugin] prepare release javapoet-1.11.1
    • 5ff40a9 Update changelog for 1.11.1.
    • 5584016 Fix TypeName.get() on top-level error types (#646)
    • 3ddde8f [maven-release-plugin] prepare for next development iteration
    • b09d944 [maven-release-plugin] prepare release javapoet-1.11.0
    • 5d6ff03 Update changelog for 1.11
    • 30ff8ce Merge pull request #644 from square/jwilson.0428.avoid_typeelement_getkind
    • 1c897e4 Avoid TypeElement.getKind() in ClassName.get().
    • 3f4d5c2 Merge pull request #642 from sormuras/upgrade-errorprone
    • c8b9bc8 Merge pull request #629 from sormuras/load-install-jdk-on-the-fly
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Note: This repo was added to Dependabot recently, so you'll receive a maximum of 5 PRs for your first few update runs. Once an update run creates fewer than 5 PRs we'll remove that limit.

    You can always request more updates by clicking Bump now in your Dependabot dashboard.

    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)

    Finally, you can contact us by mentioning @dependabot.

    dependencies 
    opened by dependabot-preview[bot] 4
  • Bump constraintlayout from 1.1.3 to 2.0.1

    Bump constraintlayout from 1.1.3 to 2.0.1

    Bumps constraintlayout from 1.1.3 to 2.0.1.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 3
  • Bump auto-service from 1.0-rc3 to 1.0-rc6

    Bump auto-service from 1.0-rc3 to 1.0-rc6

    Bumps auto-service from 1.0-rc3 to 1.0-rc6.

    Release notes

    Sourced from auto-service's releases.

    AutoService 1.0-rc6

    • Actually support Gradle's incremental annotation processing

    AutoService 1.0-rc5

    • @AutoService now has a separate artifact (auto-service-annotations) from the annotation processor (still auto-service) (af1e5da)
    • Gradle's incremental compilation is now supported (thanks to @​tbroyer for this work!). (a5673d0)
      • Update: this didn't actually work. It was added in 1.0-rc6

    AutoService release 1.0-rc4

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Note: This repo was added to Dependabot recently, so you'll receive a maximum of 5 PRs for your first few update runs. Once an update run creates fewer than 5 PRs we'll remove that limit.

    You can always request more updates by clicking Bump now in your Dependabot dashboard.

    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)

    Finally, you can contact us by mentioning @dependabot.

    dependencies 
    opened by dependabot-preview[bot] 3
  • Bump rxjava from 2.2.19 to 2.2.20

    Bump rxjava from 2.2.19 to 2.2.20

    Bumps rxjava from 2.2.19 to 2.2.20.

    Release notes

    Sourced from rxjava's releases.

    2.2.20

    Maven JavaDocs

    :warning: The 2.x version line is now in maintenance mode and will be supported only through bugfixes until February 28, 2021. No new features, behavior changes or documentation adjustments will be accepted or applied to 2.x. It is recommended to migrate to 3.x within this time period.

    Bugfixes

    • Fix Observable.flatMap with maxConcurrency hangs (#6960)
    • Fix Observable.toFlowable(ERROR) not cancelling upon MissingBackpressureException (#7084)
    • Fix Flowable.concatMap backpressure with scalars. (#7091)
    Changelog

    Sourced from rxjava's changelog.

    Version 2.2.20 - October 6, 2020 (Maven)

    JavaDocs

    :warning: The 2.x version line is now in maintenance mode and will be supported only through bugfixes until February 28, 2021. No new features, behavior changes or documentation adjustments will be accepted or applied to 2.x. It is recommended to migrate to 3.x within this time period.

    Bugfixes

    • Fix Observable.flatMap with maxConcurrency hangs (#6960)
    • Fix Observable.toFlowable(ERROR) not cancelling upon MissingBackpressureException (#7084)
    • Fix Flowable.concatMap backpressure with scalars. (#7091)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 2
  • Ep additional changes

    Ep additional changes

    EasyPark project had some additional changes on top of the original library. Copied them from EP project and pasted them in the forked repo of autoproxy project. This is the PR with all those changes.

    opened by gurappa 2
  • Bump auto-value from 1.5.2 to 1.6.6

    Bump auto-value from 1.5.2 to 1.6.6

    Bumps auto-value from 1.5.2 to 1.6.6.

    Release notes

    Sourced from auto-value's releases.

    AutoValue 1.6.6

    • Allow @​AutoOneOf properties to be void. An abstract void method means that the associated kind has no value. The factory method has no parameter and calling the implementation of the void method does nothing unless the instance is of another kind. (48d6557)
    • Shade org.checkerframework in the auto-value jar. (f89da91)
    • Primitive arrays now work in @​AutoOneOf classes. (81134b5)
    • In AutoValue code, include type annotations in bounds of type-parameter declarations. (ca013a2)
    • Handle inner classes correctly when the outer class has a type parameter. (4259261)
    • Use the short form of annotations in generated code. For example, instead of @SuppressWarnings(value = {"mutable"}), write @SuppressWarnings("mutable"). (b2eb535)
    • Use ImmutableSortedSet.copyOfSorted and .naturalOrder where appropriate. (a0de99b)
    • Work around an Eclipse compiler bug where static interface methods are incorrectly shown as being inherited. (3854a65)
    • Handle GWT serialization when some of the properties use property builders. (445b9ed)

    AutoValue 1.6.5

    This is identical to 1.6.4 except for the following:

    • Fix an intermittent issue with AutoValue extensions and Gradle. (0cced0d)

    AutoValue 1.6.4

    • More detailed exception information if AutoValue extensions cannot be loaded. (67e172e)
    • Expand the exceptions covered by the workaround for a JDK8 jar bug. (f17d298)
    • Support @​CopyAnnotations in classes generated by MemoizeExtension. (bf27cab)
    • Improved type checking for builder setter parameters. (8d6111d, efd48fd)
    • Added MoreTypes.asIntersection() (c16ef66)
    • It is a compilation error for an @​AutoOneOf property to be @​Nullable since null values are not in fact accepted. (9cf9999)
    • AutoValue extensions can now declare supported options. (175e323)
    • In AutoValue, @​CopyAnnotations.exclude now affects type annotations. (3ee205b)

    AutoValue 1.6.3

    • Make AutoValue and AutoService support Gradle incremental build. Thanks to Thomas Broyer for this work. (a5673d0)
    • When hashCode() is @Memoized, equals() will be optimized to check hash codes first before other properies (34a6a03)
    • MemoizeExtension recognises @Nullable type annotations, not just method annotations. (66a57ec)
    • Remove unnecessary parentheses from the generated equals(Object) method in @AutoValue classes. (a5387a6)
    • Clarify the AutoValueExtension documentation to explain how subclassing works in the code generated by extensions. (73e848a)
    • GwtSerialization support now works in the presence of AutoValue extensions. (9cc04ec)
    • Remove the need for the java.desktop module on Java 9+. (f878642)

    AutoValue 1.6.2

    • Add capability to annotate individual AutoValue fields. (96370f3)
    • Ensure AutoAnnotation works even if there is no @Generated available. (32a0ae3)
    • Use separate EscapeVelocity project rather than AutoValue's own copy. (b5b51db)
    • Delete AutoValue's copy of EscapeVelocity. (a36cc06)

    AutoValue 1.6.1

    • Reformatted AutoValue source code using google-java-format. (41d78d2)
    • 9057ae8: Allow an Optional property to be set in a builder through a method with a @Nullable parameter. NOTE: As a side-effect of this change, a setter for a @Nullable property must have its parameter also marked @Nullable. Previously, if the @Nullable was not a TYPE_USE [@&#8203;Nullable](https://github.com/Nullable), it was copied from the getter to the parameter of the generated setter implementation. For TYPE_USE [@&#8203;Nullable](https://github.com/Nullable) it was already necessary to mark the setter parameter @Nullable.

    • Clarified how annotation copying works when @CopyAnnotations is not present. (0808746)
    • In @AutoValue class Foo<[@&#8203;Bar](https://github.com/Bar) T>, copy @Bar to the implementing subclass. (c830cf2)
    ... (truncated)
    Commits
    • f5e74ac Set version number for auto-value-parent to 1.6.6.
    • 407e83d Add relative directories to integration tests.
    • 3d4c3ac Changing oraclejdk8 to openjdk8 in hopes that it will fix our Travis builds.
    • f89da91 Shade org.checkerframework in the auto-value jar. Fixes https://github.com/go...
    • 07a39b7 Switch from oraclejdk9 to openjdk9 in Travis builds, per https://travis-ci.co...
    • c35f5c3 Prevent stack overflow caused by self referencing types (ex: E extends Enum<E>).
    • e63019a Add support for type parameters to @​AutoFactory.
    • 12436cc Don't crash processing classes in the default packages
    • 4e3366b Update live version of auto-value from 1.6.2 to 1.6.5
    • 395c08f Clarify the FAQ on interfaces.
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Note: This repo was added to Dependabot recently, so you'll receive a maximum of 5 PRs for your first few update runs. Once an update run creates fewer than 5 PRs we'll remove that limit.

    You can always request more updates by clicking Bump now in your Dependabot dashboard.

    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)

    Finally, you can contact us by mentioning @dependabot.

    dependencies 
    opened by dependabot-preview[bot] 2
  • Bump rxjava from 1.3.4 to 1.3.8

    Bump rxjava from 1.3.4 to 1.3.8

    Bumps rxjava from 1.3.4 to 1.3.8.

    Release notes

    Sourced from rxjava's releases.

    1.3.8

    Maven

    RxJava 1.x is now officially end-of-life (EOL). No further developments, bugfixes, enhancements, javadoc changes or maintenance will be provided by this project after version 1.3.8 and after today.

    Users are encouraged to migrate to 2.x. In accordance, the wiki will be updated in the coming months to describe 2.x features and properties.

    Bugfixes

    • Pull 5935: Fix take() to route late errors to RxJavaHooks.

    1.3.7

    Maven

    Bugfixes

    • Pull 5917: Fix and deprecate evicting groupBy and add a new overload with the corrected signature.

    1.3.6

    Maven

    Bugfixes

    • Pull 5850: Fix a race condition that may make OperatorMaterialize emit the wrong signals.
    • Pull 5851: Fix a race condition in OperatorMerge.InnerSubscriber#onError causing incorrect terminal event.

    1.3.5

    Maven

    Other

    • Pull 5820: RxJavaPlugins lookup workaround for System.getProperties() access restrictions.
    Changelog

    Sourced from rxjava's changelog.

    Version 1.3.8 - March 31, 2018 (Maven)

    RxJava 1.x is now officially end-of-life (EOL). No further developments, bugfixes, enhancements, javadoc changes, maintenance will be provided by this project after version 1.3.8.

    Users are encourage to migrate to 2.x. In accordance, the wiki will be updated in the coming months to describe 2.x features and properties.

    Bugfixes

    • Pull 5935: Fix take() to route late errors to RxJavaHooks.

    Version 1.3.7 - March 21, 2018 (Maven)

    Bugfixes

    • Pull 5917: Fix and deprecate evicting groupBy and add a new overload with the corrected signature.

    Version 1.3.6 - February 15, 2018 (Maven)

    Bugfixes

    • Pull 5850: Fix a race condition that may make OperatorMaterialize emit the wrong signals.
    • Pull 5851: Fix a race condition in OperatorMerge.InnerSubscriber#onError causing incorrect terminal event.

    Version 1.3.5 - January 27, 2018 (Maven)

    Other

    • Pull 5820: RxJavaPlugins lookup workaround for System.getProperties() access restrictions.
    Commits
    • 7e3879a Release 1.3.8
    • 3aad9a6 1.x: Fix take() to route late errors to RxJavaHooks (#5935)
    • 0641802 Release 1.3.7
    • e467798 1.x: fix and deprecate evicting groupBy and add new overload (#5917)
    • 6e6c514 Release 1.3.6
    • c40a06f Fix a race condition that may make OperatorMaterialize emit too many terminal...
    • 2ba8bb2 Fix a race condition in OperatorMerge.InnerSubscriber#onError (#5851)
    • a49c49f Release 1.3.5
    • ef32950 1.x: Plugin lookup workaround for System.properties access restrictions (#5820)
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Note: This repo was added to Dependabot recently, so you'll receive a maximum of 5 PRs for your first few update runs. Once an update run creates fewer than 5 PRs we'll remove that limit.

    You can always request more updates by clicking Bump now in your Dependabot dashboard.

    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)

    Finally, you can contact us by mentioning @dependabot.

    dependencies 
    opened by dependabot-preview[bot] 2
  • Overriding the default behaviour of throwing UnsupportedOperationException

    Overriding the default behaviour of throwing UnsupportedOperationException

    We have a method in Activity which returns if activity has any dialog fragments are shown or not. For now of our case, app crashed, reason is Activity's predicate method returned false (as it must be finish()ing or onSaveInstance() is called) and so method throws UnsupportedOperationException().

    Instead of throwing the exception, it could return the default boolean that I expect then I could handle (at least for this case it can be handled with default value).

    Question is how/where can I change the code so that I can get the default value in case of predicate returning false and so I can avoid UnsupportedOperationException ?

    opened by gurappa 2
  • Bump auto-value from 1.7.4 to 1.8.1

    Bump auto-value from 1.7.4 to 1.8.1

    Bumps auto-value from 1.7.4 to 1.8.1.

    Release notes

    Sourced from auto-value's releases.

    AutoValue 1.8.1

    • Fixed Gradle incremental compilation. (8f17e4c4)

    AutoValue 1.8

    • The parameter of equals(Object) is annotated with @Nullable if any method signature mentions @Nullable. (4d01ce62)
    • If an @AutoOneOf class has a serialVersionUID this is now copied to its generated subclasses. THIS BREAKS SERIAL COMPATIBILITY for @AutoOneOf classes with explicit serialVersionUID declarations, though those were already liable to be broken by arbitrary changes to the generated AutoOneOf code. (71d81210)

    AutoValue 1.7.5

    • Added @ToPrettyString for generating pretty String versions for AutoValue types. (9e9be9fa)
    • AutoValue property builders can now have a single parameter which is passed to the constructor of the new builder. (f19117aa)
    • AutoValue now copies annotations from type parameters of an @AutoValue class to the subclass generated by the @Memoized extension. (77de95c3)
    • Avoid surprising behaviour when getters are prefixed and setters are not, and a property name begins with two capital letters. (1bfc3b53)
    • The methods returned by BuilderContext.buildMethod() and .toBuilderMethods() can be inherited. (f2cb2247)
    • Fixed a bug which could lead to the same AutoValue extension being run more than once. (f40317ae)
    • AutoAnnotationProcessor and AutoServiceProcessor no longer claim their annotations. (c27b527a)
    • @AutoAnnotation instances are now serializable. (7eb2d47a)
    • Fully qualify @Override to avoid name conflicts (85af4437)
    • AutoValue error messages now have short [tags] so they can be correlated by tools. (c6e35e68)
    Commits
    • 4df6476 Set version number for auto-value-parent to 1.8.1.
    • c8a5c19 Add a test for Gradle incremental compilation with AutoValue.
    • 20ab154 Document AutoBuilder.
    • 79d07c5 MoreTypes.isTypeOf returns false for ErrorType rather than throwing.
    • 02cd653 Move the correct incap dependency to the AutoFactory annotationProcessorPath.
    • 8f17e4c Fix Gradle incremental compilation for AutoValue and AutoFactory.
    • ad8add1 Fix Gradle incremental compilation. Fixes https://github.com/google/auto/issu...
    • 4bdd64b Update the AutoBuilder documentation about stability
    • a722616 Respect @Nullable annotations when determining required properties in AutoB...
    • 15b7ec2 Allow more general kinds of method in callMethod.
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 1
  • Bump auto-value-annotations from 1.7.4 to 1.8.1

    Bump auto-value-annotations from 1.7.4 to 1.8.1

    Bumps auto-value-annotations from 1.7.4 to 1.8.1.

    Release notes

    Sourced from auto-value-annotations's releases.

    AutoValue 1.8.1

    • Fixed Gradle incremental compilation. (8f17e4c4)

    AutoValue 1.8

    • The parameter of equals(Object) is annotated with @Nullable if any method signature mentions @Nullable. (4d01ce62)
    • If an @AutoOneOf class has a serialVersionUID this is now copied to its generated subclasses. THIS BREAKS SERIAL COMPATIBILITY for @AutoOneOf classes with explicit serialVersionUID declarations, though those were already liable to be broken by arbitrary changes to the generated AutoOneOf code. (71d81210)

    AutoValue 1.7.5

    • Added @ToPrettyString for generating pretty String versions for AutoValue types. (9e9be9fa)
    • AutoValue property builders can now have a single parameter which is passed to the constructor of the new builder. (f19117aa)
    • AutoValue now copies annotations from type parameters of an @AutoValue class to the subclass generated by the @Memoized extension. (77de95c3)
    • Avoid surprising behaviour when getters are prefixed and setters are not, and a property name begins with two capital letters. (1bfc3b53)
    • The methods returned by BuilderContext.buildMethod() and .toBuilderMethods() can be inherited. (f2cb2247)
    • Fixed a bug which could lead to the same AutoValue extension being run more than once. (f40317ae)
    • AutoAnnotationProcessor and AutoServiceProcessor no longer claim their annotations. (c27b527a)
    • @AutoAnnotation instances are now serializable. (7eb2d47a)
    • Fully qualify @Override to avoid name conflicts (85af4437)
    • AutoValue error messages now have short [tags] so they can be correlated by tools. (c6e35e68)
    Commits
    • 4df6476 Set version number for auto-value-parent to 1.8.1.
    • c8a5c19 Add a test for Gradle incremental compilation with AutoValue.
    • 20ab154 Document AutoBuilder.
    • 79d07c5 MoreTypes.isTypeOf returns false for ErrorType rather than throwing.
    • 02cd653 Move the correct incap dependency to the AutoFactory annotationProcessorPath.
    • 8f17e4c Fix Gradle incremental compilation for AutoValue and AutoFactory.
    • ad8add1 Fix Gradle incremental compilation. Fixes https://github.com/google/auto/issu...
    • 4bdd64b Update the AutoBuilder documentation about stability
    • a722616 Respect @Nullable annotations when determining required properties in AutoB...
    • 15b7ec2 Allow more general kinds of method in callMethod.
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 1
  • Bump constraintlayout from 2.0.4 to 2.1.0

    Bump constraintlayout from 2.0.4 to 2.1.0

    Bumps constraintlayout from 2.0.4 to 2.1.0.

    Release notes

    Sourced from constraintlayout's releases.

    2.1.0

    No release notes provided.

    2.1.0-rc01

    No release notes provided.

    2.1.0-beta02

    MotionLayout

    A few new features:

    • OnSwipe enhancement including spring (stiffness, damping, mass etc) & never complete
    • jumpToState function
    • ViewTransition downUp mode where on touch Down it plays to 100 and on up reverses to 0

    Various fixes, notably:

    Fix problem in MotionLayout with vertical scroll (#173) Perf improvements on nested MotionLayout (#189) Fast transition with NestedScrollView in MotionLayout (#189) ConstraintSet gone in MotionLayout (#189) Support downUp ViewTransitions in MotionLayout (#190) Fix in ImageFilter when reusing drawables (#192) Add spring support in MotionLayout (#199) Performance improvement to CircularFlow (#200) Fixes in derived constraints / constraint override (#212)

    2.1.0-beta01

    ConstraintLayout

    • android:layout_width and android:layout_height are back being non-optional due to compatibility issues.

    Helpers

    • added a way to animate or jump directly to a given item of a Carousel
    • new CircularFlow helper

    MotionLayout

    • Programmatic support for inserting and removing onSwipe and onClick on Transitions
    • Experimental Support for Transitions through screen rotation
    • support duration argument to transitions
    • Better support for customAttributes that are boolean or References

    2.1.0 alpha 2

    Many new features added in alpha 2, see the wiki

    2.1.0 alpha 1

    New features in MotionLayout (view transition etc) and new Carousel helper

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 0
  • Bump auto-value from 1.7.4 to 1.8.2

    Bump auto-value from 1.7.4 to 1.8.2

    Bumps auto-value from 1.7.4 to 1.8.2.

    Release notes

    Sourced from auto-value's releases.

    AutoValue 1.8.2

    • Fixed a bug with AutoBuilder and property builder methods. (05ea1356)
    • Generated builder code is now slightly friendly to null-analysis. (f00c32a5)
    • Fixed a problem where @SerializableAutoValue could generate incorrect code for complex types. (689c8d49)
    • Implicitly exclude Kotlin @Metadata annotations from @CopyAnnotations (7d3aa66e)

    AutoValue 1.8.1

    • Fixed Gradle incremental compilation. (8f17e4c4)

    AutoValue 1.8

    • The parameter of equals(Object) is annotated with @Nullable if any method signature mentions @Nullable. (4d01ce62)
    • If an @AutoOneOf class has a serialVersionUID this is now copied to its generated subclasses. THIS BREAKS SERIAL COMPATIBILITY for @AutoOneOf classes with explicit serialVersionUID declarations, though those were already liable to be broken by arbitrary changes to the generated AutoOneOf code. (71d81210)

    AutoValue 1.7.5

    • Added @ToPrettyString for generating pretty String versions for AutoValue types. (9e9be9fa)
    • AutoValue property builders can now have a single parameter which is passed to the constructor of the new builder. (f19117aa)
    • AutoValue now copies annotations from type parameters of an @AutoValue class to the subclass generated by the @Memoized extension. (77de95c3)
    • Avoid surprising behaviour when getters are prefixed and setters are not, and a property name begins with two capital letters. (1bfc3b53)
    • The methods returned by BuilderContext.buildMethod() and .toBuilderMethods() can be inherited. (f2cb2247)
    • Fixed a bug which could lead to the same AutoValue extension being run more than once. (f40317ae)
    • AutoAnnotationProcessor and AutoServiceProcessor no longer claim their annotations. (c27b527a)
    • @AutoAnnotation instances are now serializable. (7eb2d47a)
    • Fully qualify @Override to avoid name conflicts (85af4437)
    • AutoValue error messages now have short [tags] so they can be correlated by tools. (c6e35e68)
    Commits
    • 19a86d6 Set version number for auto-value-parent to 1.8.2.
    • 04ebf9c Bump kotlin.version from 1.5.20 to 1.5.21 in /value
    • f09743c Annotate com.google.auto.factory for null hygiene.
    • 895a4d5 Internal change
    • e72fc7b Internal change
    • 4f6f782 Internal change
    • 3b1f449 Avoid wildcards, which confuse our nullness checker.
    • 9d79ce1 Annotate auto-common for nullness.
    • 2ee7f62 Rewrite some references to JSpecify @Nullable to prevent their being rewrit...
    • c68b2ff Use more fluent streams constructs.
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 0
  • Bump auto-value-annotations from 1.7.4 to 1.8.2

    Bump auto-value-annotations from 1.7.4 to 1.8.2

    Bumps auto-value-annotations from 1.7.4 to 1.8.2.

    Release notes

    Sourced from auto-value-annotations's releases.

    AutoValue 1.8.2

    • Fixed a bug with AutoBuilder and property builder methods. (05ea1356)
    • Generated builder code is now slightly friendly to null-analysis. (f00c32a5)
    • Fixed a problem where @SerializableAutoValue could generate incorrect code for complex types. (689c8d49)
    • Implicitly exclude Kotlin @Metadata annotations from @CopyAnnotations (7d3aa66e)

    AutoValue 1.8.1

    • Fixed Gradle incremental compilation. (8f17e4c4)

    AutoValue 1.8

    • The parameter of equals(Object) is annotated with @Nullable if any method signature mentions @Nullable. (4d01ce62)
    • If an @AutoOneOf class has a serialVersionUID this is now copied to its generated subclasses. THIS BREAKS SERIAL COMPATIBILITY for @AutoOneOf classes with explicit serialVersionUID declarations, though those were already liable to be broken by arbitrary changes to the generated AutoOneOf code. (71d81210)

    AutoValue 1.7.5

    • Added @ToPrettyString for generating pretty String versions for AutoValue types. (9e9be9fa)
    • AutoValue property builders can now have a single parameter which is passed to the constructor of the new builder. (f19117aa)
    • AutoValue now copies annotations from type parameters of an @AutoValue class to the subclass generated by the @Memoized extension. (77de95c3)
    • Avoid surprising behaviour when getters are prefixed and setters are not, and a property name begins with two capital letters. (1bfc3b53)
    • The methods returned by BuilderContext.buildMethod() and .toBuilderMethods() can be inherited. (f2cb2247)
    • Fixed a bug which could lead to the same AutoValue extension being run more than once. (f40317ae)
    • AutoAnnotationProcessor and AutoServiceProcessor no longer claim their annotations. (c27b527a)
    • @AutoAnnotation instances are now serializable. (7eb2d47a)
    • Fully qualify @Override to avoid name conflicts (85af4437)
    • AutoValue error messages now have short [tags] so they can be correlated by tools. (c6e35e68)
    Commits
    • 19a86d6 Set version number for auto-value-parent to 1.8.2.
    • 04ebf9c Bump kotlin.version from 1.5.20 to 1.5.21 in /value
    • f09743c Annotate com.google.auto.factory for null hygiene.
    • 895a4d5 Internal change
    • e72fc7b Internal change
    • 4f6f782 Internal change
    • 3b1f449 Avoid wildcards, which confuse our nullness checker.
    • 9d79ce1 Annotate auto-common for nullness.
    • 2ee7f62 Rewrite some references to JSpecify @Nullable to prevent their being rewrit...
    • c68b2ff Use more fluent streams constructs.
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 0
  • Bump gradle-versions-plugin from 0.25.0 to 0.36.0

    Bump gradle-versions-plugin from 0.25.0 to 0.36.0

    Bumps gradle-versions-plugin from 0.25.0 to 0.36.0.

    Release notes

    Sourced from gradle-versions-plugin's releases.

    v0.36.0

    • Ignore when kotlin-stdlib has a null version (#443)

    v0.35.0

    • Copy Kotlin variant metadata from alternative source (#442)

    v0.34.0

    • Copy Kotlin's MPP legacy metadata for variant selection (#438)

    v0.33.0

    • Restrict inherited dependencies to Kotlin's stdlib (#424)

    v0.32.0

    • Copy configuration attributes for variant resolution (#334)
    • Resolve with the classifier and extension if specified (#224)
    • Retain inherited dependencies from super configurations (#423)

    v0.31.0

    • HTML report showed the current instead of release version (#420)
    • Copy attributes for Kotlin multi-platform dependency query (#334)

    v0.30.0

    • HTML report output (#418)

    v0.29.0

    • Fix NPE caused by malformed repository metadata (#409)

    v0.28.0

    Note: the Gradle Versions Plugin now requires at least Gradle 5.0 to function.

    • Improve performance (#378)
    • Fix crash on Gradle 6.2 when using deprecated resolutionStrategy property assignment (#377)
    • Fix erroneous Failed to resolve ... error messages

    v0.27.0

    Made dependency constraint resolution optional (#352, #353)

    v0.26.0

    Resolve dependency constraints (#350)

    Commits
    • 055fbb7 Ignore when kotlin-stdlib has a null version (fixes #443)
    • 6c4a1e8 Copy Kotlin variant metadata from alternative source (fixes #442)
    • 4f2d15c Copy legacy Kotlin variant metadata (fixes #438)
    • 0a290fb Copy over only Kotlin external dependencies from super configurations
    • a23c555 Copy configuration attributes for variant resolution (see #334)
    • 85ddff2 Resolve with the classifier and extension if specified (fixes #224)
    • 3e9bdf8 Retain inhertited dependencies from super configurations (fixes #423)
    • 9effd94 Copy dependency attributes for dynamic query (fixes #334)
    • d804294 Merge pull request #422 from jcrokicki/html-report-fixes
    • 5c304ef update to 0.31.0
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 0
  • Upgrade to GitHub-native Dependabot

    Upgrade to GitHub-native Dependabot

    Dependabot Preview will be shut down on August 3rd, 2021. In order to keep getting Dependabot updates, please merge this PR and migrate to GitHub-native Dependabot before then.

    Dependabot has been fully integrated into GitHub, so you no longer have to install and manage a separate app. This pull request migrates your configuration from Dependabot.com to a config file, using the new syntax. When merged, we'll swap out dependabot-preview (me) for a new dependabot app, and you'll be all set!

    With this change, you'll now use the Dependabot page in GitHub, rather than the Dependabot dashboard, to monitor your version updates, and you'll configure Dependabot through the new config file rather than a UI.

    If you've got any questions or feedback for us, please let us know by creating an issue in the dependabot/dependabot-core repository.

    Learn more about migrating to GitHub-native Dependabot

    Please note that regular @dependabot commands do not work on this pull request.

    dependencies 
    opened by dependabot-preview[bot] 1
  • Bump auto-service from 1.0-rc7 to 1.0

    Bump auto-service from 1.0-rc7 to 1.0

    Bumps auto-service from 1.0-rc7 to 1.0.

    Release notes

    Sourced from auto-service's releases.

    Auto Common 1.0

    This has only cosmetic differences from Auto Common 0.11, but we are updating the version number to indicate stability.

    AutoService 1.0

    • @AutoService classes can now reference generic services and still pass -Averify=true. (afe607c3)
    • AutoServiceProcessor no longer claims the @AutoService annotation. (c27b527a)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 0
Releases(0.6.1)
Owner
Oleksandr
Pro Android Developer since 1st day of Android OS public release
Oleksandr
Annotation Processor for generating Parcelable code

ParcelablePlease An AnnotationProcessor for generating Android Parcelable boilerplate code. See this blog entry for comparison with other parcel libra

Hannes Dorfmann 260 Mar 31, 2022
AbstractFactoryDesignPatternWithKotlin - Abstract Factory Design Pattern With Kotlin

AbstractFactoryDesignPatternWithKotlin Abstract Factory Design Pattern With Kotl

Harun Kör 2 Jun 16, 2022
AbstractFactoryDesignPatternWithKotlin - Abstract Factory Design Pattern With Kotlin

AbstractFactoryDesignPatternWithKotlin Abstract Factory Design Pattern With Kotl

Harun Kör 1 Jan 2, 2022
Android library to record the network calls through the interceptor mechanism of the http clients.

Android Snooper Introduction Android Snooper is a library which helps in debugging issues while running the applications on android devices. One of th

Prateek 151 Nov 25, 2022
Annotation processor that generates a kotlin wrapper class for a java file, enabling named parameters for kotlin callers.

Annotation processor that generates a kotlin wrapper class for a java file, enabling named parameters for kotlin callers.

Josh Skeen 10 Oct 12, 2022
Simplify the processing of sealed class/interface

shiirudo Generates DSL to simplify processing branching by when expressions in sealed class/interface. Setup Refer to the KSP quickstart guide to make

KeitaTakahashi 2 Nov 1, 2022
Kotlin extension function provides a facility to "add" methods to class without inheriting a class or using any type of design pattern

What is Kotlin Extension Function ? Kotlin extension function provides a facility to "add" methods to class without inheriting a class or using any ty

mohsen 21 Dec 3, 2022
Yet another adapter delegate library.

Yet another adapter delegate library. repositories { ... maven { url 'https://jitpack.io' } } ... dependencies { implementation("com.git

Mike 10 Dec 26, 2022
TicTacToe - An android Tic-tac-toe, also known as noughts and crosses

Tic Tac Toe An android Tic-tac-toe, also known as noughts and crosses, or Xs and

null 2 Feb 28, 2022
KSP-based library that generates lists from your annotation usages

ListGen, Generate Lists From Functions That Have @Listed Annotations! Welcome to ListGen! ListGen is a KSP-based library that can generate lists (and

Adib Faramarzi 24 Dec 6, 2022
AndroidQuery is an Android ORM for SQLite and ContentProvider which focuses on easy of use and performances thanks to annotation processing and code generation

WARNING: now that Room is out, I no longer maintain that library. If you need a library to easy access to default android ContentProvider, I would may

Frédéric Julian 19 Dec 11, 2021
A Simple Todo app design in Flutter to keep track of your task on daily basis. Its build on BLoC Pattern. You can add a project, labels, and due-date to your task also you can sort your task on the basis of project, label, and dates

WhatTodo Life can feel overwhelming. But it doesn’t have to. A Simple To-do app design in flutter to keep track of your task on daily basis. You can a

Burhanuddin Rashid 1k Jan 1, 2023
AbstractMvp 0.8 0.0 Kotlin is a library that provides abstract components for MVP architecture realization, with problems solutions that are exist in classic MVP.

MinSDK 14+ AbstractMvp AbstractMvp is a library that provides abstract components for MVP architecture realization, with problems solutions that are e

Robert 12 Apr 5, 2022
Janishar Ali 2.1k Jan 1, 2023
BindsAdapter is an Android library to help you create and maintain Adapter class easier via ksp( Kotlin Symbol Processing).

BindsAdapter BindsAdapter is an Android library to help you create and maintain Adapter class easier via ksp( Kotlin Symbol Processing). Installation

Jintin 5 Jul 30, 2022
[Deprecated] Android Library that implements Snackbars (former known as Undobar) from Google's Material Design documentation.

UndoBar This lib is deprecated in favor of Google's Design Support Library which includes a Snackbar and is no longer being developed. Thanks for all

Kai Liao 577 Nov 25, 2022
Application that allows to search some products and display them in a list, also allows to add some product to the shopping cart and remove it

Application that allows to search some products and display them in a list, also allows to add some product to the shopping cart and remove it

Victor 3 Aug 18, 2022
Minimalistic class proxy creator for Kotlin

reflektion Minimalistic class proxy creator for Kotlin. Reflektion allows you to create an implementation of an interface you provide containing proxy

Subham 6 Nov 11, 2022