.class public final Lcom/unity3d/services/SDKErrorHandler; .super Ljava/lang/Object; .source "SourceFile" # interfaces .implements Lkotlinx/coroutines/CoroutineExceptionHandler; # annotations .annotation system Ldalvik/annotation/MemberClasses; value = { Lcom/unity3d/services/SDKErrorHandler$Companion; } .end annotation # static fields .field public static final Companion:Lcom/unity3d/services/SDKErrorHandler$Companion; .field public static final UNITY_PACKAGE:Ljava/lang/String; = "com.unity3d" .field public static final UNKNOWN_FILE:Ljava/lang/String; = "unknown" # instance fields .field private final alternativeFlowReader:Lcom/unity3d/ads/core/configuration/AlternativeFlowReader; .field private final ioDispatcher:Lkotlinx/coroutines/CoroutineDispatcher; .field private final key:Lkotlinx/coroutines/CoroutineExceptionHandler$Key; .field private final scope:Lkotlinx/coroutines/CoroutineScope; .field private final sdkMetricsSender:Lcom/unity3d/services/core/request/metrics/SDKMetricsSender; .field private final sendDiagnosticEvent:Lcom/unity3d/ads/core/domain/SendDiagnosticEvent; # direct methods .method static constructor ()V .locals 2 new-instance v0, Lcom/unity3d/services/SDKErrorHandler$Companion; const/4 v1, 0x0 invoke-direct {v0, v1}, Lcom/unity3d/services/SDKErrorHandler$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V sput-object v0, Lcom/unity3d/services/SDKErrorHandler;->Companion:Lcom/unity3d/services/SDKErrorHandler$Companion; return-void .end method .method public constructor (Lkotlinx/coroutines/CoroutineDispatcher;Lcom/unity3d/ads/core/configuration/AlternativeFlowReader;Lcom/unity3d/ads/core/domain/SendDiagnosticEvent;Lcom/unity3d/services/core/request/metrics/SDKMetricsSender;)V .locals 1 const-string v0, "ioDispatcher" invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V const-string v0, "alternativeFlowReader" invoke-static {p2, v0}, Lkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V const-string v0, "sendDiagnosticEvent" invoke-static {p3, v0}, Lkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V const-string v0, "sdkMetricsSender" invoke-static {p4, v0}, Lkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V .line 27 invoke-direct {p0}, Ljava/lang/Object;->()V iput-object p1, p0, Lcom/unity3d/services/SDKErrorHandler;->ioDispatcher:Lkotlinx/coroutines/CoroutineDispatcher; iput-object p2, p0, Lcom/unity3d/services/SDKErrorHandler;->alternativeFlowReader:Lcom/unity3d/ads/core/configuration/AlternativeFlowReader; iput-object p3, p0, Lcom/unity3d/services/SDKErrorHandler;->sendDiagnosticEvent:Lcom/unity3d/ads/core/domain/SendDiagnosticEvent; iput-object p4, p0, Lcom/unity3d/services/SDKErrorHandler;->sdkMetricsSender:Lcom/unity3d/services/core/request/metrics/SDKMetricsSender; .line 33 invoke-static {p1}, Lkotlinx/coroutines/CoroutineScopeKt;->CoroutineScope(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/CoroutineScope; move-result-object p1 new-instance p2, Lkotlinx/coroutines/CoroutineName; const-string p3, "SDKErrorHandler" invoke-direct {p2, p3}, Lkotlinx/coroutines/CoroutineName;->(Ljava/lang/String;)V invoke-static {p1, p2}, Lkotlinx/coroutines/CoroutineScopeKt;->plus(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/CoroutineScope; move-result-object p1 iput-object p1, p0, Lcom/unity3d/services/SDKErrorHandler;->scope:Lkotlinx/coroutines/CoroutineScope; sget-object p1, Lkotlinx/coroutines/CoroutineExceptionHandler;->Key:Lkotlinx/coroutines/CoroutineExceptionHandler$Key; iput-object p1, p0, Lcom/unity3d/services/SDKErrorHandler;->key:Lkotlinx/coroutines/CoroutineExceptionHandler$Key; return-void .end method .method public static final synthetic access$getSendDiagnosticEvent$p(Lcom/unity3d/services/SDKErrorHandler;)Lcom/unity3d/ads/core/domain/SendDiagnosticEvent; .locals 0 .line 27 iget-object p0, p0, Lcom/unity3d/services/SDKErrorHandler;->sendDiagnosticEvent:Lcom/unity3d/ads/core/domain/SendDiagnosticEvent; return-object p0 .end method .method private final getShortenedStackTrace(Ljava/lang/Throwable;I)Ljava/lang/String; .locals 9 .line 79 :try_start_0 new-instance v0, Ljava/io/StringWriter; invoke-direct {v0}, Ljava/io/StringWriter;->()V .line 80 new-instance v1, Ljava/io/PrintWriter; invoke-direct {v1, v0}, Ljava/io/PrintWriter;->(Ljava/io/Writer;)V invoke-virtual {p1, v1}, Ljava/lang/Throwable;->printStackTrace(Ljava/io/PrintWriter;)V .line 81 invoke-virtual {v0}, Ljava/io/StringWriter;->toString()Ljava/lang/String; move-result-object p1 const-string v0, "writer.toString()" invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V .line 82 invoke-static {p1}, Lkotlin/text/StringsKt;->trim(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; move-result-object p1 invoke-virtual {p1}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object p1 .line 83 invoke-static {p1}, Lkotlin/text/StringsKt;->lineSequence(Ljava/lang/CharSequence;)Lkotlin/sequences/Sequence; move-result-object p1 .line 84 invoke-static {p1, p2}, Lkotlin/sequences/SequencesKt;->take(Lkotlin/sequences/Sequence;I)Lkotlin/sequences/Sequence; move-result-object v0 const-string v1, "\n" const/4 v2, 0x0 const/4 v3, 0x0 const/4 v4, 0x0 const/4 v5, 0x0 const/4 v6, 0x0 const/16 v7, 0x3e const/4 v8, 0x0 .line 85 invoke-static/range {v0 .. v8}, Lkotlin/sequences/SequencesKt;->joinToString$default(Lkotlin/sequences/Sequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/String; move-result-object p1 :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 return-object p1 :catchall_0 const-string p1, "" return-object p1 .end method .method private final retrieveCoroutineName(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/String; .locals 1 .line 75 sget-object v0, Lkotlinx/coroutines/CoroutineName;->Key:Lkotlinx/coroutines/CoroutineName$Key; invoke-interface {p1, v0}, Lkotlin/coroutines/CoroutineContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; move-result-object p1 check-cast p1, Lkotlinx/coroutines/CoroutineName; if-eqz p1, :cond_0 invoke-virtual {p1}, Lkotlinx/coroutines/CoroutineName;->getName()Ljava/lang/String; move-result-object p1 if-nez p1, :cond_1 :cond_0 const-string p1, "unknown" :cond_1 return-object p1 .end method .method private final sendDiagnostic(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V .locals 11 iget-object v0, p0, Lcom/unity3d/services/SDKErrorHandler;->scope:Lkotlinx/coroutines/CoroutineScope; const/4 v1, 0x0 const/4 v2, 0x0 .line 61 new-instance v10, Lcom/unity3d/services/SDKErrorHandler$sendDiagnostic$1; const/4 v9, 0x0 move-object v3, v10 move-object v4, p0 move-object v5, p1 move-object v6, p2 move-object v7, p4 move-object v8, p3 invoke-direct/range {v3 .. v9}, Lcom/unity3d/services/SDKErrorHandler$sendDiagnostic$1;->(Lcom/unity3d/services/SDKErrorHandler;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V const/4 v4, 0x3 const/4 v5, 0x0 invoke-static/range {v0 .. v5}, Lkotlinx/coroutines/BuildersKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Job; return-void .end method .method private final sendMetric(Lcom/unity3d/services/core/request/metrics/Metric;)V .locals 1 iget-object v0, p0, Lcom/unity3d/services/SDKErrorHandler;->sdkMetricsSender:Lcom/unity3d/services/core/request/metrics/SDKMetricsSender; .line 73 invoke-interface {v0, p1}, Lcom/unity3d/services/core/request/metrics/SDKMetricsSender;->sendMetric(Lcom/unity3d/services/core/request/metrics/Metric;)V return-void .end method # virtual methods .method public fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; .locals 0 .annotation system Ldalvik/annotation/Signature; value = { "(TR;", "Lkotlin/jvm/functions/Function2;", ")TR;" } .end annotation .line 27 invoke-static {p0, p1, p2}, Lkotlinx/coroutines/CoroutineExceptionHandler$DefaultImpls;->fold(Lkotlinx/coroutines/CoroutineExceptionHandler;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; move-result-object p1 return-object p1 .end method .method public get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; .locals 0 .annotation system Ldalvik/annotation/Signature; value = { "(", "Lkotlin/coroutines/CoroutineContext$Key;", ")TE;" } .end annotation .line 27 invoke-static {p0, p1}, Lkotlinx/coroutines/CoroutineExceptionHandler$DefaultImpls;->get(Lkotlinx/coroutines/CoroutineExceptionHandler;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; move-result-object p1 return-object p1 .end method .method public bridge synthetic getKey()Lkotlin/coroutines/CoroutineContext$Key; .locals 1 .line 27 invoke-virtual {p0}, Lcom/unity3d/services/SDKErrorHandler;->getKey()Lkotlinx/coroutines/CoroutineExceptionHandler$Key; move-result-object v0 return-object v0 .end method .method public getKey()Lkotlinx/coroutines/CoroutineExceptionHandler$Key; .locals 1 .line 0 iget-object v0, p0, Lcom/unity3d/services/SDKErrorHandler;->key:Lkotlinx/coroutines/CoroutineExceptionHandler$Key; return-object v0 .end method .method public handleException(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Throwable;)V .locals 7 const-string v0, "context" invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V const-string v0, "exception" invoke-static {p2, v0}, Lkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V .line 38 invoke-direct {p0, p1}, Lcom/unity3d/services/SDKErrorHandler;->retrieveCoroutineName(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/String; move-result-object p1 .line 40 instance-of v0, p2, Ljava/lang/NullPointerException; if-eqz v0, :cond_0 const-string v0, "native_exception_npe" :goto_0 move-object v2, v0 goto :goto_1 .line 41 :cond_0 instance-of v0, p2, Ljava/lang/OutOfMemoryError; if-eqz v0, :cond_1 const-string v0, "native_exception_oom" goto :goto_0 .line 42 :cond_1 instance-of v0, p2, Ljava/lang/IllegalStateException; if-eqz v0, :cond_2 const-string v0, "native_exception_ise" goto :goto_0 .line 43 :cond_2 instance-of v0, p2, Ljava/lang/SecurityException; if-eqz v0, :cond_3 const-string v0, "native_exception_se" goto :goto_0 .line 44 :cond_3 instance-of v0, p2, Ljava/lang/RuntimeException; if-eqz v0, :cond_4 const-string v0, "native_exception_re" goto :goto_0 :cond_4 const-string v0, "native_exception" goto :goto_0 :goto_1 iget-object v0, p0, Lcom/unity3d/services/SDKErrorHandler;->alternativeFlowReader:Lcom/unity3d/ads/core/configuration/AlternativeFlowReader; .line 48 invoke-virtual {v0}, Lcom/unity3d/ads/core/configuration/AlternativeFlowReader;->invoke()Z move-result v0 .line 49 invoke-static {p2}, Lcom/unity3d/ads/core/extensions/ExceptionExtensionsKt;->retrieveUnityCrashValue(Ljava/lang/Throwable;)Ljava/lang/String; move-result-object v3 .line 50 new-instance v1, Ljava/lang/StringBuilder; invoke-direct {v1}, Ljava/lang/StringBuilder;->()V const-string v4, "Unity Ads SDK encountered an exception: " invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v1 invoke-static {v1}, Lcom/unity3d/services/core/log/DeviceLog;->error(Ljava/lang/String;)V if-eqz v0, :cond_5 const/16 v0, 0xf .line 52 invoke-direct {p0, p2, v0}, Lcom/unity3d/services/SDKErrorHandler;->getShortenedStackTrace(Ljava/lang/Throwable;I)Ljava/lang/String; move-result-object p2 .line 53 invoke-direct {p0, v2, v3, p1, p2}, Lcom/unity3d/services/SDKErrorHandler;->sendDiagnostic(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V goto :goto_2 .line 55 :cond_5 new-instance p1, Lcom/unity3d/services/core/request/metrics/Metric; const/4 v4, 0x0 const/4 v5, 0x4 const/4 v6, 0x0 move-object v1, p1 invoke-direct/range {v1 .. v6}, Lcom/unity3d/services/core/request/metrics/Metric;->(Ljava/lang/String;Ljava/lang/Object;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V invoke-direct {p0, p1}, Lcom/unity3d/services/SDKErrorHandler;->sendMetric(Lcom/unity3d/services/core/request/metrics/Metric;)V :goto_2 return-void .end method .method public minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; .locals 0 .annotation system Ldalvik/annotation/Signature; value = { "(", "Lkotlin/coroutines/CoroutineContext$Key;", ")", "Lkotlin/coroutines/CoroutineContext;" } .end annotation .line 27 invoke-static {p0, p1}, Lkotlinx/coroutines/CoroutineExceptionHandler$DefaultImpls;->minusKey(Lkotlinx/coroutines/CoroutineExceptionHandler;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; move-result-object p1 return-object p1 .end method .method public plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; .locals 0 .line 27 invoke-static {p0, p1}, Lkotlinx/coroutines/CoroutineExceptionHandler$DefaultImpls;->plus(Lkotlinx/coroutines/CoroutineExceptionHandler;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; move-result-object p1 return-object p1 .end method