Test not creating resolvers for modules that have no relevant packages

This commit is contained in:
Pavel V. Talanov
2017-05-11 18:50:12 +03:00
parent 77e611b2e7
commit 55721e4f16
6 changed files with 73 additions and 2 deletions
@@ -213,6 +213,8 @@ abstract class AnalyzerFacade<in P : PlatformAnalysisParameters> {
for (module in modules) {
val descriptor = resolverForProject.descriptorForModule(module)
val computeResolverForModule = storageManager.createLazyValue {
ResolverForModuleComputationTracker.getInstance(projectContext.project)?.onResolverComputed(module)
val content = modulesContent(module)
analyzerFacade(module).createResolverForModule(
module, descriptor, projectContext.withModule(descriptor), modulesContent(module),
@@ -271,4 +273,13 @@ interface LanguageSettingsProvider {
companion object {
fun getInstance(project: Project) = ServiceManager.getService(project, LanguageSettingsProvider::class.java) ?: Default
}
}
interface ResolverForModuleComputationTracker {
fun onResolverComputed(moduleInfo: ModuleInfo)
companion object {
fun getInstance(project: Project): ResolverForModuleComputationTracker? = ServiceManager.getService(project, ResolverForModuleComputationTracker::class.java) ?: null
}
}
@@ -0,0 +1,4 @@
package foo.bar.used
public fun m1() {
}
@@ -0,0 +1,4 @@
package foo.bar.unused
public fun m2() {
}
@@ -0,0 +1,7 @@
package foo.bar.source
import foo.bar.used.*
public fun m3() {
m1()
}
@@ -56,10 +56,10 @@ abstract class AbstractMultiModuleHighlightingTest : AbstractMultiHighlightingTe
checkHighlightingInAllFiles()
}
protected fun checkHighlightingInAllFiles() {
protected fun checkHighlightingInAllFiles(nameFilter: (fileName: String) -> Boolean = { true }) {
var atLeastOneFile = false
PluginJetFilesProvider.allFilesInProject(myProject!!).forEach { file ->
if (!file.text.contains("// !CHECK_HIGHLIGHTING")) {
if (nameFilter(file.name) && !file.text.contains("// !CHECK_HIGHLIGHTING")) {
atLeastOneFile = true
configureByExistingFile(file.virtualFile!!)
checkHighlighting(myEditor, true, false)
@@ -16,12 +16,23 @@
package org.jetbrains.kotlin.idea.caches.resolve
import com.intellij.openapi.module.Module
import com.intellij.openapi.roots.DependencyScope
import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.analyzer.ResolverForModuleComputationTracker
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.config.TargetPlatformKind
import org.jetbrains.kotlin.idea.completion.test.withServiceRegistered
import org.jetbrains.kotlin.test.KotlinTestUtils
class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
override fun setUp() {
super.setUp()
VfsRootAccess.allowRootAccess(KotlinTestUtils.getHomeDirectory())
}
fun testVisibility() {
val module1 = module("m1")
val module2 = module("m2")
@@ -50,6 +61,40 @@ class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
checkHighlightingInAllFiles()
}
fun testLazyResolvers() {
val resolversComputed = mutableSetOf<Module>()
val resolversTracker = object : ResolverForModuleComputationTracker {
override fun onResolverComputed(moduleInfo: ModuleInfo) {
(moduleInfo as IdeaModuleInfo).let {
if (it is ModuleSourceInfo) {
val module = it.module
resolversComputed.add(module)
}
}
}
}
project.withServiceRegistered<ResolverForModuleComputationTracker, Unit>(resolversTracker) {
val module1 = module("m1")
val module2 = module("m2")
val module3 = module("m3")
module3.addDependency(module2)
module3.addDependency(module1)
assertTrue(module1 !in resolversComputed)
assertTrue(module2 !in resolversComputed)
assertTrue(module3 !in resolversComputed)
checkHighlightingInAllFiles { "m3" in it }
assertTrue(module1 in resolversComputed)
assertTrue(module2 !in resolversComputed)
assertTrue(module3 in resolversComputed)
}
}
fun testTestRoot() {
val module1 = module("m1", hasTestRoot = true)
val module2 = module("m2", hasTestRoot = true)