/*
 * Copyright 2016-2017 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package kotlinx.coroutines.experimental.quasar

import co.paralleluniverse.fibers.instrument.MethodDatabase
import co.paralleluniverse.fibers.instrument.SuspendableClassifier

/**
 * @suppress **Internal implementation**.
 */
class KotlinSuspendableClassifier : SuspendableClassifier {
    override fun isSuspendable(
            db: MethodDatabase,
            sourceName: String?,
            sourceDebugInfo: String?,
            isInterface: Boolean,
            className: String?,
            superClassName: String?,
            interfaces: Array<out String>,
            methodName: String,
            methodDesc: String,
            methodSignature: String?,
            methodExceptions: Array<out String>?
    ): MethodDatabase.SuspendableType? {
        if (methodName == "run" &&
            methodDesc.startsWith("()") &&
            interfaces.contains("co/paralleluniverse/strands/SuspendableCallable"))
            return MethodDatabase.SuspendableType.SUSPENDABLE
        return null
    }
}