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

org.jetbrains.kotlin.gradle.targets.native.tasks.CInteropRunnerExecutionContextFactory.kt Maven / Gradle / Ivy

There is a newer version: 2.1.0-Beta1
Show newest version
/*
 * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
 * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
 */

package org.jetbrains.kotlin.gradle.targets.native.tasks

import org.gradle.api.Task
import org.jetbrains.kotlin.compilerRunner.KotlinNativeCInteropRunner
import org.jetbrains.kotlin.compilerRunner.KotlinNativeToolRunner
import org.jetbrains.kotlin.compilerRunner.KotlinToolRunner

internal fun KotlinNativeCInteropRunner.Companion.createExecutionContext(
    task: Task,
    isInIdeaSync: Boolean,
    runnerSettings: KotlinNativeToolRunner.Settings,
    gradleExecutionContext: KotlinToolRunner.GradleExecutionContext
): KotlinNativeCInteropRunner.ExecutionContext {
    return if (isInIdeaSync) IdeaSyncKotlinNativeCInteropRunnerExecutionContext(runnerSettings, gradleExecutionContext, task)
    else DefaultKotlinNativeCInteropRunnerExecutionContext(runnerSettings, gradleExecutionContext)
}

private class DefaultKotlinNativeCInteropRunnerExecutionContext(
    override val runnerSettings: KotlinNativeToolRunner.Settings,
    override val gradleExecutionContext: KotlinToolRunner.GradleExecutionContext
) : KotlinNativeCInteropRunner.ExecutionContext {
    override fun runWithContext(action: () -> Unit) = action()
}

private class IdeaSyncKotlinNativeCInteropRunnerExecutionContext(
    override val runnerSettings: KotlinNativeToolRunner.Settings,
    override val gradleExecutionContext: KotlinToolRunner.GradleExecutionContext,
    private val task: Task
) : KotlinNativeCInteropRunner.ExecutionContext {

    override fun runWithContext(action: () -> Unit) {
        try {
            action()
        } catch (t: Throwable) {
            task.logger.warn("Warning: Failed to generate cinterop for ${task.path}: ${t.message ?: ""}", t)
            task.outputs.files.forEach { file -> file.deleteRecursively() }
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy