public class io.netty.util.ResourceLeakDetector extends java.lang.Object
{
private static final java.lang.String PROP_LEVEL_OLD;
private static final java.lang.String PROP_LEVEL;
private static final io.netty.util.ResourceLeakDetector$Level DEFAULT_LEVEL;
private static final java.lang.String PROP_TARGET_RECORDS;
private static final int DEFAULT_TARGET_RECORDS;
private static final java.lang.String PROP_SAMPLING_INTERVAL;
private static final int DEFAULT_SAMPLING_INTERVAL;
private static final int TARGET_RECORDS;
static final int SAMPLING_INTERVAL;
private static io.netty.util.ResourceLeakDetector$Level level;
private static final io.netty.util.internal.logging.InternalLogger logger;
private final java.util.Set allLeaks;
private final java.lang.ref.ReferenceQueue refQueue;
private final java.util.Set reportedLeaks;
private final java.lang.String resourceType;
private final int samplingInterval;
private volatile io.netty.util.ResourceLeakDetector$LeakListener leakListener;
private static final java.util.concurrent.atomic.AtomicReference excludedMethods;
public static void setEnabled(boolean)
{
io.netty.util.ResourceLeakDetector$Level v;
boolean v;
v := @parameter: boolean;
if v == 0 goto label;
v = <io.netty.util.ResourceLeakDetector$Level: io.netty.util.ResourceLeakDetector$Level SIMPLE>;
goto label;
label:
v = <io.netty.util.ResourceLeakDetector$Level: io.netty.util.ResourceLeakDetector$Level DISABLED>;
label:
staticinvoke <io.netty.util.ResourceLeakDetector: void setLevel(io.netty.util.ResourceLeakDetector$Level)>(v);
return;
}
public static boolean isEnabled()
{
io.netty.util.ResourceLeakDetector$Level v, v;
int v, v;
boolean v;
v = staticinvoke <io.netty.util.ResourceLeakDetector: io.netty.util.ResourceLeakDetector$Level getLevel()>();
v = virtualinvoke v.<io.netty.util.ResourceLeakDetector$Level: int ordinal()>();
v = <io.netty.util.ResourceLeakDetector$Level: io.netty.util.ResourceLeakDetector$Level DISABLED>;
v = virtualinvoke v.<io.netty.util.ResourceLeakDetector$Level: int ordinal()>();
if v <= v goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
public static void setLevel(io.netty.util.ResourceLeakDetector$Level)
{
java.lang.Object v;
io.netty.util.ResourceLeakDetector$Level v;
v := @parameter: io.netty.util.ResourceLeakDetector$Level;
v = staticinvoke <io.netty.util.internal.ObjectUtil: java.lang.Object checkNotNull(java.lang.Object,java.lang.String)>(v, "level");
<io.netty.util.ResourceLeakDetector: io.netty.util.ResourceLeakDetector$Level level> = v;
return;
}
public static io.netty.util.ResourceLeakDetector$Level getLevel()
{
io.netty.util.ResourceLeakDetector$Level v;
v = <io.netty.util.ResourceLeakDetector: io.netty.util.ResourceLeakDetector$Level level>;
return v;
}
public void <init>(java.lang.Class)
{
java.lang.Class v;
java.lang.String v;
io.netty.util.ResourceLeakDetector v;
v := @this: io.netty.util.ResourceLeakDetector;
v := @parameter: java.lang.Class;
v = staticinvoke <io.netty.util.internal.StringUtil: java.lang.String simpleClassName(java.lang.Class)>(v);
specialinvoke v.<io.netty.util.ResourceLeakDetector: void <init>(java.lang.String)>(v);
return;
}
public void <init>(java.lang.String)
{
java.lang.String v;
io.netty.util.ResourceLeakDetector v;
v := @this: io.netty.util.ResourceLeakDetector;
v := @parameter: java.lang.String;
specialinvoke v.<io.netty.util.ResourceLeakDetector: void <init>(java.lang.String,int,long)>(v, 128, 9223372036854775807L);
return;
}
public void <init>(java.lang.Class, int, long)
{
int v;
java.lang.Class v;
long v;
io.netty.util.ResourceLeakDetector v;
v := @this: io.netty.util.ResourceLeakDetector;
v := @parameter: java.lang.Class;
v := @parameter: int;
v := @parameter: long;
specialinvoke v.<io.netty.util.ResourceLeakDetector: void <init>(java.lang.Class,int)>(v, v);
return;
}
public void <init>(java.lang.Class, int)
{
int v;
java.lang.Class v;
java.lang.String v;
io.netty.util.ResourceLeakDetector v;
v := @this: io.netty.util.ResourceLeakDetector;
v := @parameter: java.lang.Class;
v := @parameter: int;
v = staticinvoke <io.netty.util.internal.StringUtil: java.lang.String simpleClassName(java.lang.Class)>(v);
specialinvoke v.<io.netty.util.ResourceLeakDetector: void <init>(java.lang.String,int,long)>(v, v, 9223372036854775807L);
return;
}
public void <init>(java.lang.String, int, long)
{
java.util.concurrent.ConcurrentHashMap v, v;
java.util.Set v, v;
long v;
io.netty.util.ResourceLeakDetector v;
java.lang.ref.ReferenceQueue v;
int v;
java.lang.Object v;
java.lang.String v;
v := @this: io.netty.util.ResourceLeakDetector;
v := @parameter: java.lang.String;
v := @parameter: int;
v := @parameter: long;
specialinvoke v.<java.lang.Object: void <init>()>();
v = new java.util.concurrent.ConcurrentHashMap;
specialinvoke v.<java.util.concurrent.ConcurrentHashMap: void <init>()>();
v = staticinvoke <java.util.Collections: java.util.Set newSetFromMap(java.util.Map)>(v);
v.<io.netty.util.ResourceLeakDetector: java.util.Set allLeaks> = v;
v = new java.lang.ref.ReferenceQueue;
specialinvoke v.<java.lang.ref.ReferenceQueue: void <init>()>();
v.<io.netty.util.ResourceLeakDetector: java.lang.ref.ReferenceQueue refQueue> = v;
v = new java.util.concurrent.ConcurrentHashMap;
specialinvoke v.<java.util.concurrent.ConcurrentHashMap: void <init>()>();
v = staticinvoke <java.util.Collections: java.util.Set newSetFromMap(java.util.Map)>(v);
v.<io.netty.util.ResourceLeakDetector: java.util.Set reportedLeaks> = v;
v = staticinvoke <io.netty.util.internal.ObjectUtil: java.lang.Object checkNotNull(java.lang.Object,java.lang.String)>(v, "resourceType");
v.<io.netty.util.ResourceLeakDetector: java.lang.String resourceType> = v;
v.<io.netty.util.ResourceLeakDetector: int samplingInterval> = v;
return;
}
public final io.netty.util.ResourceLeak open(java.lang.Object)
{
java.lang.Object v;
io.netty.util.ResourceLeakDetector$DefaultResourceLeak v;
io.netty.util.ResourceLeakDetector v;
v := @this: io.netty.util.ResourceLeakDetector;
v := @parameter: java.lang.Object;
v = specialinvoke v.<io.netty.util.ResourceLeakDetector: io.netty.util.ResourceLeakDetector$DefaultResourceLeak track0(java.lang.Object,boolean)>(v, 0);
return v;
}
public final io.netty.util.ResourceLeakTracker track(java.lang.Object)
{
java.lang.Object v;
io.netty.util.ResourceLeakDetector$DefaultResourceLeak v;
io.netty.util.ResourceLeakDetector v;
v := @this: io.netty.util.ResourceLeakDetector;
v := @parameter: java.lang.Object;
v = specialinvoke v.<io.netty.util.ResourceLeakDetector: io.netty.util.ResourceLeakDetector$DefaultResourceLeak track0(java.lang.Object,boolean)>(v, 0);
return v;
}
public io.netty.util.ResourceLeakTracker trackForcibly(java.lang.Object)
{
java.lang.Object v;
io.netty.util.ResourceLeakDetector$DefaultResourceLeak v;
io.netty.util.ResourceLeakDetector v;
v := @this: io.netty.util.ResourceLeakDetector;
v := @parameter: java.lang.Object;
v = specialinvoke v.<io.netty.util.ResourceLeakDetector: io.netty.util.ResourceLeakDetector$DefaultResourceLeak track0(java.lang.Object,boolean)>(v, 1);
return v;
}
private io.netty.util.ResourceLeakDetector$DefaultResourceLeak track0(java.lang.Object, boolean)
{
io.netty.util.ResourceLeakDetector$DefaultResourceLeak v;
io.netty.util.ResourceLeakDetector$Level v, v, v;
java.util.Set v;
java.util.Random v;
io.netty.util.ResourceLeakDetector v;
java.lang.ref.ReferenceQueue v;
int v, v;
java.lang.Object v, v;
java.lang.String v;
boolean v;
v := @this: io.netty.util.ResourceLeakDetector;
v := @parameter: java.lang.Object;
v := @parameter: boolean;
v = <io.netty.util.ResourceLeakDetector: io.netty.util.ResourceLeakDetector$Level level>;
if v != 0 goto label;
v = <io.netty.util.ResourceLeakDetector$Level: io.netty.util.ResourceLeakDetector$Level PARANOID>;
if v == v goto label;
v = <io.netty.util.ResourceLeakDetector$Level: io.netty.util.ResourceLeakDetector$Level DISABLED>;
if v == v goto label;
v = staticinvoke <io.netty.util.internal.PlatformDependent: java.util.Random threadLocalRandom()>();
v = v.<io.netty.util.ResourceLeakDetector: int samplingInterval>;
v = virtualinvoke v.<java.util.Random: int nextInt(int)>(v);
if v != 0 goto label;
label:
specialinvoke v.<io.netty.util.ResourceLeakDetector: void reportLeak()>();
v = new io.netty.util.ResourceLeakDetector$DefaultResourceLeak;
v = v.<io.netty.util.ResourceLeakDetector: java.lang.ref.ReferenceQueue refQueue>;
v = v.<io.netty.util.ResourceLeakDetector: java.util.Set allLeaks>;
v = v.<io.netty.util.ResourceLeakDetector: java.lang.String resourceType>;
v = virtualinvoke v.<io.netty.util.ResourceLeakDetector: java.lang.Object getInitialHint(java.lang.String)>(v);
specialinvoke v.<io.netty.util.ResourceLeakDetector$DefaultResourceLeak: void <init>(java.lang.Object,java.lang.ref.ReferenceQueue,java.util.Set,java.lang.Object)>(v, v, v, v);
return v;
label:
return null;
}
private void clearRefQueue()
{
java.lang.ref.Reference v;
io.netty.util.ResourceLeakDetector v;
java.lang.ref.ReferenceQueue v;
v := @this: io.netty.util.ResourceLeakDetector;
label:
v = v.<io.netty.util.ResourceLeakDetector: java.lang.ref.ReferenceQueue refQueue>;
v = virtualinvoke v.<java.lang.ref.ReferenceQueue: java.lang.ref.Reference poll()>();
if v == null goto label;
virtualinvoke v.<io.netty.util.ResourceLeakDetector$DefaultResourceLeak: boolean dispose()>();
goto label;
label:
return;
}
protected boolean needReport()
{
io.netty.util.ResourceLeakDetector v;
boolean v;
io.netty.util.internal.logging.InternalLogger v;
v := @this: io.netty.util.ResourceLeakDetector;
v = <io.netty.util.ResourceLeakDetector: io.netty.util.internal.logging.InternalLogger logger>;
v = interfaceinvoke v.<io.netty.util.internal.logging.InternalLogger: boolean isErrorEnabled()>();
return v;
}
private void reportLeak()
{
java.util.Set v;
io.netty.util.ResourceLeakDetector v;
java.lang.ref.ReferenceQueue v;
java.lang.ref.Reference v;
io.netty.util.ResourceLeakDetector$LeakListener v;
java.lang.String v, v, v, v;
boolean v, v, v, v;
v := @this: io.netty.util.ResourceLeakDetector;
v = virtualinvoke v.<io.netty.util.ResourceLeakDetector: boolean needReport()>();
if v != 0 goto label;
specialinvoke v.<io.netty.util.ResourceLeakDetector: void clearRefQueue()>();
return;
label:
v = v.<io.netty.util.ResourceLeakDetector: java.lang.ref.ReferenceQueue refQueue>;
v = virtualinvoke v.<java.lang.ref.ReferenceQueue: java.lang.ref.Reference poll()>();
if v == null goto label;
v = virtualinvoke v.<io.netty.util.ResourceLeakDetector$DefaultResourceLeak: boolean dispose()>();
if v == 0 goto label;
v = virtualinvoke v.<io.netty.util.ResourceLeakDetector$DefaultResourceLeak: java.lang.String getReportAndClearRecords()>();
v = v.<io.netty.util.ResourceLeakDetector: java.util.Set reportedLeaks>;
v = interfaceinvoke v.<java.util.Set: boolean add(java.lang.Object)>(v);
if v == 0 goto label;
v = virtualinvoke v.<java.lang.String: boolean isEmpty()>();
if v == 0 goto label;
v = v.<io.netty.util.ResourceLeakDetector: java.lang.String resourceType>;
virtualinvoke v.<io.netty.util.ResourceLeakDetector: void reportUntracedLeak(java.lang.String)>(v);
goto label;
label:
v = v.<io.netty.util.ResourceLeakDetector: java.lang.String resourceType>;
virtualinvoke v.<io.netty.util.ResourceLeakDetector: void reportTracedLeak(java.lang.String,java.lang.String)>(v, v);
label:
v = v.<io.netty.util.ResourceLeakDetector: io.netty.util.ResourceLeakDetector$LeakListener leakListener>;
if v == null goto label;
v = v.<io.netty.util.ResourceLeakDetector: java.lang.String resourceType>;
interfaceinvoke v.<io.netty.util.ResourceLeakDetector$LeakListener: void onLeak(java.lang.String,java.lang.String)>(v, v);
goto label;
label:
return;
}
protected void reportTracedLeak(java.lang.String, java.lang.String)
{
io.netty.util.internal.logging.InternalLogger v;
java.lang.String v, v;
io.netty.util.ResourceLeakDetector v;
v := @this: io.netty.util.ResourceLeakDetector;
v := @parameter: java.lang.String;
v := @parameter: java.lang.String;
v = <io.netty.util.ResourceLeakDetector: io.netty.util.internal.logging.InternalLogger logger>;
interfaceinvoke v.<io.netty.util.internal.logging.InternalLogger: void error(java.lang.String,java.lang.Object,java.lang.Object)>("LEAK: {}.release() was not called before it\'s garbage-collected. See https://netty.io/wiki/reference-counted-objects.html for more information.{}", v, v);
return;
}
protected void reportUntracedLeak(java.lang.String)
{
java.lang.Object[] v;
io.netty.util.ResourceLeakDetector$Level v;
io.netty.util.ResourceLeakDetector v;
io.netty.util.internal.logging.InternalLogger v;
java.lang.String v, v, v, v;
v := @this: io.netty.util.ResourceLeakDetector;
v := @parameter: java.lang.String;
v = <io.netty.util.ResourceLeakDetector: io.netty.util.internal.logging.InternalLogger logger>;
v = newarray (java.lang.Object)[4];
v[0] = v;
v[1] = "io.netty.leakDetection.level";
v = <io.netty.util.ResourceLeakDetector$Level: io.netty.util.ResourceLeakDetector$Level ADVANCED>;
v = virtualinvoke v.<io.netty.util.ResourceLeakDetector$Level: java.lang.String name()>();
v = virtualinvoke v.<java.lang.String: java.lang.String toLowerCase()>();
v[2] = v;
v = staticinvoke <io.netty.util.internal.StringUtil: java.lang.String simpleClassName(java.lang.Object)>(v);
v[3] = v;
interfaceinvoke v.<io.netty.util.internal.logging.InternalLogger: void error(java.lang.String,java.lang.Object[])>("LEAK: {}.release() was not called before it\'s garbage-collected. Enable advanced leak reporting to find out where the leak occurred. To enable advanced leak reporting, specify the JVM option \'-D{}={}\' or call {}.setLevel() See https://netty.io/wiki/reference-counted-objects.html for more information.", v);
return;
}
protected void reportInstancesLeak(java.lang.String)
{
java.lang.String v;
io.netty.util.ResourceLeakDetector v;
v := @this: io.netty.util.ResourceLeakDetector;
v := @parameter: java.lang.String;
return;
}
protected java.lang.Object getInitialHint(java.lang.String)
{
java.lang.String v;
io.netty.util.ResourceLeakDetector v;
v := @this: io.netty.util.ResourceLeakDetector;
v := @parameter: java.lang.String;
return null;
}
public void setLeakListener(io.netty.util.ResourceLeakDetector$LeakListener)
{
io.netty.util.ResourceLeakDetector$LeakListener v;
io.netty.util.ResourceLeakDetector v;
v := @this: io.netty.util.ResourceLeakDetector;
v := @parameter: io.netty.util.ResourceLeakDetector$LeakListener;
v.<io.netty.util.ResourceLeakDetector: io.netty.util.ResourceLeakDetector$LeakListener leakListener> = v;
return;
}
public static transient void addExclusions(java.lang.Class, java.lang.String[])
{
java.lang.reflect.Method[] v;
java.lang.reflect.Method v;
boolean v, v, v, v;
java.util.List v;
java.lang.Object[] v;
java.lang.String[] v;
java.util.concurrent.atomic.AtomicReference v, v;
java.util.HashSet v;
int v, v, v, v, v, v, v, v, v, v, v, v, v, v, v;
java.lang.String v, v, v, v, v;
java.lang.IllegalArgumentException v;
java.lang.Class v;
java.lang.Object v;
v := @parameter: java.lang.Class;
v := @parameter: java.lang.String[];
v = new java.util.HashSet;
v = staticinvoke <java.util.Arrays: java.util.List asList(java.lang.Object[])>(v);
specialinvoke v.<java.util.HashSet: void <init>(java.util.Collection)>(v);
v = virtualinvoke v.<java.lang.Class: java.lang.reflect.Method[] getDeclaredMethods()>();
v = lengthof v;
v = 0;
label:
if v >= v goto label;
v = v[v];
v = virtualinvoke v.<java.lang.reflect.Method: java.lang.String getName()>();
v = interfaceinvoke v.<java.util.Set: boolean remove(java.lang.Object)>(v);
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Set: boolean isEmpty()>();
if v != 0 goto label;
label:
v = v + 1;
goto label;
label:
v = interfaceinvoke v.<java.util.Set: boolean isEmpty()>();
if v != 0 goto label;
v = new java.lang.IllegalArgumentException;
v = virtualinvoke v.<java.lang.Class: java.lang.String getName()>();
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.util.HashSet,java.lang.String)>(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[])>("Can\'t find \'\u0001\' in \u0001");
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>(v);
throw v;
label:
v = <io.netty.util.ResourceLeakDetector: java.util.concurrent.atomic.AtomicReference excludedMethods>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicReference: java.lang.Object get()>();
v = lengthof v;
v = lengthof v;
v = 2 * v;
v = v + v;
v = staticinvoke <java.util.Arrays: java.lang.Object[] copyOf(java.lang.Object[],int)>(v, v);
v = 0;
label:
v = lengthof v;
if v >= v goto label;
v = lengthof v;
v = v * 2;
v = v + v;
v = virtualinvoke v.<java.lang.Class: java.lang.String getName()>();
v[v] = v;
v = lengthof v;
v = v * 2;
v = v + v;
v = v + 1;
v = v[v];
v[v] = v;
v = v + 1;
goto label;
label:
v = <io.netty.util.ResourceLeakDetector: java.util.concurrent.atomic.AtomicReference excludedMethods>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicReference: boolean compareAndSet(java.lang.Object,java.lang.Object)>(v, v);
if v == 0 goto label;
return;
}
static void <clinit>()
{
io.netty.util.ResourceLeakDetector$Level v, v, v, v;
java.lang.String[] v;
java.lang.Integer v;
java.util.concurrent.atomic.AtomicReference v;
int v, v, v;
java.lang.Boolean v;
java.lang.String v, v, v, v, v, v, v, v;
boolean v, v;
io.netty.util.internal.logging.InternalLogger v, v, v, v, v, v;
v = <io.netty.util.ResourceLeakDetector$Level: io.netty.util.ResourceLeakDetector$Level SIMPLE>;
<io.netty.util.ResourceLeakDetector: io.netty.util.ResourceLeakDetector$Level DEFAULT_LEVEL> = v;
v = staticinvoke <io.netty.util.internal.logging.InternalLoggerFactory: io.netty.util.internal.logging.InternalLogger getInstance(java.lang.Class)>(class "Lio/netty/util/ResourceLeakDetector;");
<io.netty.util.ResourceLeakDetector: io.netty.util.internal.logging.InternalLogger logger> = v;
v = staticinvoke <io.netty.util.internal.SystemPropertyUtil: java.lang.String get(java.lang.String)>("io.netty.noResourceLeakDetection");
if v == null goto label;
v = staticinvoke <io.netty.util.internal.SystemPropertyUtil: boolean getBoolean(java.lang.String,boolean)>("io.netty.noResourceLeakDetection", 0);
v = <io.netty.util.ResourceLeakDetector: io.netty.util.internal.logging.InternalLogger logger>;
v = staticinvoke <java.lang.Boolean: java.lang.Boolean valueOf(boolean)>(v);
interfaceinvoke v.<io.netty.util.internal.logging.InternalLogger: void debug(java.lang.String,java.lang.Object)>("-Dio.netty.noResourceLeakDetection: {}", v);
v = <io.netty.util.ResourceLeakDetector: io.netty.util.internal.logging.InternalLogger logger>;
v = <io.netty.util.ResourceLeakDetector$Level: io.netty.util.ResourceLeakDetector$Level DISABLED>;
v = virtualinvoke v.<io.netty.util.ResourceLeakDetector$Level: java.lang.String name()>();
v = virtualinvoke v.<java.lang.String: java.lang.String toLowerCase()>();
interfaceinvoke v.<io.netty.util.internal.logging.InternalLogger: void warn(java.lang.String,java.lang.Object,java.lang.Object)>("-Dio.netty.noResourceLeakDetection is deprecated. Use \'-D{}={}\' instead.", "io.netty.leakDetection.level", v);
goto label;
label:
v = 0;
label:
if v == 0 goto label;
v = <io.netty.util.ResourceLeakDetector$Level: io.netty.util.ResourceLeakDetector$Level DISABLED>;
goto label;
label:
v = <io.netty.util.ResourceLeakDetector: io.netty.util.ResourceLeakDetector$Level DEFAULT_LEVEL>;
label:
v = virtualinvoke v.<io.netty.util.ResourceLeakDetector$Level: java.lang.String name()>();
v = staticinvoke <io.netty.util.internal.SystemPropertyUtil: java.lang.String get(java.lang.String,java.lang.String)>("io.netty.leakDetectionLevel", v);
v = staticinvoke <io.netty.util.internal.SystemPropertyUtil: java.lang.String get(java.lang.String,java.lang.String)>("io.netty.leakDetection.level", v);
v = staticinvoke <io.netty.util.ResourceLeakDetector$Level: io.netty.util.ResourceLeakDetector$Level parseLevel(java.lang.String)>(v);
v = staticinvoke <io.netty.util.internal.SystemPropertyUtil: int getInt(java.lang.String,int)>("io.netty.leakDetection.targetRecords", 4);
<io.netty.util.ResourceLeakDetector: int TARGET_RECORDS> = v;
v = staticinvoke <io.netty.util.internal.SystemPropertyUtil: int getInt(java.lang.String,int)>("io.netty.leakDetection.samplingInterval", 128);
<io.netty.util.ResourceLeakDetector: int SAMPLING_INTERVAL> = v;
<io.netty.util.ResourceLeakDetector: io.netty.util.ResourceLeakDetector$Level level> = v;
v = <io.netty.util.ResourceLeakDetector: io.netty.util.internal.logging.InternalLogger logger>;
v = interfaceinvoke v.<io.netty.util.internal.logging.InternalLogger: boolean isDebugEnabled()>();
if v == 0 goto label;
v = <io.netty.util.ResourceLeakDetector: io.netty.util.internal.logging.InternalLogger logger>;
v = virtualinvoke v.<io.netty.util.ResourceLeakDetector$Level: java.lang.String name()>();
v = virtualinvoke v.<java.lang.String: java.lang.String toLowerCase()>();
interfaceinvoke v.<io.netty.util.internal.logging.InternalLogger: void debug(java.lang.String,java.lang.Object,java.lang.Object)>("-D{}: {}", "io.netty.leakDetection.level", v);
v = <io.netty.util.ResourceLeakDetector: io.netty.util.internal.logging.InternalLogger logger>;
v = <io.netty.util.ResourceLeakDetector: int TARGET_RECORDS>;
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
interfaceinvoke v.<io.netty.util.internal.logging.InternalLogger: void debug(java.lang.String,java.lang.Object,java.lang.Object)>("-D{}: {}", "io.netty.leakDetection.targetRecords", v);
label:
v = new java.util.concurrent.atomic.AtomicReference;
v = <io.netty.util.internal.EmptyArrays: java.lang.String[] EMPTY_STRINGS>;
specialinvoke v.<java.util.concurrent.atomic.AtomicReference: void <init>(java.lang.Object)>(v);
<io.netty.util.ResourceLeakDetector: java.util.concurrent.atomic.AtomicReference excludedMethods> = v;
return;
}
}