[kpm] kotlin-gradle-plugin-idea: Introduce IdeaKpm* naming convention (1/2)

Replace the pre-existing `IdeaKotlin` naming convention with `IdeaKpm`
This commit is contained in:
sebastian.sellmair
2022-05-24 14:35:32 +02:00
committed by Space
parent d4dc6a3d71
commit e2755b92aa
54 changed files with 378 additions and 382 deletions
@@ -1,4 +1,4 @@
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinBinaryCoordinates : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependencyCoordinates { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmBinaryCoordinates : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmDependencyCoordinates {
public abstract fun getGroup ()Ljava/lang/String; public abstract fun getGroup ()Ljava/lang/String;
public abstract fun getKotlinFragmentName ()Ljava/lang/String; public abstract fun getKotlinFragmentName ()Ljava/lang/String;
public abstract fun getKotlinModuleName ()Ljava/lang/String; public abstract fun getKotlinModuleName ()Ljava/lang/String;
@@ -6,88 +6,88 @@ public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinB
public abstract fun getVersion ()Ljava/lang/String; public abstract fun getVersion ()Ljava/lang/String;
} }
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinBinaryCoordinatesImpl$Companion { public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmBinaryCoordinatesImpl$Companion {
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinBinaryDependency : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependency { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmBinaryDependency : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmDependency {
public abstract fun getCoordinates ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinBinaryCoordinates; public abstract fun getCoordinates ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmBinaryCoordinates;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinCompilationOutput : java/io/Serializable { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmCompilationOutput : java/io/Serializable {
public abstract fun getClassesDirs ()Ljava/util/Set; public abstract fun getClassesDirs ()Ljava/util/Set;
public abstract fun getResourcesDir ()Ljava/io/File; public abstract fun getResourcesDir ()Ljava/io/File;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependency : java/io/Serializable { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmDependency : java/io/Serializable {
public static final field CLASSPATH_BINARY_TYPE Ljava/lang/String; public static final field CLASSPATH_BINARY_TYPE Ljava/lang/String;
public static final field Companion Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependency$Companion; public static final field Companion Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmDependency$Companion;
public static final field DOCUMENTATION_BINARY_TYPE Ljava/lang/String; public static final field DOCUMENTATION_BINARY_TYPE Ljava/lang/String;
public static final field SOURCES_BINARY_TYPE Ljava/lang/String; public static final field SOURCES_BINARY_TYPE Ljava/lang/String;
public abstract fun getCoordinates ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependencyCoordinates; public abstract fun getCoordinates ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmDependencyCoordinates;
public abstract fun getExtras ()Lorg/jetbrains/kotlin/tooling/core/Extras; public abstract fun getExtras ()Lorg/jetbrains/kotlin/tooling/core/Extras;
} }
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependency$Companion { public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmDependency$Companion {
public static final field CLASSPATH_BINARY_TYPE Ljava/lang/String; public static final field CLASSPATH_BINARY_TYPE Ljava/lang/String;
public static final field DOCUMENTATION_BINARY_TYPE Ljava/lang/String; public static final field DOCUMENTATION_BINARY_TYPE Ljava/lang/String;
public static final field SOURCES_BINARY_TYPE Ljava/lang/String; public static final field SOURCES_BINARY_TYPE Ljava/lang/String;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependencyCoordinates : java/io/Serializable { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmDependencyCoordinates : java/io/Serializable {
} }
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependencyKt { public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmDependencyKt {
public static final fun isClasspathType (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResolvedBinaryDependency;)Z public static final fun isClasspathType (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmResolvedBinaryDependency;)Z
public static final fun isDocumentationType (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResolvedBinaryDependency;)Z public static final fun isDocumentationType (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmResolvedBinaryDependency;)Z
public static final fun isSourcesType (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResolvedBinaryDependency;)Z public static final fun isSourcesType (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmResolvedBinaryDependency;)Z
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragment : java/io/Serializable { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragment : java/io/Serializable {
public abstract fun getCoordinates ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinates; public abstract fun getCoordinates ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragmentCoordinates;
public abstract fun getDependencies ()Ljava/util/List; public abstract fun getDependencies ()Ljava/util/List;
public abstract fun getExtras ()Lorg/jetbrains/kotlin/tooling/core/Extras; public abstract fun getExtras ()Lorg/jetbrains/kotlin/tooling/core/Extras;
public abstract fun getLanguageSettings ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettings; public abstract fun getLanguageSettings ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmLanguageSettings;
public abstract fun getPlatforms ()Ljava/util/Set; public abstract fun getPlatforms ()Ljava/util/Set;
public abstract fun getResourceDirectories ()Ljava/util/List; public abstract fun getResourceDirectories ()Ljava/util/List;
public abstract fun getSourceDirectories ()Ljava/util/List; public abstract fun getSourceDirectories ()Ljava/util/List;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinates : java/io/Serializable, org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependencyCoordinates { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragmentCoordinates : java/io/Serializable, org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmDependencyCoordinates {
public abstract fun getFragmentName ()Ljava/lang/String; public abstract fun getFragmentName ()Ljava/lang/String;
public abstract fun getModule ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinates; public abstract fun getModule ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmModuleCoordinates;
} }
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinatesKt { public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragmentCoordinatesKt {
public static final fun getPath (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinates;)Ljava/lang/String; public static final fun getPath (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragmentCoordinates;)Ljava/lang/String;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinDependency { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragmentDependency : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmDependency {
public abstract fun getCoordinates ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentCoordinates; public abstract fun getCoordinates ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragmentCoordinates;
public abstract fun getType ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency$Type; public abstract fun getType ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragmentDependency$Type;
} }
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency$Type : java/lang/Enum, java/io/Serializable { public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragmentDependency$Type : java/lang/Enum, java/io/Serializable {
public static final field Companion Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency$Type$Companion; public static final field Companion Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragmentDependency$Type$Companion;
public static final field Friend Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency$Type; public static final field Friend Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragmentDependency$Type;
public static final field Refines Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency$Type; public static final field Refines Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragmentDependency$Type;
public static final field Regular Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency$Type; public static final field Regular Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragmentDependency$Type;
public static fun valueOf (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency$Type; public static fun valueOf (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragmentDependency$Type;
public static fun values ()[Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency$Type; public static fun values ()[Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragmentDependency$Type;
} }
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentKt { public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragmentKt {
public static final fun getName (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragment;)Ljava/lang/String; public static final fun getName (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragment;)Ljava/lang/String;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinJsPlatformDetails : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatformDetails { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmJsPlatformDetails : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatformDetails {
public abstract fun isIr ()Z public abstract fun isIr ()Z
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinJvmPlatformDetails : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatformDetails { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmJvmPlatformDetails : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatformDetails {
public abstract fun getJvmTarget ()Ljava/lang/String; public abstract fun getJvmTarget ()Ljava/lang/String;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettings : java/io/Serializable { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmLanguageSettings : java/io/Serializable {
public abstract fun getApiVersion ()Ljava/lang/String; public abstract fun getApiVersion ()Ljava/lang/String;
public abstract fun getCompilerPluginArguments ()Ljava/util/List; public abstract fun getCompilerPluginArguments ()Ljava/util/List;
public abstract fun getCompilerPluginClasspath ()Ljava/util/List; public abstract fun getCompilerPluginClasspath ()Ljava/util/List;
@@ -98,12 +98,12 @@ public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinL
public abstract fun isProgressiveMode ()Z public abstract fun isProgressiveMode ()Z
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModule : java/io/Serializable { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmModule : java/io/Serializable {
public abstract fun getCoordinates ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinates; public abstract fun getCoordinates ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmModuleCoordinates;
public abstract fun getFragments ()Ljava/util/List; public abstract fun getFragments ()Ljava/util/List;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinates : java/io/Serializable { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmModuleCoordinates : java/io/Serializable {
public abstract fun getBuildId ()Ljava/lang/String; public abstract fun getBuildId ()Ljava/lang/String;
public abstract fun getModuleClassifier ()Ljava/lang/String; public abstract fun getModuleClassifier ()Ljava/lang/String;
public abstract fun getModuleName ()Ljava/lang/String; public abstract fun getModuleName ()Ljava/lang/String;
@@ -111,51 +111,51 @@ public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinM
public abstract fun getProjectPath ()Ljava/lang/String; public abstract fun getProjectPath ()Ljava/lang/String;
} }
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinatesKt { public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmModuleCoordinatesKt {
public static final fun getPath (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleCoordinates;)Ljava/lang/String; public static final fun getPath (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmModuleCoordinates;)Ljava/lang/String;
} }
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleKt { public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmModuleKt {
public static final fun getModuleClassifier (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModule;)Ljava/lang/String; public static final fun getModuleClassifier (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmModule;)Ljava/lang/String;
public static final fun getName (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModule;)Ljava/lang/String; public static final fun getName (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmModule;)Ljava/lang/String;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinNativePlatformDetails : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatformDetails { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmNativePlatformDetails : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatformDetails {
public abstract fun getKonanTarget ()Ljava/lang/String; public abstract fun getKonanTarget ()Ljava/lang/String;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatform : java/io/Serializable { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatform : java/io/Serializable {
public static final field Companion Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatform$Companion; public static final field Companion Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatform$Companion;
public static final field jsPlatformType Ljava/lang/String; public static final field jsPlatformType Ljava/lang/String;
public static final field jvmPlatformType Ljava/lang/String; public static final field jvmPlatformType Ljava/lang/String;
public static final field nativePlatformType Ljava/lang/String; public static final field nativePlatformType Ljava/lang/String;
public static final field wasmPlatformType Ljava/lang/String; public static final field wasmPlatformType Ljava/lang/String;
public abstract fun getPlatformDetails ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatformDetails; public abstract fun getPlatformDetails ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatformDetails;
public abstract fun getPlatformType ()Ljava/lang/String; public abstract fun getPlatformType ()Ljava/lang/String;
} }
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatform$Companion { public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatform$Companion {
public static final field jsPlatformType Ljava/lang/String; public static final field jsPlatformType Ljava/lang/String;
public static final field jvmPlatformType Ljava/lang/String; public static final field jvmPlatformType Ljava/lang/String;
public static final field nativePlatformType Ljava/lang/String; public static final field nativePlatformType Ljava/lang/String;
public static final field wasmPlatformType Ljava/lang/String; public static final field wasmPlatformType Ljava/lang/String;
public final fun getUnknown ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatform; public final fun getUnknown ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatform;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatformDetails : java/io/Serializable { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatformDetails : java/io/Serializable {
} }
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatformKt { public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatformKt {
public static final fun getJsOrNull (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatform;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinJsPlatformDetails; public static final fun getJsOrNull (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatform;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmJsPlatformDetails;
public static final fun getJvmOrNull (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatform;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinJvmPlatformDetails; public static final fun getJvmOrNull (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatform;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmJvmPlatformDetails;
public static final fun getNativeOrNull (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatform;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinNativePlatformDetails; public static final fun getNativeOrNull (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatform;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmNativePlatformDetails;
public static final fun isJs (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatform;)Z public static final fun isJs (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatform;)Z
public static final fun isJvm (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatform;)Z public static final fun isJvm (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatform;)Z
public static final fun isNative (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatform;)Z public static final fun isNative (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatform;)Z
public static final fun isWasm (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatform;)Z public static final fun isWasm (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatform;)Z
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModel : java/io/Serializable { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmProject : java/io/Serializable {
public abstract fun getCoreLibrariesVersion ()Ljava/lang/String; public abstract fun getCoreLibrariesVersion ()Ljava/lang/String;
public abstract fun getExplicitApiModeCliOption ()Ljava/lang/String; public abstract fun getExplicitApiModeCliOption ()Ljava/lang/String;
public abstract fun getGradlePluginVersion ()Ljava/lang/String; public abstract fun getGradlePluginVersion ()Ljava/lang/String;
@@ -163,30 +163,30 @@ public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinP
public abstract fun getModules ()Ljava/util/List; public abstract fun getModules ()Ljava/util/List;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResolvedBinaryDependency : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinBinaryDependency { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmResolvedBinaryDependency : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmBinaryDependency {
public abstract fun getBinaryFile ()Ljava/io/File; public abstract fun getBinaryFile ()Ljava/io/File;
public abstract fun getBinaryType ()Ljava/lang/String; public abstract fun getBinaryType ()Ljava/lang/String;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResourceDirectory : java/io/Serializable { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmResourceDirectory : java/io/Serializable {
public abstract fun getFile ()Ljava/io/File; public abstract fun getFile ()Ljava/io/File;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDirectory : java/io/Serializable { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmSourceDirectory : java/io/Serializable {
public abstract fun getFile ()Ljava/io/File; public abstract fun getFile ()Ljava/io/File;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinUnresolvedBinaryDependency : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinBinaryDependency { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmUnresolvedBinaryDependency : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmBinaryDependency {
public abstract fun getCause ()Ljava/lang/String; public abstract fun getCause ()Ljava/lang/String;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinVariant : java/io/Serializable, org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragment { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmVariant : java/io/Serializable, org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmFragment {
public abstract fun getCompilationOutputs ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinCompilationOutput; public abstract fun getCompilationOutputs ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmCompilationOutput;
public abstract fun getPlatform ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatform; public abstract fun getPlatform ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatform;
public abstract fun getVariantAttributes ()Ljava/util/Map; public abstract fun getVariantAttributes ()Ljava/util/Map;
} }
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinWasmPlatformDetails : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinPlatformDetails { public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmWasmPlatformDetails : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmPlatformDetails {
} }
public abstract interface annotation class org/jetbrains/kotlin/gradle/kpm/idea/InternalKotlinGradlePluginApi : java/lang/annotation/Annotation { public abstract interface annotation class org/jetbrains/kotlin/gradle/kpm/idea/InternalKotlinGradlePluginApi : java/lang/annotation/Annotation {
@@ -8,31 +8,32 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.tooling.core.Extras import org.jetbrains.kotlin.tooling.core.Extras
import java.io.Serializable import java.io.Serializable
sealed interface IdeaKotlinFragment : Serializable { sealed interface IdeaKpmFragment : Serializable {
val coordinates: IdeaKotlinFragmentCoordinates val coordinates: IdeaKpmFragmentCoordinates
val platforms: Set<IdeaKotlinPlatform> val platforms: Set<IdeaKpmPlatform>
val languageSettings: IdeaKotlinLanguageSettings? val languageSettings: IdeaKpmLanguageSettings?
val dependencies: List<IdeaKotlinDependency> val dependencies: List<IdeaKpmDependency>
val sourceDirectories: List<IdeaKotlinSourceDirectory> val sourceDirectories: List<IdeaKpmSourceDirectory>
val resourceDirectories: List<IdeaKotlinResourceDirectory> val resourceDirectories: List<IdeaKpmResourceDirectory>
val extras: Extras val extras: Extras
} }
val IdeaKotlinFragment.name get() = coordinates.fragmentName val IdeaKpmFragment.name get() = coordinates.fragmentName
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
data class IdeaKotlinFragmentImpl( data class IdeaKpmFragmentImpl(
override val coordinates: IdeaKotlinFragmentCoordinates, override val coordinates: IdeaKpmFragmentCoordinates,
override val platforms: Set<IdeaKotlinPlatform>, override val platforms: Set<IdeaKpmPlatform>,
override val languageSettings: IdeaKotlinLanguageSettings?, override val languageSettings: IdeaKpmLanguageSettings?,
override val dependencies: List<IdeaKotlinDependency>, override val dependencies: List<IdeaKpmDependency>,
override val sourceDirectories: List<IdeaKotlinSourceDirectory>, override val sourceDirectories: List<IdeaKpmSourceDirectory>,
override val resourceDirectories: List<IdeaKotlinResourceDirectory>, override val resourceDirectories: List<IdeaKpmResourceDirectory>,
override val extras: Extras override val extras: Extras
) : IdeaKotlinFragment { ) : IdeaKpmFragment {
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
companion object { companion object {
private const val serialVersionUID = 0L private const val serialVersionUID = 0L
} }
} }
@@ -7,20 +7,20 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import java.io.Serializable import java.io.Serializable
sealed interface IdeaKotlinModule : Serializable { sealed interface IdeaKpmModule : Serializable {
val coordinates: IdeaKotlinModuleCoordinates val coordinates: IdeaKpmModuleCoordinates
val fragments: List<IdeaKotlinFragment> val fragments: List<IdeaKpmFragment>
} }
val IdeaKotlinModule.name get() = coordinates.moduleName val IdeaKpmModule.name get() = coordinates.moduleName
val IdeaKotlinModule.moduleClassifier get() = coordinates.moduleClassifier val IdeaKpmModule.moduleClassifier get() = coordinates.moduleClassifier
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
data class IdeaKotlinModuleImpl( data class IdeaKpmModuleImpl(
override val coordinates: IdeaKotlinModuleCoordinates, override val coordinates: IdeaKpmModuleCoordinates,
override val fragments: List<IdeaKotlinFragment> override val fragments: List<IdeaKpmFragment>
) : IdeaKotlinModule { ) : IdeaKpmModule {
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
companion object { companion object {
@@ -9,12 +9,12 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import java.io.Serializable import java.io.Serializable
sealed interface IdeaKotlinPlatform : Serializable { sealed interface IdeaKpmPlatform : Serializable {
val platformType: String val platformType: String
val platformDetails: IdeaKotlinPlatformDetails? val platformDetails: IdeaKpmPlatformDetails?
companion object { companion object {
val unknown: IdeaKotlinPlatform = IdeaKotlinPlatformImpl("unknown", null) val unknown: IdeaKpmPlatform = IdeaKpmPlatformImpl("unknown", null)
const val wasmPlatformType = "wasm" const val wasmPlatformType = "wasm"
const val nativePlatformType = "native" const val nativePlatformType = "native"
@@ -23,77 +23,77 @@ sealed interface IdeaKotlinPlatform : Serializable {
} }
} }
sealed interface IdeaKotlinPlatformDetails : Serializable sealed interface IdeaKpmPlatformDetails : Serializable
sealed interface IdeaKotlinWasmPlatformDetails : IdeaKotlinPlatformDetails sealed interface IdeaKpmWasmPlatformDetails : IdeaKpmPlatformDetails
sealed interface IdeaKotlinNativePlatformDetails : IdeaKotlinPlatformDetails { sealed interface IdeaKpmNativePlatformDetails : IdeaKpmPlatformDetails {
val konanTarget: String val konanTarget: String
} }
sealed interface IdeaKotlinJvmPlatformDetails : IdeaKotlinPlatformDetails { sealed interface IdeaKpmJvmPlatformDetails : IdeaKpmPlatformDetails {
val jvmTarget: String val jvmTarget: String
} }
sealed interface IdeaKotlinJsPlatformDetails : IdeaKotlinPlatformDetails { sealed interface IdeaKpmJsPlatformDetails : IdeaKpmPlatformDetails {
val isIr: Boolean val isIr: Boolean
} }
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
fun IdeaKotlinPlatform.Companion.wasm(): IdeaKotlinPlatform { fun IdeaKpmPlatform.Companion.wasm(): IdeaKpmPlatform {
return IdeaKotlinPlatformImpl(wasmPlatformType, IdeaKotlinWasmPlatformDetailsImpl) return IdeaKpmPlatformImpl(wasmPlatformType, IdeaKpmWasmPlatformDetailsImpl)
} }
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
fun IdeaKotlinPlatform.Companion.native(konanTarget: String): IdeaKotlinPlatform { fun IdeaKpmPlatform.Companion.native(konanTarget: String): IdeaKpmPlatform {
return IdeaKotlinPlatformImpl(nativePlatformType, IdeaKotlinNativePlatformDetailsImpl(konanTarget)) return IdeaKpmPlatformImpl(nativePlatformType, IdeaKpmNativePlatformDetailsImpl(konanTarget))
} }
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
fun IdeaKotlinPlatform.Companion.jvm(jvmTarget: String): IdeaKotlinPlatform { fun IdeaKpmPlatform.Companion.jvm(jvmTarget: String): IdeaKpmPlatform {
return IdeaKotlinPlatformImpl(jvmPlatformType, IdeaKotlinJvmPlatformDetailsImpl(jvmTarget)) return IdeaKpmPlatformImpl(jvmPlatformType, IdeaKpmJvmPlatformDetailsImpl(jvmTarget))
} }
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
fun IdeaKotlinPlatform.Companion.js(isIr: Boolean): IdeaKotlinPlatform { fun IdeaKpmPlatform.Companion.js(isIr: Boolean): IdeaKpmPlatform {
return IdeaKotlinPlatformImpl(jsPlatformType, IdeaKotlinJsPlatformDetailsImpl(isIr)) return IdeaKpmPlatformImpl(jsPlatformType, IdeaKpmJsPlatformDetailsImpl(isIr))
} }
val IdeaKotlinPlatform.isWasm get() = platformType == IdeaKotlinPlatform.wasmPlatformType val IdeaKpmPlatform.isWasm get() = platformType == IdeaKpmPlatform.wasmPlatformType
val IdeaKotlinPlatform.isNative get() = platformType == IdeaKotlinPlatform.nativePlatformType val IdeaKpmPlatform.isNative get() = platformType == IdeaKpmPlatform.nativePlatformType
val IdeaKotlinPlatform.isJvm get() = platformType == IdeaKotlinPlatform.jvmPlatformType val IdeaKpmPlatform.isJvm get() = platformType == IdeaKpmPlatform.jvmPlatformType
val IdeaKotlinPlatform.isJs get() = platformType == IdeaKotlinPlatform.jsPlatformType val IdeaKpmPlatform.isJs get() = platformType == IdeaKpmPlatform.jsPlatformType
val IdeaKotlinPlatform.nativeOrNull get() = (platformDetails as? IdeaKotlinNativePlatformDetails) val IdeaKpmPlatform.nativeOrNull get() = (platformDetails as? IdeaKpmNativePlatformDetails)
val IdeaKotlinPlatform.jvmOrNull get() = (platformDetails as? IdeaKotlinJvmPlatformDetails) val IdeaKpmPlatform.jvmOrNull get() = (platformDetails as? IdeaKpmJvmPlatformDetails)
val IdeaKotlinPlatform.jsOrNull get() = (platformDetails as? IdeaKotlinJsPlatformDetails) val IdeaKpmPlatform.jsOrNull get() = (platformDetails as? IdeaKpmJsPlatformDetails)
private data class IdeaKotlinPlatformImpl( private data class IdeaKpmPlatformImpl(
override val platformType: String, override val platformDetails: IdeaKotlinPlatformDetails? override val platformType: String, override val platformDetails: IdeaKpmPlatformDetails?
) : IdeaKotlinPlatform { ) : IdeaKpmPlatform {
companion object { companion object {
const val serialVersionUID = 0L const val serialVersionUID = 0L
} }
} }
private object IdeaKotlinWasmPlatformDetailsImpl : IdeaKotlinWasmPlatformDetails { private object IdeaKpmWasmPlatformDetailsImpl : IdeaKpmWasmPlatformDetails {
private const val serialVersionUID = 0L private const val serialVersionUID = 0L
} }
private data class IdeaKotlinJvmPlatformDetailsImpl(override val jvmTarget: String) : IdeaKotlinJvmPlatformDetails { private data class IdeaKpmJvmPlatformDetailsImpl(override val jvmTarget: String) : IdeaKpmJvmPlatformDetails {
private companion object { private companion object {
const val serialVersionUID = 0L const val serialVersionUID = 0L
} }
} }
private data class IdeaKotlinNativePlatformDetailsImpl(override val konanTarget: String) : IdeaKotlinNativePlatformDetails { private data class IdeaKpmNativePlatformDetailsImpl(override val konanTarget: String) : IdeaKpmNativePlatformDetails {
private companion object { private companion object {
const val serialVersionUID = 0L const val serialVersionUID = 0L
} }
} }
private data class IdeaKotlinJsPlatformDetailsImpl(override val isIr: Boolean) : IdeaKotlinJsPlatformDetails { private data class IdeaKpmJsPlatformDetailsImpl(override val isIr: Boolean) : IdeaKpmJsPlatformDetails {
private companion object { private companion object {
const val serialVersionUID = 0L const val serialVersionUID = 0L
} }
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.gradle.kpm.idea package org.jetbrains.kotlin.gradle.kpm.idea
sealed interface IdeaKotlinBinaryCoordinates : IdeaKotlinDependencyCoordinates { sealed interface IdeaKpmBinaryCoordinates : IdeaKpmDependencyCoordinates {
val group: String val group: String
val module: String val module: String
val version: String val version: String
@@ -14,13 +14,13 @@ sealed interface IdeaKotlinBinaryCoordinates : IdeaKotlinDependencyCoordinates {
} }
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
data class IdeaKotlinBinaryCoordinatesImpl( data class IdeaKpmBinaryCoordinatesImpl(
override val group: String, override val group: String,
override val module: String, override val module: String,
override val version: String, override val version: String,
override val kotlinModuleName: String? = null, override val kotlinModuleName: String? = null,
override val kotlinFragmentName: String? = null override val kotlinFragmentName: String? = null
) : IdeaKotlinBinaryCoordinates { ) : IdeaKpmBinaryCoordinates {
override fun toString(): String { override fun toString(): String {
return "$group:$module:$version" + return "$group:$module:$version" +
@@ -8,16 +8,16 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import java.io.File import java.io.File
import java.io.Serializable import java.io.Serializable
sealed interface IdeaKotlinCompilationOutput : Serializable { sealed interface IdeaKpmCompilationOutput : Serializable {
val classesDirs: Set<File> val classesDirs: Set<File>
val resourcesDir: File? val resourcesDir: File?
} }
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
data class IdeaKotlinCompilationOutputImpl( data class IdeaKpmCompilationOutputImpl(
override val classesDirs: Set<File>, override val classesDirs: Set<File>,
override val resourcesDir: File? override val resourcesDir: File?
) : IdeaKotlinCompilationOutput { ) : IdeaKpmCompilationOutput {
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
companion object { companion object {
@@ -7,17 +7,17 @@
package org.jetbrains.kotlin.gradle.kpm.idea package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinDependency.Companion.CLASSPATH_BINARY_TYPE import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmDependency.Companion.CLASSPATH_BINARY_TYPE
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinDependency.Companion.DOCUMENTATION_BINARY_TYPE import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmDependency.Companion.DOCUMENTATION_BINARY_TYPE
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinDependency.Companion.SOURCES_BINARY_TYPE import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmDependency.Companion.SOURCES_BINARY_TYPE
import org.jetbrains.kotlin.tooling.core.Extras import org.jetbrains.kotlin.tooling.core.Extras
import org.jetbrains.kotlin.tooling.core.emptyExtras import org.jetbrains.kotlin.tooling.core.emptyExtras
import java.io.File import java.io.File
import java.io.Serializable import java.io.Serializable
import java.util.* import java.util.*
sealed interface IdeaKotlinDependency : Serializable { sealed interface IdeaKpmDependency : Serializable {
val coordinates: IdeaKotlinDependencyCoordinates? val coordinates: IdeaKpmDependencyCoordinates?
val extras: Extras val extras: Extras
companion object { companion object {
@@ -27,7 +27,7 @@ sealed interface IdeaKotlinDependency : Serializable {
} }
} }
sealed interface IdeaKotlinFragmentDependency : IdeaKotlinDependency { sealed interface IdeaKpmFragmentDependency : IdeaKpmDependency {
enum class Type : Serializable { enum class Type : Serializable {
Regular, Friend, Refines; Regular, Friend, Refines;
@@ -38,32 +38,32 @@ sealed interface IdeaKotlinFragmentDependency : IdeaKotlinDependency {
} }
val type: Type val type: Type
override val coordinates: IdeaKotlinFragmentCoordinates override val coordinates: IdeaKpmFragmentCoordinates
} }
sealed interface IdeaKotlinBinaryDependency : IdeaKotlinDependency { sealed interface IdeaKpmBinaryDependency : IdeaKpmDependency {
override val coordinates: IdeaKotlinBinaryCoordinates? override val coordinates: IdeaKpmBinaryCoordinates?
} }
sealed interface IdeaKotlinUnresolvedBinaryDependency : IdeaKotlinBinaryDependency { sealed interface IdeaKpmUnresolvedBinaryDependency : IdeaKpmBinaryDependency {
val cause: String? val cause: String?
} }
sealed interface IdeaKotlinResolvedBinaryDependency : IdeaKotlinBinaryDependency { sealed interface IdeaKpmResolvedBinaryDependency : IdeaKpmBinaryDependency {
val binaryType: String val binaryType: String
val binaryFile: File val binaryFile: File
} }
val IdeaKotlinResolvedBinaryDependency.isSourcesType get() = binaryType == SOURCES_BINARY_TYPE val IdeaKpmResolvedBinaryDependency.isSourcesType get() = binaryType == SOURCES_BINARY_TYPE
val IdeaKotlinResolvedBinaryDependency.isDocumentationType get() = binaryType == DOCUMENTATION_BINARY_TYPE val IdeaKpmResolvedBinaryDependency.isDocumentationType get() = binaryType == DOCUMENTATION_BINARY_TYPE
val IdeaKotlinResolvedBinaryDependency.isClasspathType get() = binaryType == CLASSPATH_BINARY_TYPE val IdeaKpmResolvedBinaryDependency.isClasspathType get() = binaryType == CLASSPATH_BINARY_TYPE
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
data class IdeaKotlinFragmentDependencyImpl( data class IdeaKpmFragmentDependencyImpl(
override val type: IdeaKotlinFragmentDependency.Type, override val type: IdeaKpmFragmentDependency.Type,
override val coordinates: IdeaKotlinFragmentCoordinates, override val coordinates: IdeaKpmFragmentCoordinates,
override val extras: Extras = emptyExtras() override val extras: Extras = emptyExtras()
) : IdeaKotlinFragmentDependency { ) : IdeaKpmFragmentDependency {
override fun toString(): String { override fun toString(): String {
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
@@ -77,12 +77,12 @@ data class IdeaKotlinFragmentDependencyImpl(
} }
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
data class IdeaKotlinResolvedBinaryDependencyImpl( data class IdeaKpmResolvedBinaryDependencyImpl(
override val coordinates: IdeaKotlinBinaryCoordinates?, override val coordinates: IdeaKpmBinaryCoordinates?,
override val binaryType: String, override val binaryType: String,
override val binaryFile: File, override val binaryFile: File,
override val extras: Extras = emptyExtras() override val extras: Extras = emptyExtras()
) : IdeaKotlinResolvedBinaryDependency { ) : IdeaKpmResolvedBinaryDependency {
override fun toString(): String { override fun toString(): String {
return "${binaryType.split(".").last()}://$coordinates/${binaryFile.name}" return "${binaryType.split(".").last()}://$coordinates/${binaryFile.name}"
@@ -95,11 +95,11 @@ data class IdeaKotlinResolvedBinaryDependencyImpl(
} }
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
data class IdeaKotlinUnresolvedBinaryDependencyImpl( data class IdeaKpmUnresolvedBinaryDependencyImpl(
override val cause: String?, override val cause: String?,
override val coordinates: IdeaKotlinBinaryCoordinates?, override val coordinates: IdeaKpmBinaryCoordinates?,
override val extras: Extras = emptyExtras() override val extras: Extras = emptyExtras()
) : IdeaKotlinUnresolvedBinaryDependency { ) : IdeaKpmUnresolvedBinaryDependency {
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
companion object { companion object {
@@ -7,4 +7,4 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import java.io.Serializable import java.io.Serializable
sealed interface IdeaKotlinDependencyCoordinates : Serializable sealed interface IdeaKpmDependencyCoordinates : Serializable
@@ -7,16 +7,16 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import java.io.Serializable import java.io.Serializable
sealed interface IdeaKotlinFragmentCoordinates : Serializable, IdeaKotlinDependencyCoordinates { sealed interface IdeaKpmFragmentCoordinates : Serializable, IdeaKpmDependencyCoordinates {
val module: IdeaKotlinModuleCoordinates val module: IdeaKpmModuleCoordinates
val fragmentName: String val fragmentName: String
} }
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
data class IdeaKotlinFragmentCoordinatesImpl( data class IdeaKpmFragmentCoordinatesImpl(
override val module: IdeaKotlinModuleCoordinates, override val module: IdeaKpmModuleCoordinates,
override val fragmentName: String override val fragmentName: String
) : IdeaKotlinFragmentCoordinates { ) : IdeaKpmFragmentCoordinates {
override fun toString(): String = path override fun toString(): String = path
@@ -26,5 +26,5 @@ data class IdeaKotlinFragmentCoordinatesImpl(
} }
} }
val IdeaKotlinFragmentCoordinates.path: String val IdeaKpmFragmentCoordinates.path: String
get() = "${module.path}/$fragmentName" get() = "${module.path}/$fragmentName"
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import java.io.File import java.io.File
import java.io.Serializable import java.io.Serializable
sealed interface IdeaKotlinLanguageSettings : Serializable { sealed interface IdeaKpmLanguageSettings : Serializable {
val languageVersion: String? val languageVersion: String?
val apiVersion: String? val apiVersion: String?
val isProgressiveMode: Boolean val isProgressiveMode: Boolean
@@ -20,7 +20,7 @@ sealed interface IdeaKotlinLanguageSettings : Serializable {
} }
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
data class IdeaKotlinLanguageSettingsImpl( data class IdeaKpmLanguageSettingsImpl(
override val languageVersion: String?, override val languageVersion: String?,
override val apiVersion: String?, override val apiVersion: String?,
override val isProgressiveMode: Boolean, override val isProgressiveMode: Boolean,
@@ -29,7 +29,7 @@ data class IdeaKotlinLanguageSettingsImpl(
override val compilerPluginArguments: List<String>, override val compilerPluginArguments: List<String>,
override val compilerPluginClasspath: List<File>, override val compilerPluginClasspath: List<File>,
override val freeCompilerArgs: List<String> override val freeCompilerArgs: List<String>
) : IdeaKotlinLanguageSettings { ) : IdeaKpmLanguageSettings {
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
companion object { companion object {
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import java.io.Serializable import java.io.Serializable
sealed interface IdeaKotlinModuleCoordinates : Serializable { sealed interface IdeaKpmModuleCoordinates : Serializable {
val buildId: String val buildId: String
val projectPath: String val projectPath: String
val projectName: String val projectName: String
@@ -15,17 +15,17 @@ sealed interface IdeaKotlinModuleCoordinates : Serializable {
val moduleClassifier: String? val moduleClassifier: String?
} }
val IdeaKotlinModuleCoordinates.path: String val IdeaKpmModuleCoordinates.path: String
get() = "${buildId.takeIf { it != ":" }.orEmpty()}$projectPath/$moduleName" get() = "${buildId.takeIf { it != ":" }.orEmpty()}$projectPath/$moduleName"
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
data class IdeaKotlinModuleCoordinatesImpl( data class IdeaKpmModuleCoordinatesImpl(
override val buildId: String, override val buildId: String,
override val projectPath: String, override val projectPath: String,
override val projectName: String, override val projectName: String,
override val moduleName: String, override val moduleName: String,
override val moduleClassifier: String? override val moduleClassifier: String?
) : IdeaKotlinModuleCoordinates { ) : IdeaKpmModuleCoordinates {
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
companion object { companion object {
@@ -8,22 +8,22 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import java.io.File import java.io.File
import java.io.Serializable import java.io.Serializable
sealed interface IdeaKotlinProjectModel : Serializable { sealed interface IdeaKpmProject : Serializable {
val gradlePluginVersion: String val gradlePluginVersion: String
val coreLibrariesVersion: String val coreLibrariesVersion: String
val explicitApiModeCliOption: String? val explicitApiModeCliOption: String?
val kotlinNativeHome: File val kotlinNativeHome: File
val modules: List<IdeaKotlinModule> val modules: List<IdeaKpmModule>
} }
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
data class IdeaKotlinProjectModelImpl( data class IdeaKpmProjectImpl(
override val gradlePluginVersion: String, override val gradlePluginVersion: String,
override val coreLibrariesVersion: String, override val coreLibrariesVersion: String,
override val explicitApiModeCliOption: String?, override val explicitApiModeCliOption: String?,
override val kotlinNativeHome: File, override val kotlinNativeHome: File,
override val modules: List<IdeaKotlinModule> override val modules: List<IdeaKpmModule>
) : IdeaKotlinProjectModel { ) : IdeaKpmProject {
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
companion object { companion object {
@@ -8,14 +8,14 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import java.io.File import java.io.File
import java.io.Serializable import java.io.Serializable
sealed interface IdeaKotlinResourceDirectory : Serializable { sealed interface IdeaKpmResourceDirectory : Serializable {
val file: File val file: File
} }
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
data class IdeaKotlinResourceDirectoryImpl( data class IdeaKpmResourceDirectoryImpl(
override val file: File override val file: File
) : IdeaKotlinResourceDirectory { ) : IdeaKpmResourceDirectory {
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
companion object { companion object {
@@ -8,14 +8,14 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import java.io.File import java.io.File
import java.io.Serializable import java.io.Serializable
sealed interface IdeaKotlinSourceDirectory : Serializable { sealed interface IdeaKpmSourceDirectory : Serializable {
val file: File val file: File
} }
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
data class IdeaKotlinSourceDirectoryImpl( data class IdeaKpmSourceDirectoryImpl(
override val file: File, override val file: File,
) : IdeaKotlinSourceDirectory { ) : IdeaKpmSourceDirectory {
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
companion object { companion object {
@@ -7,19 +7,19 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import java.io.Serializable import java.io.Serializable
sealed interface IdeaKotlinVariant : IdeaKotlinFragment, Serializable { sealed interface IdeaKpmVariant : IdeaKpmFragment, Serializable {
val platform: IdeaKotlinPlatform val platform: IdeaKpmPlatform
val variantAttributes: Map<String, String> val variantAttributes: Map<String, String>
val compilationOutputs: IdeaKotlinCompilationOutput val compilationOutputs: IdeaKpmCompilationOutput
} }
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
data class IdeaKotlinVariantImpl( data class IdeaKpmVariantImpl(
internal val fragment: IdeaKotlinFragment, internal val fragment: IdeaKpmFragment,
override val platform: IdeaKotlinPlatform, override val platform: IdeaKpmPlatform,
override val variantAttributes: Map<String, String>, override val variantAttributes: Map<String, String>,
override val compilationOutputs: IdeaKotlinCompilationOutput, override val compilationOutputs: IdeaKpmCompilationOutput,
) : IdeaKotlinVariant, IdeaKotlinFragment by fragment { ) : IdeaKpmVariant, IdeaKpmFragment by fragment {
@InternalKotlinGradlePluginApi @InternalKotlinGradlePluginApi
companion object { companion object {
@@ -4,7 +4,7 @@ import org.gradle.api.internal.project.ProjectInternal
import org.gradle.configurationcache.extensions.serviceOf import org.gradle.configurationcache.extensions.serviceOf
import org.gradle.testfixtures.ProjectBuilder import org.gradle.testfixtures.ProjectBuilder
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinProjectModel import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmProject
import org.jetbrains.kotlin.gradle.plugin.KotlinPm20PluginWrapper import org.jetbrains.kotlin.gradle.plugin.KotlinPm20PluginWrapper
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
@@ -13,9 +13,9 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
fun Project.buildIdeaKotlinProjectModel(): IdeaKotlinProjectModel { fun Project.buildIdeaKpmProjectModel(): IdeaKpmProject {
return serviceOf<ToolingModelBuilderRegistry>().getBuilder(IdeaKotlinProjectModel::class.java.name) return serviceOf<ToolingModelBuilderRegistry>().getBuilder(IdeaKpmProject::class.java.name)
.buildAll(IdeaKotlinProjectModel::class.java.name, this) as IdeaKotlinProjectModel .buildAll(IdeaKpmProject::class.java.name, this) as IdeaKpmProject
} }
fun createKpmProject(): Pair<ProjectInternal, KotlinPm20ProjectExtension> { fun createKpmProject(): Pair<ProjectInternal, KotlinPm20ProjectExtension> {
@@ -7,7 +7,7 @@
package org.jetbrains.kotlin.gradle.kpm.idea package org.jetbrains.kotlin.gradle.kpm.idea
import buildIdeaKotlinProjectModel import buildIdeaKpmProjectModel
import createKpmProject import createKpmProject
import createProxyInstance import createProxyInstance
import org.gradle.api.internal.project.ProjectInternal import org.gradle.api.internal.project.ProjectInternal
@@ -57,12 +57,12 @@ class BackwardsCompatibilityDeserializationTest {
} }
project.evaluate() project.evaluate()
val model = project.buildIdeaKotlinProjectModel() val model = project.buildIdeaKpmProjectModel()
val deserializedModel = deserializeModelWithBackwardsCompatibleClasses(model) val deserializedModel = deserializeModelWithBackwardsCompatibleClasses(model)
/* Use proxy instances to assert the deserialized model */ /* Use proxy instances to assert the deserialized model */
run { run {
val deserializedModelProxy = createProxyInstance<IdeaKotlinProjectModel>(deserializedModel) val deserializedModelProxy = createProxyInstance<IdeaKpmProject>(deserializedModel)
val deserializedMainModuleProxy = deserializedModelProxy.modules.firstOrNull { it.coordinates.moduleClassifier == null } val deserializedMainModuleProxy = deserializedModelProxy.modules.firstOrNull { it.coordinates.moduleClassifier == null }
?: fail("Missing main module") ?: fail("Missing main module")
@@ -94,9 +94,9 @@ class BackwardsCompatibilityDeserializationTest {
kotlinExtension.main.common.extras[retainedModelKey] = RetainedModel(2411) kotlinExtension.main.common.extras[retainedModelKey] = RetainedModel(2411)
kotlinExtension.main.common.extras[unretainedModelKey] = UnretainedModel(510) kotlinExtension.main.common.extras[unretainedModelKey] = UnretainedModel(510)
val model = project.buildIdeaKotlinProjectModel() val model = project.buildIdeaKpmProjectModel()
val deserializedModel = deserializeModelWithBackwardsCompatibleClasses(model) val deserializedModel = deserializeModelWithBackwardsCompatibleClasses(model)
val deserializedModelProxy = createProxyInstance<IdeaKotlinProjectModel>(deserializedModel) val deserializedModelProxy = createProxyInstance<IdeaKpmProject>(deserializedModel)
val deserializedMainModuleProxy = deserializedModelProxy.modules.find { it.coordinates.moduleClassifier == null } val deserializedMainModuleProxy = deserializedModelProxy.modules.find { it.coordinates.moduleClassifier == null }
?: fail("Missing main module") ?: fail("Missing main module")
@@ -106,7 +106,7 @@ class BackwardsCompatibilityDeserializationTest {
run { run {
val deserializedCommonFragment = unwrapProxyInstance(deserializedCommonFragmentProxy) val deserializedCommonFragment = unwrapProxyInstance(deserializedCommonFragmentProxy)
val extras = deserializedCommonFragment.serialize().deserialize<IdeaKotlinFragment>().extras val extras = deserializedCommonFragment.serialize().deserialize<IdeaKpmFragment>().extras
assertEquals(1, extras.keys.size) assertEquals(1, extras.keys.size)
assertEquals(RetainedModel(2411), extras[retainedModelKey]) assertEquals(RetainedModel(2411), extras[retainedModelKey])
assertNull(extras[unretainedModelKey]) assertNull(extras[unretainedModelKey])
@@ -128,7 +128,7 @@ private fun getClasspathForBackwardsCompatibilityTest(): List<File> {
.flatMap { file -> if (file.isDirectory) file.listFiles().orEmpty().toList() else listOf(file) } .flatMap { file -> if (file.isDirectory) file.listFiles().orEmpty().toList() else listOf(file) }
} }
private fun deserializeModelWithBackwardsCompatibleClasses(model: IdeaKotlinProjectModel): Any { private fun deserializeModelWithBackwardsCompatibleClasses(model: IdeaKpmProject): Any {
val backwardsCompatibilityClassLoader = getClassLoaderForBackwardsCompatibilityTest() val backwardsCompatibilityClassLoader = getClassLoaderForBackwardsCompatibilityTest()
val backwardsCompatibilityModel = model.serialize().deserialize(backwardsCompatibilityClassLoader) val backwardsCompatibilityModel = model.serialize().deserialize(backwardsCompatibilityClassLoader)
@@ -21,7 +21,7 @@ import kotlin.test.*
@OptIn(ExperimentalStdlibApi::class) @OptIn(ExperimentalStdlibApi::class)
@RunWith(Parameterized::class) @RunWith(Parameterized::class)
class IdeaKotlinProjectModelObjectGraphTest(private val node: KClass<*>, @Suppress("unused_parameter") clazzName: String) { class IdeaKpmProjectObjectGraphTest(private val node: KClass<*>, @Suppress("unused_parameter") clazzName: String) {
@Test @Test
fun `test - node implements Serializable`() { fun `test - node implements Serializable`() {
@@ -98,7 +98,7 @@ class IdeaKotlinProjectModelObjectGraphTest(private val node: KClass<*>, @Suppre
@Parameterized.Parameters(name = "{1}") @Parameterized.Parameters(name = "{1}")
fun findNodes(): List<Array<Any>> { fun findNodes(): List<Array<Any>> {
val classes = mutableSetOf<KClass<*>>() val classes = mutableSetOf<KClass<*>>()
val resolveQueue = ArrayDeque<KClass<*>>(listOf(IdeaKotlinProjectModel::class)) val resolveQueue = ArrayDeque<KClass<*>>(listOf(IdeaKpmProject::class))
while (resolveQueue.isNotEmpty()) { while (resolveQueue.isNotEmpty()) {
val next = resolveQueue.removeFirst() val next = resolveQueue.removeFirst()
@@ -5,63 +5,63 @@
package org.jetbrains.kotlin.gradle.kpm.idea.testFixtures package org.jetbrains.kotlin.gradle.kpm.idea.testFixtures
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinBinaryCoordinates import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmBinaryCoordinates
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinBinaryDependency import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmBinaryDependency
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinResolvedBinaryDependency import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmResolvedBinaryDependency
import java.io.File import java.io.File
fun buildIdeaKotlinBinaryDependencyMatchers(notation: Any?): List<IdeaKotlinBinaryDependencyMatcher> { fun buildIdeaKpmBinaryDependencyMatchers(notation: Any?): List<IdeaKpmBinaryDependencyMatcher> {
return when (notation) { return when (notation) {
null -> emptyList() null -> emptyList()
is IdeaKotlinBinaryDependencyMatcher -> listOf(notation) is IdeaKpmBinaryDependencyMatcher -> listOf(notation)
is String -> listOf(IdeaKotlinBinaryDependencyMatcher.Coordinates(parseIdeaKotlinBinaryCoordinates(notation))) is String -> listOf(IdeaKpmBinaryDependencyMatcher.Coordinates(parseIdeaKpmBinaryCoordinates(notation)))
is Regex -> listOf(IdeaKotlinBinaryDependencyMatcher.CoordinatesRegex(notation)) is Regex -> listOf(IdeaKpmBinaryDependencyMatcher.CoordinatesRegex(notation))
is File -> listOf(IdeaKotlinBinaryDependencyMatcher.BinaryFile(notation)) is File -> listOf(IdeaKpmBinaryDependencyMatcher.BinaryFile(notation))
is Iterable<*> -> notation.flatMap { child -> buildIdeaKotlinBinaryDependencyMatchers(child) } is Iterable<*> -> notation.flatMap { child -> buildIdeaKpmBinaryDependencyMatchers(child) }
else -> error("Can't build ${IdeaKotlinBinaryDependencyMatcher::class.simpleName} from $notation") else -> error("Can't build ${IdeaKpmBinaryDependencyMatcher::class.simpleName} from $notation")
} }
} }
interface IdeaKotlinBinaryDependencyMatcher : IdeaKotlinDependencyMatcher<IdeaKotlinBinaryDependency>{ interface IdeaKpmBinaryDependencyMatcher : IdeaKpmDependencyMatcher<IdeaKpmBinaryDependency>{
class Coordinates( class Coordinates(
private val coordinates: IdeaKotlinBinaryCoordinates private val coordinates: IdeaKpmBinaryCoordinates
) : IdeaKotlinBinaryDependencyMatcher { ) : IdeaKpmBinaryDependencyMatcher {
override val description: String = coordinates.toString() override val description: String = coordinates.toString()
override fun matches(dependency: IdeaKotlinBinaryDependency): Boolean { override fun matches(dependency: IdeaKpmBinaryDependency): Boolean {
return coordinates == dependency.coordinates return coordinates == dependency.coordinates
} }
} }
class CoordinatesRegex( class CoordinatesRegex(
private val regex: Regex private val regex: Regex
) : IdeaKotlinBinaryDependencyMatcher { ) : IdeaKpmBinaryDependencyMatcher {
override val description: String = regex.pattern override val description: String = regex.pattern
override fun matches(dependency: IdeaKotlinBinaryDependency): Boolean { override fun matches(dependency: IdeaKpmBinaryDependency): Boolean {
return regex.matches(dependency.coordinates.toString()) return regex.matches(dependency.coordinates.toString())
} }
} }
class BinaryFile( class BinaryFile(
private val binaryFile: File private val binaryFile: File
) : IdeaKotlinBinaryDependencyMatcher { ) : IdeaKpmBinaryDependencyMatcher {
override val description: String = binaryFile.path override val description: String = binaryFile.path
override fun matches(dependency: IdeaKotlinBinaryDependency): Boolean { override fun matches(dependency: IdeaKpmBinaryDependency): Boolean {
return dependency is IdeaKotlinResolvedBinaryDependency && dependency.binaryFile == binaryFile return dependency is IdeaKpmResolvedBinaryDependency && dependency.binaryFile == binaryFile
} }
} }
class InDirectory( class InDirectory(
private val parentFile: File private val parentFile: File
) : IdeaKotlinBinaryDependencyMatcher { ) : IdeaKpmBinaryDependencyMatcher {
constructor(parentFilePath: String) : this(File(parentFilePath)) constructor(parentFilePath: String) : this(File(parentFilePath))
override val description: String = "$parentFile/**" override val description: String = "$parentFile/**"
override fun matches(dependency: IdeaKotlinBinaryDependency): Boolean { override fun matches(dependency: IdeaKpmBinaryDependency): Boolean {
return dependency is IdeaKotlinResolvedBinaryDependency && return dependency is IdeaKpmResolvedBinaryDependency &&
dependency.binaryFile.absoluteFile.normalize().canonicalPath.startsWith( dependency.binaryFile.absoluteFile.normalize().canonicalPath.startsWith(
parentFile.absoluteFile.normalize().canonicalPath parentFile.absoluteFile.normalize().canonicalPath
) )
@@ -1,30 +1,30 @@
package org.jetbrains.kotlin.gradle.kpm.idea.testFixtures package org.jetbrains.kotlin.gradle.kpm.idea.testFixtures
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinFragmentDependency import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmFragmentDependency
fun buildIdeaKotlinFragmentDependencyMatchers(notation: Any?): List<IdeaKotlinFragmentDependencyMatcher> { fun buildIdeaKpmFragmentDependencyMatchers(notation: Any?): List<IdeaKpmFragmentDependencyMatcher> {
return when (notation) { return when (notation) {
null -> emptyList() null -> emptyList()
is Iterable<*> -> notation.flatMap { buildIdeaKotlinFragmentDependencyMatchers(it) } is Iterable<*> -> notation.flatMap { buildIdeaKpmFragmentDependencyMatchers(it) }
is String -> listOf(IdeaKotlinFragmentDependencyMatcher.DependencyLiteral(notation)) is String -> listOf(IdeaKpmFragmentDependencyMatcher.DependencyLiteral(notation))
is Regex -> listOf(IdeaKotlinFragmentDependencyMatcher.DependencyRegex(notation)) is Regex -> listOf(IdeaKpmFragmentDependencyMatcher.DependencyRegex(notation))
else -> error("Can't build ${IdeaKotlinFragmentDependencyMatcher::class.simpleName} from $notation") else -> error("Can't build ${IdeaKpmFragmentDependencyMatcher::class.simpleName} from $notation")
} }
} }
interface IdeaKotlinFragmentDependencyMatcher : IdeaKotlinDependencyMatcher<IdeaKotlinFragmentDependency> { interface IdeaKpmFragmentDependencyMatcher : IdeaKpmDependencyMatcher<IdeaKpmFragmentDependency> {
class DependencyLiteral(private val dependencyLiteral: String) : IdeaKotlinFragmentDependencyMatcher { class DependencyLiteral(private val dependencyLiteral: String) : IdeaKpmFragmentDependencyMatcher {
override val description: String = dependencyLiteral override val description: String = dependencyLiteral
override fun matches(dependency: IdeaKotlinFragmentDependency): Boolean { override fun matches(dependency: IdeaKpmFragmentDependency): Boolean {
return this.dependencyLiteral == dependency.toString() return this.dependencyLiteral == dependency.toString()
} }
} }
class DependencyRegex(private val dependencyRegex: Regex) : IdeaKotlinFragmentDependencyMatcher { class DependencyRegex(private val dependencyRegex: Regex) : IdeaKpmFragmentDependencyMatcher {
override val description: String = dependencyRegex.pattern override val description: String = dependencyRegex.pattern
override fun matches(dependency: IdeaKotlinFragmentDependency): Boolean { override fun matches(dependency: IdeaKpmFragmentDependency): Boolean {
return dependencyRegex.matches(dependency.coordinates.toString()) return dependencyRegex.matches(dependency.coordinates.toString())
} }
} }
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.gradle.kpm.idea.testFixtures package org.jetbrains.kotlin.gradle.kpm.idea.testFixtures
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinDependency import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmDependency
interface IdeaKotlinDependencyMatcher<in T : IdeaKotlinDependency> { interface IdeaKpmDependencyMatcher<in T : IdeaKpmDependency> {
val description: String val description: String
fun matches(dependency: T): Boolean fun matches(dependency: T): Boolean
} }
@@ -10,30 +10,30 @@ package org.jetbrains.kotlin.gradle.kpm.idea.testFixtures
import org.jetbrains.kotlin.gradle.kpm.idea.* import org.jetbrains.kotlin.gradle.kpm.idea.*
import kotlin.test.fail import kotlin.test.fail
fun IdeaKotlinProjectModel.assertIsNotEmpty(): IdeaKotlinProjectModel = apply { fun IdeaKpmProject.assertIsNotEmpty(): IdeaKpmProject = apply {
if (this.modules.isEmpty()) fail("Expected at least one module in model") if (this.modules.isEmpty()) fail("Expected at least one module in model")
} }
fun IdeaKotlinProjectModel.assertContainsModule(name: String): IdeaKotlinModule { fun IdeaKpmProject.assertContainsModule(name: String): IdeaKpmModule {
return modules.find { it.name == name } return modules.find { it.name == name }
?: fail("Missing module with name '$name'. Found: ${modules.map { it.name }}") ?: fail("Missing module with name '$name'. Found: ${modules.map { it.name }}")
} }
fun IdeaKotlinModule.assertContainsFragment(name: String): IdeaKotlinFragment { fun IdeaKpmModule.assertContainsFragment(name: String): IdeaKpmFragment {
return fragments.find { it.name == name } return fragments.find { it.name == name }
?: fail("Missing fragment with name '$name'. Found: ${fragments.map { it.name }}") ?: fail("Missing fragment with name '$name'. Found: ${fragments.map { it.name }}")
} }
fun IdeaKotlinFragment.assertResolvedBinaryDependencies( fun IdeaKpmFragment.assertResolvedBinaryDependencies(
binaryType: String, binaryType: String,
matchers: Set<IdeaKotlinBinaryDependencyMatcher> matchers: Set<IdeaKpmBinaryDependencyMatcher>
): Set<IdeaKotlinResolvedBinaryDependency> { ): Set<IdeaKpmResolvedBinaryDependency> {
val resolvedBinaryDependencies = dependencies val resolvedBinaryDependencies = dependencies
.mapNotNull { dependency -> .mapNotNull { dependency ->
when (dependency) { when (dependency) {
is IdeaKotlinResolvedBinaryDependencyImpl -> dependency is IdeaKpmResolvedBinaryDependencyImpl -> dependency
is IdeaKotlinUnresolvedBinaryDependencyImpl -> fail("Unexpected unresolved dependency: $dependency") is IdeaKpmUnresolvedBinaryDependencyImpl -> fail("Unexpected unresolved dependency: $dependency")
is IdeaKotlinFragmentDependencyImpl -> null is IdeaKpmFragmentDependencyImpl -> null
} }
} }
.filter { it.binaryType == binaryType } .filter { it.binaryType == binaryType }
@@ -83,16 +83,16 @@ fun IdeaKotlinFragment.assertResolvedBinaryDependencies(
} }
@JvmName("assertResolvedBinaryDependenciesByAnyMatcher") @JvmName("assertResolvedBinaryDependenciesByAnyMatcher")
fun IdeaKotlinFragment.assertResolvedBinaryDependencies( fun IdeaKpmFragment.assertResolvedBinaryDependencies(
binaryType: String, matchers: Set<Any?>, binaryType: String, matchers: Set<Any?>,
) = assertResolvedBinaryDependencies(binaryType, matchers.flatMap { buildIdeaKotlinBinaryDependencyMatchers(it) }.toSet()) ) = assertResolvedBinaryDependencies(binaryType, matchers.flatMap { buildIdeaKpmBinaryDependencyMatchers(it) }.toSet())
fun IdeaKotlinFragment.assertResolvedBinaryDependencies( fun IdeaKpmFragment.assertResolvedBinaryDependencies(
binaryType: String, vararg matchers: Any? binaryType: String, vararg matchers: Any?
) = assertResolvedBinaryDependencies(binaryType, matchers.toSet()) ) = assertResolvedBinaryDependencies(binaryType, matchers.toSet())
fun IdeaKotlinFragment.assertFragmentDependencies(matchers: Set<IdeaKotlinFragmentDependencyMatcher>): Set<IdeaKotlinFragmentDependency> { fun IdeaKpmFragment.assertFragmentDependencies(matchers: Set<IdeaKpmFragmentDependencyMatcher>): Set<IdeaKpmFragmentDependency> {
val sourceDependencies = dependencies.filterIsInstance<IdeaKotlinFragmentDependency>().toSet() val sourceDependencies = dependencies.filterIsInstance<IdeaKpmFragmentDependency>().toSet()
val unexpectedDependencies = sourceDependencies val unexpectedDependencies = sourceDependencies
.filter { dependency -> matchers.none { matcher -> matcher.matches(dependency) } } .filter { dependency -> matchers.none { matcher -> matcher.matches(dependency) } }
@@ -133,8 +133,8 @@ fun IdeaKotlinFragment.assertFragmentDependencies(matchers: Set<IdeaKotlinFragme
} }
@JvmName("assertSourceDependenciesByAnyMatcher") @JvmName("assertSourceDependenciesByAnyMatcher")
fun IdeaKotlinFragment.assertFragmentDependencies(matchers: Set<Any?>): Set<IdeaKotlinFragmentDependency> = fun IdeaKpmFragment.assertFragmentDependencies(matchers: Set<Any?>): Set<IdeaKpmFragmentDependency> =
assertFragmentDependencies(matchers.flatMap { buildIdeaKotlinFragmentDependencyMatchers(it) }.toSet()) assertFragmentDependencies(matchers.flatMap { buildIdeaKpmFragmentDependencyMatchers(it) }.toSet())
fun IdeaKotlinFragment.assertFragmentDependencies(vararg matchers: Any?) = fun IdeaKpmFragment.assertFragmentDependencies(vararg matchers: Any?) =
assertFragmentDependencies(matchers.toSet()) assertFragmentDependencies(matchers.toSet())
@@ -5,30 +5,30 @@
package org.jetbrains.kotlin.gradle.kpm.idea.testFixtures package org.jetbrains.kotlin.gradle.kpm.idea.testFixtures
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinBinaryCoordinates import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmBinaryCoordinates
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinBinaryCoordinatesImpl import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmBinaryCoordinatesImpl
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinBinaryDependency import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmBinaryDependency
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinFragment import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmFragment
fun parseIdeaKotlinBinaryCoordinates(coordinates: String): IdeaKotlinBinaryCoordinates { fun parseIdeaKpmBinaryCoordinates(coordinates: String): IdeaKpmBinaryCoordinates {
val parts = coordinates.split(":") val parts = coordinates.split(":")
if (parts.size == 3) { if (parts.size == 3) {
return IdeaKotlinBinaryCoordinatesImpl(parts[0], parts[1], parts[2]) return IdeaKpmBinaryCoordinatesImpl(parts[0], parts[1], parts[2])
} }
if (parts.size == 5) { if (parts.size == 5) {
return IdeaKotlinBinaryCoordinatesImpl(parts[0], parts[1], parts[2], parts[3], parts[4]) return IdeaKpmBinaryCoordinatesImpl(parts[0], parts[1], parts[2], parts[3], parts[4])
} }
throw IllegalArgumentException("Cannot parse $coordinates into ${IdeaKotlinBinaryCoordinates::class.java.simpleName}") throw IllegalArgumentException("Cannot parse $coordinates into ${IdeaKpmBinaryCoordinates::class.java.simpleName}")
} }
fun Iterable<IdeaKotlinBinaryCoordinates>.parsableString() = fun Iterable<IdeaKpmBinaryCoordinates>.parsableString() =
joinToString("," + System.lineSeparator(), "", "") { "\"$it\"" } joinToString("," + System.lineSeparator(), "", "") { "\"$it\"" }
@Suppress("unused") // Debugging API @Suppress("unused") // Debugging API
fun IdeaKotlinFragment.parsableDependencyCoordinatesString(): String { fun IdeaKpmFragment.parsableDependencyCoordinatesString(): String {
return dependencies.filterIsInstance<IdeaKotlinBinaryDependency>() return dependencies.filterIsInstance<IdeaKpmBinaryDependency>()
.mapNotNull { it.coordinates }.toSet() .mapNotNull { it.coordinates }.toSet()
.parsableString() .parsableString()
} }
@@ -9,9 +9,9 @@ import com.android.build.gradle.internal.publishing.AndroidArtifacts
import org.gradle.api.attributes.Usage import org.gradle.api.attributes.Usage
import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi
import org.jetbrains.kotlin.gradle.kpm.external.project import org.jetbrains.kotlin.gradle.kpm.external.project
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinDependency.Companion.CLASSPATH_BINARY_TYPE import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmDependency.Companion.CLASSPATH_BINARY_TYPE
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinProjectModelBuilder.FragmentConstraint import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinProjectModelBuilder.FragmentConstraint
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinResolvedBinaryDependencyImpl import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmResolvedBinaryDependencyImpl
import org.jetbrains.kotlin.gradle.kpm.idea.InternalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.kpm.idea.InternalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.kpm.idea.configureIdeaKotlinSpecialPlatformDependencyResolution import org.jetbrains.kotlin.gradle.kpm.idea.configureIdeaKotlinSpecialPlatformDependencyResolution
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
@@ -79,7 +79,7 @@ internal fun KotlinPm20ProjectExtension.setupIdeaKotlinFragmentDependencyResolve
additionalDependencies { additionalDependencies {
project.getAndroidRuntimeJars().map { androidRuntimeJar -> project.getAndroidRuntimeJars().map { androidRuntimeJar ->
IdeaKotlinResolvedBinaryDependencyImpl( IdeaKpmResolvedBinaryDependencyImpl(
binaryType = CLASSPATH_BINARY_TYPE, binaryType = CLASSPATH_BINARY_TYPE,
binaryFile = androidRuntimeJar, binaryFile = androidRuntimeJar,
coordinates = null coordinates = null
@@ -76,7 +76,7 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
} }
@ExternalVariantPlatformDependencyResolutionDsl @ExternalVariantPlatformDependencyResolutionDsl
fun additionalDependencies(dependencyProvider: (GradleKpmFragment) -> List<IdeaKotlinDependency>) { fun additionalDependencies(dependencyProvider: (GradleKpmFragment) -> List<IdeaKpmDependency>) {
this.additionalDependencies += IdeaKotlinDependencyResolver { fragment -> dependencyProvider(fragment).toSet() } this.additionalDependencies += IdeaKotlinDependencyResolver { fragment -> dependencyProvider(fragment).toSet() }
} }
@@ -7,8 +7,8 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationOutput import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationOutput
internal fun IdeaKotlinCompilationOutput(compilation: KotlinCompilationOutput): IdeaKotlinCompilationOutput { internal fun IdeaKotlinCompilationOutput(compilation: KotlinCompilationOutput): IdeaKpmCompilationOutput {
return IdeaKotlinCompilationOutputImpl( return IdeaKpmCompilationOutputImpl(
classesDirs = compilation.classesDirs.toSet(), classesDirs = compilation.classesDirs.toSet(),
resourcesDir = compilation.resourcesDir resourcesDir = compilation.resourcesDir
) )
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
* that the dependency resolution result is final. * that the dependency resolution result is final.
*/ */
fun interface IdeaKotlinDependencyEffect { fun interface IdeaKotlinDependencyEffect {
operator fun invoke(fragment: GradleKpmFragment, dependencies: Set<IdeaKotlinDependency>) operator fun invoke(fragment: GradleKpmFragment, dependencies: Set<IdeaKpmDependency>)
} }
fun IdeaKotlinDependencyResolver.withEffect(effect: IdeaKotlinDependencyEffect) = IdeaKotlinDependencyResolver { fragment -> fun IdeaKotlinDependencyResolver.withEffect(effect: IdeaKotlinDependencyEffect) = IdeaKotlinDependencyResolver { fragment ->
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.path
internal object IdeaKotlinDependencyLogger : IdeaKotlinDependencyEffect { internal object IdeaKotlinDependencyLogger : IdeaKotlinDependencyEffect {
override fun invoke( override fun invoke(
fragment: GradleKpmFragment, dependencies: Set<IdeaKotlinDependency> fragment: GradleKpmFragment, dependencies: Set<IdeaKpmDependency>
) { ) {
val fragmentPathRegex = fragment.project.properties["idea.kotlin.log.dependencies"]?.toString() ?: return val fragmentPathRegex = fragment.project.properties["idea.kotlin.log.dependencies"]?.toString() ?: return
if (!fragment.path.matches(Regex(fragmentPathRegex))) return if (!fragment.path.matches(Regex(fragmentPathRegex))) return
@@ -8,10 +8,10 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
fun interface IdeaKotlinDependencyResolver { fun interface IdeaKotlinDependencyResolver {
fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency>
object Empty : IdeaKotlinDependencyResolver { object Empty : IdeaKotlinDependencyResolver {
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> = emptySet() override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> = emptySet()
} }
} }
@@ -48,7 +48,7 @@ operator fun IdeaKotlinDependencyResolver.plus(
private class CompositeIdeaKotlinDependencyResolver( private class CompositeIdeaKotlinDependencyResolver(
val children: List<IdeaKotlinDependencyResolver> val children: List<IdeaKotlinDependencyResolver>
) : IdeaKotlinDependencyResolver { ) : IdeaKotlinDependencyResolver {
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> { override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> {
return children.flatMap { child -> child.resolve(fragment) }.toSet() return children.flatMap { child -> child.resolve(fragment) }.toSet()
} }
} }
@@ -17,8 +17,8 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
*/ */
fun interface IdeaKotlinDependencyTransformer { fun interface IdeaKotlinDependencyTransformer {
fun transform( fun transform(
fragment: GradleKpmFragment, dependencies: Set<IdeaKotlinDependency> fragment: GradleKpmFragment, dependencies: Set<IdeaKpmDependency>
): Set<IdeaKotlinDependency> ): Set<IdeaKpmDependency>
} }
fun IdeaKotlinDependencyResolver.withTransformer(transformer: IdeaKotlinDependencyTransformer) = IdeaKotlinDependencyResolver { fragment -> fun IdeaKotlinDependencyResolver.withTransformer(transformer: IdeaKotlinDependencyTransformer) = IdeaKotlinDependencyResolver { fragment ->
@@ -54,8 +54,8 @@ private class CompositeIdeaKotlinDependencyTransformer(
val transformers: List<IdeaKotlinDependencyTransformer> val transformers: List<IdeaKotlinDependencyTransformer>
) : IdeaKotlinDependencyTransformer { ) : IdeaKotlinDependencyTransformer {
override fun transform( override fun transform(
fragment: GradleKpmFragment, dependencies: Set<IdeaKotlinDependency> fragment: GradleKpmFragment, dependencies: Set<IdeaKpmDependency>
): Set<IdeaKotlinDependency> { ): Set<IdeaKpmDependency> {
return transformers.fold(dependencies) { currentDependencies, transformer -> transformer.transform(fragment, currentDependencies) } return transformers.fold(dependencies) { currentDependencies, transformer -> transformer.transform(fragment, currentDependencies) }
} }
} }
@@ -8,25 +8,25 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.* import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
import org.jetbrains.kotlin.tooling.core.emptyExtras import org.jetbrains.kotlin.tooling.core.emptyExtras
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinFragment(fragment: GradleKpmFragment): IdeaKotlinFragment { internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinFragment(fragment: GradleKpmFragment): IdeaKpmFragment {
return if (fragment is GradleKpmVariant) buildIdeaKotlinVariant(fragment) return if (fragment is GradleKpmVariant) buildIdeaKotlinVariant(fragment)
else buildIdeaKotlinFragment(fragment) else buildIdeaKotlinFragment(fragment)
} }
private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinFragment(fragment: GradleKpmFragment): IdeaKotlinFragment { private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinFragment(fragment: GradleKpmFragment): IdeaKpmFragment {
return IdeaKotlinFragmentImpl( return IdeaKpmFragmentImpl(
coordinates = IdeaKotlinFragmentCoordinates(fragment), coordinates = IdeaKotlinFragmentCoordinates(fragment),
platforms = fragment.containingVariants.map { variant -> IdeaKotlinPlatform(variant) }.toSet(), platforms = fragment.containingVariants.map { variant -> IdeaKotlinPlatform(variant) }.toSet(),
languageSettings = IdeaKotlinLanguageSettings(fragment.languageSettings), languageSettings = IdeaKotlinLanguageSettings(fragment.languageSettings),
dependencies = dependencyResolver.resolve(fragment).toList(), dependencies = dependencyResolver.resolve(fragment).toList(),
sourceDirectories = fragment.kotlinSourceRoots.sourceDirectories.files.toList().map { file -> IdeaKotlinSourceDirectoryImpl(file) }, sourceDirectories = fragment.kotlinSourceRoots.sourceDirectories.files.toList().map { file -> IdeaKpmSourceDirectoryImpl(file) },
resourceDirectories = emptyList(), // TODO resourceDirectories = emptyList(), // TODO
extras = emptyExtras() // TODO: Requires more sophisticated serialization extras = emptyExtras() // TODO: Requires more sophisticated serialization
) )
} }
private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinVariant(variant: GradleKpmVariant): IdeaKotlinVariant { private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinVariant(variant: GradleKpmVariant): IdeaKpmVariant {
return IdeaKotlinVariantImpl( return IdeaKpmVariantImpl(
fragment = buildIdeaKotlinFragment(variant), fragment = buildIdeaKotlinFragment(variant),
platform = IdeaKotlinPlatform(variant), platform = IdeaKotlinPlatform(variant),
variantAttributes = variant.variantAttributes.mapKeys { (key, _) -> key.uniqueName }, variantAttributes = variant.variantAttributes.mapKeys { (key, _) -> key.uniqueName },
@@ -7,8 +7,8 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
internal fun IdeaKotlinFragmentCoordinates(fragment: GradleKpmFragment): IdeaKotlinFragmentCoordinates { internal fun IdeaKotlinFragmentCoordinates(fragment: GradleKpmFragment): IdeaKpmFragmentCoordinates {
return IdeaKotlinFragmentCoordinatesImpl( return IdeaKpmFragmentCoordinatesImpl(
module = IdeaKotlinModuleCoordinates(fragment.containingModule), module = IdeaKotlinModuleCoordinates(fragment.containingModule),
fragmentName = fragment.name fragmentName = fragment.name
) )
@@ -16,25 +16,25 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toKpmModuleDependency
internal class IdeaKotlinGranularFragmentDependencyResolver( internal class IdeaKotlinGranularFragmentDependencyResolver(
private val fragmentGranularMetadataResolverFactory: GradleKpmFragmentGranularMetadataResolverFactory private val fragmentGranularMetadataResolverFactory: GradleKpmFragmentGranularMetadataResolverFactory
) : IdeaKotlinDependencyResolver { ) : IdeaKotlinDependencyResolver {
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> { override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> {
return fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions return fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions
.filterIsInstance<ChooseVisibleSourceSets>() .filterIsInstance<ChooseVisibleSourceSets>()
.flatMap { resolution -> resolve(fragment, resolution) } .flatMap { resolution -> resolve(fragment, resolution) }
.toSet() .toSet()
} }
private fun resolve(fragment: GradleKpmFragment, resolution: ChooseVisibleSourceSets): Iterable<IdeaKotlinDependency> { private fun resolve(fragment: GradleKpmFragment, resolution: ChooseVisibleSourceSets): Iterable<IdeaKpmDependency> {
val gradleProjectIdentifier = resolution.dependency.id as? ProjectComponentIdentifier ?: return emptyList() val gradleProjectIdentifier = resolution.dependency.id as? ProjectComponentIdentifier ?: return emptyList()
val kotlinModuleIdentifier = resolution.dependency.toKpmModuleDependency().moduleIdentifier val kotlinModuleIdentifier = resolution.dependency.toKpmModuleDependency().moduleIdentifier
return resolution.allVisibleSourceSetNames.map { visibleFragmentName -> return resolution.allVisibleSourceSetNames.map { visibleFragmentName ->
IdeaKotlinFragmentDependencyImpl( IdeaKpmFragmentDependencyImpl(
type = if ( type = if (
gradleProjectIdentifier.build == fragment.project.currentBuildId() && gradleProjectIdentifier.build == fragment.project.currentBuildId() &&
gradleProjectIdentifier.projectPath == fragment.project.path gradleProjectIdentifier.projectPath == fragment.project.path
) IdeaKotlinFragmentDependency.Type.Friend ) IdeaKpmFragmentDependency.Type.Friend
else IdeaKotlinFragmentDependency.Type.Regular, else IdeaKpmFragmentDependency.Type.Regular,
coordinates = IdeaKotlinFragmentCoordinatesImpl( coordinates = IdeaKpmFragmentCoordinatesImpl(
module = IdeaKotlinModuleCoordinatesImpl( module = IdeaKpmModuleCoordinatesImpl(
buildId = gradleProjectIdentifier.build.name, buildId = gradleProjectIdentifier.build.name,
projectPath = gradleProjectIdentifier.projectPath, projectPath = gradleProjectIdentifier.projectPath,
projectName = gradleProjectIdentifier.projectName, projectName = gradleProjectIdentifier.projectName,
@@ -8,8 +8,8 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder
import org.jetbrains.kotlin.project.model.LanguageSettings import org.jetbrains.kotlin.project.model.LanguageSettings
internal fun IdeaKotlinLanguageSettings(languageSettings: LanguageSettings): IdeaKotlinLanguageSettings { internal fun IdeaKotlinLanguageSettings(languageSettings: LanguageSettings): IdeaKpmLanguageSettings {
return IdeaKotlinLanguageSettingsImpl( return IdeaKpmLanguageSettingsImpl(
languageVersion = languageSettings.languageVersion, languageVersion = languageSettings.languageVersion,
apiVersion = languageSettings.apiVersion, apiVersion = languageSettings.apiVersion,
isProgressiveMode = languageSettings.progressiveMode, isProgressiveMode = languageSettings.progressiveMode,
@@ -18,14 +18,14 @@ import org.jetbrains.kotlin.gradle.utils.withTemporaryDirectory
internal class IdeaKotlinMetadataBinaryDependencyResolver( internal class IdeaKotlinMetadataBinaryDependencyResolver(
private val fragmentGranularMetadataResolverFactory: GradleKpmFragmentGranularMetadataResolverFactory private val fragmentGranularMetadataResolverFactory: GradleKpmFragmentGranularMetadataResolverFactory
) : IdeaKotlinDependencyResolver { ) : IdeaKotlinDependencyResolver {
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> { override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> {
return fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions return fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions
.filterIsInstance<ChooseVisibleSourceSets>() .filterIsInstance<ChooseVisibleSourceSets>()
.flatMap { resolution -> resolve(fragment, resolution) } .flatMap { resolution -> resolve(fragment, resolution) }
.toSet() .toSet()
} }
private fun resolve(fragment: GradleKpmFragment, resolution: ChooseVisibleSourceSets): Iterable<IdeaKotlinDependency> { private fun resolve(fragment: GradleKpmFragment, resolution: ChooseVisibleSourceSets): Iterable<IdeaKpmDependency> {
val gradleModuleIdentifier = resolution.dependency.id as? ModuleComponentIdentifier ?: return emptySet() val gradleModuleIdentifier = resolution.dependency.id as? ModuleComponentIdentifier ?: return emptySet()
val kotlinModuleIdentifier = resolution.dependency.toKpmModuleDependency().moduleIdentifier val kotlinModuleIdentifier = resolution.dependency.toKpmModuleDependency().moduleIdentifier
@@ -56,10 +56,10 @@ internal class IdeaKotlinMetadataBinaryDependencyResolver(
.apply { if (!isFile) sourceBinaryFile.copyTo(this) } .apply { if (!isFile) sourceBinaryFile.copyTo(this) }
} }
IdeaKotlinResolvedBinaryDependencyImpl( IdeaKpmResolvedBinaryDependencyImpl(
binaryType = IdeaKotlinDependency.CLASSPATH_BINARY_TYPE, binaryType = IdeaKpmDependency.CLASSPATH_BINARY_TYPE,
binaryFile = binaryFile, binaryFile = binaryFile,
coordinates = IdeaKotlinBinaryCoordinatesImpl( coordinates = IdeaKpmBinaryCoordinatesImpl(
group = gradleModuleIdentifier.group, group = gradleModuleIdentifier.group,
module = gradleModuleIdentifier.module, module = gradleModuleIdentifier.module,
version = gradleModuleIdentifier.version, version = gradleModuleIdentifier.version,
@@ -10,13 +10,13 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.path
import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
internal object IdeaKotlinMissingFileDependencyLogger : IdeaKotlinDependencyEffect { internal object IdeaKotlinMissingFileDependencyLogger : IdeaKotlinDependencyEffect {
override fun invoke(fragment: GradleKpmFragment, dependencies: Set<IdeaKotlinDependency>) { override fun invoke(fragment: GradleKpmFragment, dependencies: Set<IdeaKpmDependency>) {
dependencies.filterIsInstance<IdeaKotlinResolvedBinaryDependency>() dependencies.filterIsInstance<IdeaKpmResolvedBinaryDependency>()
.filter { !it.binaryFile.exists() } .filter { !it.binaryFile.exists() }
.ifNotEmpty { fragment.project.logger.warn(buildWarningMessage(fragment, this)) } .ifNotEmpty { fragment.project.logger.warn(buildWarningMessage(fragment, this)) }
} }
private fun buildWarningMessage(fragment: GradleKpmFragment, dependencies: List<IdeaKotlinResolvedBinaryDependency>) = buildString { private fun buildWarningMessage(fragment: GradleKpmFragment, dependencies: List<IdeaKpmResolvedBinaryDependency>) = buildString {
append("[WARNING] ${fragment.path}: Missing dependency files") append("[WARNING] ${fragment.path}: Missing dependency files")
dependencies.forEach { dependency -> dependencies.forEach { dependency ->
appendLine(dependency.binaryFile) appendLine(dependency.binaryFile)
@@ -7,8 +7,8 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinModule(module: GradleKpmModule): IdeaKotlinModule { internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinModule(module: GradleKpmModule): IdeaKpmModule {
return IdeaKotlinModuleImpl( return IdeaKpmModuleImpl(
coordinates = IdeaKotlinModuleCoordinates(module), coordinates = IdeaKotlinModuleCoordinates(module),
fragments = module.fragments.toList().map { fragment -> IdeaKotlinFragment(fragment) } fragments = module.fragments.toList().map { fragment -> IdeaKotlinFragment(fragment) }
) )
@@ -8,8 +8,8 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.currentBuildId import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.currentBuildId
internal fun IdeaKotlinModuleCoordinates(module: GradleKpmModule): IdeaKotlinModuleCoordinates { internal fun IdeaKotlinModuleCoordinates(module: GradleKpmModule): IdeaKpmModuleCoordinates {
return IdeaKotlinModuleCoordinatesImpl( return IdeaKpmModuleCoordinatesImpl(
buildId = module.project.currentBuildId().name, buildId = module.project.currentBuildId().name,
projectPath = module.project.path, projectPath = module.project.path,
projectName = module.project.name, projectName = module.project.name,
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.library.uniqueName
import java.io.File import java.io.File
internal class IdeaKotlinNativePlatformDependencyResolver : IdeaKotlinDependencyResolver { internal class IdeaKotlinNativePlatformDependencyResolver : IdeaKotlinDependencyResolver {
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> { override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> {
val konanTargets = fragment.containingVariants val konanTargets = fragment.containingVariants
.map { it as? GradleKpmNativeVariantInternal ?: return emptySet() } .map { it as? GradleKpmNativeVariantInternal ?: return emptySet() }
.map { it.konanTarget } .map { it.konanTarget }
@@ -36,17 +36,17 @@ internal class IdeaKotlinNativePlatformDependencyResolver : IdeaKotlinDependency
} }
} }
private fun Project.resolveKlib(file: File): IdeaKotlinResolvedBinaryDependency? { private fun Project.resolveKlib(file: File): IdeaKpmResolvedBinaryDependency? {
try { try {
val kotlinLibrary = resolveSingleFileKlib( val kotlinLibrary = resolveSingleFileKlib(
org.jetbrains.kotlin.konan.file.File(file.absolutePath), org.jetbrains.kotlin.konan.file.File(file.absolutePath),
strategy = ToolingSingleFileKlibResolveStrategy strategy = ToolingSingleFileKlibResolveStrategy
) )
return IdeaKotlinResolvedBinaryDependencyImpl( return IdeaKpmResolvedBinaryDependencyImpl(
binaryType = IdeaKotlinDependency.CLASSPATH_BINARY_TYPE, binaryType = IdeaKpmDependency.CLASSPATH_BINARY_TYPE,
binaryFile = file, binaryFile = file,
coordinates = IdeaKotlinBinaryCoordinatesImpl( coordinates = IdeaKpmBinaryCoordinatesImpl(
group = "org.jetbrains.kotlin.native", group = "org.jetbrains.kotlin.native",
module = kotlinLibrary.shortName ?: kotlinLibrary.uniqueName, module = kotlinLibrary.shortName ?: kotlinLibrary.uniqueName,
version = project.getKotlinPluginVersion() version = project.getKotlinPluginVersion()
@@ -12,12 +12,12 @@ import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
internal object IdeaKotlinNativeStdlibDependencyResolver : IdeaKotlinDependencyResolver { internal object IdeaKotlinNativeStdlibDependencyResolver : IdeaKotlinDependencyResolver {
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> { override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> {
return setOf( return setOf(
IdeaKotlinResolvedBinaryDependencyImpl( IdeaKpmResolvedBinaryDependencyImpl(
binaryType = IdeaKotlinDependency.CLASSPATH_BINARY_TYPE, binaryType = IdeaKpmDependency.CLASSPATH_BINARY_TYPE,
binaryFile = KonanDistribution(fragment.project.konanHome).stdlib, binaryFile = KonanDistribution(fragment.project.konanHome).stdlib,
coordinates = IdeaKotlinBinaryCoordinatesImpl( coordinates = IdeaKpmBinaryCoordinatesImpl(
"org.jetbrains.kotlin", "stdlib-native", fragment.project.getKotlinPluginVersion() "org.jetbrains.kotlin", "stdlib-native", fragment.project.getKotlinPluginVersion()
) )
) )
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.resolvableMetadataConfigurati
internal class IdeaKotlinOriginalMetadataDependencyResolver( internal class IdeaKotlinOriginalMetadataDependencyResolver(
private val fragmentGranularMetadataResolverFactory: GradleKpmFragmentGranularMetadataResolverFactory private val fragmentGranularMetadataResolverFactory: GradleKpmFragmentGranularMetadataResolverFactory
) : IdeaKotlinDependencyResolver { ) : IdeaKotlinDependencyResolver {
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> { override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> {
val dependencyIdentifiers = fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions val dependencyIdentifiers = fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions
.filterIsInstance<KeepOriginalDependency>() .filterIsInstance<KeepOriginalDependency>()
.mapNotNull { resolution -> resolution.dependency.id as? ModuleComponentIdentifier } .mapNotNull { resolution -> resolution.dependency.id as? ModuleComponentIdentifier }
@@ -29,10 +29,10 @@ internal class IdeaKotlinOriginalMetadataDependencyResolver(
}.artifacts }.artifacts
.map { artifact -> .map { artifact ->
val artifactId = artifact.variant.owner as ModuleComponentIdentifier val artifactId = artifact.variant.owner as ModuleComponentIdentifier
IdeaKotlinResolvedBinaryDependencyImpl( IdeaKpmResolvedBinaryDependencyImpl(
binaryType = IdeaKotlinDependency.CLASSPATH_BINARY_TYPE, binaryType = IdeaKpmDependency.CLASSPATH_BINARY_TYPE,
binaryFile = artifact.file, binaryFile = artifact.file,
coordinates = IdeaKotlinBinaryCoordinatesImpl(artifactId.group, artifactId.module, artifactId.version) coordinates = IdeaKpmBinaryCoordinatesImpl(artifactId.group, artifactId.module, artifactId.version)
) )
}.toSet() }.toSet()
} }
@@ -14,16 +14,16 @@ import org.jetbrains.kotlin.konan.target.HostManager
@Suppress("unused") @Suppress("unused")
/* Receiver acts as scope, or key to that function */ /* Receiver acts as scope, or key to that function */
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinPlatform(variant: GradleKpmVariant): IdeaKotlinPlatform { internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinPlatform(variant: GradleKpmVariant): IdeaKpmPlatform {
when (variant) { when (variant) {
is GradleKpmJvmVariant -> return IdeaKotlinPlatform.jvm(variant.compilationData.kotlinOptions.jvmTarget ?: JvmTarget.DEFAULT.name) is GradleKpmJvmVariant -> return IdeaKpmPlatform.jvm(variant.compilationData.kotlinOptions.jvmTarget ?: JvmTarget.DEFAULT.name)
is GradleKpmNativeVariantInternal -> return IdeaKotlinPlatform.native(variant.konanTarget.name) is GradleKpmNativeVariantInternal -> return IdeaKpmPlatform.native(variant.konanTarget.name)
is GradleKpmLegacyMappedVariant -> when (val compilation = variant.compilation) { is GradleKpmLegacyMappedVariant -> when (val compilation = variant.compilation) {
is KotlinJvmCompilation -> return IdeaKotlinPlatform.jvm(compilation.kotlinOptions.jvmTarget ?: JvmTarget.DEFAULT.name) is KotlinJvmCompilation -> return IdeaKpmPlatform.jvm(compilation.kotlinOptions.jvmTarget ?: JvmTarget.DEFAULT.name)
is KotlinJvmAndroidCompilation -> return IdeaKotlinPlatform.jvm(compilation.kotlinOptions.jvmTarget ?: JvmTarget.DEFAULT.name) is KotlinJvmAndroidCompilation -> return IdeaKpmPlatform.jvm(compilation.kotlinOptions.jvmTarget ?: JvmTarget.DEFAULT.name)
is KotlinNativeCompilation -> return IdeaKotlinPlatform.native(compilation.konanTarget.name) is KotlinNativeCompilation -> return IdeaKpmPlatform.native(compilation.konanTarget.name)
is KotlinJsIrCompilation -> return IdeaKotlinPlatform.js(isIr = true) is KotlinJsIrCompilation -> return IdeaKpmPlatform.js(isIr = true)
is KotlinJsCompilation -> return IdeaKotlinPlatform.js(isIr = false) is KotlinJsCompilation -> return IdeaKpmPlatform.js(isIr = false)
} }
} }
@@ -32,10 +32,10 @@ internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinPlatform(variant: G
assert(false) { "Unable to build 'IdeaKotlinPlatform' from variant ${variant.path}" } assert(false) { "Unable to build 'IdeaKotlinPlatform' from variant ${variant.path}" }
return when (variant.platformType) { return when (variant.platformType) {
KotlinPlatformType.common -> throw IllegalArgumentException("Unexpected platformType 'common' for variant ${variant.name}") KotlinPlatformType.common -> throw IllegalArgumentException("Unexpected platformType 'common' for variant ${variant.name}")
KotlinPlatformType.jvm -> IdeaKotlinPlatform.jvm(JvmTarget.DEFAULT.name) KotlinPlatformType.jvm -> IdeaKpmPlatform.jvm(JvmTarget.DEFAULT.name)
KotlinPlatformType.androidJvm -> IdeaKotlinPlatform.jvm(JvmTarget.DEFAULT.name) KotlinPlatformType.androidJvm -> IdeaKpmPlatform.jvm(JvmTarget.DEFAULT.name)
KotlinPlatformType.js -> IdeaKotlinPlatform.js(false) KotlinPlatformType.js -> IdeaKpmPlatform.js(false)
KotlinPlatformType.native -> IdeaKotlinPlatform.native(HostManager.host.name) KotlinPlatformType.native -> IdeaKpmPlatform.native(HostManager.host.name)
KotlinPlatformType.wasm -> IdeaKotlinPlatform.wasm() KotlinPlatformType.wasm -> IdeaKpmPlatform.wasm()
} }
} }
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmConfigurationAttribu
* to resolve those binaries. See [IdeaKotlinPlatformDependencyResolver.ArtifactResolution.PlatformFragment] * to resolve those binaries. See [IdeaKotlinPlatformDependencyResolver.ArtifactResolution.PlatformFragment]
*/ */
class IdeaKotlinPlatformDependencyResolver( class IdeaKotlinPlatformDependencyResolver(
private val binaryType: String = IdeaKotlinDependency.CLASSPATH_BINARY_TYPE, private val binaryType: String = IdeaKpmDependency.CLASSPATH_BINARY_TYPE,
private val artifactResolution: ArtifactResolution = ArtifactResolution.Variant() private val artifactResolution: ArtifactResolution = ArtifactResolution.Variant()
) : IdeaKotlinDependencyResolver { ) : IdeaKotlinDependencyResolver {
@@ -51,7 +51,7 @@ class IdeaKotlinPlatformDependencyResolver(
) : ArtifactResolution() ) : ArtifactResolution()
} }
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinBinaryDependency> { override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmBinaryDependency> {
val artifacts = artifactResolution.createArtifactView(fragment)?.artifacts ?: return emptySet() val artifacts = artifactResolution.createArtifactView(fragment)?.artifacts ?: return emptySet()
val unresolvedDependencies = artifacts.failures val unresolvedDependencies = artifacts.failures
@@ -59,18 +59,18 @@ class IdeaKotlinPlatformDependencyResolver(
.map { reason -> .map { reason ->
val selector = (reason as? ModuleVersionResolveException)?.selector as? ModuleComponentSelector val selector = (reason as? ModuleVersionResolveException)?.selector as? ModuleComponentSelector
/* Can't figure out the dependency here :( */ /* Can't figure out the dependency here :( */
?: return@map IdeaKotlinUnresolvedBinaryDependencyImpl( ?: return@map IdeaKpmUnresolvedBinaryDependencyImpl(
coordinates = null, cause = reason.message?.takeIf { it.isNotBlank() } coordinates = null, cause = reason.message?.takeIf { it.isNotBlank() }
) )
IdeaKotlinUnresolvedBinaryDependencyImpl( IdeaKpmUnresolvedBinaryDependencyImpl(
coordinates = IdeaKotlinBinaryCoordinatesImpl(selector.group, selector.module, selector.version), coordinates = IdeaKpmBinaryCoordinatesImpl(selector.group, selector.module, selector.version),
cause = reason.message?.takeIf { it.isNotBlank() } cause = reason.message?.takeIf { it.isNotBlank() }
) )
}.toSet() }.toSet()
val resolvedDependencies = artifacts.artifacts.mapNotNull { artifact -> val resolvedDependencies = artifacts.artifacts.mapNotNull { artifact ->
IdeaKotlinResolvedBinaryDependencyImpl( IdeaKpmResolvedBinaryDependencyImpl(
coordinates = artifact.variant.owner.ideaKotlinBinaryCoordinates, coordinates = artifact.variant.owner.ideaKotlinBinaryCoordinates,
binaryType = binaryType, binaryType = binaryType,
binaryFile = artifact.file binaryFile = artifact.file
@@ -81,9 +81,9 @@ class IdeaKotlinPlatformDependencyResolver(
} }
} }
private val ComponentIdentifier.ideaKotlinBinaryCoordinates: IdeaKotlinBinaryCoordinates? private val ComponentIdentifier.ideaKotlinBinaryCoordinates: IdeaKpmBinaryCoordinates?
get() = when (this) { get() = when (this) {
is ModuleComponentIdentifier -> IdeaKotlinBinaryCoordinatesImpl(group, module, version) is ModuleComponentIdentifier -> IdeaKpmBinaryCoordinatesImpl(group, module, version)
else -> null else -> null
} }
@@ -124,13 +124,13 @@ interface IdeaKotlinProjectModelBuilder {
constraint: FragmentConstraint constraint: FragmentConstraint
) )
fun buildIdeaKotlinProjectModel(): IdeaKotlinProjectModel fun buildIdeaKotlinProjectModel(): IdeaKpmProject
companion object companion object
} }
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinProjectModel(extension: KotlinPm20ProjectExtension): IdeaKotlinProjectModel { internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinProjectModel(extension: KotlinPm20ProjectExtension): IdeaKpmProject {
return IdeaKotlinProjectModelImpl( return IdeaKpmProjectImpl(
gradlePluginVersion = extension.project.getKotlinPluginVersion(), gradlePluginVersion = extension.project.getKotlinPluginVersion(),
coreLibrariesVersion = extension.coreLibrariesVersion, coreLibrariesVersion = extension.coreLibrariesVersion,
explicitApiModeCliOption = extension.explicitApi?.cliOption, explicitApiModeCliOption = extension.explicitApi?.cliOption,
@@ -70,14 +70,14 @@ internal class IdeaKotlinProjectModelBuilderImpl @UnsafeApi("Use factory methods
) )
} }
override fun buildIdeaKotlinProjectModel(): IdeaKotlinProjectModel { override fun buildIdeaKotlinProjectModel(): IdeaKpmProject {
return Context().IdeaKotlinProjectModel(extension) return Context().IdeaKotlinProjectModel(extension)
} }
override fun canBuild(modelName: String): Boolean = override fun canBuild(modelName: String): Boolean =
modelName == IdeaKotlinProjectModel::class.java.name modelName == IdeaKpmProject::class.java.name
override fun buildAll(modelName: String, project: Project): IdeaKotlinProjectModel { override fun buildAll(modelName: String, project: Project): IdeaKpmProject {
check(project === extension.project) { "Expected project ${extension.project.path}, found ${project.path}" } check(project === extension.project) { "Expected project ${extension.project.path}, found ${project.path}" }
return buildIdeaKotlinProjectModel() return buildIdeaKotlinProjectModel()
} }
@@ -8,12 +8,12 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
internal object IdeaKotlinRefinesDependencyResolver : IdeaKotlinDependencyResolver { internal object IdeaKotlinRefinesDependencyResolver : IdeaKotlinDependencyResolver {
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> = fragment.refinesClosure override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> = fragment.refinesClosure
.map { refinesDependencyFragment -> createRefinesDependency(refinesDependencyFragment) }.toSet() .map { refinesDependencyFragment -> createRefinesDependency(refinesDependencyFragment) }.toSet()
private fun createRefinesDependency(fragment: GradleKpmFragment): IdeaKotlinDependency { private fun createRefinesDependency(fragment: GradleKpmFragment): IdeaKpmDependency {
return IdeaKotlinFragmentDependencyImpl( return IdeaKpmFragmentDependencyImpl(
type = IdeaKotlinFragmentDependency.Type.Refines, type = IdeaKpmFragmentDependency.Type.Refines,
coordinates = IdeaKotlinFragmentCoordinates(fragment) coordinates = IdeaKotlinFragmentCoordinates(fragment)
) )
} }
@@ -14,13 +14,13 @@ internal object IdeaKotlinSinglePlatformStdlibCommonFilter : IdeaKotlinDependenc
override fun transform( override fun transform(
fragment: GradleKpmFragment, fragment: GradleKpmFragment,
dependencies: Set<IdeaKotlinDependency> dependencies: Set<IdeaKpmDependency>
): Set<IdeaKotlinDependency> { ): Set<IdeaKpmDependency> {
val platforms = fragment.containingVariants.map { it.platformType }.toSet() val platforms = fragment.containingVariants.map { it.platformType }.toSet()
if (platforms.size != 1) return dependencies if (platforms.size != 1) return dependencies
return dependencies.filter { dependency -> return dependencies.filter { dependency ->
val binaryDependency = dependency as? IdeaKotlinBinaryDependency ?: return@filter true val binaryDependency = dependency as? IdeaKpmBinaryDependency ?: return@filter true
val coordinates = binaryDependency.coordinates ?: return@filter true val coordinates = binaryDependency.coordinates ?: return@filter true
coordinates.group != stdlibCoordinatesGroup || coordinates.module !in stdlibCoordinatesModules coordinates.group != stdlibCoordinatesGroup || coordinates.module !in stdlibCoordinatesModules
}.toSet() }.toSet()
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmVariant
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.resolvableMetadataConfigurationName import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.resolvableMetadataConfigurationName
internal class IdeaKotlinSourcesAndDocumentationResolver : IdeaKotlinDependencyResolver { internal class IdeaKotlinSourcesAndDocumentationResolver : IdeaKotlinDependencyResolver {
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> { override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> {
if (fragment is GradleKpmVariant) { if (fragment is GradleKpmVariant) {
return resolve(fragment.project, fragment.compileDependenciesConfiguration) return resolve(fragment.project, fragment.compileDependenciesConfiguration)
} }
@@ -28,26 +28,26 @@ internal class IdeaKotlinSourcesAndDocumentationResolver : IdeaKotlinDependencyR
return resolve(fragment.project, metadataDependencies) return resolve(fragment.project, metadataDependencies)
} }
private fun resolve(project: Project, configuration: Configuration): Set<IdeaKotlinDependency> { private fun resolve(project: Project, configuration: Configuration): Set<IdeaKpmDependency> {
val resolutionResult = project.dependencies.createArtifactResolutionQuery() val resolutionResult = project.dependencies.createArtifactResolutionQuery()
.forComponents(configuration.incoming.resolutionResult.allComponents.map { it.id }) .forComponents(configuration.incoming.resolutionResult.allComponents.map { it.id })
.withArtifacts(JvmLibrary::class.java, SourcesArtifact::class.java, JavadocArtifact::class.java) .withArtifacts(JvmLibrary::class.java, SourcesArtifact::class.java, JavadocArtifact::class.java)
.execute() .execute()
return resolve(resolutionResult, SourcesArtifact::class.java, IdeaKotlinDependency.SOURCES_BINARY_TYPE) + return resolve(resolutionResult, SourcesArtifact::class.java, IdeaKpmDependency.SOURCES_BINARY_TYPE) +
resolve(resolutionResult, JavadocArtifact::class.java, IdeaKotlinDependency.DOCUMENTATION_BINARY_TYPE) resolve(resolutionResult, JavadocArtifact::class.java, IdeaKpmDependency.DOCUMENTATION_BINARY_TYPE)
} }
fun resolve( fun resolve(
resolutionResult: ArtifactResolutionResult, artifactType: Class<out Artifact>, binaryType: String resolutionResult: ArtifactResolutionResult, artifactType: Class<out Artifact>, binaryType: String
): Set<IdeaKotlinDependency> { ): Set<IdeaKpmDependency> {
return resolutionResult.resolvedComponents.flatMap { resolved -> return resolutionResult.resolvedComponents.flatMap { resolved ->
resolved.getArtifacts(artifactType) resolved.getArtifacts(artifactType)
.filterIsInstance<ResolvedArtifactResult>() .filterIsInstance<ResolvedArtifactResult>()
.mapNotNull { artifact -> .mapNotNull { artifact ->
val id = artifact.id.componentIdentifier as? ModuleComponentIdentifier ?: return@mapNotNull null val id = artifact.id.componentIdentifier as? ModuleComponentIdentifier ?: return@mapNotNull null
IdeaKotlinResolvedBinaryDependencyImpl( IdeaKpmResolvedBinaryDependencyImpl(
coordinates = IdeaKotlinBinaryCoordinatesImpl(group = id.group, module = id.module, version = id.version), coordinates = IdeaKpmBinaryCoordinatesImpl(group = id.group, module = id.module, version = id.version),
binaryType = binaryType, binaryType = binaryType,
binaryFile = artifact.file binaryFile = artifact.file
) )
@@ -9,14 +9,14 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
internal object IdeaKotlinUnusedSourcesAndDocumentationFilter : IdeaKotlinDependencyTransformer { internal object IdeaKotlinUnusedSourcesAndDocumentationFilter : IdeaKotlinDependencyTransformer {
override fun transform( override fun transform(
fragment: GradleKpmFragment, dependencies: Set<IdeaKotlinDependency> fragment: GradleKpmFragment, dependencies: Set<IdeaKpmDependency>
): Set<IdeaKotlinDependency> { ): Set<IdeaKpmDependency> {
val sourcesAndDocumentationDependencies = dependencies val sourcesAndDocumentationDependencies = dependencies
.filterIsInstance<IdeaKotlinResolvedBinaryDependency>() .filterIsInstance<IdeaKpmResolvedBinaryDependency>()
.filter { dependency -> dependency.isSourcesType || dependency.isDocumentationType } .filter { dependency -> dependency.isSourcesType || dependency.isDocumentationType }
.toSet() .toSet()
val classpathCoordinates = dependencies.filterIsInstance<IdeaKotlinResolvedBinaryDependency>() val classpathCoordinates = dependencies.filterIsInstance<IdeaKpmResolvedBinaryDependency>()
.filter { dependency -> dependency.isClasspathType } .filter { dependency -> dependency.isClasspathType }
.mapNotNull { it.coordinates } .mapNotNull { it.coordinates }
.toSet() .toSet()
@@ -10,7 +10,7 @@ import org.gradle.api.artifacts.verification.DependencyVerificationMode
import org.gradle.api.internal.project.ProjectInternal import org.gradle.api.internal.project.ProjectInternal
import org.gradle.testfixtures.ProjectBuilder import org.gradle.testfixtures.ProjectBuilder
import org.jetbrains.kotlin.gradle.addBuildEventsListenerRegistryMock import org.jetbrains.kotlin.gradle.addBuildEventsListenerRegistryMock
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinProjectModel import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmProject
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
abstract class AbstractKpmExtensionTest { abstract class AbstractKpmExtensionTest {
@@ -27,6 +27,6 @@ fun Project.applyKpmPlugin(configure: KotlinPm20ProjectExtension.() -> Unit = {}
return (extensions.getByName("kotlin") as KotlinPm20ProjectExtension).also(configure) return (extensions.getByName("kotlin") as KotlinPm20ProjectExtension).also(configure)
} }
fun KotlinPm20ProjectExtension.buildIdeaKotlinProjectModel(): IdeaKotlinProjectModel { fun KotlinPm20ProjectExtension.buildIdeaKotlinProjectModel(): IdeaKpmProject {
return ideaKotlinProjectModelBuilder.buildIdeaKotlinProjectModel() return ideaKotlinProjectModelBuilder.buildIdeaKotlinProjectModel()
} }
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.commonizer.KonanDistribution
import org.jetbrains.kotlin.commonizer.platformLibsDir import org.jetbrains.kotlin.commonizer.platformLibsDir
import org.jetbrains.kotlin.compilerRunner.konanHome import org.jetbrains.kotlin.compilerRunner.konanHome
import org.jetbrains.kotlin.gradle.enableDefaultStdlibDependency import org.jetbrains.kotlin.gradle.enableDefaultStdlibDependency
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.IdeaKotlinBinaryDependencyMatcher import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.IdeaKpmBinaryDependencyMatcher
import org.jetbrains.kotlin.gradle.plugin.mpp.enabledOnCurrentHost import org.jetbrains.kotlin.gradle.plugin.mpp.enabledOnCurrentHost
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
@@ -42,8 +42,8 @@ abstract class AbstractLightweightIdeaDependencyResolutionTest {
val Project.konanDistribution get() = KonanDistribution(project.konanHome) val Project.konanDistribution get() = KonanDistribution(project.konanHome)
fun Project.nativePlatformLibraries(target: KonanTarget): IdeaKotlinBinaryDependencyMatcher? = fun Project.nativePlatformLibraries(target: KonanTarget): IdeaKpmBinaryDependencyMatcher? =
IdeaKotlinBinaryDependencyMatcher.InDirectory(project.konanDistribution.platformLibsDir.resolve(target.name)) IdeaKpmBinaryDependencyMatcher.InDirectory(project.konanDistribution.platformLibsDir.resolve(target.name))
.takeIf { target.enabledOnCurrentHost } .takeIf { target.enabledOnCurrentHost }
} }
@@ -16,13 +16,8 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmIosX64Variant
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmLinuxX64Variant import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmLinuxX64Variant
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmMacosX64Variant import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmMacosX64Variant
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.jvm import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.jvm
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.io.ObjectInputStream
import java.io.ObjectOutputStream
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.fail
class IdeaKotlinProjectModelSerializableTest : AbstractKpmExtensionTest() { class IdeaKotlinProjectModelSerializableTest : AbstractKpmExtensionTest() {
@@ -56,8 +51,8 @@ class IdeaKotlinProjectModelSerializableTest : AbstractKpmExtensionTest() {
assertSerializeAndDeserializeEquals(kotlin.buildIdeaKotlinProjectModel()) assertSerializeAndDeserializeEquals(kotlin.buildIdeaKotlinProjectModel())
} }
private fun assertSerializeAndDeserializeEquals(model: IdeaKotlinProjectModel) { private fun assertSerializeAndDeserializeEquals(model: IdeaKpmProject) {
val deserializedModel = model.serialize().deserialize<IdeaKotlinProjectModel>() val deserializedModel = model.serialize().deserialize<IdeaKpmProject>()
assertEquals( assertEquals(
model.toString(), deserializedModel.toString(), model.toString(), deserializedModel.toString(),
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.gradle.android.androidPrototype
import org.jetbrains.kotlin.gradle.assumeAndroidSdkAvailable import org.jetbrains.kotlin.gradle.assumeAndroidSdkAvailable
import org.jetbrains.kotlin.gradle.kpm.applyKpmPlugin import org.jetbrains.kotlin.gradle.kpm.applyKpmPlugin
import org.jetbrains.kotlin.gradle.kpm.buildIdeaKotlinProjectModel import org.jetbrains.kotlin.gradle.kpm.buildIdeaKotlinProjectModel
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinDependency.Companion.CLASSPATH_BINARY_TYPE import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmDependency.Companion.CLASSPATH_BINARY_TYPE
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertContainsFragment import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertContainsFragment
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertContainsModule import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertContainsModule
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertIsNotEmpty import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertIsNotEmpty
@@ -10,8 +10,8 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.enableDefaultStdlibDependency import org.jetbrains.kotlin.gradle.enableDefaultStdlibDependency
import org.jetbrains.kotlin.gradle.kpm.applyKpmPlugin import org.jetbrains.kotlin.gradle.kpm.applyKpmPlugin
import org.jetbrains.kotlin.gradle.kpm.buildIdeaKotlinProjectModel import org.jetbrains.kotlin.gradle.kpm.buildIdeaKotlinProjectModel
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinDependency.Companion.CLASSPATH_BINARY_TYPE import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmDependency.Companion.CLASSPATH_BINARY_TYPE
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.IdeaKotlinBinaryDependencyMatcher import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.IdeaKpmBinaryDependencyMatcher
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertContainsFragment import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertContainsFragment
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertIsNotEmpty import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertIsNotEmpty
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertResolvedBinaryDependencies import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertResolvedBinaryDependencies
@@ -58,7 +58,7 @@ class StdlibKotlinIdeaDependencyResolutionTest : AbstractLightweightIdeaDependen
/* native fragments only references dependencies from the native distribution */ /* native fragments only references dependencies from the native distribution */
listOf("iosCommon", "iosX64", "iosArm64").forEach { fragmentName -> listOf("iosCommon", "iosX64", "iosArm64").forEach { fragmentName ->
module.assertContainsFragment(fragmentName).assertResolvedBinaryDependencies( module.assertContainsFragment(fragmentName).assertResolvedBinaryDependencies(
CLASSPATH_BINARY_TYPE, IdeaKotlinBinaryDependencyMatcher.InDirectory(project.konanDistribution.root) CLASSPATH_BINARY_TYPE, IdeaKpmBinaryDependencyMatcher.InDirectory(project.konanDistribution.root)
) )
} }
} }
@@ -112,7 +112,7 @@ class StdlibKotlinIdeaDependencyResolutionTest : AbstractLightweightIdeaDependen
listOf("iosCommon", "iosX64", "iosArm64").forEach { fragmentName -> listOf("iosCommon", "iosX64", "iosArm64").forEach { fragmentName ->
module.assertContainsFragment(fragmentName).assertResolvedBinaryDependencies( module.assertContainsFragment(fragmentName).assertResolvedBinaryDependencies(
CLASSPATH_BINARY_TYPE, CLASSPATH_BINARY_TYPE,
IdeaKotlinBinaryDependencyMatcher.InDirectory(project.konanDistribution.root), IdeaKpmBinaryDependencyMatcher.InDirectory(project.konanDistribution.root),
/* Actually not correct as well, since those are jvm dependencies. Filtering is not easily possible here, as well */ /* Actually not correct as well, since those are jvm dependencies. Filtering is not easily possible here, as well */
"org.jetbrains.kotlin:kotlin-stdlib:1.6.10", "org.jetbrains.kotlin:kotlin-stdlib:1.6.10",
@@ -155,7 +155,7 @@ class StdlibKotlinIdeaDependencyResolutionTest : AbstractLightweightIdeaDependen
listOf("iosCommon", "iosX64", "iosArm64").forEach { fragmentName -> listOf("iosCommon", "iosX64", "iosArm64").forEach { fragmentName ->
module.assertContainsFragment(fragmentName).assertResolvedBinaryDependencies( module.assertContainsFragment(fragmentName).assertResolvedBinaryDependencies(
CLASSPATH_BINARY_TYPE, CLASSPATH_BINARY_TYPE,
IdeaKotlinBinaryDependencyMatcher.InDirectory(project.konanDistribution.root), IdeaKpmBinaryDependencyMatcher.InDirectory(project.konanDistribution.root),
) )
} }
} }