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

org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmOriginalMetadataDependencyResolver.kt Maven / Gradle / Ivy

/*
 * Copyright 2010-2022 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.kpm.idea

import org.gradle.api.artifacts.component.ModuleComponentIdentifier
import org.jetbrains.kotlin.gradle.idea.kpm.IdeaKpmBinaryCoordinatesImpl
import org.jetbrains.kotlin.gradle.idea.kpm.IdeaKpmDependency
import org.jetbrains.kotlin.gradle.idea.kpm.IdeaKpmResolvedBinaryDependencyImpl
import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.KeepOriginalDependency
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragmentGranularMetadataResolverFactory
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.resolvableMetadataConfigurationName

internal class IdeaKpmOriginalMetadataDependencyResolver(
    private val fragmentGranularMetadataResolverFactory: GradleKpmFragmentGranularMetadataResolverFactory
) : IdeaKpmDependencyResolver {
    override fun resolve(fragment: GradleKpmFragment): Set {
        val dependencyIdentifiers = fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions
            .filterIsInstance()
            .mapNotNull { resolution -> resolution.dependency.id as? ModuleComponentIdentifier }
            .toSet()

        val allModuleCompileDependenciesConfiguration = fragment.project.configurations
            .getByName(fragment.containingModule.resolvableMetadataConfigurationName)

        return allModuleCompileDependenciesConfiguration.incoming.artifactView { view ->
            view.componentFilter { id -> id in dependencyIdentifiers }
            view.isLenient = true
        }.artifacts
            .map { artifact ->
                val artifactId = artifact.variant.owner as ModuleComponentIdentifier
                IdeaKpmResolvedBinaryDependencyImpl(
                    binaryType = IdeaKpmDependency.CLASSPATH_BINARY_TYPE,
                    binaryFile = artifact.file,
                    coordinates = IdeaKpmBinaryCoordinatesImpl(artifactId.group, artifactId.module, artifactId.version)
                )
            }.toSet()
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy