diff --git a/build-common/src/org/jetbrains/kotlin/build/JvmBuildMetaInfo.kt b/build-common/src/org/jetbrains/kotlin/build/JvmBuildMetaInfo.kt index d327ebd045e..4b6e957e7ad 100644 --- a/build-common/src/org/jetbrains/kotlin/build/JvmBuildMetaInfo.kt +++ b/build-common/src/org/jetbrains/kotlin/build/JvmBuildMetaInfo.kt @@ -63,13 +63,13 @@ fun JvmBuildMetaInfo(args: CommonCompilerArguments): JvmBuildMetaInfo = compilerBuildVersion = KotlinCompilerVersion.VERSION, languageVersionString = args.languageVersion ?: LanguageVersion.LATEST_STABLE.versionString, apiVersionString = args.apiVersion ?: ApiVersion.LATEST_STABLE.versionString, - coroutinesEnable = args.coroutinesEnable, - coroutinesWarn = args.coroutinesWarn, - coroutinesError = args.coroutinesError, + coroutinesEnable = args.coroutinesState == CommonCompilerArguments.ENABLE, + coroutinesWarn = args.coroutinesState == CommonCompilerArguments.WARN, + coroutinesError = args.coroutinesState == CommonCompilerArguments.ERROR, multiplatformEnable = args.multiPlatform, metadataVersionMajor = JvmMetadataVersion.INSTANCE.major, metadataVersionMinor = JvmMetadataVersion.INSTANCE.minor, metadataVersionPatch = JvmMetadataVersion.INSTANCE.patch, bytecodeVersionMajor = JvmBytecodeBinaryVersion.INSTANCE.major, bytecodeVersionMinor = JvmBytecodeBinaryVersion.INSTANCE.minor, - bytecodeVersionPatch = JvmBytecodeBinaryVersion.INSTANCE.patch) \ No newline at end of file + bytecodeVersionPatch = JvmBytecodeBinaryVersion.INSTANCE.patch) diff --git a/build-common/test/org/jetbrains/kotlin/build/JvmBuildMetaInfoTest.kt b/build-common/test/org/jetbrains/kotlin/build/JvmBuildMetaInfoTest.kt index b760231d34a..e5b230f1b54 100644 --- a/build-common/test/org/jetbrains/kotlin/build/JvmBuildMetaInfoTest.kt +++ b/build-common/test/org/jetbrains/kotlin/build/JvmBuildMetaInfoTest.kt @@ -17,10 +17,8 @@ package org.jetbrains.kotlin.build import junit.framework.TestCase +import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments -import org.jetbrains.kotlin.config.KotlinCompilerVersion -import org.jetbrains.kotlin.config.LanguageFeature -import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion import org.junit.Assert.assertNotEquals import org.junit.Test @@ -64,14 +62,14 @@ class JvmBuildMetaInfoTest : TestCase() { @Test fun testEquals() { val args1 = K2JVMCompilerArguments() - args1.coroutinesEnable = true + args1.coroutinesState = CommonCompilerArguments.ENABLE val info1 = JvmBuildMetaInfo(args1) val args2 = K2JVMCompilerArguments() - args2.coroutinesEnable = false + args2.coroutinesState = CommonCompilerArguments.WARN val info2 = JvmBuildMetaInfo(args2) assertNotEquals(info1, info2) - assertEquals(info1, info2.copy(coroutinesEnable = true)) + assertEquals(info1, info2.copy(coroutinesEnable = true, coroutinesWarn = false)) } -} \ No newline at end of file +} diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.java b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.java index cba8fd56834..0c3564c435f 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.java +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.java @@ -91,14 +91,12 @@ public abstract class CommonCompilerArguments implements Serializable { @Argument(value = "-Xno-check-impl", description = "Do not check presence of 'impl' modifier in multi-platform projects") public boolean noCheckImpl; - @Argument(value = "-Xcoroutines=warn", description = "") - public boolean coroutinesWarn; - - @Argument(value = "-Xcoroutines=error", description = "") - public boolean coroutinesError; - - @Argument(value = "-Xcoroutines=enable", description = "") - public boolean coroutinesEnable; + @Argument( + value = "-Xcoroutines", + valueDescription = "{enable|warn|error}", + description = "Enable coroutines or report warnings or errors on declarations and use sites of 'suspend' modifier" + ) + public String coroutinesState = WARN; public List freeArgs = new SmartList<>(); @@ -109,11 +107,7 @@ public abstract class CommonCompilerArguments implements Serializable { @NotNull public static CommonCompilerArguments createDefaultInstance() { - DummyImpl arguments = new DummyImpl(); - arguments.coroutinesEnable = false; - arguments.coroutinesWarn = true; - arguments.coroutinesError = false; - return arguments; + return new DummyImpl(); } @NotNull @@ -121,6 +115,10 @@ public abstract class CommonCompilerArguments implements Serializable { return "kotlinc"; } + public static final String WARN = "warn"; + public static final String ERROR = "error"; + public static final String ENABLE = "enable"; + // Used only for serialize and deserialize settings. Don't use in other places! public static final class DummyImpl extends CommonCompilerArguments {} } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java index a23c3b1bc31..60f7bea5fdc 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java @@ -275,19 +275,17 @@ public abstract class CLICompiler { @NotNull CompilerConfiguration configuration, @NotNull CommonCompilerArguments arguments ) { - if (arguments.coroutinesError && !arguments.coroutinesWarn && !arguments.coroutinesEnable) { - return LanguageFeature.State.ENABLED_WITH_ERROR; - } - else if (arguments.coroutinesEnable && !arguments.coroutinesWarn && !arguments.coroutinesError) { - return LanguageFeature.State.ENABLED; - } - else if (!arguments.coroutinesEnable && !arguments.coroutinesError) { - return null; - } - else { - String message = "The -Xcoroutines can only have one value"; - configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY).report(ERROR, message, null); - return null; + switch (arguments.coroutinesState) { + case CommonCompilerArguments.ERROR: + return LanguageFeature.State.ENABLED_WITH_ERROR; + case CommonCompilerArguments.ENABLE: + return LanguageFeature.State.ENABLED; + case CommonCompilerArguments.WARN: + return null; + default: + String message = "Invalid value of -Xcoroutines (should be: enable, warn or error): " + arguments.coroutinesState; + configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY).report(ERROR, message, null); + return null; } } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/Usage.java b/compiler/cli/src/org/jetbrains/kotlin/cli/common/Usage.java index 81baef1617e..a648b196994 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/Usage.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/Usage.java @@ -29,20 +29,13 @@ class Usage { // The magic number 29 corresponds to the similar padding width in javac and scalac command line compilers private static final int OPTION_NAME_PADDING_WIDTH = 29; - private static final String coroutinesKeyDescription = "Enable coroutines or report warnings or errors on declarations and use sites of 'suspend' modifier"; - public static void print(@NotNull PrintStream target, @NotNull CommonCompilerArguments arguments, boolean extraHelp) { target.println("Usage: " + arguments.executableScriptFileName() + " "); target.println("where " + (extraHelp ? "advanced" : "possible") + " options include:"); - boolean coroutinesUsagePrinted = false; for (Class clazz = arguments.getClass(); clazz != null; clazz = clazz.getSuperclass()) { for (Field field : clazz.getDeclaredFields()) { String usage = fieldUsage(field, extraHelp); if (usage != null) { - if (usage.contains("Xcoroutines")) { - if (coroutinesUsagePrinted) continue; - coroutinesUsagePrinted = true; - } target.println(usage); } } @@ -59,14 +52,10 @@ class Usage { Argument argument = field.getAnnotation(Argument.class); if (argument == null) return null; - String argumentValue = argument.value(); - // TODO: this is a dirty hack, provide better mechanism for keys that can have several values - boolean isXCoroutinesKey = argumentValue.contains("Xcoroutines"); - String value = isXCoroutinesKey ? "-Xcoroutines={enable|warn|error}" : argumentValue; if (extraHelp != ParseCommandLineArgumentsKt.isAdvanced(argument)) return null; StringBuilder sb = new StringBuilder(" "); - sb.append(value); + sb.append(argument.value()); if (!argument.shortName().isEmpty()) { sb.append(" ("); @@ -79,12 +68,6 @@ class Usage { sb.append(argument.valueDescription()); } - if (isXCoroutinesKey) { - sb.append(" "); - sb.append(coroutinesKeyDescription); - return sb.toString(); - } - int width = OPTION_NAME_PADDING_WIDTH - 1; if (sb.length() >= width + 5) { // Break the line if it's too long sb.append("\n"); diff --git a/compiler/testData/cli/js/jsExtraHelp.out b/compiler/testData/cli/js/jsExtraHelp.out index 34c3f637d43..5c89046e42e 100644 --- a/compiler/testData/cli/js/jsExtraHelp.out +++ b/compiler/testData/cli/js/jsExtraHelp.out @@ -8,7 +8,8 @@ where advanced options include: -Xplugin= Load plugins from the given classpath -Xmulti-platform Enable experimental language support for multi-platform projects -Xno-check-impl Do not check presence of 'impl' modifier in multi-platform projects - -Xcoroutines={enable|warn|error} Enable coroutines or report warnings or errors on declarations and use sites of 'suspend' modifier + -Xcoroutines={enable|warn|error} + Enable coroutines or report warnings or errors on declarations and use sites of 'suspend' modifier Advanced options are non-standard and may be changed or removed without any notice. OK diff --git a/compiler/testData/cli/jvm/extraHelp.out b/compiler/testData/cli/jvm/extraHelp.out index 77d7db13d32..2af4834297b 100644 --- a/compiler/testData/cli/jvm/extraHelp.out +++ b/compiler/testData/cli/jvm/extraHelp.out @@ -20,7 +20,8 @@ where advanced options include: -Xplugin= Load plugins from the given classpath -Xmulti-platform Enable experimental language support for multi-platform projects -Xno-check-impl Do not check presence of 'impl' modifier in multi-platform projects - -Xcoroutines={enable|warn|error} Enable coroutines or report warnings or errors on declarations and use sites of 'suspend' modifier + -Xcoroutines={enable|warn|error} + Enable coroutines or report warnings or errors on declarations and use sites of 'suspend' modifier Advanced options are non-standard and may be changed or removed without any notice. OK \ No newline at end of file diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt index c0fb60d7972..cfcd52a3b9d 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt @@ -55,11 +55,10 @@ object CoroutineSupport { fun byCompilerArguments(arguments: CommonCompilerArguments?): LanguageFeature.State = byCompilerArgumentsOrNull(arguments) ?: LanguageFeature.Coroutines.defaultState - fun byCompilerArgumentsOrNull(arguments: CommonCompilerArguments?): LanguageFeature.State? = when { - arguments == null -> null - arguments.coroutinesEnable -> LanguageFeature.State.ENABLED - arguments.coroutinesWarn -> LanguageFeature.State.ENABLED_WITH_WARNING - arguments.coroutinesError -> LanguageFeature.State.ENABLED_WITH_ERROR + fun byCompilerArgumentsOrNull(arguments: CommonCompilerArguments?): LanguageFeature.State? = when (arguments?.coroutinesState) { + CommonCompilerArguments.ENABLE -> LanguageFeature.State.ENABLED + CommonCompilerArguments.WARN -> LanguageFeature.State.ENABLED_WITH_WARNING + CommonCompilerArguments.ERROR -> LanguageFeature.State.ENABLED_WITH_ERROR else -> null } @@ -77,7 +76,7 @@ object CoroutineSupport { class KotlinFacetSettings { companion object { // Increment this when making serialization-incompatible changes to configuration data - val CURRENT_VERSION = 2 + val CURRENT_VERSION = 3 val DEFAULT_VERSION = 0 } @@ -118,10 +117,10 @@ class KotlinFacetSettings { return CoroutineSupport.byCompilerArguments(compilerArguments) } set(value) { - with(compilerArguments!!) { - coroutinesEnable = value == LanguageFeature.State.ENABLED - coroutinesWarn = value == LanguageFeature.State.ENABLED_WITH_WARNING - coroutinesError = value == LanguageFeature.State.ENABLED_WITH_ERROR || value == LanguageFeature.State.DISABLED + compilerArguments!!.coroutinesState = when (value) { + LanguageFeature.State.ENABLED -> CommonCompilerArguments.ENABLE + LanguageFeature.State.ENABLED_WITH_WARNING -> CommonCompilerArguments.WARN + LanguageFeature.State.ENABLED_WITH_ERROR, LanguageFeature.State.DISABLED -> CommonCompilerArguments.ERROR } } diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt index 1aab95c697b..d58533299e6 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt @@ -85,7 +85,7 @@ private fun readV1Config(element: Element): KotlinFacetSettings { } } -private fun readV2Config(element: Element): KotlinFacetSettings { +private fun readV2AndLaterConfig(element: Element): KotlinFacetSettings { return KotlinFacetSettings().apply { element.getAttributeValue("useProjectSettings")?.let { useProjectSettings = it.toBoolean() } val platformName = element.getAttributeValue("platform") @@ -101,6 +101,25 @@ private fun readV2Config(element: Element): KotlinFacetSettings { } } +private fun readV2Config(element: Element): KotlinFacetSettings { + return readV2AndLaterConfig(element).apply { + element.getChild("compilerArguments")?.children?.let { args -> + when { + args.any { arg -> arg.attributes[0].value == "coroutinesEnable" && arg.attributes[1].booleanValue } -> + compilerArguments!!.coroutinesState = CommonCompilerArguments.ENABLE + args.any { arg -> arg.attributes[0].value == "coroutinesWarn" && arg.attributes[1].booleanValue } -> + compilerArguments!!.coroutinesState = CommonCompilerArguments.WARN + args.any { arg -> arg.attributes[0].value == "coroutinesError" && arg.attributes[1].booleanValue } -> + compilerArguments!!.coroutinesState = CommonCompilerArguments.ERROR + } + } + } +} + +private fun readLatestConfig(element: Element): KotlinFacetSettings { + return readV2AndLaterConfig(element) +} + fun deserializeFacetSettings(element: Element): KotlinFacetSettings { val version = try { @@ -112,6 +131,7 @@ fun deserializeFacetSettings(element: Element): KotlinFacetSettings { return when (version) { 1 -> readV1Config(element) 2 -> readV2Config(element) + KotlinFacetSettings.CURRENT_VERSION -> readLatestConfig(element) else -> KotlinFacetSettings() // Reset facet configuration if versions don't match } } diff --git a/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java b/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java index 0a959fdcc46..d51c4697c5d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java +++ b/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java @@ -461,11 +461,20 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co commonCompilerArguments.suppressWarnings = !reportWarningsCheckBox.isSelected(); commonCompilerArguments.languageVersion = getSelectedLanguageVersion().getVersionString(); commonCompilerArguments.apiVersion = getSelectedAPIVersion().getVersionString(); - LanguageFeature.State coroutineSupport = (LanguageFeature.State) coroutineSupportComboBox.getSelectedItem(); - commonCompilerArguments.coroutinesEnable = coroutineSupport == LanguageFeature.State.ENABLED; - commonCompilerArguments.coroutinesWarn = coroutineSupport == LanguageFeature.State.ENABLED_WITH_WARNING; - commonCompilerArguments.coroutinesError = coroutineSupport == LanguageFeature.State.ENABLED_WITH_ERROR || - coroutineSupport == LanguageFeature.State.DISABLED; + + switch ((LanguageFeature.State) coroutineSupportComboBox.getSelectedItem()) { + case ENABLED: + commonCompilerArguments.coroutinesState = CommonCompilerArguments.ENABLE; + break; + case ENABLED_WITH_WARNING: + commonCompilerArguments.coroutinesState = CommonCompilerArguments.WARN; + break; + case ENABLED_WITH_ERROR: + case DISABLED: + commonCompilerArguments.coroutinesState = CommonCompilerArguments.ERROR; + break; + } + compilerSettings.additionalArguments = additionalArgsOptionsField.getText(); compilerSettings.scriptTemplates = scriptTemplatesField.getText(); compilerSettings.scriptTemplatesClasspath = scriptTemplatesClasspathField.getText(); diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt index 43d9634237e..9ad6d1dbb45 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt @@ -140,26 +140,24 @@ fun KotlinFacet.configureFacet( // "Primary" fields are written to argument beans directly and thus not presented in the "additional arguments" string // Update these lists when facet/project settings UI changes -val commonUIExposedFields = listOf("languageVersion", - "apiVersion", - "suppressWarnings", - "coroutinesEnable", - "coroutinesWarn", - "coroutinesError") -private val commonUIHiddenFields = listOf("pluginClasspaths", - "pluginOptions") +val commonUIExposedFields = listOf(CommonCompilerArguments::languageVersion.name, + CommonCompilerArguments::apiVersion.name, + CommonCompilerArguments::suppressWarnings.name, + CommonCompilerArguments::coroutinesState.name) +private val commonUIHiddenFields = listOf(CommonCompilerArguments::pluginClasspaths.name, + CommonCompilerArguments::pluginOptions.name) private val commonPrimaryFields = commonUIExposedFields + commonUIHiddenFields -private val jvmSpecificUIExposedFields = listOf("jvmTarget", - "destination", - "classpath") +private val jvmSpecificUIExposedFields = listOf(K2JVMCompilerArguments::jvmTarget.name, + K2JVMCompilerArguments::destination.name, + K2JVMCompilerArguments::classpath.name) val jvmUIExposedFields = commonUIExposedFields + jvmSpecificUIExposedFields private val jvmPrimaryFields = commonPrimaryFields + jvmSpecificUIExposedFields -private val jsSpecificUIExposedFields = listOf("sourceMap", - "outputPrefix", - "outputPostfix", - "moduleKind") +private val jsSpecificUIExposedFields = listOf(K2JSCompilerArguments::sourceMap.name, + K2JSCompilerArguments::outputPrefix.name, + K2JSCompilerArguments::outputPostfix.name, + K2JSCompilerArguments::moduleKind.name) val jsUIExposedFields = commonUIExposedFields + jsSpecificUIExposedFields private val jsPrimaryFields = commonPrimaryFields + jsSpecificUIExposedFields @@ -180,18 +178,10 @@ fun parseCompilerArgumentsToFacet(arguments: List, defaultArguments: Lis parseArguments(defaultArguments.toTypedArray(), defaultCompilerArguments, true) defaultCompilerArguments.convertPathsToSystemIndependent() - val oldCoroutineSupport = CoroutineSupport.byCompilerArguments(compilerArguments) - compilerArguments.coroutinesEnable = false - compilerArguments.coroutinesWarn = false - compilerArguments.coroutinesError = false - parseArguments(argumentArray, compilerArguments, true) compilerArguments.convertPathsToSystemIndependent() - val restoreCoroutineSupport = - !compilerArguments.coroutinesEnable && !compilerArguments.coroutinesWarn && !compilerArguments.coroutinesError - // Retain only fields exposed in facet configuration editor. // The rest is combined into string and stored in CompilerSettings.additionalArguments @@ -213,9 +203,5 @@ fun parseCompilerArgumentsToFacet(arguments: List, defaultArguments: Lis with(compilerArguments::class.java.newInstance()) { copyFieldsSatisfying(this, compilerArguments, ::exposeAsAdditionalArgument) } - - if (restoreCoroutineSupport) { - coroutineSupport = oldCoroutineSupport - } } -} \ No newline at end of file +} diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeCoroutineSupportFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeCoroutineSupportFix.kt index bba09d0e43b..fa8f3a65fe8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeCoroutineSupportFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeCoroutineSupportFix.kt @@ -25,6 +25,7 @@ import com.intellij.openapi.roots.ModuleRootModificationUtil import com.intellij.openapi.roots.ex.ProjectRootManagerEx import com.intellij.openapi.ui.Messages import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.config.CoroutineSupport import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider import org.jetbrains.kotlin.config.LanguageFeature @@ -95,10 +96,11 @@ sealed class ChangeCoroutineSupportFix( } KotlinCommonCompilerArgumentsHolder.getInstance(project).update { - coroutinesEnable = coroutineSupport == LanguageFeature.State.ENABLED - coroutinesWarn = coroutineSupport == LanguageFeature.State.ENABLED_WITH_WARNING - coroutinesError = coroutineSupport == LanguageFeature.State.ENABLED_WITH_ERROR || - coroutineSupport == LanguageFeature.State.DISABLED + coroutinesState = when (coroutineSupport) { + LanguageFeature.State.ENABLED -> CommonCompilerArguments.ENABLE + LanguageFeature.State.ENABLED_WITH_WARNING -> CommonCompilerArguments.WARN + LanguageFeature.State.ENABLED_WITH_ERROR, LanguageFeature.State.DISABLED -> CommonCompilerArguments.ERROR + } } ProjectRootManagerEx.getInstanceEx(project).makeRootsChange({}, false, true) } diff --git a/idea/testData/configuration/jsProjectWithV2FacetConfig/module.iml b/idea/testData/configuration/jsProjectWithV2FacetConfig/module.iml index de9ef25ac5c..5a151ce8916 100644 --- a/idea/testData/configuration/jsProjectWithV2FacetConfig/module.iml +++ b/idea/testData/configuration/jsProjectWithV2FacetConfig/module.iml @@ -17,8 +17,9 @@ diff --git a/idea/testData/configuration/jvmProjectWithV2FacetConfig/module.iml b/idea/testData/configuration/jvmProjectWithV2FacetConfig/module.iml index b2e7004d53e..597b1e9f473 100644 --- a/idea/testData/configuration/jvmProjectWithV2FacetConfig/module.iml +++ b/idea/testData/configuration/jvmProjectWithV2FacetConfig/module.iml @@ -19,7 +19,7 @@