diff --git a/pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/DataModel.kt b/pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/DataModel.kt index ae330aa18..85014f091 100644 --- a/pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/DataModel.kt +++ b/pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/DataModel.kt @@ -48,6 +48,7 @@ internal data class ExceptionData( val file: String?, val lineNumber: Int, val stackTrace: List, + val stackTraceAdditionalLineCount: Int, val timeStamp: Long = System.currentTimeMillis(), val isANRException: Boolean = false ) : ListItem() @@ -84,19 +85,21 @@ internal data class DeviceInfo( ) : ListItem() internal fun Throwable.asExceptionData(isANR: Boolean = false): ExceptionData { + val truncatedStackTrace = stackTrace.asStringArray() return ExceptionData( name = this.toString().replace(": $message", "", true), message = message, - stackTrace = stackTrace.asStringArray(), + stackTrace = truncatedStackTrace, + stackTraceAdditionalLineCount = stackTrace.size - truncatedStackTrace.size, file = stackTrace.getOrNull(0)?.fileName, lineNumber = stackTrace.getOrNull(0)?.lineNumber ?: Int.MIN_VALUE, isANRException = isANR ) } -internal fun Array.asStringArray(): ArrayList { +internal fun Array.asStringArray(stackTraceSize: Int = STACK_TRACE_LENGTH): ArrayList { val array = arrayListOf() - forEach { + take(stackTraceSize).forEach { if (it.isNativeMethod) { array.add("${it.className}.${it.methodName}(Native Method)") } else { @@ -175,3 +178,5 @@ data class ReportData( val version: String = BuildConfig.VERSION_NAME, val buildType: String = BuildConfig.BUILD_TYPE ) + +internal const val STACK_TRACE_LENGTH = 25 diff --git a/pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/persistence/database/PlutoDatabase.kt b/pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/persistence/database/PlutoDatabase.kt index d9323f4cc..f65b39d91 100644 --- a/pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/persistence/database/PlutoDatabase.kt +++ b/pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/persistence/database/PlutoDatabase.kt @@ -8,7 +8,7 @@ import com.pluto.plugins.exceptions.internal.persistence.ExceptionEntity entities = [ ExceptionEntity::class, ], - version = 3, + version = 4, exportSchema = false ) internal abstract class PlutoDatabase : RoomDatabase() { diff --git a/pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/ui/DetailsFragment.kt b/pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/ui/DetailsFragment.kt index a37645fe6..bc4b203ea 100644 --- a/pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/ui/DetailsFragment.kt +++ b/pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/ui/DetailsFragment.kt @@ -121,17 +121,16 @@ internal class DetailsFragment : Fragment(R.layout.pluto_excep___fragment_detail } } -private const val STACK_TRACE_LENGTH = 25 private const val SHARE_SECTION_DIVIDER = "\n\n==================\n\n" private fun ExceptionEntity.toShareText(): String { val text = StringBuilder() text.append("EXCEPTION : \n") text.append("${this.data.exception.name}: ${this.data.exception.message}\n") - this.data.exception.stackTrace.take(STACK_TRACE_LENGTH).forEach { + this.data.exception.stackTrace.forEach { text.append("\t at $it\n") } - if (this.data.exception.stackTrace.size - STACK_TRACE_LENGTH > 0) { - text.append("\t + ${this.data.exception.stackTrace.size - STACK_TRACE_LENGTH} more lines\n\n") + if (this.data.exception.stackTraceAdditionalLineCount > 0) { + text.append("\t + ${this.data.exception.stackTraceAdditionalLineCount} more lines\n\n") } text.append(SHARE_SECTION_DIVIDER) diff --git a/pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/ui/holder/CrashItemDetailsHeaderHolder.kt b/pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/ui/holder/CrashItemDetailsHeaderHolder.kt index fb976def8..a02ea6578 100644 --- a/pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/ui/holder/CrashItemDetailsHeaderHolder.kt +++ b/pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/ui/holder/CrashItemDetailsHeaderHolder.kt @@ -32,7 +32,7 @@ internal class CrashItemDetailsHeaderHolder( stacktrace.setSpan { append("${item.name}: ${item.message}") - item.stackTrace.take(MAX_STACK_TRACE_LINES).forEach { + item.stackTrace.forEach { append("\n\t\t\t") append( fontColor( @@ -41,11 +41,10 @@ internal class CrashItemDetailsHeaderHolder( ) append(it) } - val extraTrace = item.stackTrace.size - MAX_STACK_TRACE_LINES - if (extraTrace > 0) { + if (item.stackTraceAdditionalLineCount > 0) { append( fontColor( - "\n\t\t\t + $extraTrace more lines", context.color(com.pluto.plugin.R.color.pluto___text_dark_40) + "\n\t\t\t + ${item.stackTraceAdditionalLineCount} more lines", context.color(com.pluto.plugin.R.color.pluto___text_dark_40) ) ) } @@ -101,8 +100,4 @@ internal class CrashItemDetailsHeaderHolder( // } // return false // } - - companion object { - const val MAX_STACK_TRACE_LINES = 20 - } }