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;
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.
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++;
}
/**
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"));
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;
@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();