EA-36364 (dispose module after external modify project structure)
authorAlexander Lobas <Alexander.Lobas@jetbrains.com>
Sat, 9 Jun 2012 11:10:06 +0000 (15:10 +0400)
committerAlexander Lobas <Alexander.Lobas@jetbrains.com>
Sat, 9 Jun 2012 11:10:06 +0000 (15:10 +0400)
43 files changed:
plugins/android-designer/src/com/intellij/android/designer/AndroidDesignerEditor.java
plugins/android-designer/src/com/intellij/android/designer/actions/ProfileAction.java
plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java
plugins/android-designer/src/com/intellij/android/designer/model/RadCustomViewComponent.java
plugins/android-designer/src/com/intellij/android/designer/model/RadFragment.java
plugins/android-designer/src/com/intellij/android/designer/model/RadIncludeLayout.java
plugins/android-designer/src/com/intellij/android/designer/profile/ProfileDialog.java
plugins/android-designer/src/com/intellij/android/designer/profile/ProfileManager.java
plugins/android-designer/src/com/intellij/android/designer/propertyTable/editors/ResourceEditor.java
plugins/ui-designer/src/com/intellij/uiDesigner/CutCopyPasteSupport.java
plugins/ui-designer/src/com/intellij/uiDesigner/FormEditingUtil.java
plugins/ui-designer/src/com/intellij/uiDesigner/GridBuildUtil.java
plugins/ui-designer/src/com/intellij/uiDesigner/ModuleProvider.java [new file with mode: 0644]
plugins/ui-designer/src/com/intellij/uiDesigner/StringDescriptorManager.java
plugins/ui-designer/src/com/intellij/uiDesigner/XmlReader.java
plugins/ui-designer/src/com/intellij/uiDesigner/componentTree/ComponentTree.java
plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/CachedGridImage.java
plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GuiEditor.java
plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/InsertComponentProcessor.java
plugins/ui-designer/src/com/intellij/uiDesigner/editor/UIFormEditor.java
plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/BindingEditor.java
plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/ColorEditor.java
plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/FontEditor.java
plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/IconEditor.java
plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/properties/BindingProperty.java
plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/properties/ClassToBindProperty.java
plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadAtomicComponent.java
plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadComponent.java
plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadComponentFactory.java
plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadContainer.java
plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadErrorComponent.java
plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadHSpacer.java
plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadNestedForm.java
plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadRootContainer.java
plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadScrollPane.java
plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadSplitPane.java
plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadTabbedPane.java
plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadTable.java
plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadToolBar.java
plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadVSpacer.java
plugins/ui-designer/ui-designer-new/src/com/intellij/designer/DesignerEditor.java
plugins/ui-designer/ui-designer-new/src/com/intellij/designer/ModuleProvider.java [new file with mode: 0644]
plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/DesignerEditorPanel.java

