no more dummy project / problems with formatting when using it
authorMaxim.Mossienko <Maxim.Mossienko@jetbrains.com>
Mon, 1 Mar 2010 16:04:23 +0000 (19:04 +0300)
committerMaxim.Mossienko <Maxim.Mossienko@jetbrains.com>
Wed, 10 Mar 2010 13:20:07 +0000 (16:20 +0300)
platform/lang-impl/src/com/intellij/application/options/codeStyle/MultilanguageCodeStyleAbstractPanel.java
platform/lang-impl/src/com/intellij/psi/formatter/PsiBasedFormattingModel.java

index 4652052bc886ab532afdb1a3f71a4cd64463f300..cb909247c8e71f1cb8acc4e6823a5b68bc21790c 100644 (file)
@@ -30,8 +30,6 @@ import com.intellij.openapi.fileTypes.LanguageFileType;
 import com.intellij.openapi.fileTypes.StdFileTypes;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectManager;
-import com.intellij.openapi.project.ex.ProjectManagerEx;
-import com.intellij.openapi.util.Disposer;
 import com.intellij.psi.PsiDocumentManager;
 import com.intellij.psi.PsiFile;
 import com.intellij.psi.PsiFileFactory;
@@ -48,7 +46,6 @@ import javax.swing.event.AncestorListener;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 import java.awt.*;
-import java.io.File;
 
 /**
  * Base class for code style settings panels supporting multiple programming languages.
@@ -59,19 +56,11 @@ public abstract class MultilanguageCodeStyleAbstractPanel extends CodeStyleAbstr
 
   private static Language myLanguage;
   private static final Logger LOG = Logger.getInstance("#com.intellij.application.options.codeStyle.MultilanguageCodeStyleAbstractPanel");
-  private static Project mySettingsProject;
-  private static int myInstanceCount;
   private int myLangSelectionIndex;
   private JTabbedPane tabbedPane;
 
   protected MultilanguageCodeStyleAbstractPanel(CodeStyleSettings settings) {
     super(settings);
-    initProject();
-  }
-
-  private synchronized static void initProject() {
-    createSettingsProject();
-    myInstanceCount++;
   }
 
   /**
@@ -153,41 +142,6 @@ public abstract class MultilanguageCodeStyleAbstractPanel extends CodeStyleAbstr
     return psiFile;
   }
 
-  @Override
-  protected final synchronized Project getCurrentProject() {
-    return mySettingsProject;
-  }
-
-  @Override
-  public void dispose() {
-    myInstanceCount--;
-    if (myInstanceCount == 0) {
-      disposeSettingsProject();
-    }
-    super.dispose();
-  }
-
-  /**
-   * A physical settings project is created to ensure that all formatters in preview panels work correctly.
-   */
-  private synchronized static void createSettingsProject() {
-    if (mySettingsProject != null) return;
-    try {
-      File tempFile = File.createTempFile("idea-", "-settings.tmp");
-      tempFile.deleteOnExit();
-      mySettingsProject = ProjectManagerEx.getInstanceEx().newProject("settings.tmp", tempFile.getPath(), true, false);
-    }
-    catch (Exception e) {
-      LOG.error(e);
-    }
-  }
-
-  private synchronized static void disposeSettingsProject() {
-    if (mySettingsProject == null) return;
-    Disposer.dispose(mySettingsProject);
-    mySettingsProject = null;
-  }
-
   protected static JPanel createPreviewPanel() {
     JPanel panel = new JPanel(new BorderLayout());
     panel.setBorder(IdeBorderFactory.createTitledBorder("Preview"));
index 50f6a9775e443c2c6c76cf5a690d1eff0a40a593..d2a7e8deb3467ed8d27ff34429c1d57cb0948b9b 100644 (file)
@@ -20,6 +20,7 @@ import com.intellij.formatting.Block;
 import com.intellij.formatting.FormattingDocumentModel;
 import com.intellij.formatting.FormattingModel;
 import com.intellij.lang.ASTNode;
+import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.TextRange;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.psi.PsiElement;
@@ -109,8 +110,10 @@ public class PsiBasedFormattingModel implements FormattingModel {
   @Nullable
   protected ASTNode findElementAt(final int offset) {
     PsiFile containingFile = myASTNode.getPsi().getContainingFile();
-    assert !PsiDocumentManager.getInstance(containingFile.getProject()).isUncommited(myDocumentModel.getDocument());
-    PsiElement psiElement = InjectedLanguageUtil.findInjectedElementNoCommitWithOffset(containingFile, offset);
+    Project project = containingFile.getProject();
+    assert !PsiDocumentManager.getInstance(project).isUncommited(myDocumentModel.getDocument());
+    // TODO:default project can not be used for injections, because latter might wants (unavailable) indices
+    PsiElement psiElement = project.isDefault() ? null :InjectedLanguageUtil.findInjectedElementNoCommitWithOffset(containingFile, offset);
     if (psiElement == null) psiElement = containingFile.findElementAt(offset);
     if (psiElement == null) return null;
     return psiElement.getNode();