From 9fee572ce93263a9dcfb1b2f653e32c24f0452b8 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Tue, 11 Apr 2017 17:52:21 +0200 Subject: [PATCH] [java] allows one module-info file in either source or test root - highlighting (IDEA-171221) --- .../daemon/impl/analysis/ModuleHighlightUtil.java | 2 +- .../codeInsight/daemon/ModuleHighlightingTest.kt | 5 +++++ .../LightJava9ModulesCodeInsightFixtureTestCase.kt | 3 +++ .../fixtures/MultiModuleJava9ProjectDescriptor.kt | 11 +++++++++++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/ModuleHighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/ModuleHighlightUtil.java index 26ff9d8148ce..7287b0065191 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/ModuleHighlightUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/ModuleHighlightUtil.java @@ -135,7 +135,7 @@ public class ModuleHighlightUtil { Module module = findModule(file); if (module != null) { Project project = file.getProject(); - Collection others = FilenameIndex.getVirtualFilesByName(project, MODULE_INFO_FILE, module.getModuleScope(false)); + Collection others = FilenameIndex.getVirtualFilesByName(project, MODULE_INFO_FILE, module.getModuleScope()); if (others.size() > 1) { String message = JavaErrorMessages.message("module.file.duplicate"); HighlightInfo info = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(range(element)).descriptionAndTooltip(message).create(); diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/ModuleHighlightingTest.kt b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/ModuleHighlightingTest.kt index 662ee8c280a9..7ff5110f22e2 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/ModuleHighlightingTest.kt +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/ModuleHighlightingTest.kt @@ -55,6 +55,11 @@ class ModuleHighlightingTest : LightJava9ModulesCodeInsightFixtureTestCase() { highlight("""module M { }""") } + fun testFileDuplicateInTestRoot() { + addTestFile("module-info.java", """module M.test { }""") + highlight("""module M { }""") + } + fun testWrongFileLocation() { highlight("pkg/module-info.java", """module M { }""") } diff --git a/java/java-tests/testSrc/com/intellij/testFramework/fixtures/LightJava9ModulesCodeInsightFixtureTestCase.kt b/java/java-tests/testSrc/com/intellij/testFramework/fixtures/LightJava9ModulesCodeInsightFixtureTestCase.kt index 7dd9eb5852df..562f156ff68d 100644 --- a/java/java-tests/testSrc/com/intellij/testFramework/fixtures/LightJava9ModulesCodeInsightFixtureTestCase.kt +++ b/java/java-tests/testSrc/com/intellij/testFramework/fixtures/LightJava9ModulesCodeInsightFixtureTestCase.kt @@ -31,4 +31,7 @@ abstract class LightJava9ModulesCodeInsightFixtureTestCase : LightCodeInsightFix protected fun addFile(path: String, text: String, module: ModuleDescriptor = MAIN): VirtualFile = VfsTestUtil.createFile(module.root(), path, text) + + protected fun addTestFile(path: String, text: String): VirtualFile = + VfsTestUtil.createFile(MAIN.testRoot()!!, path, text) } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/testFramework/fixtures/MultiModuleJava9ProjectDescriptor.kt b/java/java-tests/testSrc/com/intellij/testFramework/fixtures/MultiModuleJava9ProjectDescriptor.kt index 3033848faef2..a75052bcd362 100644 --- a/java/java-tests/testSrc/com/intellij/testFramework/fixtures/MultiModuleJava9ProjectDescriptor.kt +++ b/java/java-tests/testSrc/com/intellij/testFramework/fixtures/MultiModuleJava9ProjectDescriptor.kt @@ -28,6 +28,8 @@ import com.intellij.openapi.vfs.ex.temp.TempFileSystem import com.intellij.pom.java.LanguageLevel import com.intellij.testFramework.IdeaTestUtil import com.intellij.testFramework.LightPlatformTestCase +import jdk.nashorn.internal.objects.NativeArray.forEach +import org.jetbrains.jps.model.java.JavaSourceRootType /** * Dependencies: 'main' -> 'm2', 'main' -> 'm4', 'main' -> 'm5', 'main' -> 'm6' => 'm7' @@ -44,6 +46,9 @@ object MultiModuleJava9ProjectDescriptor : DefaultLightProjectDescriptor() { fun root(): VirtualFile = if (this == MAIN) LightPlatformTestCase.getSourceRoot() else TempFileSystem.getInstance().findFileByPath("/$rootName")!! + + fun testRoot(): VirtualFile? = + if (this == MAIN) TempFileSystem.getInstance().findFileByPath("/test_src")!! else null } override fun getSdk(): Sdk = IdeaTestUtil.getMockJdk9() @@ -89,12 +94,18 @@ object MultiModuleJava9ProjectDescriptor : DefaultLightProjectDescriptor() { override fun configureModule(module: Module, model: ModifiableRootModel, contentEntry: ContentEntry) { model.getModuleExtension(LanguageLevelModuleExtension::class.java).languageLevel = LanguageLevel.JDK_1_9 + if (module.name == TEST_MODULE_NAME) { + val testRoot = createSourceRoot(module, "test_src") + registerSourceRoot(module.project, testRoot) + model.addContentEntry(testRoot).addSourceFolder(testRoot, JavaSourceRootType.TEST_SOURCE) + } } fun cleanupSourceRoots() = runWriteAction { ModuleDescriptor.values().asSequence() .filter { it != ModuleDescriptor.MAIN } .flatMap { it.root().children.asSequence() } + .plus(ModuleDescriptor.MAIN.testRoot()!!.children.asSequence()) .forEach { it.delete(this) } } } \ No newline at end of file