Coverage Summary for Class: LogStackTraceFrameFilter (kr.open.library.simple_ui.core.logcat.internal.extractor)
| Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| LogStackTraceFrameFilter |
100%
(1/1)
|
100%
(3/3)
|
100%
(12/12)
|
100%
(10/10)
|
100%
(74/74)
|
package kr.open.library.simple_ui.core.logcat.internal.extractor
/**
* 스택 트레이스에서 건너뛸 프레임을 판정하는 필터입니다.
*
* Filters stack trace elements that should be skipped.
* <br><br>
* 내부 프레임을 제외하기 위한 필터 로직입니다.
*
* @param skipPackages 제외할 패키지 접두사 집합.
*/
internal class LogStackTraceFrameFilter(
private val skipPackages: Set<String>,
) {
/**
* 스킵 패키지 규칙에 해당하는지 확인합니다.
*
* Returns true if the element belongs to a skipped package.
* <br><br>
* 제외 대상 패키지인지 여부를 반환합니다.
*
* @param element 검사 대상 스택 요소.
*/
fun isSkipped(element: StackTraceElement): Boolean = skipPackages.any { prefix -> element.className.startsWith(prefix) }
/**
* 컴파일러/런타임이 생성한 합성 프레임인지 판단합니다.
*
* Determines whether a frame is synthetic or unusable.
* <br><br>
* 합성 프레임 또는 유효하지 않은 프레임인지 확인합니다.
*
* @param element 검사 대상 스택 요소.
*/
fun isSynthetic(element: StackTraceElement): Boolean {
if (element.fileName.isNullOrBlank() || element.fileName == LogStackTraceConstants.UNKNOWN_FILE_NAME) return true
if (element.lineNumber <= 0) return true
val className = element.className
val methodName = element.methodName
if (className.contains(LogStackTraceConstants.D8_SYNTHETIC_CLASS)) return true
if (methodName.contains(LogStackTraceConstants.ACCESS_PREFIX)) return true
return false
}
}