From 0d498967bb70bca608aa923aa899ac07fcd8a492 Mon Sep 17 00:00:00 2001 From: nik Date: Wed, 18 Jan 2017 18:43:23 +0300 Subject: [PATCH] build scripts: report error if multiple modules in plugin contain plugin.xml files This will help to avoid problems like IDEA-159769 in the future. --- .../jetbrains/intellij/build/impl/BaseLayout.groovy | 2 +- .../build/impl/DistributionJARsBuilder.groovy | 12 ++++++++++++ .../intellij/build/impl/PluginLayout.groovy | 3 +++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BaseLayout.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BaseLayout.groovy index 89a61412dcd4..41fb423b9f0f 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BaseLayout.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BaseLayout.groovy @@ -22,7 +22,7 @@ import com.intellij.openapi.util.MultiValuesMap * @author nik */ abstract class BaseLayout { - /** JAR name (or path relative to 'lib' directory) to module name */ + /** JAR name (or path relative to 'lib' directory) to names of modules */ final MultiValuesMap moduleJars = new MultiValuesMap<>(true) final List resourcePaths = [] /** module name to entries which should be excluded from its output */ diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy index 44d8e5b716e8..787f1d9c611e 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy @@ -293,10 +293,22 @@ class DistributionJARsBuilder { def enabledModulesSet = buildContext.productProperties.productLayout.enabledPluginModules pluginsToInclude.each { plugin -> def actualModuleJars = plugin.getActualModules(enabledModulesSet) + checkOutputOfPluginModules(plugin.mainModule, actualModuleJars.values()) buildByLayout(layoutBuilder, plugin, "$targetDirectory/$plugin.directoryName", actualModuleJars) } } + private void checkOutputOfPluginModules(String mainPluginModule, Collection moduleNames) { + def modulesWithPluginXml = moduleNames.findAll { containsFileInOutput(it, "META-INF/plugin.xml") } + if (modulesWithPluginXml.size() > 1) { + buildContext.messages.error("Multiple modules (${modulesWithPluginXml.join(", ")}) from '$mainPluginModule' plugin contain plugin.xml files so the plugin won't work properly") + } + } + + private boolean containsFileInOutput(String moduleName, String filePath) { + return new File(buildContext.projectBuilder.getModuleOutput(buildContext.findRequiredModule(moduleName), false), filePath).exists() + } + private void buildByLayout(LayoutBuilder layoutBuilder, BaseLayout layout, String targetDirectory, MultiValuesMap moduleJars) { def ant = buildContext.ant def resourceExcluded = RESOURCES_EXCLUDED diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/PluginLayout.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/PluginLayout.groovy index e78a3810a182..2144ea7d2420 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/PluginLayout.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/PluginLayout.groovy @@ -55,6 +55,9 @@ class PluginLayout extends BaseLayout { return layout } + /** + * @return map from a JAR name to list of modules + */ MultiValuesMap getActualModules(Set enabledPluginModules) { def result = new MultiValuesMap(true) for (Map.Entry> entry : moduleJars.entrySet()) {