Provide dependency on buildSrc module for .gradle.kts files
#KT-23603 Fixed #KT-14862 Fixed #KT-24623 Fixed #KT-25354 Fixed
This commit is contained in:
+7
-4
@@ -15,6 +15,7 @@ import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.psi.search.NonClasspathDirectoriesScope
|
||||
import com.intellij.util.containers.SLRUCache
|
||||
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesManager
|
||||
import org.jetbrains.kotlin.idea.core.script.dependencies.ScriptRelatedModulesProvider
|
||||
import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
||||
@@ -35,18 +36,20 @@ data class ScriptModuleInfo(
|
||||
override val moduleOrigin: ModuleOrigin
|
||||
get() = ModuleOrigin.OTHER
|
||||
|
||||
val relatedModuleSourceInfo: ModuleSourceInfo?
|
||||
get() = getScriptRelatedModuleInfo(project, scriptFile)
|
||||
|
||||
override val name: Name = Name.special("<script ${scriptFile.name} ${scriptDefinition.name}>")
|
||||
|
||||
override fun contentScope() = GlobalSearchScope.fileScope(project, scriptFile)
|
||||
|
||||
override fun dependencies(): List<IdeaModuleInfo> {
|
||||
return arrayListOf<IdeaModuleInfo>(this).apply {
|
||||
val scriptDependentModules = ScriptRelatedModulesProvider.getRelatedModules(scriptFile, project)
|
||||
if (scriptDependentModules.isNotEmpty()) {
|
||||
addAll(scriptDependentModules.mapNotNull { it.productionSourceInfo() ?: it.testSourceInfo() })
|
||||
}
|
||||
|
||||
val dependenciesInfo = ScriptDependenciesInfo.ForFile(project, scriptFile, scriptDefinition)
|
||||
add(dependenciesInfo)
|
||||
relatedModuleSourceInfo?.let { addAll(it.dependencies()) }
|
||||
|
||||
dependenciesInfo.sdk?.let { add(SdkInfo(project, it)) }
|
||||
}
|
||||
}
|
||||
|
||||
+8
-8
@@ -45,6 +45,7 @@ import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.util.contextWithNewLockAndCompositeExceptionTracker
|
||||
import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider
|
||||
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesModificationTracker
|
||||
import org.jetbrains.kotlin.idea.core.script.dependencies.ScriptRelatedModulesProvider
|
||||
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
|
||||
import org.jetbrains.kotlin.idea.project.outOfBlockModificationCount
|
||||
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
|
||||
@@ -58,8 +59,6 @@ import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.sumByLong
|
||||
import java.lang.AssertionError
|
||||
import java.lang.IllegalStateException
|
||||
|
||||
internal val LOG = Logger.getInstance(KotlinCacheService::class.java)
|
||||
|
||||
@@ -111,12 +110,13 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService {
|
||||
)
|
||||
|
||||
val scriptFile = (dependenciesModuleInfo as? ScriptDependenciesInfo.ForFile)?.scriptFile
|
||||
val relatedModuleSourceInfo = scriptFile?.let { getScriptRelatedModuleInfo(project, it) }
|
||||
val globalFacade = if (relatedModuleSourceInfo != null) {
|
||||
globalFacade(settings)
|
||||
} else {
|
||||
getOrBuildGlobalFacade(settings).facadeForSdk
|
||||
}
|
||||
val relatedModules = scriptFile?.let { ScriptRelatedModulesProvider.getRelatedModules(it, project) }
|
||||
val globalFacade =
|
||||
if (relatedModules?.isNotEmpty() == true) {
|
||||
globalFacade(settings)
|
||||
} else {
|
||||
getOrBuildGlobalFacade(settings).facadeForSdk
|
||||
}
|
||||
|
||||
val globalContext = globalFacade.globalContext.contextWithNewLockAndCompositeExceptionTracker()
|
||||
return ProjectResolutionFacade(
|
||||
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* 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.core.script.dependencies
|
||||
|
||||
import com.intellij.openapi.extensions.ExtensionPointName
|
||||
import com.intellij.openapi.extensions.Extensions
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
|
||||
abstract class ScriptRelatedModulesProvider {
|
||||
abstract fun getRelatedModules(file: VirtualFile, project: Project): List<Module>
|
||||
|
||||
companion object {
|
||||
private val EP_NAME: ExtensionPointName<ScriptRelatedModulesProvider> =
|
||||
ExtensionPointName.create<ScriptRelatedModulesProvider>("org.jetbrains.kotlin.scriptRelatedModulesProvider")
|
||||
|
||||
fun getRelatedModules(file: VirtualFile, project: Project): List<Module> {
|
||||
return Extensions.getArea(project).getExtensionPoint(EP_NAME).extensions
|
||||
.filterIsInstance<ScriptRelatedModulesProvider>()
|
||||
.flatMap { it.getRelatedModules(file, project) }
|
||||
}
|
||||
}
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* 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.core.script
|
||||
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.module.ModuleManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import org.jetbrains.kotlin.idea.core.script.dependencies.ScriptRelatedModulesProvider
|
||||
import org.jetbrains.kotlin.idea.util.projectStructure.getModule
|
||||
import org.jetbrains.plugins.gradle.settings.GradleProjectSettings
|
||||
import org.jetbrains.plugins.gradle.util.GradleConstants
|
||||
|
||||
class GradleBuildSrcModuleDependencyProvider : ScriptRelatedModulesProvider() {
|
||||
override fun getRelatedModules(file: VirtualFile, project: Project): List<Module> {
|
||||
val gradleSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID)
|
||||
val projectSettings = gradleSettings.getLinkedProjectsSettings().filterIsInstance<GradleProjectSettings>().firstOrNull()
|
||||
?: return emptyList()
|
||||
val includedModulesPath: List<String> = projectSettings.compositeBuild?.compositeParticipants?.mapNotNull { part ->
|
||||
projectSettings.modules.find { it == part.rootPath }
|
||||
} ?: emptyList()
|
||||
|
||||
val moduleForScript = ExternalSystemApiUtil.getExternalProjectPath(file.getModule(project))
|
||||
val buildSrcProjectPath = "$moduleForScript/buildSrc"
|
||||
|
||||
return (includedModulesPath + buildSrcProjectPath).flatMap { path ->
|
||||
ModuleManager.getInstance(project).modules.filter {
|
||||
ExternalSystemApiUtil.getExternalProjectPath(it) == path
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* 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.scratch
|
||||
|
||||
import com.intellij.ide.scratch.ScratchFileService
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.module.ModuleManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import org.jetbrains.kotlin.idea.core.script.dependencies.ScriptRelatedModulesProvider
|
||||
import org.jetbrains.kotlin.idea.core.script.scriptRelatedModuleName
|
||||
|
||||
class ScratchModuleDependencyProvider : ScriptRelatedModulesProvider() {
|
||||
override fun getRelatedModules(file: VirtualFile, project: Project): List<Module> {
|
||||
if (ScratchFileService.isInScratchRoot(file)) {
|
||||
val scratchModule = file.scriptRelatedModuleName?.let { ModuleManager.getInstance(project).findModuleByName(it) }
|
||||
if (scratchModule != null) {
|
||||
return listOf(scratchModule)
|
||||
}
|
||||
}
|
||||
return emptyList()
|
||||
}
|
||||
}
|
||||
@@ -42,6 +42,10 @@
|
||||
interface="org.jetbrains.kotlin.platform.IdePlatformKind"/>
|
||||
<extensionPoint qualifiedName="org.jetbrains.kotlin.idePlatformKindTooling"
|
||||
interface="org.jetbrains.kotlin.idea.platform.IdePlatformKindTooling"/>
|
||||
|
||||
<extensionPoint qualifiedName="org.jetbrains.kotlin.scriptRelatedModulesProvider"
|
||||
interface="org.jetbrains.kotlin.idea.core.script.dependencies.ScriptRelatedModulesProvider"
|
||||
area="IDEA_PROJECT"/>
|
||||
</extensionPoints>
|
||||
|
||||
<extensions defaultExtensionNs="org.jetbrains.kotlin">
|
||||
@@ -68,5 +72,6 @@
|
||||
<idePlatformKindResolution implementation="org.jetbrains.kotlin.caches.resolve.CommonPlatformKindResolution"/>
|
||||
|
||||
<scratchFileLanguageProvider language="kotlin" implementationClass="org.jetbrains.kotlin.idea.scratch.KtScratchFileLanguageProvider"/>
|
||||
<scriptRelatedModulesProvider implementation="org.jetbrains.kotlin.idea.scratch.ScratchModuleDependencyProvider"/>
|
||||
</extensions>
|
||||
</idea-plugin>
|
||||
|
||||
@@ -34,6 +34,10 @@
|
||||
interface="org.jetbrains.kotlin.platform.IdePlatformKind"/>
|
||||
<extensionPoint qualifiedName="org.jetbrains.kotlin.idePlatformKindTooling"
|
||||
interface="org.jetbrains.kotlin.idea.platform.IdePlatformKindTooling"/>
|
||||
|
||||
<extensionPoint qualifiedName="org.jetbrains.kotlin.scriptRelatedModulesProvider"
|
||||
interface="org.jetbrains.kotlin.idea.core.script.dependencies.ScriptRelatedModulesProvider"
|
||||
area="IDEA_PROJECT"/>
|
||||
</extensionPoints>
|
||||
|
||||
<extensions defaultExtensionNs="org.jetbrains.kotlin">
|
||||
@@ -60,5 +64,6 @@
|
||||
<idePlatformKindResolution implementation="org.jetbrains.kotlin.caches.resolve.CommonPlatformKindResolution"/>
|
||||
|
||||
<scratchFileLanguageProvider language="kotlin" implementationClass="org.jetbrains.kotlin.idea.scratch.KtScratchFileLanguageProvider"/>
|
||||
<scriptRelatedModulesProvider implementation="org.jetbrains.kotlin.idea.scratch.ScratchModuleDependencyProvider"/>
|
||||
</extensions>
|
||||
</idea-plugin>
|
||||
|
||||
@@ -78,6 +78,7 @@
|
||||
<gradleModelFacade implementation="org.jetbrains.kotlin.idea.inspections.gradle.DefaultGradleModelFacade"/>
|
||||
|
||||
<scriptDefinitionContributor implementation="org.jetbrains.kotlin.idea.core.script.GradleScriptDefinitionsContributor" order="first"/>
|
||||
<scriptRelatedModulesProvider implementation="org.jetbrains.kotlin.idea.core.script.GradleBuildSrcModuleDependencyProvider"/>
|
||||
|
||||
<moduleBuilder implementation="org.jetbrains.kotlin.ide.konan.gradle.KotlinGradleNativeMultiplatformModuleBuilder"/>
|
||||
<moduleBuilder implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleWebMultiplatformModuleBuilder"/>
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
<gradleModelFacade implementation="org.jetbrains.kotlin.idea.inspections.gradle.DefaultGradleModelFacade"/>
|
||||
|
||||
<scriptDefinitionContributor implementation="org.jetbrains.kotlin.idea.core.script.GradleScriptDefinitionsContributor" order="first"/>
|
||||
<scriptRelatedModulesProvider implementation="org.jetbrains.kotlin.idea.core.script.GradleBuildSrcModuleDependencyProvider"/>
|
||||
|
||||
<moduleBuilder implementation="org.jetbrains.kotlin.ide.konan.gradle.KotlinGradleNativeMultiplatformModuleBuilder"/>
|
||||
<moduleBuilder implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleWebMultiplatformModuleBuilder"/>
|
||||
|
||||
@@ -86,6 +86,7 @@
|
||||
<gradleModelFacade implementation="org.jetbrains.kotlin.idea.inspections.gradle.DefaultGradleModelFacade"/>
|
||||
|
||||
<scriptDefinitionContributor implementation="org.jetbrains.kotlin.idea.core.script.GradleScriptDefinitionsContributor" order="first"/>
|
||||
<scriptRelatedModulesProvider implementation="org.jetbrains.kotlin.idea.core.script.GradleBuildSrcModuleDependencyProvider"/>
|
||||
|
||||
<moduleBuilder implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleWebMultiplatformModuleBuilder"/>
|
||||
<moduleBuilder implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleSharedMultiplatformModuleBuilder"/>
|
||||
|
||||
Reference in New Issue
Block a user