CrackMe.apk
Download file
package com.google.common.base;
import java.io.Serializable;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import javax.annotation.CheckForNull;
@ElementTypesAreNonnullByDefault
public final class Suppliers {
private interface SupplierFunction<T> extends Function<Supplier<T>, T> {
}
private Suppliers() {
}
public static <F, T> Supplier<T> compose(Function<? super F, T> function, Supplier<F> supplier) {
return new SupplierComposition(function, supplier);
}
private static class SupplierComposition<F, T> implements Supplier<T>, Serializable {
private static final long serialVersionUID = 0;
final Function<? super F, T> function;
final Supplier<F> supplier;
SupplierComposition(Function<? super F, T> function2, Supplier<F> supplier2) {
this.function = (Function) Preconditions.checkNotNull(function2);
this.supplier = (Supplier) Preconditions.checkNotNull(supplier2);
}
@ParametricNullness
public T get() {
return this.function.apply(this.supplier.get());
}
public boolean equals(@CheckForNull Object obj) {
if (!(obj instanceof SupplierComposition)) {
return false;
}
SupplierComposition supplierComposition = (SupplierComposition) obj;
if (!this.function.equals(supplierComposition.function) || !this.supplier.equals(supplierComposition.supplier)) {
return false;
}
return true;
}
public int hashCode() {
return Objects.hashCode(this.function, this.supplier);
}
public String toString() {
String valueOf = String.valueOf(this.function);
String valueOf2 = String.valueOf(this.supplier);
StringBuilder sb = new StringBuilder(String.valueOf(valueOf).length() + 21 + String.valueOf(valueOf2).length());
sb.append("Suppliers.compose(");
sb.append(valueOf);
sb.append(", ");
sb.append(valueOf2);
sb.append(")");
return sb.toString();
}
}
public static <T> Supplier<T> memoize(Supplier<T> supplier) {
if ((supplier instanceof NonSerializableMemoizingSupplier) || (supplier instanceof MemoizingSupplier)) {
return supplier;
}
if (supplier instanceof Serializable) {
return new MemoizingSupplier(supplier);
}
return new NonSerializableMemoizingSupplier(supplier);
}
static class MemoizingSupplier<T> implements Supplier<T>, Serializable {
private static final long serialVersionUID = 0;
final Supplier<T> delegate;
volatile transient boolean initialized;
@CheckForNull
transient T value;
MemoizingSupplier(Supplier<T> supplier) {
this.delegate = (Supplier) Preconditions.checkNotNull(supplier);
}
@ParametricNullness
public T get() {
if (!this.initialized) {
synchronized (this) {
if (!this.initialized) {
T t = this.delegate.get();
this.value = t;
this.initialized = true;
return t;
}
}
}
return NullnessCasts.uncheckedCastNullableTToT(this.value);
}
public String toString() {
Object obj;
if (this.initialized) {
String valueOf = String.valueOf(this.value);
StringBuilder sb = new StringBuilder(String.valueOf(valueOf).length() + 25);
sb.append("<supplier that returned ");
sb.append(valueOf);
sb.append(">");
obj = sb.toString();
} else {
obj = this.delegate;
}
String valueOf2 = String.valueOf(obj);
StringBuilder sb2 = new StringBuilder(String.valueOf(valueOf2).length() + 19);
sb2.append("Suppliers.memoize(");
sb2.append(valueOf2);
sb2.append(")");
return sb2.toString();
}
}
static class NonSerializableMemoizingSupplier<T> implements Supplier<T> {
@CheckForNull
volatile Supplier<T> delegate;
volatile boolean initialized;
@CheckForNull
T value;
NonSerializableMemoizingSupplier(Supplier<T> supplier) {
this.delegate = (Supplier) Preconditions.checkNotNull(supplier);
}
@ParametricNullness
public T get() {
if (!this.initialized) {
synchronized (this) {
if (!this.initialized) {
Supplier<T> supplier = this.delegate;
Objects.requireNonNull(supplier);
Supplier supplier2 = supplier;
T t = supplier.get();
this.value = t;
this.initialized = true;
this.delegate = null;
return t;
}
}
}
return NullnessCasts.uncheckedCastNullableTToT(this.value);
}
public String toString() {
Object obj = this.delegate;
if (obj == null) {
String valueOf = String.valueOf(this.value);
StringBuilder sb = new StringBuilder(String.valueOf(valueOf).length() + 25);
sb.append("<supplier that returned ");
sb.append(valueOf);
sb.append(">");
obj = sb.toString();
}
String valueOf2 = String.valueOf(obj);
StringBuilder sb2 = new StringBuilder(String.valueOf(valueOf2).length() + 19);
sb2.append("Suppliers.memoize(");
sb2.append(valueOf2);
sb2.append(")");
return sb2.toString();
}
}
public static <T> Supplier<T> memoizeWithExpiration(Supplier<T> supplier, long j, TimeUnit timeUnit) {
return new ExpiringMemoizingSupplier(supplier, j, timeUnit);
}
static class ExpiringMemoizingSupplier<T> implements Supplier<T>, Serializable {
private static final long serialVersionUID = 0;
final Supplier<T> delegate;
final long durationNanos;
volatile transient long expirationNanos;
@CheckForNull
volatile transient T value;
ExpiringMemoizingSupplier(Supplier<T> supplier, long j, TimeUnit timeUnit) {
this.delegate = (Supplier) Preconditions.checkNotNull(supplier);
this.durationNanos = timeUnit.toNanos(j);
Preconditions.checkArgument(j > 0, "duration (%s %s) must be > 0", j, (Object) timeUnit);
}
@ParametricNullness
public T get() {
long j = this.expirationNanos;
long systemNanoTime = Platform.systemNanoTime();
if (j == 0 || systemNanoTime - j >= 0) {
synchronized (this) {
if (j == this.expirationNanos) {
T t = this.delegate.get();
this.value = t;
long j2 = systemNanoTime + this.durationNanos;
if (j2 == 0) {
j2 = 1;
}
this.expirationNanos = j2;
return t;
}
}
}
return NullnessCasts.uncheckedCastNullableTToT(this.value);
}
public String toString() {
String valueOf = String.valueOf(this.delegate);
long j = this.durationNanos;
StringBuilder sb = new StringBuilder(String.valueOf(valueOf).length() + 62);
sb.append("Suppliers.memoizeWithExpiration(");
sb.append(valueOf);
sb.append(", ");
sb.append(j);
sb.append(", NANOS)");
return sb.toString();
}
}
public static <T> Supplier<T> ofInstance(@ParametricNullness T t) {
return new SupplierOfInstance(t);
}
private static class SupplierOfInstance<T> implements Supplier<T>, Serializable {
private static final long serialVersionUID = 0;
@ParametricNullness
final T instance;
SupplierOfInstance(@ParametricNullness T t) {
this.instance = t;
}
@ParametricNullness
public T get() {
return this.instance;
}
public boolean equals(@CheckForNull Object obj) {
if (obj instanceof SupplierOfInstance) {
return Objects.equal(this.instance, ((SupplierOfInstance) obj).instance);
}
return false;
}
public int hashCode() {
return Objects.hashCode(this.instance);
}
public String toString() {
String valueOf = String.valueOf(this.instance);
StringBuilder sb = new StringBuilder(String.valueOf(valueOf).length() + 22);
sb.append("Suppliers.ofInstance(");
sb.append(valueOf);
sb.append(")");
return sb.toString();
}
}
public static <T> Supplier<T> synchronizedSupplier(Supplier<T> supplier) {
return new ThreadSafeSupplier(supplier);
}
private static class ThreadSafeSupplier<T> implements Supplier<T>, Serializable {
private static final long serialVersionUID = 0;
final Supplier<T> delegate;
ThreadSafeSupplier(Supplier<T> supplier) {
this.delegate = (Supplier) Preconditions.checkNotNull(supplier);
}
@ParametricNullness
public T get() {
T t;
synchronized (this.delegate) {
t = this.delegate.get();
}
return t;
}
public String toString() {
String valueOf = String.valueOf(this.delegate);
StringBuilder sb = new StringBuilder(String.valueOf(valueOf).length() + 32);
sb.append("Suppliers.synchronizedSupplier(");
sb.append(valueOf);
sb.append(")");
return sb.toString();
}
}
public static <T> Function<Supplier<T>, T> supplierFunction() {
return SupplierFunctionImpl.INSTANCE;
}
private enum SupplierFunctionImpl implements SupplierFunction<Object> {
INSTANCE;
public String toString() {
return "Suppliers.supplierFunction()";
}
@CheckForNull
public Object apply(Supplier<Object> supplier) {
return supplier.get();
}
}
}
Download file