Fix import tests after KT-27832

This commit is contained in:
Andrey Uskov
2018-11-16 21:31:42 +03:00
parent 9a79f43a50
commit 0fd9e06f8a
2 changed files with 14 additions and 6 deletions
@@ -34,6 +34,7 @@ import org.jetbrains.kotlin.gradle.KotlinGradleModelBuilder
import org.jetbrains.kotlin.gradle.KotlinMPPGradleModel import org.jetbrains.kotlin.gradle.KotlinMPPGradleModel
import org.jetbrains.kotlin.idea.inspections.gradle.getDependencyModules import org.jetbrains.kotlin.idea.inspections.gradle.getDependencyModules
import org.jetbrains.kotlin.idea.util.CopyableDataNodeUserDataProperty import org.jetbrains.kotlin.idea.util.CopyableDataNodeUserDataProperty
import org.jetbrains.kotlin.idea.util.DataNodeUserDataProperty
import org.jetbrains.kotlin.idea.util.NotNullableCopyableDataNodeUserDataProperty import org.jetbrains.kotlin.idea.util.NotNullableCopyableDataNodeUserDataProperty
import org.jetbrains.plugins.gradle.model.ExternalProjectDependency import org.jetbrains.plugins.gradle.model.ExternalProjectDependency
import org.jetbrains.plugins.gradle.model.ExternalSourceSet import org.jetbrains.plugins.gradle.model.ExternalSourceSet
@@ -59,9 +60,8 @@ var DataNode<out ModuleData>.implementedModuleNames
by NotNullableCopyableDataNodeUserDataProperty(Key.create<List<String>>("IMPLEMENTED_MODULE_NAME"), emptyList()) by NotNullableCopyableDataNodeUserDataProperty(Key.create<List<String>>("IMPLEMENTED_MODULE_NAME"), emptyList())
// Project is usually the same during all import, thus keeping Map Project->Dependencies makes model a bit more complicated but allows to avoid future problems // Project is usually the same during all import, thus keeping Map Project->Dependencies makes model a bit more complicated but allows to avoid future problems
var DataNode<out ModuleData>.dependenciesCache var DataNode<out ModuleData>.dependenciesCache
by NotNullableCopyableDataNodeUserDataProperty( by DataNodeUserDataProperty(
Key.create<MutableMap<DataNode<ProjectData>, Collection<DataNode<out ModuleData>>>>("MODULE_DEPENDENCIES_CACHE"), Key.create<MutableMap<DataNode<ProjectData>, Collection<DataNode<out ModuleData>>>>("MODULE_DEPENDENCIES_CACHE")
HashMap()
) )
@@ -97,8 +97,9 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension()
.singleOrNull() .singleOrNull()
private fun DataNode<out ModuleData>.getDependencies(ideProject: DataNode<ProjectData>): Collection<DataNode<out ModuleData>> { private fun DataNode<out ModuleData>.getDependencies(ideProject: DataNode<ProjectData>): Collection<DataNode<out ModuleData>> {
if (dependenciesCache.containsKey(ideProject)) { val cache = dependenciesCache ?: HashMap()
return dependenciesCache[ideProject]!! if (cache.containsKey(ideProject)) {
return cache[ideProject]!!
} }
val outputToSourceSet = ideProject.getUserData(GradleProjectResolver.MODULES_OUTPUTS) val outputToSourceSet = ideProject.getUserData(GradleProjectResolver.MODULES_OUTPUTS)
val sourceSetByName = ideProject.getUserData(GradleProjectResolver.RESOLVED_SOURCE_SETS) ?: return emptySet() val sourceSetByName = ideProject.getUserData(GradleProjectResolver.RESOLVED_SOURCE_SETS) ?: return emptySet()
@@ -123,7 +124,8 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension()
else -> null else -> null
} }
} }
dependenciesCache[ideProject] = result cache[ideProject] = result
dependenciesCache = cache
return result return result
} }
@@ -20,6 +20,12 @@ import com.intellij.openapi.externalSystem.model.DataNode
import com.intellij.openapi.util.Key import com.intellij.openapi.util.Key
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
class DataNodeUserDataProperty<in R : DataNode<*>, T : Any>(val key: Key<T>) {
operator fun getValue(thisRef: R, property: KProperty<*>) = thisRef.getUserData(key)
operator fun setValue(thisRef: R, property: KProperty<*>, value: T?) = thisRef.putUserData(key, value)
}
class CopyableDataNodeUserDataProperty<in R : DataNode<*>, T : Any>(val key: Key<T>) { class CopyableDataNodeUserDataProperty<in R : DataNode<*>, T : Any>(val key: Key<T>) {
operator fun getValue(thisRef: R, property: KProperty<*>) = thisRef.getCopyableUserData(key) operator fun getValue(thisRef: R, property: KProperty<*>) = thisRef.getCopyableUserData(key)