ThrowableUtils.smali
.class public Lcom/blankj/utilcode/util/ThrowableUtils;
.super Ljava/lang/Object;
.source "ThrowableUtils.java"
# static fields
.field private static final LINE_SEP:Ljava/lang/String;
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 19
const-string v0, "line.separator"
invoke-static {v0}, Ljava/lang/System;->getProperty(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
sput-object v0, Lcom/blankj/utilcode/util/ThrowableUtils;->LINE_SEP:Ljava/lang/String;
return-void
.end method
.method private constructor <init>()V
.registers 3
.line 21
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 22
new-instance v0, Ljava/lang/UnsupportedOperationException;
const-string/jumbo v1, "u can\'t instantiate me..."
invoke-direct {v0, v1}, Ljava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public static getFullStackTrace(Ljava/lang/Throwable;)Ljava/lang/String;
.registers 9
.param p0, "throwable" # Ljava/lang/Throwable;
.line 26
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
.line 27
.local v0, "throwableList":Ljava/util/List;, "Ljava/util/List<Ljava/lang/Throwable;>;"
:goto_5
if-eqz p0, :cond_15
invoke-interface {v0, p0}, Ljava/util/List;->contains(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_15
.line 28
invoke-interface {v0, p0}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 29
invoke-virtual {p0}, Ljava/lang/Throwable;->getCause()Ljava/lang/Throwable;
move-result-object p0
goto :goto_5
.line 31
:cond_15
invoke-interface {v0}, Ljava/util/List;->size()I
move-result v1
.line 32
.local v1, "size":I
new-instance v2, Ljava/util/ArrayList;
invoke-direct {v2}, Ljava/util/ArrayList;-><init>()V
.line 33
.local v2, "frames":Ljava/util/List;, "Ljava/util/List<Ljava/lang/String;>;"
add-int/lit8 v3, v1, -0x1
invoke-interface {v0, v3}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v3
check-cast v3, Ljava/lang/Throwable;
invoke-static {v3}, Lcom/blankj/utilcode/util/ThrowableUtils;->getStackFrameList(Ljava/lang/Throwable;)Ljava/util/List;
move-result-object v3
.line 34
.local v3, "nextTrace":Ljava/util/List;, "Ljava/util/List<Ljava/lang/String;>;"
move v4, v1
.local v4, "i":I
:goto_2b
add-int/lit8 v4, v4, -0x1
if-ltz v4, :cond_75
.line 35
move-object v5, v3
.line 36
.local v5, "trace":Ljava/util/List;, "Ljava/util/List<Ljava/lang/String;>;"
if-eqz v4, :cond_41
.line 37
add-int/lit8 v6, v4, -0x1
invoke-interface {v0, v6}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v6
check-cast v6, Ljava/lang/Throwable;
invoke-static {v6}, Lcom/blankj/utilcode/util/ThrowableUtils;->getStackFrameList(Ljava/lang/Throwable;)Ljava/util/List;
move-result-object v3
.line 38
invoke-static {v5, v3}, Lcom/blankj/utilcode/util/ThrowableUtils;->removeCommonFrames(Ljava/util/List;Ljava/util/List;)V
.line 40
:cond_41
add-int/lit8 v6, v1, -0x1
if-ne v4, v6, :cond_53
.line 41
invoke-interface {v0, v4}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v6
check-cast v6, Ljava/lang/Throwable;
invoke-virtual {v6}, Ljava/lang/Throwable;->toString()Ljava/lang/String;
move-result-object v6
invoke-interface {v2, v6}, Ljava/util/List;->add(Ljava/lang/Object;)Z
goto :goto_71
.line 43
:cond_53
new-instance v6, Ljava/lang/StringBuilder;
invoke-direct {v6}, Ljava/lang/StringBuilder;-><init>()V
const-string v7, " Caused by: "
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-interface {v0, v4}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v7
check-cast v7, Ljava/lang/Throwable;
invoke-virtual {v7}, Ljava/lang/Throwable;->toString()Ljava/lang/String;
move-result-object v7
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v6}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v6
invoke-interface {v2, v6}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 45
:goto_71
invoke-interface {v2, v5}, Ljava/util/List;->addAll(Ljava/util/Collection;)Z
.line 46
.end local v5 # "trace":Ljava/util/List;, "Ljava/util/List<Ljava/lang/String;>;"
goto :goto_2b
.line 47
.end local v4 # "i":I
:cond_75
new-instance v4, Ljava/lang/StringBuilder;
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
.line 48
.local v4, "sb":Ljava/lang/StringBuilder;
invoke-interface {v2}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v5
:goto_7e
invoke-interface {v5}, Ljava/util/Iterator;->hasNext()Z
move-result v6
if-eqz v6, :cond_93
invoke-interface {v5}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v6
check-cast v6, Ljava/lang/String;
.line 49
.local v6, "element":Ljava/lang/String;
invoke-virtual {v4, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
sget-object v7, Lcom/blankj/utilcode/util/ThrowableUtils;->LINE_SEP:Ljava/lang/String;
invoke-virtual {v4, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
.line 50
.end local v6 # "element":Ljava/lang/String;
goto :goto_7e
.line 51
:cond_93
invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v5
return-object v5
.end method
.method private static getStackFrameList(Ljava/lang/Throwable;)Ljava/util/List;
.registers 10
.param p0, "throwable" # Ljava/lang/Throwable;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/lang/Throwable;",
")",
"Ljava/util/List<",
"Ljava/lang/String;",
">;"
}
.end annotation
.line 55
new-instance v0, Ljava/io/StringWriter;
invoke-direct {v0}, Ljava/io/StringWriter;-><init>()V
.line 56
.local v0, "sw":Ljava/io/StringWriter;
new-instance v1, Ljava/io/PrintWriter;
const/4 v2, 0x1
invoke-direct {v1, v0, v2}, Ljava/io/PrintWriter;-><init>(Ljava/io/Writer;Z)V
.line 57
.local v1, "pw":Ljava/io/PrintWriter;
invoke-virtual {p0, v1}, Ljava/lang/Throwable;->printStackTrace(Ljava/io/PrintWriter;)V
.line 58
invoke-virtual {v0}, Ljava/io/StringWriter;->toString()Ljava/lang/String;
move-result-object v2
.line 59
.local v2, "stackTrace":Ljava/lang/String;
new-instance v3, Ljava/util/StringTokenizer;
sget-object v4, Lcom/blankj/utilcode/util/ThrowableUtils;->LINE_SEP:Ljava/lang/String;
invoke-direct {v3, v2, v4}, Ljava/util/StringTokenizer;-><init>(Ljava/lang/String;Ljava/lang/String;)V
.line 60
.local v3, "frames":Ljava/util/StringTokenizer;
new-instance v4, Ljava/util/ArrayList;
invoke-direct {v4}, Ljava/util/ArrayList;-><init>()V
.line 61
.local v4, "list":Ljava/util/List;, "Ljava/util/List<Ljava/lang/String;>;"
const/4 v5, 0x0
.line 62
.local v5, "traceStarted":Z
:goto_1f
invoke-virtual {v3}, Ljava/util/StringTokenizer;->hasMoreTokens()Z
move-result v6
if-eqz v6, :cond_4a
.line 63
invoke-virtual {v3}, Ljava/util/StringTokenizer;->nextToken()Ljava/lang/String;
move-result-object v6
.line 65
.local v6, "token":Ljava/lang/String;
const-string v7, "at"
invoke-virtual {v6, v7}, Ljava/lang/String;->indexOf(Ljava/lang/String;)I
move-result v7
.line 66
.local v7, "at":I
const/4 v8, -0x1
if-eq v7, v8, :cond_46
const/4 v8, 0x0
invoke-virtual {v6, v8, v7}, Ljava/lang/String;->substring(II)Ljava/lang/String;
move-result-object v8
invoke-virtual {v8}, Ljava/lang/String;->trim()Ljava/lang/String;
move-result-object v8
invoke-virtual {v8}, Ljava/lang/String;->isEmpty()Z
move-result v8
if-eqz v8, :cond_46
.line 67
const/4 v5, 0x1
.line 68
invoke-interface {v4, v6}, Ljava/util/List;->add(Ljava/lang/Object;)Z
goto :goto_49
.line 69
:cond_46
if-eqz v5, :cond_49
.line 70
goto :goto_4a
.line 72
.end local v6 # "token":Ljava/lang/String;
.end local v7 # "at":I
:cond_49
:goto_49
goto :goto_1f
.line 73
:cond_4a
:goto_4a
return-object v4
.end method
.method private static removeCommonFrames(Ljava/util/List;Ljava/util/List;)V
.registers 7
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/List<",
"Ljava/lang/String;",
">;",
"Ljava/util/List<",
"Ljava/lang/String;",
">;)V"
}
.end annotation
.line 77
.local p0, "causeFrames":Ljava/util/List;, "Ljava/util/List<Ljava/lang/String;>;"
.local p1, "wrapperFrames":Ljava/util/List;, "Ljava/util/List<Ljava/lang/String;>;"
invoke-interface {p0}, Ljava/util/List;->size()I
move-result v0
add-int/lit8 v0, v0, -0x1
.line 78
.local v0, "causeFrameIndex":I
invoke-interface {p1}, Ljava/util/List;->size()I
move-result v1
add-int/lit8 v1, v1, -0x1
.line 79
.local v1, "wrapperFrameIndex":I
:goto_c
if-ltz v0, :cond_2b
if-ltz v1, :cond_2b
.line 82
invoke-interface {p0, v0}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v2
check-cast v2, Ljava/lang/String;
.line 83
.local v2, "causeFrame":Ljava/lang/String;
invoke-interface {p1, v1}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v3
check-cast v3, Ljava/lang/String;
.line 84
.local v3, "wrapperFrame":Ljava/lang/String;
invoke-virtual {v2, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v4
if-eqz v4, :cond_25
.line 85
invoke-interface {p0, v0}, Ljava/util/List;->remove(I)Ljava/lang/Object;
.line 87
:cond_25
add-int/lit8 v0, v0, -0x1
.line 88
nop
.end local v2 # "causeFrame":Ljava/lang/String;
.end local v3 # "wrapperFrame":Ljava/lang/String;
add-int/lit8 v1, v1, -0x1
.line 89
goto :goto_c
.line 90
:cond_2b
return-void
.end method