Support multi-module environment in DifferentKotlinGradleVersionInspection
This commit is contained in:
+25
-7
@@ -17,11 +17,12 @@
|
|||||||
package org.jetbrains.kotlin.idea.inspections.gradle
|
package org.jetbrains.kotlin.idea.inspections.gradle
|
||||||
|
|
||||||
import com.intellij.openapi.application.ApplicationManager
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
|
import com.intellij.openapi.externalSystem.model.ProjectKeys
|
||||||
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
|
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
|
||||||
import com.intellij.openapi.externalSystem.util.ExternalSystemUtil
|
import com.intellij.openapi.externalSystem.util.ExternalSystemUtil
|
||||||
import com.intellij.openapi.project.Project
|
|
||||||
import com.intellij.openapi.roots.ProjectRootManager
|
import com.intellij.openapi.roots.ProjectRootManager
|
||||||
import com.intellij.openapi.util.io.FileUtilRt
|
import com.intellij.openapi.util.io.FileUtilRt
|
||||||
|
import com.intellij.psi.PsiFile
|
||||||
import com.intellij.util.BooleanFunction
|
import com.intellij.util.BooleanFunction
|
||||||
import org.jetbrains.annotations.TestOnly
|
import org.jetbrains.annotations.TestOnly
|
||||||
import org.jetbrains.kotlin.idea.KotlinPluginUtil
|
import org.jetbrains.kotlin.idea.KotlinPluginUtil
|
||||||
@@ -92,7 +93,7 @@ class DifferentKotlinGradleVersionInspection : GradleBaseInspection() {
|
|||||||
|
|
||||||
val kotlinPluginVersion =
|
val kotlinPluginVersion =
|
||||||
getHeuristicKotlinPluginVersion(kotlinPluginStatement) ?:
|
getHeuristicKotlinPluginVersion(kotlinPluginStatement) ?:
|
||||||
getResolvedKotlinGradleVersion(closure.project) ?:
|
getResolvedKotlinGradleVersion(closure.containingFile) ?:
|
||||||
return
|
return
|
||||||
|
|
||||||
if (kotlinPluginVersion != idePluginVersion) {
|
if (kotlinPluginVersion != idePluginVersion) {
|
||||||
@@ -173,17 +174,34 @@ class DifferentKotlinGradleVersionInspection : GradleBaseInspection() {
|
|||||||
return classPathStatements
|
return classPathStatements
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getResolvedKotlinGradleVersion(project: Project): String? {
|
private fun getResolvedKotlinGradleVersion(file: PsiFile): String? {
|
||||||
|
val project = file.project
|
||||||
|
val module = ProjectRootManager.getInstance(file.project).fileIndex.getModuleForFile(file.virtualFile) ?: return null
|
||||||
val projectPath = project.basePath ?: return null
|
val projectPath = project.basePath ?: return null
|
||||||
|
|
||||||
val projectInfo = ExternalSystemUtil.getExternalProjectInfo(project, GRADLE_SYSTEM_ID, projectPath) ?: return null
|
val projectInfo = ExternalSystemUtil.getExternalProjectInfo(project, GRADLE_SYSTEM_ID, projectPath) ?: return null
|
||||||
val externalProjectStructure = projectInfo.externalProjectStructure ?: return null
|
val externalProjectStructure = projectInfo.externalProjectStructure ?: return null
|
||||||
|
|
||||||
val buildScriptClasspathDataNode = ExternalSystemApiUtil.findFirstRecursively(externalProjectStructure, BooleanFunction { node ->
|
val buildScriptClasspathDataNodes = ExternalSystemApiUtil.findAllRecursively(externalProjectStructure, BooleanFunction { node ->
|
||||||
BuildScriptClasspathData.KEY == node.key
|
BuildScriptClasspathData.KEY == node.key
|
||||||
}) ?: return null
|
})
|
||||||
|
|
||||||
val buildScriptClasspathData = buildScriptClasspathDataNode.getData(BuildScriptClasspathData.KEY) ?: return null
|
for (buildScriptClasspathDataNode in buildScriptClasspathDataNodes) {
|
||||||
return findKotlinPluginVersion(buildScriptClasspathData)
|
val moduleNode = buildScriptClasspathDataNode.parent
|
||||||
|
val moduleData = moduleNode?.getData(ProjectKeys.MODULE)
|
||||||
|
|
||||||
|
if (moduleData?.externalName == module.name) {
|
||||||
|
val buildScriptClasspathData = buildScriptClasspathDataNode.getData(BuildScriptClasspathData.KEY)
|
||||||
|
if (buildScriptClasspathData != null) {
|
||||||
|
val kotlinPluginVersion = findKotlinPluginVersion(buildScriptClasspathData)
|
||||||
|
if (kotlinPluginVersion != null) {
|
||||||
|
return kotlinPluginVersion
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun findKotlinPluginVersion(classpathData: BuildScriptClasspathData): String? {
|
private fun findKotlinPluginVersion(classpathData: BuildScriptClasspathData): String? {
|
||||||
|
|||||||
Reference in New Issue
Block a user