ModuleEditor: report deprecated way to register module editors
authornik <Nikolay.Chashnikov@jetbrains.com>
Mon, 7 Sep 2015 12:55:31 +0000 (15:55 +0300)
committernik <Nikolay.Chashnikov@jetbrains.com>
Mon, 7 Sep 2015 12:55:54 +0000 (15:55 +0300)
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleEditor.java
platform/lang-api/src/com/intellij/openapi/roots/ui/configuration/ModuleConfigurationEditorProvider.java

index 358967c172ed135c6f20f9b9f94c22e3d17c2274..d7dbfb43b0ab38efa762ea848c5b74243e3bee5d 100644 (file)
@@ -20,6 +20,7 @@ import com.intellij.openapi.Disposable;
 import com.intellij.openapi.actionSystem.DataProvider;
 import com.intellij.openapi.actionSystem.LangDataKeys;
 import com.intellij.openapi.components.ComponentsPackage;
+import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.extensions.ExtensionPointName;
 import com.intellij.openapi.extensions.Extensions;
 import com.intellij.openapi.module.Module;
@@ -63,6 +64,7 @@ import java.util.List;
  */
 @SuppressWarnings({"AssignmentToStaticFieldFromInstanceMethod"})
 public abstract class ModuleEditor implements Place.Navigator, Disposable {
+  private static final Logger LOG = Logger.getInstance(ModuleEditor.class);
   private static final ExtensionPointName<ModuleConfigurableEP> MODULE_CONFIGURABLES = ExtensionPointName.create("com.intellij.moduleConfigurable");
   public static final String SELECTED_EDITOR_NAME = "selectedEditor";
 
@@ -205,18 +207,33 @@ public abstract class ModuleEditor implements Place.Navigator, Disposable {
     }
 
     for (Configurable moduleConfigurable : ComponentsPackage.getComponents(module, Configurable.class)) {
+      reportDeprecatedModuleEditor(moduleConfigurable.getClass());
       myEditors.add(new ModuleConfigurableWrapper(moduleConfigurable));
     }
     for(ModuleConfigurableEP extension : module.getExtensions(MODULE_CONFIGURABLES)) {
       if (extension.canCreateConfigurable()) {
-        myEditors.add(new ModuleConfigurableWrapper(extension.createConfigurable()));
+        Configurable configurable = extension.createConfigurable();
+        if (configurable != null) {
+          reportDeprecatedModuleEditor(configurable.getClass());
+          myEditors.add(new ModuleConfigurableWrapper(configurable));
+        }
       }
     }
   }
 
+  private static Set<Class<?>> ourReportedDeprecatedClasses = new HashSet<Class<?>>();
+  private static void reportDeprecatedModuleEditor(Class<?> aClass) {
+    if (ourReportedDeprecatedClasses.add(aClass)) {
+      LOG.warn(aClass.getName() + " uses deprecated way to register itself as a module editor. " + ModuleConfigurationEditorProvider.class.getName() + " extension point should be used instead");
+    }
+  }
+
   private static ModuleConfigurationEditorProvider[] collectProviders(@NotNull Module module) {
     List<ModuleConfigurationEditorProvider> result = new ArrayList<ModuleConfigurationEditorProvider>();
     result.addAll(ComponentsPackage.getComponents(module, ModuleConfigurationEditorProvider.class));
+    for (ModuleConfigurationEditorProvider component : result) {
+      reportDeprecatedModuleEditor(component.getClass());
+    }
     ContainerUtil.addAll(result, Extensions.getExtensions(ModuleConfigurationEditorProvider.EP_NAME, module));
     return result.toArray(new ModuleConfigurationEditorProvider[result.size()]);
   }
index ba69e8f49aa89ab34ed50ee2675c4a2c7e4b0bfe..1c5d6d8c6733336050f4687ee74e9817c9ebc9d8 100644 (file)
@@ -18,6 +18,16 @@ package com.intellij.openapi.roots.ui.configuration;
 import com.intellij.openapi.module.ModuleConfigurationEditor;
 import com.intellij.openapi.extensions.ExtensionPointName;
 
+/**
+ * Implement this interface to provide tabs for a module editor in 'Project Structure' dialog. The implementation should be registered in your {@code plugin.xml}:
+ * <pre>
+ * &lt;extensions defaultExtensionNs="com.intellij"&gt;
+ * &nbsp;&nbsp;&lt;moduleConfigurationEditorProvider implementation="qualified-class-name"/&gt;
+ * &lt;/extensions&gt;
+ * </pre>
+ *
+ * @author nik
+ */
 public interface ModuleConfigurationEditorProvider {
   ExtensionPointName<ModuleConfigurationEditorProvider> EP_NAME = ExtensionPointName.create("com.intellij.moduleConfigurationEditorProvider");