All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.sentry.android.gradle.instrumentation.util.CatchingMethodVisitor.kt Maven / Gradle / Ivy

package io.sentry.android.gradle.instrumentation.util

import io.sentry.android.gradle.SentryPlugin
import io.sentry.android.gradle.instrumentation.MethodContext
import io.sentry.android.gradle.util.error
import org.objectweb.asm.MethodVisitor
import org.slf4j.Logger

interface ExceptionHandler {
    fun handle(exception: Throwable)
}

class CatchingMethodVisitor(
    apiVersion: Int,
    prevVisitor: MethodVisitor,
    private val className: String,
    private val methodContext: MethodContext,
    private val exceptionHandler: ExceptionHandler? = null,
    private val logger: Logger = SentryPlugin.logger
) : MethodVisitor(apiVersion, prevVisitor) {

    override fun visitMaxs(maxStack: Int, maxLocals: Int) {
        try {
            super.visitMaxs(maxStack, maxLocals)
        } catch (e: Throwable) {
            exceptionHandler?.handle(e)
            logger.error(e) {
                """
                Error while instrumenting $className.${methodContext.name} ${methodContext.descriptor}.
                Please report this issue at https://github.com/getsentry/sentry-android-gradle-plugin/issues
                """.trimIndent()
            }
            throw e
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy