Fix incompatibility because of KotlinGradleModelFacade change (KT-25713)

AndroidGradleModelFacade was moved to android plugin in AS 3.3, so
now changes in KotlinGradleModelFacade should be binary compatible.

Current fix rewrite KotlinGradleModelFacade to Java because of default
methods.

Also current implementation abuses the fact that AndroidGradleModelFacade
don't use groupId parameter for getting library versions.

 #KT-25713 Fixed
This commit is contained in:
Nikolay Krasko
2018-07-25 17:12:21 +03:00
parent fb6bb0c8b7
commit 2d1fc4b798
3 changed files with 41 additions and 11 deletions
@@ -44,7 +44,8 @@ import org.jetbrains.kotlin.idea.inspections.gradle.KotlinGradleModelFacade
import org.jetbrains.kotlin.idea.inspections.gradle.findModulesByNames
class AndroidGradleModelFacade : KotlinGradleModelFacade {
override fun getResolvedVersionByModuleData(moduleData: DataNode<*>, groupId: String, libraryIds: List<String>): String? {
@Suppress("OverridingDeprecatedMember")
override fun getResolvedKotlinStdlibVersionByModuleData(moduleData: DataNode<*>, libraryIds: List<String>): String? {
ExternalSystemApiUtil
.findAllRecursively(moduleData, AndroidProjectKeys.JAVA_MODULE_MODEL).asSequence()
.flatMap { it.data.jarLibraryDependencies.asSequence() }
@@ -0,0 +1,39 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.idea.inspections.gradle;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.externalSystem.model.DataNode;
import com.intellij.openapi.externalSystem.model.project.ModuleData;
import org.gradle.tooling.model.idea.IdeaProject;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.List;
public interface KotlinGradleModelFacade {
ExtensionPointName<KotlinGradleModelFacade> EP_NAME = ExtensionPointName.create("org.jetbrains.kotlin.gradleModelFacade");
@Deprecated
@Nullable
default String getResolvedKotlinStdlibVersionByModuleData(@NotNull DataNode<?> moduleData, @NotNull List<String> libraryIds) {
return null;
}
@Nullable
default String getResolvedVersionByModuleData(
@NotNull DataNode<?> moduleData,
@NotNull String groupId,
@NotNull List<String> libraryIds
) {
//noinspection deprecation
return getResolvedKotlinStdlibVersionByModuleData(moduleData, libraryIds);
}
@NotNull
Collection<DataNode<ModuleData>> getDependencyModules(@NotNull DataNode<ModuleData> ideModule, @NotNull IdeaProject gradleIdeaProject);
}
@@ -16,7 +16,6 @@
package org.jetbrains.kotlin.idea.inspections.gradle
import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.externalSystem.model.DataNode
import com.intellij.openapi.externalSystem.model.ProjectKeys
@@ -25,15 +24,6 @@ import com.intellij.openapi.externalSystem.model.project.ProjectData
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
import org.gradle.tooling.model.idea.IdeaProject
interface KotlinGradleModelFacade {
companion object {
val EP_NAME: ExtensionPointName<KotlinGradleModelFacade> = ExtensionPointName.create("org.jetbrains.kotlin.gradleModelFacade")
}
fun getResolvedVersionByModuleData(moduleData: DataNode<*>, groupId: String, libraryIds: List<String>): String?
fun getDependencyModules(ideModule: DataNode<ModuleData>, gradleIdeaProject: IdeaProject): Collection<DataNode<ModuleData>>
}
class DefaultGradleModelFacade : KotlinGradleModelFacade {
override fun getResolvedVersionByModuleData(moduleData: DataNode<*>, groupId: String, libraryIds: List<String>): String? {
for (libraryDependencyData in ExternalSystemApiUtil.findAllRecursively(moduleData, ProjectKeys.LIBRARY_DEPENDENCY)) {