final class com.google.common.testing.ForwardingWrapperTester$InteractionTester extends com.google.common.reflect.AbstractInvocationHandler
{
private final java.lang.Class interfaceType;
private final java.lang.reflect.Method method;
private final java.lang.Object[] passedArgs;
private final java.lang.Object returnValue;
private final java.util.concurrent.atomic.AtomicInteger called;
void <init>(java.lang.Class, java.lang.reflect.Method)
{
java.lang.Object[] v;
com.google.common.testing.ForwardingWrapperTester$InteractionTester v;
java.util.concurrent.atomic.AtomicInteger v;
java.lang.Class v, v;
java.lang.Object v;
com.google.common.testing.FreshValueGenerator v;
java.lang.reflect.Method v;
v := @this: com.google.common.testing.ForwardingWrapperTester$InteractionTester;
v := @parameter: java.lang.Class;
v := @parameter: java.lang.reflect.Method;
specialinvoke v.<com.google.common.reflect.AbstractInvocationHandler: void <init>()>();
v = new java.util.concurrent.atomic.AtomicInteger;
specialinvoke v.<java.util.concurrent.atomic.AtomicInteger: void <init>()>();
v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.util.concurrent.atomic.AtomicInteger called> = v;
v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.Class interfaceType> = v;
v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.reflect.Method method> = v;
v = staticinvoke <com.google.common.testing.ForwardingWrapperTester: java.lang.Object[] getParameterValues(java.lang.reflect.Method)>(v);
v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.Object[] passedArgs> = v;
v = new com.google.common.testing.FreshValueGenerator;
specialinvoke v.<com.google.common.testing.FreshValueGenerator: void <init>()>();
v = virtualinvoke v.<java.lang.reflect.Method: java.lang.Class getReturnType()>();
v = virtualinvoke v.<com.google.common.testing.FreshValueGenerator: java.lang.Object generateFresh(java.lang.Class)>(v);
v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.Object returnValue> = v;
return;
}
protected java.lang.Object handleInvocation(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) throws java.lang.Throwable
{
java.lang.Object[] v, v, v;
com.google.common.testing.ForwardingWrapperTester$InteractionTester v;
java.util.concurrent.atomic.AtomicInteger v, v;
int v, v, v;
java.lang.String v, v;
java.lang.reflect.Method v, v, v, v;
java.lang.Object v, v, v, v;
v := @this: com.google.common.testing.ForwardingWrapperTester$InteractionTester;
v := @parameter: java.lang.Object;
v := @parameter: java.lang.reflect.Method;
v := @parameter: java.lang.Object[];
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.reflect.Method method>;
staticinvoke <junit.framework.Assert: void assertEquals(java.lang.Object,java.lang.Object)>(v, v);
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.reflect.Method method>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.reflect.Method)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("\u invoked more than once.");
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.util.concurrent.atomic.AtomicInteger called>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicInteger: int get()>();
staticinvoke <junit.framework.Assert: void assertEquals(java.lang.String,int,int)>(v, 0, v);
v = 0;
label:
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.Object[] passedArgs>;
v = lengthof v;
if v >= v goto label;
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.reflect.Method method>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (int,java.lang.reflect.Method)>(v, v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Parameter #\u of \u not forwarded");
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.Object[] passedArgs>;
v = v[v];
v = v[v];
staticinvoke <junit.framework.Assert: void assertEquals(java.lang.String,java.lang.Object,java.lang.Object)>(v, v, v);
v = v + 1;
goto label;
label:
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.util.concurrent.atomic.AtomicInteger called>;
virtualinvoke v.<java.util.concurrent.atomic.AtomicInteger: int getAndIncrement()>();
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.Object returnValue>;
return v;
}
void testInteraction(com.google.common.base.Function)
{
java.lang.Throwable v;
java.lang.Object[] v;
com.google.common.testing.ForwardingWrapperTester$InteractionTester v;
java.util.concurrent.atomic.AtomicInteger v;
int v;
java.lang.String v, v;
java.lang.reflect.Method v, v, v, v;
boolean v;
java.lang.IllegalAccessException v;
com.google.common.base.Function v;
java.lang.RuntimeException v, v;
java.lang.reflect.InvocationTargetException v;
java.lang.Class v, v, v;
java.lang.Object v, v, v, v;
v := @this: com.google.common.testing.ForwardingWrapperTester$InteractionTester;
v := @parameter: com.google.common.base.Function;
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.Class interfaceType>;
v = staticinvoke <com.google.common.reflect.Reflection: java.lang.Object newProxy(java.lang.Class,java.lang.reflect.InvocationHandler)>(v, v);
v = interfaceinvoke v.<com.google.common.base.Function: java.lang.Object apply(java.lang.Object)>(v);
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.Class interfaceType>;
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.reflect.Method method>;
v = virtualinvoke v.<java.lang.reflect.Method: java.lang.Class getReturnType()>();
v = virtualinvoke v.<java.lang.Class: boolean isAssignableFrom(java.lang.Class)>(v);
label:
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.reflect.Method method>;
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.Object[] passedArgs>;
v = virtualinvoke v.<java.lang.reflect.Method: java.lang.Object invoke(java.lang.Object,java.lang.Object[])>(v, v);
if v == 0 goto label;
if v == v goto label;
label:
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.reflect.Method method>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.reflect.Method)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Return value of \u not forwarded");
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.Object returnValue>;
staticinvoke <junit.framework.Assert: void assertEquals(java.lang.String,java.lang.Object,java.lang.Object)>(v, v, v);
label:
goto label;
label:
v := @caughtexception;
v = new java.lang.RuntimeException;
specialinvoke v.<java.lang.RuntimeException: void <init>(java.lang.Throwable)>(v);
throw v;
label:
v := @caughtexception;
v = virtualinvoke v.<java.lang.reflect.InvocationTargetException: java.lang.Throwable getCause()>();
v = staticinvoke <com.google.common.base.Throwables: java.lang.RuntimeException propagate(java.lang.Throwable)>(v);
throw v;
label:
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.reflect.Method method>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.reflect.Method)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Failed to forward to \u0001");
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.util.concurrent.atomic.AtomicInteger called>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicInteger: int get()>();
staticinvoke <junit.framework.Assert: void assertEquals(java.lang.String,int,int)>(v, 1, v);
return;
catch java.lang.IllegalAccessException from label to label with label;
catch java.lang.reflect.InvocationTargetException from label to label with label;
}
public java.lang.String toString()
{
com.google.common.testing.ForwardingWrapperTester$InteractionTester v;
java.lang.Class v;
java.lang.String v, v;
v := @this: com.google.common.testing.ForwardingWrapperTester$InteractionTester;
v = v.<com.google.common.testing.ForwardingWrapperTester$InteractionTester: java.lang.Class interfaceType>;
v = virtualinvoke v.<java.lang.Class: java.lang.String getSimpleName()>();
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("dummy \u0001");
return v;
}
}