index 246ed81854ace87cf88e2631014eee05adcb54e1..8be4d3416681bdd5e4f46edf77705e1b1d18358d 100644 (file)
@@ -37,8 +37,8 @@ public final class AndroidDesignerEditor extends DesignerEditor {
 
   @Override
   @NotNull
-  protected DesignerEditorPanel createDesignerPanel(Module module, VirtualFile file) {
-    return new AndroidDesignerEditorPanel(module, file);
+  protected DesignerEditorPanel createDesignerPanel(Project project, Module module, VirtualFile file) {
+    return new AndroidDesignerEditorPanel(project, module, file);
   }
 
   @NotNull
index 1285214bf511ca4907392d84415aa36ac438cd72..1292a9265554538c1dccb81be4f12d4c2a113f50 100644 (file)
@@ -52,7 +52,7 @@ public class ProfileAction {
 
     myProfileList = ProfileList.getInstance(myDesigner.getProject());
 
-    myProfileManager = new ProfileManager(myDesigner.getModule(), refreshAction, new Runnable() {
+    myProfileManager = new ProfileManager(myDesigner, refreshAction, new Runnable() {
       @Override
       public void run() {
         myProfileList.addVersion();
@@ -142,7 +142,7 @@ public class ProfileAction {
   }
 
   private void editProfiles() {
-    ProfileDialog dialog = new ProfileDialog(myDesigner.getModule(), myProfileList.getProfiles());
+    ProfileDialog dialog = new ProfileDialog(myDesigner, myProfileList.getProfiles());
     dialog.show();
 
     if (dialog.getExitCode() == DialogWrapper.OK_EXIT_CODE) {
index c80cc39e88b66a2c3be97405982b5e0226388d58..dd22f60250d414a9dfb59da73678c34921adf1e5 100644 (file)
@@ -42,6 +42,7 @@ import com.intellij.openapi.application.ex.ApplicationManagerEx;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.progress.EmptyProgressIndicator;
 import com.intellij.openapi.progress.ProgressIndicator;
+import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.Computable;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.openapi.vfs.VirtualFile;
@@ -76,8 +77,8 @@ public final class AndroidDesignerEditorPanel extends DesignerEditorPanel {
   private boolean myParseTime;
   private int myProfileLastVersion;
 
-  public AndroidDesignerEditorPanel(@NotNull Module module, @NotNull VirtualFile file) {
-    super(module, file);
+  public AndroidDesignerEditorPanel(@NotNull Project project, @NotNull Module module, @NotNull VirtualFile file) {
+    super(project, module, file);
 
     myXmlFile = (XmlFile)ApplicationManager.getApplication().runReadAction(new Computable<PsiFile>() {
       @Override
@@ -151,10 +152,10 @@ public final class AndroidDesignerEditorPanel extends DesignerEditorPanel {
         RadViewComponent newRootComponent = parser.getRootComponent();
 
         newRootComponent.setClientProperty(ModelParser.XML_FILE_KEY, myXmlFile);
-        newRootComponent.setClientProperty(ModelParser.MODULE_KEY, getModule());
+        newRootComponent.setClientProperty(ModelParser.MODULE_KEY, AndroidDesignerEditorPanel.this);
         newRootComponent.setClientProperty(TreeComponentDecorator.KEY, myTreeDecorator);
 
-        PropertyParser propertyParser = new PropertyParser(myModule, myProfileAction.getProfileManager().getSelectedTarget());
+        PropertyParser propertyParser = new PropertyParser(getModule(), myProfileAction.getProfileManager().getSelectedTarget());
         newRootComponent.setClientProperty(PropertyParser.KEY, propertyParser);
         propertyParser.loadRecursive(newRootComponent);
 
@@ -195,12 +196,12 @@ public final class AndroidDesignerEditorPanel extends DesignerEditorPanel {
 
           myProfileLastVersion = myProfileAction.getVersion();
 
-          AndroidPlatform platform = AndroidPlatform.getInstance(myModule);
+          AndroidPlatform platform = AndroidPlatform.getInstance(getModule());
           if (platform == null) {
             throw new AndroidSdkNotConfiguredException();
           }
 
-          AndroidFacet facet = AndroidFacet.getInstance(myModule);
+          AndroidFacet facet = AndroidFacet.getInstance(getModule());
           ProfileManager manager = myProfileAction.getProfileManager();
 
           LayoutDeviceConfiguration deviceConfiguration = manager.getSelectedDeviceConfiguration();
@@ -231,7 +232,7 @@ public final class AndroidDesignerEditorPanel extends DesignerEditorPanel {
           }
 
           RenderingResult result =
-            RenderUtil.renderLayout(myModule, layoutXmlText, myFile, null, target, facet, config, xdpi, ydpi, theme, 10000, true);
+            RenderUtil.renderLayout(getModule(), layoutXmlText, myFile, null, target, facet, config, xdpi, ydpi, theme, 10000, true);
 
           if (ApplicationManagerEx.getApplicationEx().isInternal()) {
             System.out.println("Render time: " + (System.currentTimeMillis() - time)); // XXX
@@ -327,15 +328,15 @@ public final class AndroidDesignerEditorPanel extends DesignerEditorPanel {
       info.myShowLog = false;
       info.myShowStack = false;
 
-      if (AndroidMavenUtil.isMavenizedModule(myModule)) {
+      if (AndroidMavenUtil.isMavenizedModule(getModule())) {
         info.myMessages.add(new FixableMessageInfo(true, AndroidBundle.message("android.maven.cannot.parse.android.sdk.error",
-                                                                               myModule.getName()), "", "", null, null));
+                                                                               getModule().getName()), "", "", null, null));
       }
       else {
         info.myMessages.add(new FixableMessageInfo(true, "Please ", "configure", " Android SDK", new Runnable() {
           @Override
           public void run() {
-            AndroidSdkUtils.openModuleDependenciesConfigurable(myModule);
+            AndroidSdkUtils.openModuleDependenciesConfigurable(getModule());
           }
         }, null));
       }
@@ -381,7 +382,7 @@ public final class AndroidDesignerEditorPanel extends DesignerEditorPanel {
     StringBuilder builder = new StringBuilder("SDK: ");
 
     try {
-      AndroidPlatform platform = AndroidPlatform.getInstance(myModule);
+      AndroidPlatform platform = AndroidPlatform.getInstance(getModule());
       IAndroidTarget target = platform.getTarget();
       builder.append(target.getFullName()).append(" - ").append(target.getVersion());
     }
index cf37b15395ffd23dfb97b0f5c04dc44269f76a8b..1457f4b4661d0deb1c83e19ac793bef3f961cdf2 100644 (file)
@@ -17,6 +17,7 @@ package com.intellij.android.designer.model;
 
 import com.intellij.android.designer.propertyTable.CustomViewProperty;
 import com.intellij.android.designer.propertyTable.editors.ChooseClassDialog;
+import com.intellij.designer.ModuleProvider;
 import com.intellij.designer.componentTree.AttributeWrapper;
 import com.intellij.designer.model.IComponentDecorator;
 import com.intellij.designer.model.MetaManager;
@@ -24,7 +25,6 @@ import com.intellij.designer.model.MetaModel;
 import com.intellij.designer.model.RadComponent;
 import com.intellij.designer.propertyTable.Property;
 import com.intellij.designer.propertyTable.PropertyTable;
-import com.intellij.openapi.module.Module;
 import com.intellij.openapi.ui.DialogWrapper;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.psi.PsiClass;
@@ -66,9 +66,9 @@ public class RadCustomViewComponent extends RadViewComponent implements IConfigu
 
   @Nullable
   public static String chooseView(RadComponent rootComponent) {
-    Module module = rootComponent.getClientProperty(ModelParser.MODULE_KEY);
+    ModuleProvider moduleProvider = rootComponent.getClientProperty(ModelParser.MODULE_KEY);
     ChooseClassDialog dialog =
-      new ChooseClassDialog(module, "View Dialog", false, "android.view.View");
+      new ChooseClassDialog(moduleProvider.getModule(), "View Dialog", false, "android.view.View");
     dialog.show();
 
     if (dialog.getExitCode() == DialogWrapper.OK_EXIT_CODE) {
@@ -108,9 +108,9 @@ public class RadCustomViewComponent extends RadViewComponent implements IConfigu
     MetaModel metaModel = getClientProperty(MODEL_KEY);
 
     if (metaModel == null) {
-      Module module = getRoot().getClientProperty(ModelParser.MODULE_KEY);
-      MetaManager metaManager = ViewsMetaManager.getInstance(module.getProject());
-      PsiClass viewClass = ChooseClassDialog.findClass(module, getViewClass());
+      ModuleProvider moduleProvider = getRoot().getClientProperty(ModelParser.MODULE_KEY);
+      MetaManager metaManager = ViewsMetaManager.getInstance(moduleProvider.getProject());
+      PsiClass viewClass = ChooseClassDialog.findClass(moduleProvider.getModule(), getViewClass());
 
       while (viewClass != null) {
         metaModel = metaManager.getModelByTarget(viewClass.getQualifiedName());
index 7a3ff434924f9768b4b8a2779286b492c0ed038d..1a2a586b805806ac8162b0ab4af1ecbd5257f843 100644 (file)
@@ -20,10 +20,10 @@ import com.intellij.android.designer.propertyTable.IdProperty;
 import com.intellij.android.designer.propertyTable.JavadocParser;
 import com.intellij.android.designer.propertyTable.editors.ChooseClassDialog;
 import com.intellij.android.designer.propertyTable.editors.ResourceEditor;
+import com.intellij.designer.ModuleProvider;
 import com.intellij.designer.model.RadComponent;
 import com.intellij.designer.propertyTable.Property;
 import com.intellij.designer.propertyTable.editors.TextEditor;
-import com.intellij.openapi.module.Module;
 import com.intellij.openapi.ui.DialogWrapper;
 import org.jetbrains.android.dom.attrs.AttributeFormat;
 import org.jetbrains.annotations.Nullable;
@@ -81,9 +81,9 @@ public class RadFragment extends RadViewComponent implements IConfigurableCompon
 
   @Nullable
   private static String chooseFragment(RadComponent rootComponent) {
-    Module module = rootComponent.getClientProperty(ModelParser.MODULE_KEY);
+    ModuleProvider moduleProvider = rootComponent.getClientProperty(ModelParser.MODULE_KEY);
     ChooseClassDialog dialog =
-      new ChooseClassDialog(module, "Fragment Dialog", true, "android.app.Fragment", "android.support.v4.app.Fragment");
+      new ChooseClassDialog(moduleProvider.getModule(), "Fragment Dialog", true, "android.app.Fragment", "android.support.v4.app.Fragment");
     dialog.show();
 
     if (dialog.getExitCode() == DialogWrapper.OK_EXIT_CODE) {
index 2f1b1b402fcfba59bc8634fb5e153a07ce11d3d5..d61aea00f29a49191def3e9a47f54fcd75c171b4 100644 (file)
@@ -18,9 +18,9 @@ package com.intellij.android.designer.model;
 import com.intellij.android.designer.propertyTable.IdProperty;
 import com.intellij.android.designer.propertyTable.IncludeLayoutProperty;
 import com.intellij.android.designer.propertyTable.editors.ResourceDialog;
+import com.intellij.designer.ModuleProvider;
 import com.intellij.designer.model.RadComponent;
 import com.intellij.designer.propertyTable.Property;
-import com.intellij.openapi.module.Module;
 import com.intellij.openapi.ui.DialogWrapper;
 
 import java.util.ArrayList;
@@ -40,8 +40,8 @@ public class RadIncludeLayout extends RadViewComponent implements IConfigurableC
   }
 
   public void configure(RadComponent rootComponent) throws Exception {
-    Module module = rootComponent.getClientProperty(ModelParser.MODULE_KEY);
-    ResourceDialog dialog = new ResourceDialog(module, IncludeLayoutProperty.TYPES);
+    ModuleProvider moduleProvider = rootComponent.getClientProperty(ModelParser.MODULE_KEY);
+    ResourceDialog dialog = new ResourceDialog(moduleProvider.getModule(), IncludeLayoutProperty.TYPES);
     dialog.show();
 
     if (dialog.getExitCode() == DialogWrapper.OK_EXIT_CODE) {
index a7f1283c8f020ca8e3a7fd6f3eebbce67279e8c8..0da561885b3a5723c872d0b5d4eac0bdc1c3889b 100644 (file)
@@ -15,8 +15,8 @@
  */
 package com.intellij.android.designer.profile;
 
+import com.intellij.designer.ModuleProvider;
 import com.intellij.openapi.actionSystem.ex.ComboBoxAction;
-import com.intellij.openapi.module.Module;
 import com.intellij.openapi.ui.DialogWrapper;
 import com.intellij.openapi.ui.ValidationInfo;
 import com.intellij.openapi.util.EmptyRunnable;
@@ -63,8 +63,8 @@ public class ProfileDialog extends DialogWrapper {
 
   private final ProfileManager myProfileManager;
 
-  public ProfileDialog(Module module, List<Profile> profiles) {
-    super(module.getProject(), false);
+  public ProfileDialog(ModuleProvider moduleProvider, List<Profile> profiles) {
+    super(moduleProvider.getProject(), false);
 
     setTitle("Edit Profiles");
     getOKAction().putValue(DEFAULT_ACTION, null);
@@ -113,7 +113,7 @@ public class ProfileDialog extends DialogWrapper {
     decorator.setMoveUpAction(null);
     decorator.setMoveDownAction(null);
 
-    myProfileManager = new ProfileManager(module, EmptyRunnable.INSTANCE, EmptyRunnable.INSTANCE);
+    myProfileManager = new ProfileManager(moduleProvider, EmptyRunnable.INSTANCE, EmptyRunnable.INSTANCE);
 
 
     myContentPanel = new JPanel(new GridBagLayout());
index 22f47cedc16429e2d4e755bb25c46a0911591598..f97c8893180a145c02b1bf69bf13a61ed36059e6 100644 (file)
@@ -21,6 +21,7 @@ import com.android.ide.common.resources.configuration.RegionQualifier;
 import com.android.resources.NightMode;
 import com.android.resources.UiMode;
 import com.android.sdklib.IAndroidTarget;
+import com.intellij.designer.ModuleProvider;
 import com.intellij.designer.actions.AbstractComboBoxAction;
 import com.intellij.openapi.actionSystem.DefaultActionGroup;
 import com.intellij.openapi.actionSystem.Presentation;
@@ -45,7 +46,7 @@ import java.util.*;
 public class ProfileManager {
   private static final LayoutDevice CUSTOM_DEVICE = new LayoutDevice("Edit Devices", LayoutDevice.Type.CUSTOM);
 
-  private final Module myModule;
+  private final ModuleProvider myModuleProvider;
   private final Runnable myRefreshAction;
   private final Runnable mySelectionRunnable;
 
@@ -65,12 +66,12 @@ public class ProfileManager {
 
   private Profile myProfile;
 
-  public ProfileManager(Module module, Runnable refreshAction, Runnable selectionRunnable) {
-    myModule = module;
+  public ProfileManager(ModuleProvider moduleProvider, Runnable refreshAction, Runnable selectionRunnable) {
+    myModuleProvider = moduleProvider;
     myRefreshAction = refreshAction;
     mySelectionRunnable = selectionRunnable;
 
-    myLayoutDeviceManager = ProfileList.getInstance(module.getProject()).getLayoutDeviceManager();
+    myLayoutDeviceManager = ProfileList.getInstance(moduleProvider.getProject()).getLayoutDeviceManager();
 
     myDeviceAction = new MyComboBoxAction<LayoutDevice>() {
       @Override
@@ -87,7 +88,7 @@ public class ProfileManager {
           LayoutDeviceConfiguration configuration = myDeviceConfigurationAction.getSelection();
           configuration = configuration != null && configuration.getDevice().getType() == LayoutDevice.Type.CUSTOM ? configuration : null;
           LayoutDeviceConfigurationsDialog dialog =
-            new LayoutDeviceConfigurationsDialog(myModule.getProject(), configuration, myLayoutDeviceManager);
+            new LayoutDeviceConfigurationsDialog(myModuleProvider.getProject(), configuration, myLayoutDeviceManager);
           dialog.show();
 
           if (dialog.getExitCode() == DialogWrapper.OK_EXIT_CODE) {
@@ -264,7 +265,7 @@ public class ProfileManager {
   }
 
   public Module getModule() {
-    return myModule;
+    return myModuleProvider.getModule();
   }
 
   @Nullable
@@ -340,7 +341,7 @@ public class ProfileManager {
     List<LocaleData> locales = new ArrayList<LocaleData>();
     Map<String, Set<String>> language2Regions = new HashMap<String, Set<String>>();
 
-    AndroidFacet facet = AndroidFacet.getInstance(myModule);
+    AndroidFacet facet = AndroidFacet.getInstance(getModule());
     if (facet != null) {
       VirtualFile[] resourceDirs = facet.getLocalResourceManager().getAllResourceDirs();
       for (VirtualFile resourceDir : resourceDirs) {
@@ -586,7 +587,7 @@ public class ProfileManager {
   @Nullable
   private AndroidPlatform getPlatform(@Nullable Sdk sdk) {
     if (sdk == null) {
-      sdk = ProfileList.getInstance(myModule.getProject()).getModuleSdk(myModule);
+      sdk = ProfileList.getInstance(myModuleProvider.getProject()).getModuleSdk(getModule());
     }
     if (isAndroidSdk(sdk)) {
       AndroidSdkAdditionalData additionalData = (AndroidSdkAdditionalData)sdk.getSdkAdditionalData();
index 147d4c0638c317f247892083e306c192d1188b9f..6dd95b4453e57b286b7ff02519d85ce341ebac5b 100644 (file)
@@ -17,11 +17,11 @@ package com.intellij.android.designer.propertyTable.editors;
 
 import com.android.resources.ResourceType;
 import com.intellij.android.designer.model.ModelParser;
+import com.intellij.designer.ModuleProvider;
 import com.intellij.designer.model.RadComponent;
 import com.intellij.designer.propertyTable.InplaceContext;
 import com.intellij.designer.propertyTable.PropertyEditor;
 import com.intellij.designer.propertyTable.editors.ComboEditor;
-import com.intellij.openapi.module.Module;
 import com.intellij.openapi.ui.ComponentWithBrowseButton;
 import com.intellij.openapi.ui.DialogWrapper;
 import com.intellij.openapi.ui.TextFieldWithBrowseButton;
@@ -204,8 +204,8 @@ public class ResourceEditor extends PropertyEditor {
   }
 
   protected void showDialog() {
-    Module module = myRootComponent.getClientProperty(ModelParser.MODULE_KEY);
-    ResourceDialog dialog = new ResourceDialog(module, myTypes);
+    ModuleProvider moduleProvider = myRootComponent.getClientProperty(ModelParser.MODULE_KEY);
+    ResourceDialog dialog = new ResourceDialog(moduleProvider.getModule(), myTypes);
     dialog.show();
 
     if (dialog.getExitCode() == DialogWrapper.OK_EXIT_CODE) {
index 738144a3fce74b9f1fc0e62195f4ce155246185f..4fef2c8fbf4c2ed0dbf72b75162d6b765dcaf6fb 100644 (file)
@@ -23,7 +23,6 @@ import com.intellij.openapi.actionSystem.DataContext;
 import com.intellij.openapi.command.CommandProcessor;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.ide.CopyPasteManager;
-import com.intellij.openapi.module.Module;
 import com.intellij.uiDesigner.compiler.Utils;
 import com.intellij.uiDesigner.designSurface.GuiEditor;
 import com.intellij.uiDesigner.lw.LwComponent;
@@ -191,9 +190,8 @@ public final class CutCopyPasteSupport implements CopyProvider, CutProvider, Pas
           }
         });
 
-        final Module module = editor.getModule();
-        final ClassLoader loader = LoaderFactory.getInstance(module.getProject()).getLoader(editor.getFile());
-        final RadComponent radComponent = XmlReader.createComponent(module, lwComponent, loader, editor.getStringDescriptorLocale());
+        final ClassLoader loader = LoaderFactory.getInstance(editor.getProject()).getLoader(editor.getFile());
+        final RadComponent radComponent = XmlReader.createComponent(editor, lwComponent, loader, editor.getStringDescriptorLocale());
         componentsToPaste.add(radComponent);
       }
     }
index 1accc693b0b56534f75b1d61e5358a34ea007a41..faef895aa6d37b77aa4d8291fa2541886ad41b7f 100644 (file)
@@ -442,7 +442,7 @@ public final class FormEditingUtil {
   }
 
   public static GridConstraints getDefaultConstraints(final RadComponent component) {
-    final Palette palette = Palette.getInstance(component.getModule().getProject());
+    final Palette palette = Palette.getInstance(component.getProject());
     final ComponentItem item = palette.getItem(component.getComponentClassName());
     if (item != null) {
       return item.getDefaultConstraints();
index 1af4013dcc7352153927e4b60119b8acac8a902f..2d710bf3296aa58cfac4120b3ce2dc361bba3dbf 100644 (file)
@@ -197,7 +197,7 @@ public class GridBuildUtil {
 
       final Module module = editor.getModule();
       final ComponentItem panelItem = Palette.getInstance(editor.getProject()).getPanelItem();
-      final RadContainer newContainer = new RadContainer(module, FormEditingUtil.generateId(editor.getRootContainer()));
+      final RadContainer newContainer = new RadContainer(editor, FormEditingUtil.generateId(editor.getRootContainer()));
       newContainer.setLayout(gridLayoutManager);
       newContainer.init(editor, panelItem);
 
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/ModuleProvider.java b/plugins/ui-designer/src/com/intellij/uiDesigner/ModuleProvider.java
new file mode 100644 (file)
index 0000000..505f023
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2000-2012 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.uiDesigner;
+
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.project.Project;
+
+/**
+ * @author Alexander Lobas
+ */
+public interface ModuleProvider {
+  Module getModule();
+
+  Project getProject();
+}
\ No newline at end of file
index 000224c2ce94ecafadf510de9f87da07def49398..5ab20064712169ea7599ca72d6fc686d11a5ffad 100644 (file)
@@ -41,7 +41,7 @@ import java.util.Map;
  * @author yole
  */
 public class StringDescriptorManager {
-  private final Module myModule;
+  private Module myModule;
   private final Map<Pair<Locale, String>, SoftReference<PropertiesFile>> myPropertiesFileCache = new HashMap<Pair<Locale, String>, SoftReference<PropertiesFile>>();
 
   public StringDescriptorManager(final Module module, MessageBus bus) {
@@ -56,7 +56,11 @@ public class StringDescriptorManager {
   }
 
   public static StringDescriptorManager getInstance(Module module) {
-    return ModuleServiceManager.getService(module, StringDescriptorManager.class);
+    StringDescriptorManager service = ModuleServiceManager.getService(module, StringDescriptorManager.class);
+    if (service != null) {
+      service.myModule = module;
+    }
+    return service;
   }
 
   @Nullable public String resolve(@NotNull RadComponent component, @Nullable StringDescriptor descriptor) {
index 9170490fa324b7e7a47fa7ca4daf4bb37a62c780..9e314d6bfd5c8dcf25ca9342b9fb5a91d2f64122 100644 (file)
@@ -16,7 +16,6 @@
 package com.intellij.uiDesigner;
 
 import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
 import com.intellij.uiDesigner.compiler.RecursiveFormNestingException;
 import com.intellij.uiDesigner.compiler.Utils;
 import com.intellij.uiDesigner.lw.*;
@@ -45,13 +44,13 @@ public final class XmlReader {
   }
 
   @NotNull
-  public static RadRootContainer createRoot(final Module module, final LwRootContainer lwRootContainer, final ClassLoader loader,
+  public static RadRootContainer createRoot(final ModuleProvider module, final LwRootContainer lwRootContainer, final ClassLoader loader,
                                             final Locale stringDescriptorLocale) throws Exception{
     return (RadRootContainer)createComponent(module, lwRootContainer, loader, stringDescriptorLocale);
   }
 
   @NotNull
-  public static RadComponent createComponent(@NotNull final Module module,
+  public static RadComponent createComponent(@NotNull final ModuleProvider module,
                                              @NotNull final LwComponent lwComponent,
                                              @NotNull final ClassLoader loader,
                                              final Locale stringDescriptorLocale) throws Exception{
@@ -64,7 +63,7 @@ public final class XmlReader {
       LwNestedForm nestedForm = (LwNestedForm) lwComponent;
       boolean recursiveNesting = false;
       try {
-        Utils.validateNestedFormLoop(nestedForm.getFormFileName(), new PsiNestedFormLoader(module));
+        Utils.validateNestedFormLoop(nestedForm.getFormFileName(), new PsiNestedFormLoader(module.getModule()));
       }
       catch(RecursiveFormNestingException ex) {
         recursiveNesting = true;
@@ -258,7 +257,7 @@ public final class XmlReader {
     container.setBorderColor(lwContainer.getBorderColor());
   }
 
-  private static RadErrorComponent createErrorComponent(final Module module, final String id, final LwComponent lwComponent, final ClassLoader loader) {
+  private static RadErrorComponent createErrorComponent(final ModuleProvider module, final String id, final LwComponent lwComponent, final ClassLoader loader) {
     final String componentClassName = lwComponent.getComponentClassName();
     final String errorDescription = Utils.validateJComponentClass(loader, componentClassName, true);
     return RadErrorComponent.create(
index 341614d59ad6896d9681a946ac95d9e77a6c10b4..7341d7a65afa765c6dcda068eaaae6b7d6805f3b 100644 (file)
@@ -358,7 +358,7 @@ public final class ComponentTree extends Tree implements DataProvider {
 
   public static Icon getComponentIcon(final RadComponent component) {
     if (!(component instanceof RadErrorComponent)) {
-      final Palette palette = Palette.getInstance(component.getModule().getProject());
+      final Palette palette = Palette.getInstance(component.getProject());
       final ComponentItem item = palette.getItem(component.getComponentClassName());
       final Icon icon;
       if (item != null) {
index c0c824deed179cb73a9bc7ba545d86d6bc5f7296..e570bdb49eb538b2f32435b01f05f50ac16dc44e 100644 (file)
@@ -41,7 +41,7 @@ public class CachedGridImage {
 
   private CachedGridImage(final RadContainer container) {
     final GraphicsConfiguration graphicsConfiguration =
-      WindowManagerEx.getInstanceEx().getFrame(container.getModule().getProject()).getGraphicsConfiguration();
+      WindowManagerEx.getInstanceEx().getFrame(container.getProject()).getGraphicsConfiguration();
     if (container.getWidth() * container.getHeight() < 4096*4096) {
       myImage = graphicsConfiguration.createCompatibleImage(container.getWidth(), container.getHeight(),
                                                           Transparency.BITMASK);
index 6e59ddc0920769c7032a1a1cf9ca660ebdcc4903..d5e8dbbc09dba94079d71708e1bcfab4ea7e425c 100644 (file)
@@ -32,6 +32,7 @@ import com.intellij.openapi.editor.event.DocumentEvent;
 import com.intellij.openapi.fileEditor.FileDocumentManager;
 import com.intellij.openapi.fileTypes.StdFileTypes;
 import com.intellij.openapi.module.Module;
+import com.intellij.openapi.module.ModuleUtil;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.Ref;
 import com.intellij.openapi.vfs.ReadonlyStatusHandler;
@@ -82,10 +83,11 @@ import java.util.Map;
  * @author Anton Katilin
  * @author Vladimir Kondratyev
  */
-public final class GuiEditor extends JPanel implements DataProvider {
+public final class GuiEditor extends JPanel implements DataProvider, ModuleProvider {
   private static final Logger LOG = Logger.getInstance("#com.intellij.uiDesigner.GuiEditor");
 
-  @NotNull private final Module myModule;
+  private final Project myProject;
+  private Module myModule;
   @NotNull private final VirtualFile myFile;
 
   /**
@@ -212,9 +214,10 @@ public final class GuiEditor extends JPanel implements DataProvider {
    *          if the <code>file</code>
    *          is <code>null</code> or <code>file</code> is not valid PsiFile
    */
-  public GuiEditor(@NotNull final Module module, @NotNull final VirtualFile file) {
+  public GuiEditor(Project project, @NotNull final Module module, @NotNull final VirtualFile file) {
     LOG.assertTrue(file.isValid());
 
+    myProject = project;
     myModule = module;
     myFile = file;
 
@@ -265,9 +268,9 @@ public final class GuiEditor extends JPanel implements DataProvider {
     myDocumentListener = new DocumentAdapter() {
       public void documentChanged(final DocumentEvent e) {
         if (!myInsideChange) {
-          UndoManager undoManager = UndoManager.getInstance(module.getProject());
+          UndoManager undoManager = UndoManager.getInstance(getProject());
           alarm.cancelAllRequests();
-          alarm.addRequest(new MySynchronizeRequest(module, undoManager.isUndoInProgress() || undoManager.isRedoInProgress()),
+          alarm.addRequest(new MySynchronizeRequest(undoManager.isUndoInProgress() || undoManager.isRedoInProgress()),
                            100/*any arbitrary delay*/, ModalityState.stateForComponent(GuiEditor.this));
         }
       }
@@ -318,7 +321,7 @@ public final class GuiEditor extends JPanel implements DataProvider {
 
     // PSI listener to restart error highlighter
     myPsiTreeChangeListener = new MyPsiTreeChangeListener();
-    PsiManager.getInstance(module.getProject()).addPsiTreeChangeListener(myPsiTreeChangeListener);
+    PsiManager.getInstance(getProject()).addPsiTreeChangeListener(myPsiTreeChangeListener);
 
     myQuickFixManager = new QuickFixManagerImpl(this, myGlassLayer, myScrollPane.getViewport());
 
@@ -364,18 +367,26 @@ public final class GuiEditor extends JPanel implements DataProvider {
     paletteManager.removeDragEventListener(myPaletteDragListener);
     paletteManager.removeSelectionListener(myPaletteSelectionListener);
     myDocument.removeDocumentListener(myDocumentListener);
-    PsiManager.getInstance(myModule.getProject()).removePsiTreeChangeListener(myPsiTreeChangeListener);
+    PsiManager.getInstance(getProject()).removePsiTreeChangeListener(myPsiTreeChangeListener);
     myPsiTreeChangeListener.dispose();
   }
 
   @NotNull
-  public Project getProject() {
-    return myModule.getProject();
+  @Override
+  public Module getModule() {
+    if (myModule.isDisposed()) {
+      myModule = ModuleUtil.findModuleForFile(myFile, myProject);
+      if (myModule == null) {
+        throw new IllegalArgumentException("No module for file " + myFile + " in project " + myModule);
+      }
+    }
+    return myModule;
   }
 
   @NotNull
-  public Module getModule() {
-    return myModule;
+  @Override
+  public Project getProject() {
+    return myProject;
   }
 
   @NotNull
@@ -400,7 +411,7 @@ public final class GuiEditor extends JPanel implements DataProvider {
     if (!GuiDesignerConfiguration.getInstance(getProject()).INSTRUMENT_CLASSES) {
       final String classToBind = myRootContainer.getClassToBind();
       if (classToBind != null && classToBind.length() > 0) {
-        PsiClass psiClass = FormEditingUtil.findClassToBind(myModule, classToBind);
+        PsiClass psiClass = FormEditingUtil.findClassToBind(getModule(), classToBind);
         if (psiClass != null) {
           sourceFileToCheckOut = psiClass.getContainingFile().getVirtualFile();
         }
@@ -589,7 +600,7 @@ public final class GuiEditor extends JPanel implements DataProvider {
 
   private void saveToFile() {
     LOG.debug("GuiEditor.saveToFile(): group ID=" + myNextSaveGroupId);
-    CommandProcessor.getInstance().executeCommand(myModule.getProject(), new Runnable() {
+    CommandProcessor.getInstance().executeCommand(getProject(), new Runnable() {
       public void run() {
         ApplicationManager.getApplication().runWriteAction(new Runnable() {
           public void run() {
@@ -825,10 +836,10 @@ public final class GuiEditor extends JPanel implements DataProvider {
 
       final String text = myDocument.getText();
 
-      final ClassLoader classLoader = LoaderFactory.getInstance(myModule.getProject()).getLoader(myFile);
+      final ClassLoader classLoader = LoaderFactory.getInstance(getProject()).getLoader(myFile);
 
       final LwRootContainer rootContainer = Utils.getRootContainer(text, new CompiledClassPropertiesProvider(classLoader));
-      final RadRootContainer container = XmlReader.createRoot(myModule, rootContainer, classLoader, oldLocale);
+      final RadRootContainer container = XmlReader.createRoot(this, rootContainer, classLoader, oldLocale);
       setRootContainer(container);
       if (keepSelection) {
         SelectionState.restoreSelection(this, selection);
@@ -853,7 +864,7 @@ public final class GuiEditor extends JPanel implements DataProvider {
   private void showInvalidCard(final Throwable exc) {
     LOG.info(exc);
     // setting fictive container
-    setRootContainer(new RadRootContainer(myModule, "0"));
+    setRootContainer(new RadRootContainer(this, "0"));
     myFormInvalidLabel.setText(UIDesignerBundle.message("error.form.file.is.invalid.message", FormEditingUtil.getExceptionMessage(exc)));
     myInvalid = true;
     myCardLayout.show(this, CARD_INVALID);
@@ -1064,7 +1075,7 @@ public final class GuiEditor extends JPanel implements DataProvider {
   private final class MyPsiTreeChangeListener extends PsiTreeChangeAdapter {
     private final Alarm myAlarm;
     private final MyRefreshPropertiesRequest myRefreshPropertiesRequest = new MyRefreshPropertiesRequest();
-    private final MySynchronizeRequest mySynchronizeRequest = new MySynchronizeRequest(myModule, true);
+    private final MySynchronizeRequest mySynchronizeRequest = new MySynchronizeRequest(true);
 
     public MyPsiTreeChangeListener() {
       myAlarm = new Alarm();
@@ -1128,19 +1139,17 @@ public final class GuiEditor extends JPanel implements DataProvider {
   }
 
   private class MySynchronizeRequest implements Runnable {
-    private final Module myModule;
     private final boolean myKeepSelection;
 
-    public MySynchronizeRequest(final Module module, final boolean keepSelection) {
-      myModule = module;
+    public MySynchronizeRequest(final boolean keepSelection) {
       myKeepSelection = keepSelection;
     }
 
     public void run() {
-      if (myModule.isDisposed()) {
+      if (getModule().isDisposed()) {
         return;
       }
-      Project project = myModule.getProject();
+      Project project = getProject();
       if (project.isDisposed()) {
         return;
       }
@@ -1152,7 +1161,7 @@ public final class GuiEditor extends JPanel implements DataProvider {
 
   private class MyRefreshPropertiesRequest implements Runnable {
     public void run() {
-      if (!myModule.isDisposed() && !getProject().isDisposed()) {
+      if (!getModule().isDisposed() && !getProject().isDisposed()) {
         refreshProperties();
       }
     }
index f3ca9f16f78218272fabc9933d9ff5d1b26a0579..1fc39ad60d476eecb432ec6c89b974bf4c700a5a 100644 (file)
@@ -174,7 +174,7 @@ public final class InsertComponentProcessor extends EventProcessor {
     //noinspection ForLoopThatDoesntUseLoopVariable
     for(int i = 0; true; i++){
       final String nameCandidate = baseName + (i + 1);
-      final String binding = JavaCodeStyleManager.getInstance(root.getModule().getProject()).propertyNameToVariableName(
+      final String binding = JavaCodeStyleManager.getInstance(root.getProject()).propertyNameToVariableName(
         nameCandidate,
         VariableKind.FIELD
       );
@@ -465,7 +465,7 @@ public final class InsertComponentProcessor extends EventProcessor {
     RadComponentFactory factory = getRadComponentFactory(item.getClassName(), loader);
     if (factory != null) {
       try {
-        result = factory.newInstance(editor.getModule(), item.getClassName(), id);
+        result = factory.newInstance(editor, item.getClassName(), id);
       }
       catch (Exception e) {
         LOG.error(e);
@@ -477,13 +477,13 @@ public final class InsertComponentProcessor extends EventProcessor {
       if (boundForm != null) {
         final String formFileName = FormEditingUtil.buildResourceName(boundForm);
         try {
-          result = new RadNestedForm(editor.getModule(), formFileName, id);
+          result = new RadNestedForm(editor, formFileName, id);
         }
         catch(Exception ex) {
           String errorMessage = UIDesignerBundle.message("error.instantiating.nested.form", formFileName,
                                 (ex.getMessage() != null ? ex.getMessage() : ex.toString()));
           result = RadErrorComponent.create(
-            editor.getModule(),
+            editor,
             id,
             item.getClassName(),
             null,
@@ -496,14 +496,14 @@ public final class InsertComponentProcessor extends EventProcessor {
           final Class aClass = Class.forName(item.getClassName(), true, loader);
           if (item.isContainer()) {
             LOG.debug("Creating custom container instance");
-            result = new RadContainer(editor.getModule(), aClass, id);
+            result = new RadContainer(editor, aClass, id);
           }
           else {
-            result = new RadAtomicComponent(editor.getModule(), aClass, id);
+            result = new RadAtomicComponent(editor, aClass, id);
           }
         }
         catch(final UnsupportedClassVersionError ucve) {
-          result = RadErrorComponent.create(editor.getModule(), id, item.getClassName(), null,
+          result = RadErrorComponent.create(editor, id, item.getClassName(), null,
             UIDesignerBundle.message("unsupported.component.class.version")
           );
         }
@@ -518,7 +518,7 @@ public final class InsertComponentProcessor extends EventProcessor {
             }
           }
           result = RadErrorComponent.create(
-            editor.getModule(),
+            editor,
             id,
             item.getClassName(),
             null,
index 48d6b9f10b6707797c602f2a9ac051c97f7bbaff..796b880b6244c42150a49ce2fe9cf921ae9a40ff 100644 (file)
@@ -52,10 +52,10 @@ public final class UIFormEditor extends UserDataHolderBase implements /*Navigata
     final VirtualFile vf = file instanceof LightVirtualFile ? ((LightVirtualFile)file).getOriginalFile() : file;
     final Module module = ModuleUtil.findModuleForFile(vf, project);
     if (module == null) {
-      throw new IllegalArgumentException("no module for file " + file + " in project " + project);
+      throw new IllegalArgumentException("No module for file " + file + " in project " + project);
     }
     myFile = file;
-    myEditor = new GuiEditor(module, file);
+    myEditor = new GuiEditor(project, module, file);
   }
 
   @NotNull
index c2d23088a6f37dfcb5deb87d9669545747820447..03c65b6640b1d978866160694e4fe18860831f24 100644 (file)
@@ -124,7 +124,7 @@ public final class BindingEditor extends ComboBoxPropertyEditor<String> {
       final PsiType componentType;
       try {
         componentType =
-          JavaPsiFacade.getInstance(component.getModule().getProject()).getElementFactory().createTypeFromText(componentClassName, null);
+          JavaPsiFacade.getInstance(component.getProject()).getElementFactory().createTypeFromText(componentClassName, null);
       }
       catch (IncorrectOperationException e) {
         continue;
index 9a57f37b4ea7c4728f659b71261f3e10af461dc0..7e6b94dc47846f8a2e214bd0128cbf418886a184 100644 (file)
@@ -75,7 +75,7 @@ public class ColorEditor extends PropertyEditor<ColorDescriptor> {
 
   public JComponent getComponent(RadComponent component, ColorDescriptor value, InplaceContext inplaceContext) {
     myValue = value != null ? value : new ColorDescriptor(new Color(0));
-    myProject = component.getModule().getProject();
+    myProject = component.getProject();
     updateTextField();
     return myTextField;
   }
index 2d072bd8118feeaecddfc571371a38e61f75dd93..5b0644507e8928b2e7e2f43df40d61f88ce492c0 100644 (file)
@@ -63,7 +63,7 @@ public class FontEditor extends PropertyEditor<FontDescriptor> {
   }
 
   public JComponent getComponent(RadComponent component, FontDescriptor value, InplaceContext inplaceContext) {
-    myProject = component.getModule().getProject();
+    myProject = component.getProject();
     myValue = value != null ? value : new FontDescriptor(null, -1, -1);
     myTextField.setText(IntroFontProperty.descriptorToString(myValue));
     return myTextField;
index c80a5ea788d198615b7fc2fafd18ecb54c519e74..c3049b72bb2f079348d9fd4a97bb8bbd70df3edb 100644 (file)
@@ -23,14 +23,14 @@ import com.intellij.openapi.ui.TextFieldWithBrowseButton;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.psi.PsiFile;
 import com.intellij.psi.PsiManager;
+import com.intellij.uiDesigner.FormEditingUtil;
 import com.intellij.uiDesigner.ImageFileFilter;
-import com.intellij.uiDesigner.radComponents.RadComponent;
 import com.intellij.uiDesigner.UIDesignerBundle;
-import com.intellij.uiDesigner.FormEditingUtil;
 import com.intellij.uiDesigner.lw.IconDescriptor;
-import com.intellij.uiDesigner.propertyInspector.PropertyEditor;
 import com.intellij.uiDesigner.propertyInspector.InplaceContext;
+import com.intellij.uiDesigner.propertyInspector.PropertyEditor;
 import com.intellij.uiDesigner.propertyInspector.properties.IntroIconProperty;
+import com.intellij.uiDesigner.radComponents.RadComponent;
 
 import javax.swing.*;
 import java.awt.event.ActionEvent;
@@ -42,23 +42,24 @@ import java.awt.event.ActionListener;
 public class IconEditor extends PropertyEditor<IconDescriptor> {
   private final TextFieldWithBrowseButton myTextField = new TextFieldWithBrowseButton();
   private IconDescriptor myValue;
-  private Module myModule;
+  private RadComponent myComponent;
 
   public IconEditor() {
     myTextField.getTextField().setBorder(null);
     myTextField.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
-        final TreeClassChooserFactory factory = TreeClassChooserFactory.getInstance(myModule.getProject());
+        final TreeClassChooserFactory factory = TreeClassChooserFactory.getInstance(getModule().getProject());
         PsiFile iconFile = null;
         if (myValue != null) {
-          VirtualFile iconVFile = ResourceFileUtil.findResourceFileInScope(myValue.getIconPath(), myModule.getProject(),
-                                                                     myModule.getModuleWithDependenciesAndLibrariesScope(true));
+          VirtualFile iconVFile = ResourceFileUtil.findResourceFileInScope(myValue.getIconPath(), getModule().getProject(),
+                                                                           getModule()
+                                                                             .getModuleWithDependenciesAndLibrariesScope(true));
           if (iconVFile != null) {
-            iconFile = PsiManager.getInstance(myModule.getProject()).findFile(iconVFile);
+            iconFile = PsiManager.getInstance(getModule().getProject()).findFile(iconVFile);
           }
         }
         TreeFileChooser fileChooser = factory.createFileChooser(UIDesignerBundle.message("title.choose.icon.file"), iconFile,
-                                                                null, new ImageFileFilter(myModule), false, true);
+                                                                null, new ImageFileFilter(getModule()), false, true);
         fileChooser.showDialog();
         PsiFile file = fileChooser.getSelectedFile();
         if (file != null) {
@@ -74,18 +75,22 @@ public class IconEditor extends PropertyEditor<IconDescriptor> {
     });
   }
 
+  private Module getModule() {
+    return myComponent.getModule();
+  }
+
   public IconDescriptor getValue() throws Exception {
     if (myTextField.getText().length() == 0) {
       return null;
     }
     final IconDescriptor descriptor = new IconDescriptor(myTextField.getText());
-    IntroIconProperty.ensureIconLoaded(myModule, descriptor);
+    IntroIconProperty.ensureIconLoaded(getModule(), descriptor);
     return descriptor;
   }
 
   public JComponent getComponent(RadComponent component, IconDescriptor value, InplaceContext inplaceContext) {
     myValue = value;
-    myModule = component.getModule();
+    myComponent = component;
     if (myValue != null) {
       myTextField.setText(myValue.getIconPath());
     }
@@ -98,5 +103,4 @@ public class IconEditor extends PropertyEditor<IconDescriptor> {
   public void updateUI() {
     SwingUtilities.updateComponentTreeUI(myTextField);
   }
-
 }
index 76225e42463a74481c7aaf8646f9ced3dbfbe699..6ea8ac1087e31f6c64006b95be5e48fb4ef2d237 100644 (file)
@@ -317,7 +317,7 @@ public final class BindingProperty extends Property<RadComponent, String> {
       nameBuilder.append(shortClassName);
 
       RadRootContainer root = (RadRootContainer) FormEditingUtil.getRoot(component);
-      Project project = root.getModule().getProject();
+      Project project = root.getProject();
       String binding = JavaCodeStyleManager.getInstance(project).propertyNameToVariableName(nameBuilder.toString(), VariableKind.FIELD);
       if (FormEditingUtil.findComponentWithBinding(root, binding, component) != null) {
         binding = InsertComponentProcessor.getUniqueBinding(root, nameBuilder.toString());
index d670980fb47284d35491861e42eb2798308ae8a6..0a389e15dcdb8191f3a250e09598e2ed72621a9a 100644 (file)
@@ -23,7 +23,6 @@ import com.intellij.openapi.actionSystem.AnActionEvent;
 import com.intellij.openapi.actionSystem.CommonShortcuts;
 import com.intellij.openapi.editor.Document;
 import com.intellij.openapi.fileTypes.StdFileTypes;
-import com.intellij.openapi.module.Module;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.roots.ProjectFileIndex;
 import com.intellij.openapi.roots.ProjectRootManager;
@@ -125,7 +124,7 @@ public final class ClassToBindProperty extends Property<RadRootContainer, String
     public JComponent getComponent(final RadComponent component, final String value, final InplaceContext inplaceContext) {
       myInitialValue = value;
       setEditorText(value != null ? value : "");
-      myActionListener.setModule(component.getModule());
+      myActionListener.setComponent(component);
       return myTfWithButton;
     }
 
@@ -142,17 +141,17 @@ public final class ClassToBindProperty extends Property<RadRootContainer, String
     }
 
     private final class MyActionListener implements ActionListener{
-      private Module myModule;
+      RadComponent myComponent;
 
-      public void setModule(final Module module) {
-        myModule = module;
+      public void setComponent(RadComponent component) {
+        myComponent = component;
       }
 
       public void actionPerformed(final ActionEvent e){
         final String className = myEditorTextField.getText();
-        final PsiClass aClass = FormEditingUtil.findClassToBind(myModule, className);
+        final PsiClass aClass = FormEditingUtil.findClassToBind(myComponent.getModule(), className);
 
-        final Project project = myModule.getProject();
+        final Project project = myComponent.getProject();
         final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
         final TreeClassChooser chooser = TreeClassChooserFactory.getInstance(project).createWithInnerClassesScopeChooser(
           UIDesignerBundle.message("title.choose.class.to.bind"),
index b7d47974301930dc6bbffd000fb12ed380a73bd6..6c0ef44d015aecbe3b34f47043a7abbc58b24aab 100644 (file)
@@ -15,7 +15,7 @@
  */
 package com.intellij.uiDesigner.radComponents;
 
-import com.intellij.openapi.module.Module;
+import com.intellij.uiDesigner.ModuleProvider;
 import com.intellij.uiDesigner.XmlWriter;
 import com.intellij.uiDesigner.palette.Palette;
 import org.jetbrains.annotations.NotNull;
@@ -25,7 +25,7 @@ import org.jetbrains.annotations.NotNull;
  * @author Vladimir Kondratyev
  */
 public class RadAtomicComponent extends RadComponent {
-  public RadAtomicComponent(final Module module, final Class aClass, final String id){
+  public RadAtomicComponent(final ModuleProvider module, final Class aClass, final String id){
     super(module, aClass, id);
   }
 
index e99a16dd2c8a69fc8aa47b547ca080a05e6a5764..54a2ea38c57573a964b50fbcaf12acf8a4a3fc5a 100644 (file)
@@ -18,10 +18,7 @@ package com.intellij.uiDesigner.radComponents;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.project.Project;
-import com.intellij.uiDesigner.UIFormXmlConstants;
-import com.intellij.uiDesigner.XmlWriter;
-import com.intellij.uiDesigner.SwingProperties;
-import com.intellij.uiDesigner.StringDescriptorManager;
+import com.intellij.uiDesigner.*;
 import com.intellij.uiDesigner.compiler.Utils;
 import com.intellij.uiDesigner.core.GridConstraints;
 import com.intellij.uiDesigner.core.Util;
@@ -96,7 +93,8 @@ public abstract class RadComponent implements IComponent {
   private boolean myCustomCreate = false;
   private boolean myLoadingProperties = false;
 
-  @NotNull private final Module myModule;
+  private final ModuleProvider myModule;
+
   @NotNull private final Class myClass;
   /**
    * Delegee is the JComponent which really represents the
@@ -138,7 +136,7 @@ public abstract class RadComponent implements IComponent {
    * @param id     id of the compoent inside the form. <code>id</code>
    *               should be a unique atring inside the form.
    */
-  public RadComponent(final Module module, @NotNull final Class aClass, @NotNull final String id) {
+  public RadComponent(final ModuleProvider module, @NotNull final Class aClass, @NotNull final String id) {
     myModule = module;
     myClass = aClass;
     myId = id;
@@ -172,7 +170,7 @@ public abstract class RadComponent implements IComponent {
     myDelegee.putClientProperty(CLIENT_PROP_RAD_COMPONENT, this);
   }
 
-  public RadComponent(final Module module, @NotNull final Class aClass, @NotNull final String id, final Palette palette) {
+  public RadComponent(final ModuleProvider module, @NotNull final Class aClass, @NotNull final String id, final Palette palette) {
     this(module, aClass, id);
     myPalette = palette;
   }
@@ -181,16 +179,15 @@ public abstract class RadComponent implements IComponent {
    * @return module for the component.
    */
   public final Module getModule() {
-    return myModule;
+    return myModule == null ? null : myModule.getModule();
   }
 
-  public boolean isLoadingProperties() {
-    return myLoadingProperties;
+  public final Project getProject() {
+    return myModule == null ? null : myModule.getProject();
   }
 
-  @NotNull
-  public final Project getProject() {
-    return myModule.getProject();
+  public boolean isLoadingProperties() {
+    return myLoadingProperties;
   }
 
   public Palette getPalette() {
@@ -630,7 +627,9 @@ public abstract class RadComponent implements IComponent {
   }
 
   private void writeClientProperties(final XmlWriter writer) {
-    if (myModule == null) return;
+    if (myModule == null) {
+      return;
+    }
     boolean haveClientProperties = false;
     try {
       ClientPropertiesProperty cpp = ClientPropertiesProperty.getInstance(getProject());
@@ -800,7 +799,7 @@ public abstract class RadComponent implements IComponent {
 
   @Nullable
   public String getComponentTitle() {
-    Palette palette = Palette.getInstance(getModule().getProject());
+    Palette palette = Palette.getInstance(getProject());
     IntrospectedProperty[] props = palette.getIntrospectedProperties(this);
     for (IntrospectedProperty prop : props) {
       if (prop.getName().equals(SwingProperties.TEXT) && prop instanceof IntroStringProperty) {
index 7a07d0e62a1614bb7ec47346a5736c445dccc4a0..c6960b4e9b3c71e1c3eb60ebcd67f7462c023d2d 100644 (file)
@@ -24,15 +24,17 @@ package com.intellij.uiDesigner.radComponents;
 
 import com.intellij.openapi.module.Module;
 import com.intellij.uiDesigner.LoaderFactory;
+import com.intellij.uiDesigner.ModuleProvider;
 import com.intellij.uiDesigner.palette.Palette;
 
 public abstract class RadComponentFactory {
-  public RadComponent newInstance(Module module, String className, String id) throws ClassNotFoundException {
+  public RadComponent newInstance(ModuleProvider moduleProvider, String className, String id) throws ClassNotFoundException {
+    Module module = moduleProvider.getModule();
     final Class<?> aClass = Class.forName(className, true, LoaderFactory.getInstance(module.getProject()).getLoader(module));
-    return newInstance(module, aClass, id);
+    return newInstance(moduleProvider, aClass, id);
   }
 
-  protected abstract RadComponent newInstance(Module module, Class aClass, String id);
+  protected abstract RadComponent newInstance(ModuleProvider moduleProvider, Class aClass, String id);
 
   public abstract RadComponent newInstance(final Class componentClass, final String id, final Palette palette);
 }
\ No newline at end of file
index a99eea514c22c192914c668a5e05729a1ba76378..663dfc3a724bb13ae882d7bd17f02dcc06d32342 100644 (file)
@@ -16,7 +16,6 @@
 package com.intellij.uiDesigner.radComponents;
 
 import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
 import com.intellij.openapi.util.Comparing;
 import com.intellij.uiDesigner.*;
 import com.intellij.uiDesigner.core.AbstractLayout;
@@ -47,7 +46,7 @@ public class RadContainer extends RadComponent implements IContainer {
   private static final Logger LOG = Logger.getInstance("#com.intellij.uiDesigner.radComponents.RadContainer");
 
   public static class Factory extends RadComponentFactory {
-    public RadComponent newInstance(Module module, Class aClass, String id) {
+    public RadComponent newInstance(ModuleProvider module, Class aClass, String id) {
       return new RadContainer(module, aClass, id);
     }
 
@@ -84,11 +83,11 @@ public class RadContainer extends RadComponent implements IContainer {
   protected RadLayoutManager myLayoutManager;
   private LayoutManager myDelegeeLayout;
 
-  public RadContainer(final Module module, final String id) {
+  public RadContainer(final ModuleProvider module, final String id) {
     this(module, JPanel.class, id);
   }
 
-  public RadContainer(final Module module, final Class aClass, final String id) {
+  public RadContainer(final ModuleProvider module, final Class aClass, final String id) {
     super(module, aClass, id);
 
     myComponents = new ArrayList<RadComponent>();
@@ -114,7 +113,7 @@ public class RadContainer extends RadComponent implements IContainer {
   protected RadLayoutManager createInitialLayoutManager() {
     String defaultLayoutManager = UIFormXmlConstants.LAYOUT_INTELLIJ;
     if (getModule() != null) {
-      final GuiDesignerConfiguration configuration = GuiDesignerConfiguration.getInstance(getModule().getProject());
+      final GuiDesignerConfiguration configuration = GuiDesignerConfiguration.getInstance(getProject());
       defaultLayoutManager = configuration.DEFAULT_LAYOUT_MANAGER;
     }
 
@@ -701,7 +700,7 @@ public class RadContainer extends RadComponent implements IContainer {
 
     public MyBorderTitleProperty() {
       super(null, "Title");
-      myEditor = new StringEditor(getModule().getProject());
+      myEditor = new StringEditor(getProject());
     }
 
     public Dimension getPreferredSize() {
index 6d86909e588a055714710ca759969633b7484544..fe98768b1e1b70996b26e3df12b5d0860bcbbc45 100644 (file)
 package com.intellij.uiDesigner.radComponents;
 
 import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
+import com.intellij.uiDesigner.ModuleProvider;
 import com.intellij.uiDesigner.XmlWriter;
 import org.jdom.Element;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Graphics;
+import java.awt.*;
 
 /**
  * @author Anton Katilin
@@ -39,17 +37,17 @@ public final class RadErrorComponent extends RadAtomicComponent {
   private final String myErrorDescription;
 
   public static RadErrorComponent create(
-    final Module module,
+    final ModuleProvider module,
     final String id,
     final String componentClassName,
     final Element properties,
     @NotNull final String errorDescription
-  ){
+  ) {
     return new RadErrorComponent(module, id, componentClassName, properties, errorDescription);
   }
 
   private RadErrorComponent(
-    final Module module,
+    final ModuleProvider module,
     final String id,
     @NotNull final String componentClassName,
     @Nullable final Element properties,
@@ -63,7 +61,7 @@ public final class RadErrorComponent extends RadAtomicComponent {
   }
 
   @NotNull
-  public String getComponentClassName(){
+  public String getComponentClassName() {
     return myComponentClassName;
   }
 
@@ -73,7 +71,7 @@ public final class RadErrorComponent extends RadAtomicComponent {
 
   public void write(final XmlWriter writer) {
     writer.startElement("component");
-    try{
+    try {
       writeId(writer);
 
       // write class
@@ -83,26 +81,28 @@ public final class RadErrorComponent extends RadAtomicComponent {
       writeConstraints(writer);
 
       // write properties (if any)
-      if(myProperties != null){
+      if (myProperties != null) {
         writer.writeElement(myProperties);
       }
-    }finally{
+    }
+    finally {
       writer.endElement(); // component
     }
   }
 
-  private static final class MyComponent extends JComponent{
-    public MyComponent(){
+  private static final class MyComponent extends JComponent {
+    public MyComponent() {
       setMinimumSize(new Dimension(20, 20));
     }
 
-    public void paint(final Graphics g){
+    public void paint(final Graphics g) {
       g.setColor(Color.red);
-      g.fillRect(0,0,getWidth(),getHeight());
+      g.fillRect(0, 0, getWidth(), getHeight());
     }
   }
 
-  @Override public boolean hasIntrospectedProperties() {
+  @Override
+  public boolean hasIntrospectedProperties() {
     return false;
   }
 }
index f149978d7edb1a2b0ecd4c7d20bbe00a8c118f34..b5df95978735b09f94f30aa6d0a4eda85bfdc49d 100644 (file)
  */
 package com.intellij.uiDesigner.radComponents;
 
-import com.intellij.openapi.module.Module;
 import com.intellij.uiDesigner.HSpacer;
+import com.intellij.uiDesigner.ModuleProvider;
 import com.intellij.uiDesigner.XmlWriter;
-import com.intellij.uiDesigner.palette.Palette;
 import com.intellij.uiDesigner.core.GridConstraints;
+import com.intellij.uiDesigner.palette.Palette;
 
 /**
  * @author Anton Katilin
@@ -27,25 +27,25 @@ import com.intellij.uiDesigner.core.GridConstraints;
  */
 public final class RadHSpacer extends RadAtomicComponent {
   public static class Factory extends RadComponentFactory {
-    public RadComponent newInstance(Module module, Class aClass, String id) {
-      return new RadHSpacer(module, aClass, id);
+    public RadComponent newInstance(ModuleProvider moduleProvider, Class aClass, String id) {
+      return new RadHSpacer(moduleProvider, aClass, id);
     }
 
     public RadComponent newInstance(final Class componentClass, final String id, final Palette palette) {
       throw new UnsupportedOperationException("Spacer instances should not be created by SnapShooter");
     }
 
-    public RadComponent newInstance(Module module, String className, String id) throws ClassNotFoundException {
-      return new RadHSpacer(module, HSpacer.class, id);
+    public RadComponent newInstance(ModuleProvider moduleProvider, String className, String id) throws ClassNotFoundException {
+      return new RadHSpacer(moduleProvider, HSpacer.class, id);
     }
   }
 
-  public RadHSpacer(final Module module, final String id) {
-    super(module, HSpacer.class, id);
+  public RadHSpacer(final ModuleProvider moduleProvider, final String id) {
+    super(moduleProvider, HSpacer.class, id);
   }
 
-  public RadHSpacer(final Module module, final Class aClass, final String id) {
-    super(module, aClass, id);
+  public RadHSpacer(final ModuleProvider moduleProvider, final Class aClass, final String id) {
+    super(moduleProvider, aClass, id);
   }
 
   /**
@@ -61,15 +61,17 @@ public final class RadHSpacer extends RadAtomicComponent {
 
   public void write(final XmlWriter writer) {
     writer.startElement("hspacer");
-    try{
+    try {
       writeId(writer);
       writeConstraints(writer);
-    }finally{
+    }
+    finally {
       writer.endElement(); // hspacer
     }
   }
 
-  @Override public boolean hasIntrospectedProperties() {
+  @Override
+  public boolean hasIntrospectedProperties() {
     return false;
   }
 }
index 00913d2dc02cff978e8eb458073506e9476130e8..4d9597c379b884ec9f6c9a4d221fb41533eaa0ee 100644 (file)
@@ -19,7 +19,6 @@ package com.intellij.uiDesigner.radComponents;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.editor.Document;
 import com.intellij.openapi.fileEditor.FileDocumentManager;
-import com.intellij.openapi.module.Module;
 import com.intellij.openapi.module.ResourceFileUtil;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.psi.PsiClass;
@@ -42,16 +41,16 @@ public class RadNestedForm extends RadComponent {
   private final String myFormFileName;
   private final RadRootContainer myRootContainer;
 
-  public RadNestedForm(final Module module, final String formFileName, final String id) throws Exception {
+  public RadNestedForm(final ModuleProvider module, final String formFileName, final String id) throws Exception {
     super(module, JPanel.class, id);
     myFormFileName = formFileName;
     LOG.debug("Loading nested form " + formFileName);
-    VirtualFile formFile = ResourceFileUtil.findResourceFileInDependents(module, formFileName);
+    VirtualFile formFile = ResourceFileUtil.findResourceFileInDependents(getModule(), formFileName);
     if (formFile == null) {
       throw new IllegalArgumentException("Couldn't find virtual file for nested form " + formFileName);
     }
     Document doc = FileDocumentManager.getInstance().getDocument(formFile);
-    final ClassLoader classLoader = LoaderFactory.getInstance(module.getProject()).getLoader(formFile);
+    final ClassLoader classLoader = LoaderFactory.getInstance(getProject()).getLoader(formFile);
     final LwRootContainer rootContainer = Utils.getRootContainer(doc.getText(), new CompiledClassPropertiesProvider(classLoader));
     myRootContainer = XmlReader.createRoot(module, rootContainer, classLoader, null);
     if (myRootContainer.getComponentCount() > 0) {
@@ -69,32 +68,35 @@ public class RadNestedForm extends RadComponent {
 
   private void setRadComponentRecursive(final JComponent component) {
     component.putClientProperty(CLIENT_PROP_RAD_COMPONENT, this);
-    for(int i=0; i<component.getComponentCount(); i++) {
+    for (int i = 0; i < component.getComponentCount(); i++) {
       final Component child = component.getComponent(i);
       if (child instanceof JComponent) {
-        setRadComponentRecursive((JComponent) child);
+        setRadComponentRecursive((JComponent)child);
       }
     }
   }
 
   public void write(XmlWriter writer) {
     writer.startElement(UIFormXmlConstants.ELEMENT_NESTED_FORM);
-    try{
+    try {
       writeId(writer);
       writer.addAttribute(UIFormXmlConstants.ATTRIBUTE_FORM_FILE, myFormFileName);
       writeBinding(writer);
       writeConstraints(writer);
-    } finally {
+    }
+    finally {
       writer.endElement(); // component
     }
   }
 
-  @Override @NotNull
+  @Override
+  @NotNull
   public String getComponentClassName() {
     return myRootContainer.getClassToBind();
   }
 
-  @Override public boolean hasIntrospectedProperties() {
+  @Override
+  public boolean hasIntrospectedProperties() {
     return false;
   }
 
index 2d2675e05d6f459946f3c7e7555bc45d550d2b96..9f17398a129b4080ac0798fc798e6e2dc231fe8b 100644 (file)
  */
 package com.intellij.uiDesigner.radComponents;
 
-import com.intellij.openapi.module.Module;
 import com.intellij.openapi.util.Comparing;
 import com.intellij.psi.codeStyle.JavaCodeStyleManager;
 import com.intellij.psi.codeStyle.SuggestedNameInfo;
 import com.intellij.psi.codeStyle.VariableKind;
 import com.intellij.uiDesigner.FormEditingUtil;
+import com.intellij.uiDesigner.ModuleProvider;
 import com.intellij.uiDesigner.UIFormXmlConstants;
 import com.intellij.uiDesigner.XmlWriter;
 import com.intellij.uiDesigner.compiler.Utils;
@@ -50,7 +50,7 @@ public final class RadRootContainer extends RadContainer implements IRootContain
   private final List<RadButtonGroup> myButtonGroups = new ArrayList<RadButtonGroup>();
   private final List<LwInspectionSuppression> myInspectionSuppressions = new ArrayList<LwInspectionSuppression>();
 
-  public RadRootContainer(final Module module, final String id) {
+  public RadRootContainer(final ModuleProvider module, final String id) {
     super(module, JPanel.class, id);
     getDelegee().setBackground(Color.WHITE);
   }
index fc92e40880e1380ee24c25a0d427f957f26ff76c..3a7ab9abe1c2a4fc47131e5f7bc8f716e40dab1d 100644 (file)
@@ -16,7 +16,7 @@
 package com.intellij.uiDesigner.radComponents;
 
 import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
+import com.intellij.uiDesigner.ModuleProvider;
 import com.intellij.uiDesigner.UIFormXmlConstants;
 import com.intellij.uiDesigner.XmlWriter;
 import com.intellij.uiDesigner.core.GridConstraints;
@@ -41,7 +41,7 @@ public final class RadScrollPane extends RadContainer {
   private static final Logger LOG = Logger.getInstance("#com.intellij.uiDesigner.radComponents.RadScrollPane");
 
   public static class Factory extends RadComponentFactory {
-    public RadComponent newInstance(Module module, Class aClass, String id) {
+    public RadComponent newInstance(ModuleProvider module, Class aClass, String id) {
       return new RadScrollPane(module, aClass, id);
     }
 
@@ -50,7 +50,7 @@ public final class RadScrollPane extends RadContainer {
     }
   }
 
-  public RadScrollPane(final Module module, final Class componentClass, final String id){
+  public RadScrollPane(final ModuleProvider module, final Class componentClass, final String id){
     super(module, componentClass, id);
   }
 
index 674cd3f2f99e567b3ccdd38f85c98026002283e7..50faa6509b023d743021d85047c3c48d6b235c3a 100644 (file)
@@ -15,7 +15,7 @@
  */
 package com.intellij.uiDesigner.radComponents;
 
-import com.intellij.openapi.module.Module;
+import com.intellij.uiDesigner.ModuleProvider;
 import com.intellij.uiDesigner.UIDesignerBundle;
 import com.intellij.uiDesigner.UIFormXmlConstants;
 import com.intellij.uiDesigner.XmlWriter;
@@ -38,7 +38,7 @@ import java.awt.event.MouseEvent;
  */
 public final class RadSplitPane extends RadContainer {
   public static class Factory extends RadComponentFactory {
-    public RadComponent newInstance(Module module, Class aClass, String id) {
+    public RadComponent newInstance(ModuleProvider module, Class aClass, String id) {
       return new RadSplitPane(module, aClass, id);
     }
 
@@ -47,7 +47,7 @@ public final class RadSplitPane extends RadContainer {
     }
   }
 
-  public RadSplitPane(final Module module, final Class componentClass, final String id) {
+  public RadSplitPane(final ModuleProvider module, final Class componentClass, final String id) {
     super(module, componentClass, id);
   }
 
index 4670d2199a3866f74b5e6a22bf2591b4841f6e8e..a285a975a0744e65fe8e4bd767577824d8c1a076 100644 (file)
@@ -16,7 +16,6 @@
 package com.intellij.uiDesigner.radComponents;
 
 import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.text.StringUtil;
@@ -53,7 +52,7 @@ import java.awt.event.MouseEvent;
 public final class RadTabbedPane extends RadContainer implements ITabbedPane {
 
   public static class Factory extends RadComponentFactory {
-    public RadComponent newInstance(Module module, Class aClass, String id) {
+    public RadComponent newInstance(ModuleProvider module, Class aClass, String id) {
       return new RadTabbedPane(module, aClass, id);
     }
 
@@ -72,7 +71,7 @@ public final class RadTabbedPane extends RadContainer implements ITabbedPane {
   private int mySelectedIndex = -1;
   private IntrospectedProperty mySelectedIndexProperty = null;
 
-  public RadTabbedPane(final Module module, Class componentClass, final String id){
+  public RadTabbedPane(final ModuleProvider module, Class componentClass, final String id){
     super(module, componentClass, id);
   }
 
@@ -342,7 +341,7 @@ public final class RadTabbedPane extends RadContainer implements ITabbedPane {
 
   private class MyTitleProperty extends Property<RadComponent, StringDescriptor> {
     protected final int myIndex;
-    private final StringEditor myEditor = new StringEditor(getModule().getProject());
+    private final StringEditor myEditor = new StringEditor(getProject());
     private final StringRenderer myRenderer = new StringRenderer();
 
     public MyTitleProperty(final Property parent, final int index) {
index f02ca881de36c6f0fd281944d3742e6fb7ae9ef5..8f4aee88fa83a90c1584e0bd0ada0ac00ab79b8a 100644 (file)
@@ -16,7 +16,7 @@
 
 package com.intellij.uiDesigner.radComponents;
 
-import com.intellij.openapi.module.Module;
+import com.intellij.uiDesigner.ModuleProvider;
 import com.intellij.uiDesigner.palette.Palette;
 import org.jetbrains.annotations.NonNls;
 
@@ -28,7 +28,7 @@ import javax.swing.table.DefaultTableModel;
  */
 public class RadTable extends RadAtomicComponent {
   public static class Factory extends RadComponentFactory {
-    public RadComponent newInstance(Module module, Class aClass, String id) {
+    public RadComponent newInstance(ModuleProvider module, Class aClass, String id) {
       return new RadTable(module, aClass, id);
     }
 
@@ -37,7 +37,7 @@ public class RadTable extends RadAtomicComponent {
     }
   }
 
-  public RadTable(final Module module, final Class componentClass, final String id) {
+  public RadTable(final ModuleProvider module, final Class componentClass, final String id) {
     super(module, componentClass, id);
     initDefaultModel();
   }
index 5e01cdeaf9502aa7a3843d3a5346537fa337aa05..b5635082cb145029264fd928ba365619fb846692 100644 (file)
 
 package com.intellij.uiDesigner.radComponents;
 
-import com.intellij.openapi.module.Module;
+import com.intellij.uiDesigner.ModuleProvider;
 import com.intellij.uiDesigner.UIFormXmlConstants;
 import com.intellij.uiDesigner.XmlWriter;
+import com.intellij.uiDesigner.designSurface.ComponentDropLocation;
 import com.intellij.uiDesigner.palette.Palette;
-import com.intellij.uiDesigner.designSurface.*;
-import org.jetbrains.annotations.Nullable;
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
 import java.awt.*;
@@ -32,7 +32,7 @@ import java.awt.*;
  */
 public class RadToolBar extends RadContainer {
   public static class Factory extends RadComponentFactory {
-    public RadComponent newInstance(Module module, Class aClass, String id) {
+    public RadComponent newInstance(ModuleProvider module, Class aClass, String id) {
       return new RadToolBar(module, aClass, id);
     }
 
@@ -41,7 +41,7 @@ public class RadToolBar extends RadContainer {
     }
   }
 
-  public RadToolBar(final Module module, final Class componentClass, final String id) {
+  public RadToolBar(final ModuleProvider module, final Class componentClass, final String id) {
     super(module, componentClass, id);
   }
 
index 1e0c24d31854a41f25e9f16c95b999078233dbf1..7b0924a068c249f01ba50c7443f1c211ad41d477 100644 (file)
  */
 package com.intellij.uiDesigner.radComponents;
 
-import com.intellij.openapi.module.Module;
+import com.intellij.uiDesigner.ModuleProvider;
 import com.intellij.uiDesigner.VSpacer;
 import com.intellij.uiDesigner.XmlWriter;
-import com.intellij.uiDesigner.palette.Palette;
 import com.intellij.uiDesigner.core.GridConstraints;
+import com.intellij.uiDesigner.palette.Palette;
 
 
 /**
@@ -28,7 +28,7 @@ import com.intellij.uiDesigner.core.GridConstraints;
  */
 public final class RadVSpacer extends RadAtomicComponent {
   public static class Factory extends RadComponentFactory {
-    public RadComponent newInstance(Module module, Class aClass, String id) {
+    public RadComponent newInstance(ModuleProvider module, Class aClass, String id) {
       return new RadVSpacer(module, aClass, id);
     }
 
@@ -36,16 +36,16 @@ public final class RadVSpacer extends RadAtomicComponent {
       throw new UnsupportedOperationException("Spacer instances should not be created by SnapShooter");
     }
 
-    public RadComponent newInstance(Module module, String className, String id) throws ClassNotFoundException {
+    public RadComponent newInstance(ModuleProvider module, String className, String id) throws ClassNotFoundException {
       return new RadVSpacer(module, VSpacer.class, id);
     }
   }
 
-  public RadVSpacer(final Module module, final String id) {
+  public RadVSpacer(final ModuleProvider module, final String id) {
     super(module, VSpacer.class, id);
   }
 
-  public RadVSpacer(final Module module, final Class aClass, final String id) {
+  public RadVSpacer(final ModuleProvider module, final Class aClass, final String id) {
     super(module, aClass, id);
   }
 
@@ -62,15 +62,17 @@ public final class RadVSpacer extends RadAtomicComponent {
 
   public void write(final XmlWriter writer) {
     writer.startElement("vspacer");
-    try{
+    try {
       writeId(writer);
       writeConstraints(writer);
-    }finally{
+    }
+    finally {
       writer.endElement(); // vspacer
     }
   }
 
-  @Override public boolean hasIntrospectedProperties() {
+  @Override
+  public boolean hasIntrospectedProperties() {
     return false;
   }
 }
index 8463841616827034116ab7d1ddd9e721e926a85d..b56e44db161a1acf6d0450fddc0376a6befc754c 100644 (file)
@@ -46,11 +46,11 @@ public abstract class DesignerEditor extends UserDataHolderBase implements FileE
     if (module == null) {
       throw new IllegalArgumentException("No module for file " + file + " in project " + project);
     }
-    myDesignerPanel = createDesignerPanel(module, file);
+    myDesignerPanel = createDesignerPanel(project, module, file);
   }
 
   @NotNull
-  protected abstract DesignerEditorPanel createDesignerPanel(Module module, VirtualFile file);
+  protected abstract DesignerEditorPanel createDesignerPanel(Project project, Module module, VirtualFile file);
 
   public final DesignerEditorPanel getDesignerPanel() {
     return myDesignerPanel;
diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/ModuleProvider.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/ModuleProvider.java
new file mode 100644 (file)
index 0000000..91cb460
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2000-2012 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.designer;
+
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.project.Project;
+
+/**
+ * @author Alexander Lobas
+ */
+public interface ModuleProvider {
+  Module getModule();
+
+  Project getProject();
+}
\ No newline at end of file
index 0b498666fc4c5d8772a0346c9ab075aee3a7c42d..8921c51e02ec6a8c6ab2b87341bde2239de62a2d 100644 (file)
@@ -17,6 +17,7 @@ package com.intellij.designer.designSurface;
 
 import com.intellij.designer.DesignerEditorState;
 import com.intellij.designer.DesignerToolWindowManager;
+import com.intellij.designer.ModuleProvider;
 import com.intellij.designer.actions.DesignerActionPanel;
 import com.intellij.designer.componentTree.TreeComponentDecorator;
 import com.intellij.designer.designSurface.tools.*;
@@ -34,6 +35,7 @@ import com.intellij.openapi.actionSystem.DataProvider;
 import com.intellij.openapi.command.CommandProcessor;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.module.Module;
+import com.intellij.openapi.module.ModuleUtil;
 import com.intellij.openapi.progress.ProgressIndicator;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.ui.Messages;
@@ -69,7 +71,7 @@ import java.util.List;
 /**
  * @author Alexander Lobas
  */
-public abstract class DesignerEditorPanel extends JPanel implements DataProvider {
+public abstract class DesignerEditorPanel extends JPanel implements DataProvider, ModuleProvider {
   private static final Logger LOG = Logger.getInstance("#com.intellij.designer.designSurface.DesignerEditorPanel");
 
   protected static final Integer LAYER_COMPONENT = JLayeredPane.DEFAULT_LAYER;
@@ -84,7 +86,8 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider
   private final static String ERROR_STACK_CARD = "stack";
   private final static String ERROR_NO_STACK_CARD = "no_stack";
 
-  protected final Module myModule;
+  private final Project myProject;
+  private Module myModule;
   protected final VirtualFile myFile;
 
   private final CardLayout myLayout = new CardLayout();
@@ -127,7 +130,8 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider
   private AsyncProcessIcon myProgressIcon;
   private JLabel myProgressMessage;
 
-  public DesignerEditorPanel(@NotNull Module module, @NotNull VirtualFile file) {
+  public DesignerEditorPanel(@NotNull Project project, @NotNull Module module, @NotNull VirtualFile file) {
+    myProject = project;
     myModule = module;
     myFile = file;
 
@@ -512,12 +516,20 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider
   //////////////////////////////////////////////////////////////////////////////////////////
 
   @NotNull
-  public Module getModule() {
+  @Override
+  public final Module getModule() {
+    if (myModule.isDisposed()) {
+      myModule = ModuleUtil.findModuleForFile(myFile, myProject);
+      if (myModule == null) {
+        throw new IllegalArgumentException("No module for file " + myFile + " in project " + myProject);
+      }
+    }
     return myModule;
   }
 
-  public Project getProject() {
-    return myModule.getProject();
+  @Override
+  public final Project getProject() {
+    return myProject;
   }
 
   public EditableArea getSurfaceArea() {