build scripts: check that correct modules are specified in ProductModulesLayout
authornik <Nikolay.Chashnikov@jetbrains.com>
Wed, 3 Aug 2016 14:21:49 +0000 (17:21 +0300)
committernik <Nikolay.Chashnikov@jetbrains.com>
Wed, 3 Aug 2016 14:21:49 +0000 (17:21 +0300)
build/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy
build/groovy/org/jetbrains/intellij/build/impl/PluginLayout.groovy

index 94c57b0488e77f401c2f8979b9b42365d43fcabc..16d3cad1d582c6ff5c477be4d88edef5941af4b1 100644 (file)
@@ -21,6 +21,7 @@ import org.jetbrains.intellij.build.BuildContext
 import org.jetbrains.intellij.build.BuildMessages
 import org.jetbrains.intellij.build.BuildOptions
 import org.jetbrains.intellij.build.BuildTasks
+import org.jetbrains.intellij.build.ProductModulesLayout
 import org.jetbrains.jps.model.java.JavaResourceRootType
 import org.jetbrains.jps.model.java.JavaSourceRootType
 import org.jetbrains.jps.model.module.JpsModule
@@ -264,6 +265,7 @@ idea.fatal.error.notification=disabled
   @Override
   void compileModulesAndBuildDistributions(List<PluginLayout> allPlugins) {
     def productLayout = buildContext.productProperties.productLayout
+    checkProductLayout(productLayout, allPlugins)
     cleanOutput()
     def includedModules = productLayout.getIncludedModules(allPlugins)
     compileModules(includedModules)
@@ -281,6 +283,33 @@ idea.fatal.error.notification=disabled
     buildDistributions()
   }
 
+  private void checkProductLayout(ProductModulesLayout layout, List<PluginLayout> allPlugins) {
+    def allPluginModules = allPlugins.collectMany { [it.mainModule] + it.optionalModules } as Set<String>
+    checkPluginModules(layout.bundledPluginModules, "bundledPluginModules", allPluginModules)
+    checkPluginModules(layout.pluginModulesToPublish, "pluginModulesToPublish", allPluginModules)
+
+    checkModules(layout.platformApiModules, "platformApiModules")
+    checkModules(layout.platformImplementationModules, "platformImplementationModules")
+    checkModules(layout.additionalPlatformModules.keySet(), "additionalPlatformModules")
+  }
+
+  private void checkModules(Collection<String> modules, String fieldName) {
+    def unknownModules = modules.findAll {buildContext.findModule(it) == null}
+    if (!unknownModules.empty) {
+      buildContext.messages.error("The following modules from productProperties.$fieldName aren't found in the project.")
+    }
+  }
+
+  private void checkPluginModules(List<String> pluginModules, String fieldName, Set<String> allPluginModules) {
+    def unknownBundledPluginModules = pluginModules.findAll { !allPluginModules.contains(it) }
+    if (!unknownBundledPluginModules.empty) {
+      buildContext.messages.error(
+        "The following modules from productProperties.productLayout.$fieldName aren't found in the registered plugins: $unknownBundledPluginModules. " +
+        "Make sure that the plugin layouts are specified in one of *_REPOSITORY_PLUGINS lists and you refer to either main plugin module or an optional module."
+      )
+    }
+  }
+
   @Override
   void cleanOutput() {
     buildContext.messages.block("Clean output") {
index 2ae33d4a4d73bf9054121e15840c7752b6e085b9..179c21f37d3a9ebe29bcda2cf8f7dce8d53d92bb 100644 (file)
@@ -49,7 +49,7 @@ class PluginLayout {
   final MultiValuesMap<String, String> moduleExcludes = new MultiValuesMap<>(true)
   final List<String> includedProjectLibraries = []
   final List<ModuleLibraryData> includedModuleLibraries = []
-  private final Set<String> optionalModules = new LinkedHashSet<>()
+  final Set<String> optionalModules = new LinkedHashSet<>()
   private final Set<String> modulesWithLocalizableResourcesInCommonJar = new LinkedHashSet<>()
   private boolean doNotCreateSeparateJarForLocalizableResources