Allow to turn the first parameter of a SAM-converted lambda into the receiver (KT-12848)
This commit is contained in:
+8
-7
@@ -76,15 +76,16 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService {
|
||||
}
|
||||
|
||||
|
||||
private val facadesForScriptDependencies: SLRUCache<KotlinScriptExternalDependencies, ProjectResolutionFacade> =
|
||||
object : SLRUCache<KotlinScriptExternalDependencies, ProjectResolutionFacade>(2, 3) {
|
||||
override fun createValue(key: KotlinScriptExternalDependencies?): ProjectResolutionFacade {
|
||||
return createFacadeForScriptDependencies(ScriptDependenciesModuleInfo(project, key))
|
||||
private val facadesForScriptDependencies: SLRUCache<ScriptModuleInfo, ProjectResolutionFacade> =
|
||||
object : SLRUCache<ScriptModuleInfo, ProjectResolutionFacade>(2, 3) {
|
||||
override fun createValue(scriptModuleInfo: ScriptModuleInfo?): ProjectResolutionFacade {
|
||||
val dependencies = scriptModuleInfo?.externalDependencies
|
||||
return createFacadeForScriptDependencies(ScriptDependenciesModuleInfo(project, dependencies, scriptModuleInfo))
|
||||
}
|
||||
}
|
||||
|
||||
private fun getFacadeForScriptDependencies(dependencies: KotlinScriptExternalDependencies?) = synchronized(facadesForScriptDependencies) {
|
||||
facadesForScriptDependencies.get(dependencies)
|
||||
private fun getFacadeForScriptDependencies(scriptModuleInfo: ScriptModuleInfo) = synchronized(facadesForScriptDependencies) {
|
||||
facadesForScriptDependencies.get(scriptModuleInfo)
|
||||
}
|
||||
|
||||
private fun createFacadeForScriptDependencies(
|
||||
@@ -230,7 +231,7 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService {
|
||||
createFacadeForScriptDependencies(syntheticFileModule, files)
|
||||
}
|
||||
syntheticFileModule is ScriptModuleInfo -> {
|
||||
val facadeForScriptDependencies = getFacadeForScriptDependencies(syntheticFileModule.externalDependencies)
|
||||
val facadeForScriptDependencies = getFacadeForScriptDependencies(syntheticFileModule)
|
||||
val globalContext = facadeForScriptDependencies.globalContext.contextWithNewLockAndCompositeExceptionTracker()
|
||||
ProjectResolutionFacade(
|
||||
"facadeForSynthetic in ScriptModuleInfo",
|
||||
|
||||
+6
-2
@@ -55,7 +55,7 @@ data class ScriptModuleInfo(val project: Project, val scriptFile: VirtualFile,
|
||||
override fun dependencies(): List<IdeaModuleInfo> {
|
||||
return listOf(
|
||||
this,
|
||||
ScriptDependenciesModuleInfo(project, externalDependencies)
|
||||
ScriptDependenciesModuleInfo(project, externalDependencies, this)
|
||||
) + sdkDependencies(externalDependencies, project)
|
||||
}
|
||||
}
|
||||
@@ -73,7 +73,11 @@ fun findJdk(dependencies: KotlinScriptExternalDependencies?, project: Project):
|
||||
allJdks.firstOrNull()
|
||||
}
|
||||
|
||||
class ScriptDependenciesModuleInfo(val project: Project, val dependencies: KotlinScriptExternalDependencies?): IdeaModuleInfo {
|
||||
class ScriptDependenciesModuleInfo(
|
||||
val project: Project,
|
||||
val dependencies: KotlinScriptExternalDependencies?,
|
||||
val scriptModuleInfo: ScriptModuleInfo?
|
||||
): IdeaModuleInfo {
|
||||
override fun dependencies() = (listOf(this) + sdkDependencies(dependencies, project))
|
||||
|
||||
override val name = Name.special("<Script dependencies>")
|
||||
|
||||
@@ -129,7 +129,7 @@ private fun getModuleInfoByVirtualFile(project: Project, virtualFile: VirtualFil
|
||||
}
|
||||
|
||||
if (KotlinScriptConfigurationManager.getInstance(project).getAllScriptsClasspathScope().contains(virtualFile)) {
|
||||
return ScriptDependenciesModuleInfo(project, null)
|
||||
return ScriptDependenciesModuleInfo(project, null, null)
|
||||
}
|
||||
|
||||
return NotUnderContentRootModuleInfo
|
||||
|
||||
@@ -56,6 +56,7 @@
|
||||
<orderEntry type="library" scope="TEST" name="native-platform-uberjar" level="project" />
|
||||
<orderEntry type="module" module-name="allopen-ide" scope="TEST" />
|
||||
<orderEntry type="module" module-name="noarg-ide" scope="TEST" />
|
||||
<orderEntry type="module" module-name="sam-with-receiver-ide" scope="TEST" />
|
||||
<orderEntry type="module" module-name="descriptors" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -2017,6 +2017,8 @@
|
||||
|
||||
<declarationAttributeAltererExtension implementation="org.jetbrains.kotlin.allopen.ide.IdeAllOpenDeclarationAttributeAltererExtension"/>
|
||||
|
||||
<storageComponentContainerContributor implementation="org.jetbrains.kotlin.samWithReceiver.ide.IdeSamWithReceiverComponentContributor"/>
|
||||
|
||||
<classBuilderFactoryInterceptorExtension implementation="org.jetbrains.kotlin.noarg.NoArgClassBuilderInterceptorExtension"/>
|
||||
<storageComponentContainerContributor implementation="org.jetbrains.kotlin.noarg.ide.IdeNoArgComponentContainerContributor"/>
|
||||
<defaultErrorMessages implementation="org.jetbrains.kotlin.noarg.diagnostic.DefaultErrorMessagesNoArg"/>
|
||||
|
||||
Reference in New Issue
Block a user