From d84c902a3a63e6fc88642197946d8747e0c41574 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 14 Oct 2011 19:24:21 +0200 Subject: [PATCH] extract JavaCodeFragmentFactory out of PsiElementFactory; remove a number of unnecessary back and forth conversions between Project and PsiManager --- .../DefaultCodeFragmentFactory.java | 6 +- .../intellij/peer/impl/PeerFactoryImpl.java | 2 +- ...erenceExpressionCompletionContributor.java | 4 +- .../template/JavaCodeContextType.java | 6 +- .../GenerateVisitorByHierarchyAction.java | 4 +- .../psi/impl/JavaCodeFragmentFactoryImpl.java | 82 +++++++++++++ .../psi/impl/PsiElementFactoryImpl.java | 48 -------- .../impl/source/PsiTypeCodeFragmentImpl.java | 6 +- .../ChangeClassSignatureDialog.java | 8 +- .../changeSignature/ExceptionsTableModel.java | 4 +- .../JavaChangeSignatureDialog.java | 4 +- .../JavaParameterTableModel.java | 4 +- .../IntroduceConstantDialog.java | 2 +- .../IntroduceParameterObjectDialog.java | 2 +- .../MoveClassesOrPackagesDialog.java | 2 +- .../move/moveMembers/MoveMembersDialog.java | 6 +- .../ReplaceConstructorWithBuilderDialog.java | 3 +- .../ReplaceConstructorWithFactoryDialog.java | 3 +- .../typeMigration/ui/TypeMigrationDialog.java | 7 +- .../ui/ClassNameReferenceEditor.java | 16 +-- .../ui/PackageNameReferenceEditorCombo.java | 3 +- .../WrapReturnValueDialog.java | 2 +- .../createTest/CreateTestDialog.java | 5 +- .../ui/EditorTextFieldWithBrowseButton.java | 12 +- .../intellij/ui/JavaReferenceEditorUtil.java | 27 +++-- .../ReferenceEditorComboWithBrowseButton.java | 15 +-- .../intellij/util/xml/ui/PsiClassControl.java | 3 +- .../util/xml/ui/PsiClassTableCellEditor.java | 5 +- .../intellij/util/xml/ui/PsiTypeControl.java | 2 +- .../com/intellij/psi/PsiElementFactory.java | 82 ------------- .../com/intellij/psi/CodeFragmentsTest.java | 2 +- .../psi/formatter/java/JavaFormatterTest.java | 7 +- .../resolve/ResolveInCodeFragmentTest.java | 4 +- .../intellij/psi/JavaCodeFragmentFactory.java | 113 ++++++++++++++++++ .../plugins/intelliLang/util/PsiUtilEx.java | 2 +- .../debugger/GroovyCodeFragmentFactory.java | 2 +- .../GrChangeSignatureDialog.java | 4 +- .../changeSignature/GrTableParameterInfo.java | 10 +- .../constant/GrIntroduceConstantDialog.java | 2 +- .../i18n/JavaI18nizeQuickFixDialog.java | 6 +- .../ClassNameInputDialog.java | 7 +- .../palette/ComponentItemDialog.java | 7 +- .../properties/ClassToBindProperty.java | 7 +- resources/src/META-INF/IdeaPlugin.xml | 3 + 44 files changed, 301 insertions(+), 250 deletions(-) create mode 100644 java/java-impl/src/com/intellij/psi/impl/JavaCodeFragmentFactoryImpl.java create mode 100644 java/openapi/src/com/intellij/psi/JavaCodeFragmentFactory.java diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/DefaultCodeFragmentFactory.java b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/DefaultCodeFragmentFactory.java index 899a4e287fc0..ddefef449570 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/DefaultCodeFragmentFactory.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/DefaultCodeFragmentFactory.java @@ -55,16 +55,16 @@ public class DefaultCodeFragmentFactory implements CodeFragmentFactory { } public JavaCodeFragment createCodeFragment(TextWithImports item, PsiElement context, final Project project) { - final PsiElementFactory elementFactory = JavaPsiFacade.getInstance(project).getElementFactory(); + final JavaCodeFragmentFactory factory = JavaCodeFragmentFactory.getInstance(project); final String text = item.getText(); final JavaCodeFragment fragment; if (CodeFragmentKind.EXPRESSION == item.getKind()) { final String expressionText = StringUtil.endsWithChar(text, ';')? text.substring(0, text.length() - 1) : text; - fragment = elementFactory.createExpressionCodeFragment(expressionText, context, null, true); + fragment = factory.createExpressionCodeFragment(expressionText, context, null, true); } else /*if (CodeFragmentKind.CODE_BLOCK == item.getKind())*/ { - fragment = elementFactory.createCodeBlockCodeFragment(text, context, true); + fragment = factory.createCodeBlockCodeFragment(text, context, true); } if(item.getImports().length() > 0) { diff --git a/java/idea-ui/src/com/intellij/peer/impl/PeerFactoryImpl.java b/java/idea-ui/src/com/intellij/peer/impl/PeerFactoryImpl.java index 0939325800e8..86443a6e1d20 100644 --- a/java/idea-ui/src/com/intellij/peer/impl/PeerFactoryImpl.java +++ b/java/idea-ui/src/com/intellij/peer/impl/PeerFactoryImpl.java @@ -186,7 +186,7 @@ public class PeerFactoryImpl extends PeerFactory { public TextComponent createTypedTextField(final String text, PsiType type, PsiElement context, final Project project) { final PsiExpressionCodeFragment fragment = - JavaPsiFacade.getInstance(project).getElementFactory().createExpressionCodeFragment(text, context, type, true); + JavaCodeFragmentFactory.getInstance(project).createExpressionCodeFragment(text, context, type, true); final Document document = PsiDocumentManager.getInstance(project).getDocument(fragment); return new EditorTextField(document, project, StdFileTypes.JAVA); } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/ReferenceExpressionCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/ReferenceExpressionCompletionContributor.java index ff2c5ed27f3a..d55c8cdebe34 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/ReferenceExpressionCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/ReferenceExpressionCompletionContributor.java @@ -384,7 +384,7 @@ public class ReferenceExpressionCompletionContributor { final Consumer result, PsiType qualifierType, final PsiType expectedType, JavaSmartCompletionParameters parameters) throws IncorrectOperationException { - final PsiElementFactory elementFactory = JavaPsiFacade.getInstance(place.getProject()).getElementFactory(); + final JavaCodeFragmentFactory factory = JavaCodeFragmentFactory.getInstance(place.getProject()); PsiType varType = qualifierType; if (varType instanceof PsiEllipsisType) { varType = ((PsiEllipsisType)varType).getComponentType(); @@ -394,7 +394,7 @@ public class ReferenceExpressionCompletionContributor { } final String typeText = varType.getCanonicalText(); - final JavaCodeFragment block = elementFactory.createCodeBlockCodeFragment(typeText + " xxx;xxx.xxx;", place, false); + final JavaCodeFragment block = factory.createCodeBlockCodeFragment(typeText + " xxx;xxx.xxx;", place, false); final PsiElement secondChild = block.getChildren()[1]; if (!(secondChild instanceof PsiExpressionStatement)) { LOG.error(typeText + " of " + varType.getClass()); diff --git a/java/java-impl/src/com/intellij/codeInsight/template/JavaCodeContextType.java b/java/java-impl/src/com/intellij/codeInsight/template/JavaCodeContextType.java index e2bb19f9aa31..27392019f5c2 100644 --- a/java/java-impl/src/com/intellij/codeInsight/template/JavaCodeContextType.java +++ b/java/java-impl/src/com/intellij/codeInsight/template/JavaCodeContextType.java @@ -18,7 +18,7 @@ package com.intellij.codeInsight.template; import com.intellij.codeInsight.completion.JavaCompletionData; import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; import com.intellij.ide.highlighter.JavaFileHighlighter; -import com.intellij.lang.StdLanguages; +import com.intellij.lang.java.JavaLanguage; import com.intellij.openapi.editor.Document; import com.intellij.openapi.fileTypes.SyntaxHighlighter; import com.intellij.openapi.project.Project; @@ -41,7 +41,7 @@ public abstract class JavaCodeContextType extends TemplateContextType { } public boolean isInContext(@NotNull final PsiFile file, final int offset) { - if (PsiUtilBase.getLanguageAtOffset(file, offset).isKindOf(StdLanguages.JAVA)) { + if (PsiUtilBase.getLanguageAtOffset(file, offset).isKindOf(JavaLanguage.INSTANCE)) { PsiElement element = file.findElementAt(offset); if (element instanceof PsiWhiteSpace) { return false; @@ -66,7 +66,7 @@ public abstract class JavaCodeContextType extends TemplateContextType { return super.createDocument(text, project); } final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project); - final PsiElementFactory factory = psiFacade.getElementFactory(); + final JavaCodeFragmentFactory factory = JavaCodeFragmentFactory.getInstance(project); final JavaCodeFragment fragment = factory.createCodeBlockCodeFragment((String)text, psiFacade.findPackage(""), true); DaemonCodeAnalyzer.getInstance(project).setHighlightingEnabled(fragment, false); return PsiDocumentManager.getInstance(project).getDocument(fragment); diff --git a/java/java-impl/src/com/intellij/internal/GenerateVisitorByHierarchyAction.java b/java/java-impl/src/com/intellij/internal/GenerateVisitorByHierarchyAction.java index 8d85bdcd2e65..b0d0719ecee6 100644 --- a/java/java-impl/src/com/intellij/internal/GenerateVisitorByHierarchyAction.java +++ b/java/java-impl/src/com/intellij/internal/GenerateVisitorByHierarchyAction.java @@ -97,8 +97,8 @@ public class GenerateVisitorByHierarchyAction extends AnAction { private JComponent createBaseClassPanel() { final JPanel panel = new JPanel(new BorderLayout()); panel.add(new JLabel("Hierarchy Base Class"), BorderLayout.WEST); - final PsiElementFactory factory = psiFacade.getElementFactory(); - final PsiTypeCodeFragment codeFragment = factory.createTypeCodeFragment("", null, true, PsiElementFactory.ALLOW_VOID); + final JavaCodeFragmentFactory factory = JavaCodeFragmentFactory.getInstance(project); + final PsiTypeCodeFragment codeFragment = factory.createTypeCodeFragment("", null, true, JavaCodeFragmentFactory.ALLOW_VOID); final Document document = PsiDocumentManager.getInstance(project).getDocument(codeFragment); final EditorTextField editorTextField = new EditorTextField(document, project, StdFileTypes.JAVA); editorTextField.addDocumentListener(new com.intellij.openapi.editor.event.DocumentAdapter() { diff --git a/java/java-impl/src/com/intellij/psi/impl/JavaCodeFragmentFactoryImpl.java b/java/java-impl/src/com/intellij/psi/impl/JavaCodeFragmentFactoryImpl.java new file mode 100644 index 000000000000..2b3e2b343273 --- /dev/null +++ b/java/java-impl/src/com/intellij/psi/impl/JavaCodeFragmentFactoryImpl.java @@ -0,0 +1,82 @@ +/* + * Copyright 2000-2011 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.psi.impl; + +import com.intellij.openapi.project.Project; +import com.intellij.psi.*; +import com.intellij.psi.impl.source.PsiCodeFragmentImpl; +import com.intellij.psi.impl.source.PsiExpressionCodeFragmentImpl; +import com.intellij.psi.impl.source.PsiJavaCodeReferenceCodeFragmentImpl; +import com.intellij.psi.impl.source.PsiTypeCodeFragmentImpl; +import com.intellij.psi.impl.source.tree.JavaElementType; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class JavaCodeFragmentFactoryImpl extends JavaCodeFragmentFactory { + private final Project myProject; + + public JavaCodeFragmentFactoryImpl(Project project) { + myProject = project; + } + + @NotNull + @Override + public PsiExpressionCodeFragment createExpressionCodeFragment(@NotNull final String text, + final PsiElement context, + final PsiType expectedType, + final boolean isPhysical) { + final PsiExpressionCodeFragmentImpl result = + new PsiExpressionCodeFragmentImpl(myProject, isPhysical, "fragment.java", text, expectedType); + result.setContext(context); + return result; + } + + @NotNull + @Override + public JavaCodeFragment createCodeBlockCodeFragment(@NotNull final String text, @Nullable final PsiElement context, final boolean isPhysical) { + final PsiCodeFragmentImpl result = + new PsiCodeFragmentImpl(myProject, JavaElementType.STATEMENTS, isPhysical, "fragment.java", text); + result.setContext(context); + return result; + } + + @NotNull + @Override + public PsiTypeCodeFragment createTypeCodeFragment(@NotNull final String text, @Nullable final PsiElement context, final boolean isPhysical) { + return createTypeCodeFragment(text, context, isPhysical, 0); + } + + @NotNull + @Override + public PsiTypeCodeFragment createTypeCodeFragment(@NotNull final String text, @Nullable final PsiElement context, final boolean isPhysical, final int flags) { + final PsiTypeCodeFragmentImpl result = new PsiTypeCodeFragmentImpl(myProject, isPhysical, "fragment.java", text, flags); + result.setContext(context); + return result; + } + + @NotNull + @Override + public PsiJavaCodeReferenceCodeFragment createReferenceCodeFragment(@NotNull final String text, + final PsiElement context, + final boolean isPhysical, + final boolean isClassesAccepted) { + final PsiJavaCodeReferenceCodeFragmentImpl result = + new PsiJavaCodeReferenceCodeFragmentImpl(myProject, isPhysical, "fragment.java", text, isClassesAccepted); + result.setContext(context); + return result; + } + +} diff --git a/java/java-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java b/java/java-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java index 275c9b21351a..459d83567b61 100644 --- a/java/java-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java @@ -31,7 +31,6 @@ import com.intellij.psi.impl.light.*; import com.intellij.psi.impl.source.*; import com.intellij.psi.impl.source.codeStyle.CodeEditUtil; import com.intellij.psi.impl.source.tree.FileElement; -import com.intellij.psi.impl.source.tree.JavaElementType; import com.intellij.psi.impl.source.tree.TreeElement; import com.intellij.psi.javadoc.PsiDocTag; import com.intellij.psi.search.GlobalSearchScope; @@ -396,18 +395,6 @@ public class PsiElementFactoryImpl extends PsiJavaParserFacadeImpl implements Ps return stmt; } - @NotNull - @Override - public PsiJavaCodeReferenceCodeFragment createReferenceCodeFragment(@NotNull final String text, - final PsiElement context, - final boolean isPhysical, - final boolean isClassesAccepted) { - final PsiJavaCodeReferenceCodeFragmentImpl result = - new PsiJavaCodeReferenceCodeFragmentImpl(myManager.getProject(), isPhysical, "fragment.java", text, isClassesAccepted); - result.setContext(context); - return result; - } - @NotNull @Override public PsiImportStaticStatement createImportStaticStatement(@NotNull final PsiClass aClass, @@ -593,41 +580,6 @@ public class PsiElementFactoryImpl extends PsiJavaParserFacadeImpl implements Ps } } - @NotNull - @Override - public PsiExpressionCodeFragment createExpressionCodeFragment(@NotNull final String text, - final PsiElement context, - final PsiType expectedType, - final boolean isPhysical) { - final PsiExpressionCodeFragmentImpl result = - new PsiExpressionCodeFragmentImpl(myManager.getProject(), isPhysical, "fragment.java", text, expectedType); - result.setContext(context); - return result; - } - - @NotNull - @Override - public JavaCodeFragment createCodeBlockCodeFragment(@NotNull final String text, @Nullable final PsiElement context, final boolean isPhysical) { - final PsiCodeFragmentImpl result = - new PsiCodeFragmentImpl(myManager.getProject(), JavaElementType.STATEMENTS, isPhysical, "fragment.java", text); - result.setContext(context); - return result; - } - - @NotNull - @Override - public PsiTypeCodeFragment createTypeCodeFragment(@NotNull final String text, @Nullable final PsiElement context, final boolean isPhysical) { - return createTypeCodeFragment(text, context, isPhysical, 0); - } - - @NotNull - @Override - public PsiTypeCodeFragment createTypeCodeFragment(@NotNull final String text, @Nullable final PsiElement context, final boolean isPhysical, final int flags) { - final PsiTypeCodeFragmentImpl result = new PsiTypeCodeFragmentImpl(myManager.getProject(), isPhysical, "fragment.java", text, flags); - result.setContext(context); - return result; - } - @NotNull @Override public PsiAnnotation createAnnotationFromText(@NotNull final String annotationText, @Nullable final PsiElement context) throws IncorrectOperationException { diff --git a/java/java-impl/src/com/intellij/psi/impl/source/PsiTypeCodeFragmentImpl.java b/java/java-impl/src/com/intellij/psi/impl/source/PsiTypeCodeFragmentImpl.java index d96859a418d8..30472278803c 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/PsiTypeCodeFragmentImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/PsiTypeCodeFragmentImpl.java @@ -40,10 +40,10 @@ public class PsiTypeCodeFragmentImpl extends PsiCodeFragmentImpl implements PsiT final int flags) { super(project, JavaElementType.TYPE_TEXT, isPhysical, name, text); - myAllowEllipsis = BitUtil.isSet(flags, PsiElementFactory.ALLOW_ELLIPSIS); - myAllowDisjunction = BitUtil.isSet(flags, PsiElementFactory.ALLOW_DISJUNCTION); + myAllowEllipsis = BitUtil.isSet(flags, JavaCodeFragmentFactory.ALLOW_ELLIPSIS); + myAllowDisjunction = BitUtil.isSet(flags, JavaCodeFragmentFactory.ALLOW_DISJUNCTION); - if (isSet(flags, PsiElementFactory.ALLOW_VOID)) { + if (isSet(flags, JavaCodeFragmentFactory.ALLOW_VOID)) { putUserData(PsiUtil.VALID_VOID_TYPE_IN_CODE_FRAGMENT, Boolean.TRUE); } } diff --git a/java/java-impl/src/com/intellij/refactoring/changeClassSignature/ChangeClassSignatureDialog.java b/java/java-impl/src/com/intellij/refactoring/changeClassSignature/ChangeClassSignatureDialog.java index 2d296f207055..c35b0b4420b7 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeClassSignature/ChangeClassSignatureDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/changeClassSignature/ChangeClassSignatureDialog.java @@ -54,7 +54,7 @@ public class ChangeClassSignatureDialog extends RefactoringDialog { private final List myTypeCodeFragments; private final PsiClass myClass; private final PsiTypeParameter[] myOriginalParameters; - private final PsiManager myManager; + private final Project myProject; private final MyTableModel myTableModel; private JBTable myTable; static final String REFACTORING_NAME = RefactoringBundle.message("changeClassSignature.refactoring.name"); @@ -63,7 +63,7 @@ public class ChangeClassSignatureDialog extends RefactoringDialog { super(aClass.getProject(), true); setTitle(REFACTORING_NAME); myClass = aClass; - myManager = myClass.getManager(); + myProject = myClass.getProject(); myTypeParameterInfos = new ArrayList(); myTypeCodeFragments = new ArrayList(); myOriginalParameters = myClass.getTypeParameters(); @@ -76,8 +76,8 @@ public class ChangeClassSignatureDialog extends RefactoringDialog { } private PsiTypeCodeFragment createValueCodeFragment() { - final PsiElementFactory elementFactory = JavaPsiFacade.getInstance(myManager.getProject()).getElementFactory(); - return elementFactory.createTypeCodeFragment("", myClass.getLBrace(), true); + final JavaCodeFragmentFactory factory = JavaCodeFragmentFactory.getInstance(myProject); + return factory.createTypeCodeFragment("", myClass.getLBrace(), true); } protected JComponent createNorthPanel() { diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/ExceptionsTableModel.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/ExceptionsTableModel.java index e24ff6392955..7a36ca5b8cb8 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/ExceptionsTableModel.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/ExceptionsTableModel.java @@ -113,8 +113,8 @@ public class ExceptionsTableModel extends AbstractTableModel implements Editable } public PsiTypeCodeFragment createParameterTypeCodeFragment(final String typeText, PsiElement context) { - final PsiElementFactory elementFactory = JavaPsiFacade.getInstance(myContext.getProject()).getElementFactory(); - return elementFactory.createTypeCodeFragment(typeText, context, true, PsiElementFactory.ALLOW_ELLIPSIS); + final JavaCodeFragmentFactory factory = JavaCodeFragmentFactory.getInstance(myContext.getProject()); + return factory.createTypeCodeFragment(typeText, context, true, JavaCodeFragmentFactory.ALLOW_ELLIPSIS); } public PsiTypeCodeFragment[] getTypeCodeFragments() { diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureDialog.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureDialog.java index 5fa1050a4a56..23e468a6b7b6 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureDialog.java @@ -458,8 +458,8 @@ public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase() { + super(null, project, new Function() { public Document fun(final String s) { - PsiPackage defaultPackage = JavaPsiFacade.getInstance(manager.getProject()).findPackage(""); - final JavaCodeFragment fragment = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory().createReferenceCodeFragment(s, defaultPackage, true, true); + PsiPackage defaultPackage = JavaPsiFacade.getInstance(project).findPackage(""); + final JavaCodeFragment fragment = JavaCodeFragmentFactory.getInstance(project).createReferenceCodeFragment(s, defaultPackage, true, true); fragment.setVisibilityChecker(JavaCodeFragment.VisibilityChecker.EVERYTHING_VISIBLE); if (resolveScope != null) { fragment.forceResolveScope(resolveScope); } - return PsiDocumentManager.getInstance(manager.getProject()).getDocument(fragment); + return PsiDocumentManager.getInstance(project).getDocument(fragment); } }, selectedClass != null ? selectedClass.getQualifiedName() : ""); - myProject = manager.getProject(); + myProject = project; myChooserTitle = "Choose Class"; addActionListener(new ChooseClassAction()); } diff --git a/java/java-impl/src/com/intellij/refactoring/ui/PackageNameReferenceEditorCombo.java b/java/java-impl/src/com/intellij/refactoring/ui/PackageNameReferenceEditorCombo.java index d9d45b4a547e..86864bf2dc47 100644 --- a/java/java-impl/src/com/intellij/refactoring/ui/PackageNameReferenceEditorCombo.java +++ b/java/java-impl/src/com/intellij/refactoring/ui/PackageNameReferenceEditorCombo.java @@ -17,7 +17,6 @@ package com.intellij.refactoring.ui; import com.intellij.ide.util.PackageChooserDialog; import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiManager; import com.intellij.psi.PsiPackage; import com.intellij.ui.ReferenceEditorComboWithBrowseButton; import org.jetbrains.annotations.NotNull; @@ -31,7 +30,7 @@ import java.awt.event.ActionListener; public class PackageNameReferenceEditorCombo extends ReferenceEditorComboWithBrowseButton { public PackageNameReferenceEditorCombo(final String text, @NotNull final Project project, final String recentsKey, final String chooserTitle) { - super(null, text, PsiManager.getInstance(project), false, recentsKey); + super(null, text, project, false, recentsKey); addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { PackageChooserDialog chooser = new PackageChooserDialog(chooserTitle, project); diff --git a/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueDialog.java b/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueDialog.java index ba2eeb564db0..2cb2b5895350 100644 --- a/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueDialog.java @@ -281,7 +281,7 @@ class WrapReturnValueDialog extends RefactoringDialog { existingClassField.setText(selectedClass.getQualifiedName()); } } - }, "", PsiManager.getInstance(myProject), true, RECENT_KEYS); + }, "", myProject, true, RECENT_KEYS); existingClassField.getChildComponent().getDocument().addDocumentListener(adapter); myDestinationCb = new DestinationFolderComboBox() { diff --git a/java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestDialog.java b/java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestDialog.java index d6bbf3e86663..faa6643c116c 100644 --- a/java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestDialog.java +++ b/java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestDialog.java @@ -29,7 +29,6 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.application.Result; import com.intellij.openapi.command.WriteCommandAction; -import com.intellij.openapi.editor.event.*; import com.intellij.openapi.editor.event.DocumentAdapter; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.help.HelpManager; @@ -59,7 +58,6 @@ import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import javax.swing.*; -import javax.swing.event.DocumentEvent; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -191,8 +189,7 @@ public class CreateTestDialog extends DialogWrapper { } }); - mySuperClassField = JavaReferenceEditorUtil - .createReferenceEditorWithBrowseButton(new MyChooseSuperClassAction(), "", PsiManager.getInstance(myProject), true); + mySuperClassField = JavaReferenceEditorUtil.createReferenceEditorWithBrowseButton(new MyChooseSuperClassAction(), "", myProject, true); mySuperClassField.setMinimumSize(mySuperClassField.getPreferredSize()); String targetPackageName = targetPackage != null ? targetPackage.getQualifiedName() : ""; diff --git a/java/java-impl/src/com/intellij/ui/EditorTextFieldWithBrowseButton.java b/java/java-impl/src/com/intellij/ui/EditorTextFieldWithBrowseButton.java index e8335b25f190..ea8ab92284e2 100644 --- a/java/java-impl/src/com/intellij/ui/EditorTextFieldWithBrowseButton.java +++ b/java/java-impl/src/com/intellij/ui/EditorTextFieldWithBrowseButton.java @@ -32,19 +32,19 @@ public class EditorTextFieldWithBrowseButton extends ComponentWithBrowseButton() { public Document fun(final String s) { - return createDocument(s, manager, toAcceptClasses); + return createDocument(s, project, toAcceptClasses); } }, text); } @Nullable - public static Document createDocument(final String text, PsiManager manager, boolean isClassesAccepted) { - final PsiPackage defaultPackage = JavaPsiFacade.getInstance(manager.getProject()).findPackage(""); - final PsiElementFactory elementFactory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory(); - final JavaCodeFragment fragment = elementFactory.createReferenceCodeFragment(text, defaultPackage, true, isClassesAccepted); + public static Document createDocument(final String text, Project project, boolean isClassesAccepted) { + final PsiPackage defaultPackage = JavaPsiFacade.getInstance(project).findPackage(""); + final JavaCodeFragmentFactory factory = JavaCodeFragmentFactory.getInstance(project); + final JavaCodeFragment fragment = factory.createReferenceCodeFragment(text, defaultPackage, true, isClassesAccepted); fragment.setVisibilityChecker(JavaCodeFragment.VisibilityChecker.EVERYTHING_VISIBLE); - return PsiDocumentManager.getInstance(manager.getProject()).getDocument(fragment); + return PsiDocumentManager.getInstance(project).getDocument(fragment); } @Nullable - public static Document createTypeDocument(final String text, PsiManager manager) { - final PsiPackage defaultPackage = JavaPsiFacade.getInstance(manager.getProject()).findPackage(""); - final PsiElementFactory elementFactory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory(); - final JavaCodeFragment fragment = elementFactory.createTypeCodeFragment(text, defaultPackage, true); + public static Document createTypeDocument(final String text, Project project) { + final PsiPackage defaultPackage = JavaPsiFacade.getInstance(project).findPackage(""); + final JavaCodeFragmentFactory factory = JavaCodeFragmentFactory.getInstance(project); + final JavaCodeFragment fragment = factory.createTypeCodeFragment(text, defaultPackage, true); fragment.setVisibilityChecker(JavaCodeFragment.VisibilityChecker.EVERYTHING_VISIBLE); - return PsiDocumentManager.getInstance(manager.getProject()).getDocument(fragment); + return PsiDocumentManager.getInstance(project).getDocument(fragment); } } diff --git a/java/java-impl/src/com/intellij/ui/ReferenceEditorComboWithBrowseButton.java b/java/java-impl/src/com/intellij/ui/ReferenceEditorComboWithBrowseButton.java index f344c6423db7..eef311a5b05c 100644 --- a/java/java-impl/src/com/intellij/ui/ReferenceEditorComboWithBrowseButton.java +++ b/java/java-impl/src/com/intellij/ui/ReferenceEditorComboWithBrowseButton.java @@ -17,6 +17,7 @@ package com.intellij.ui; import com.intellij.openapi.editor.Document; import com.intellij.openapi.fileTypes.StdFileTypes; +import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.ComponentWithBrowseButton; import com.intellij.psi.*; import com.intellij.util.ArrayUtil; @@ -31,10 +32,10 @@ import java.util.List; public class ReferenceEditorComboWithBrowseButton extends ComponentWithBrowseButton implements TextAccessor { public ReferenceEditorComboWithBrowseButton(final ActionListener browseActionListener, final String text, - @NotNull final PsiManager manager, + @NotNull final Project project, boolean toAcceptClasses, final String recentsKey) { - super(new EditorComboBox(createDocument(text, manager, toAcceptClasses), manager.getProject(), StdFileTypes.JAVA), browseActionListener); - final List recentEntries = RecentsManager.getInstance(manager.getProject()).getRecentEntries(recentsKey); + super(new EditorComboBox(createDocument(text, project, toAcceptClasses), project, StdFileTypes.JAVA), browseActionListener); + final List recentEntries = RecentsManager.getInstance(project).getRecentEntries(recentsKey); if (recentEntries != null) { setHistory(ArrayUtil.toStringArray(recentEntries)); } @@ -43,11 +44,11 @@ public class ReferenceEditorComboWithBrowseButton extends ComponentWithBrowseBut } } - private static Document createDocument(final String text, PsiManager manager, boolean isClassesAccepted) { - PsiPackage defaultPackage = JavaPsiFacade.getInstance(manager.getProject()).findPackage(""); - final JavaCodeFragment fragment = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory().createReferenceCodeFragment(text, defaultPackage, true, isClassesAccepted); + private static Document createDocument(final String text, Project project, boolean isClassesAccepted) { + PsiPackage defaultPackage = JavaPsiFacade.getInstance(project).findPackage(""); + final JavaCodeFragment fragment = JavaCodeFragmentFactory.getInstance(project).createReferenceCodeFragment(text, defaultPackage, true, isClassesAccepted); fragment.setVisibilityChecker(JavaCodeFragment.VisibilityChecker.EVERYTHING_VISIBLE); - return PsiDocumentManager.getInstance(manager.getProject()).getDocument(fragment); + return PsiDocumentManager.getInstance(project).getDocument(fragment); } public String getText(){ diff --git a/java/java-impl/src/com/intellij/util/xml/ui/PsiClassControl.java b/java/java-impl/src/com/intellij/util/xml/ui/PsiClassControl.java index dea531578b8e..85d93994c4c2 100644 --- a/java/java-impl/src/com/intellij/util/xml/ui/PsiClassControl.java +++ b/java/java-impl/src/com/intellij/util/xml/ui/PsiClassControl.java @@ -58,8 +58,7 @@ public class PsiClassControl extends EditorTextFieldControl { if (boundedComponent == null) { boundedComponent = new PsiClassPanel(); } - ReferenceEditorWithBrowseButton editor = JavaReferenceEditorUtil - .createReferenceEditorWithBrowseButton(null, "", PsiManager.getInstance(project), true); + ReferenceEditorWithBrowseButton editor = JavaReferenceEditorUtil.createReferenceEditorWithBrowseButton(null, "", project, true); Document document = editor.getChildComponent().getDocument(); PsiCodeFragmentImpl fragment = (PsiCodeFragmentImpl) PsiDocumentManager.getInstance(project).getPsiFile(document); assert fragment != null; diff --git a/java/java-impl/src/com/intellij/util/xml/ui/PsiClassTableCellEditor.java b/java/java-impl/src/com/intellij/util/xml/ui/PsiClassTableCellEditor.java index 14e4758d5b5e..aa96b8c93483 100644 --- a/java/java-impl/src/com/intellij/util/xml/ui/PsiClassTableCellEditor.java +++ b/java/java-impl/src/com/intellij/util/xml/ui/PsiClassTableCellEditor.java @@ -8,11 +8,10 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.FixedSizeButton; import com.intellij.openapi.util.Conditions; import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiManager; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.ui.EditorTextField; -import com.intellij.ui.UIBundle; import com.intellij.ui.JavaReferenceEditorUtil; +import com.intellij.ui.UIBundle; import com.intellij.util.ui.AbstractTableCellEditor; import javax.swing.*; @@ -48,7 +47,7 @@ public class PsiClassTableCellEditor extends AbstractTableCellEditor { } public final Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { - final Document document = JavaReferenceEditorUtil.createDocument(value == null ? "" : (String)value, PsiManager.getInstance(myProject), true); + final Document document = JavaReferenceEditorUtil.createDocument(value == null ? "" : (String)value, myProject, true); myEditor = new EditorTextField(document, myProject, StdFileTypes.JAVA){ protected boolean shouldHaveBorder() { return false; diff --git a/java/java-impl/src/com/intellij/util/xml/ui/PsiTypeControl.java b/java/java-impl/src/com/intellij/util/xml/ui/PsiTypeControl.java index 0dfd4085928e..be405408d87e 100644 --- a/java/java-impl/src/com/intellij/util/xml/ui/PsiTypeControl.java +++ b/java/java-impl/src/com/intellij/util/xml/ui/PsiTypeControl.java @@ -86,7 +86,7 @@ public class PsiTypeControl extends EditorTextFieldControl { return PsiClassControl.initReferenceEditorWithBrowseButton(boundedComponent, new ReferenceEditorWithBrowseButton(null, project, new Function() { public Document fun(final String s) { - return JavaReferenceEditorUtil.createTypeDocument(s, PsiManager.getInstance(project)); + return JavaReferenceEditorUtil.createTypeDocument(s, project); } }, ""), this); } diff --git a/java/java-psi-api/src/com/intellij/psi/PsiElementFactory.java b/java/java-psi-api/src/com/intellij/psi/PsiElementFactory.java index 73826da8baf5..8d21458ce4d5 100644 --- a/java/java-psi-api/src/com/intellij/psi/PsiElementFactory.java +++ b/java/java-psi-api/src/com/intellij/psi/PsiElementFactory.java @@ -358,71 +358,6 @@ public interface PsiElementFactory extends PsiJavaParserFacade, JVMElementFactor */ @NotNull PsiDocTag createParamTag(@NotNull String parameterName, String description) throws IncorrectOperationException; - /** - * Creates a Java expression code fragment from the text of the expression. - * - * @param text the text of the expression to create. - * @param context the context for resolving references from the code fragment. - * @param expectedType expected type of the expression (does not have any effect on creation - * but can be accessed as {@link PsiExpressionCodeFragment#getExpectedType()}). - * @param isPhysical whether the code fragment is created as a physical element - * (see {@link PsiElement#isPhysical()}). - * @return the created code fragment. - */ - @NotNull PsiExpressionCodeFragment createExpressionCodeFragment(@NotNull String text, PsiElement context, final PsiType expectedType, boolean isPhysical); - - /** - * Creates a Java code fragment from the text of a Java code block. - * - * @param text the text of the code block to create. - * @param context the context for resolving references from the code fragment. - * @param isPhysical whether the code fragment is created as a physical element - * (see {@link PsiElement#isPhysical()}). - * @return the created code fragment. - */ - @NotNull - JavaCodeFragment createCodeBlockCodeFragment(@NotNull String text, PsiElement context, boolean isPhysical); - - /** - * Flag for {@linkplain #createTypeCodeFragment(String, PsiElement, boolean, int)} - allows void type. - */ - int ALLOW_VOID = 0x01; - /** - * Flag for {@linkplain #createTypeCodeFragment(String, PsiElement, boolean, int)} - allows type with ellipsis. - */ - int ALLOW_ELLIPSIS = 0x02; - /** - * Flag for {@linkplain #createTypeCodeFragment(String, PsiElement, boolean, int)} - allows disjunctive type. - */ - int ALLOW_DISJUNCTION = 0x02; - - /** - * Creates a Java type code fragment from the text of the name of a Java type (the name - * of a primitive type, array type or class), with void and ellipsis - * not treated as a valid type. - * - * @param text the text of the Java type to create. - * @param context the context for resolving references from the code fragment. - * @param isPhysical whether the code fragment is created as a physical element - * (see {@link PsiElement#isPhysical()}). - * @return the created code fragment. - */ - @NotNull PsiTypeCodeFragment createTypeCodeFragment(@NotNull String text, PsiElement context, boolean isPhysical); - - /** - * Creates a Java type code fragment from the text of the name of a Java type (the name - * of a primitive type, array type or class).
- * {@code void}, ellipsis and disjunctive types are optionally treated as valid ones. - * - * @param text the text of the Java type to create. - * @param context the context for resolving references from the code fragment. - * @param isPhysical whether the code fragment is created as a physical element - * (see {@link PsiElement#isPhysical()}). - * @param flags types allowed to present in text. - * @return the created code fragment. - */ - @NotNull PsiTypeCodeFragment createTypeCodeFragment(@NotNull String text, PsiElement context, boolean isPhysical, int flags); - /** * Returns a synthetic Java class containing methods which are defined on Java arrays. * @@ -450,23 +385,6 @@ public interface PsiElementFactory extends PsiJavaParserFacade, JVMElementFactor */ @NotNull PsiPackageStatement createPackageStatement(@NotNull String name) throws IncorrectOperationException; - /** - * Creates a Java reference code fragment from the text of a Java reference to a - * package or class. - * - * @param text the text of the reference to create. - * @param context the context for resolving the reference. - * @param isPhysical whether the code fragment is created as a physical element - * (see {@link PsiElement#isPhysical()}). - * @param isClassesAccepted if true then classes as well as packages are accepted as - * reference target, otherwise only packages are - * @return the created reference fragment. - */ - @NotNull PsiJavaCodeReferenceCodeFragment createReferenceCodeFragment(@NotNull String text, - PsiElement context, - boolean isPhysical, - boolean isClassesAccepted); - /** * Creates an import static statement for importing the specified member * from the specified class. diff --git a/java/java-tests/testSrc/com/intellij/psi/CodeFragmentsTest.java b/java/java-tests/testSrc/com/intellij/psi/CodeFragmentsTest.java index 7255a127843a..6c68160bd5f8 100644 --- a/java/java-tests/testSrc/com/intellij/psi/CodeFragmentsTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/CodeFragmentsTest.java @@ -7,7 +7,7 @@ import com.intellij.psi.search.GlobalSearchScope; @PlatformTestCase.WrapInCommand public class CodeFragmentsTest extends PsiTestCase{ public void testAddImport() throws Exception { - PsiCodeFragment fragment = myJavaFacade.getElementFactory().createExpressionCodeFragment("AAA.foo()", null, null, false); + PsiCodeFragment fragment = JavaCodeFragmentFactory.getInstance(myProject).createExpressionCodeFragment("AAA.foo()", null, null, false); PsiClass arrayListClass = myJavaFacade.findClass("java.util.ArrayList", GlobalSearchScope.allScope(getProject())); PsiReference ref = fragment.findReferenceAt(0); ref.bindToElement(arrayListClass); diff --git a/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterTest.java b/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterTest.java index db9ce9b6a192..16fb8dd3c01c 100644 --- a/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterTest.java @@ -6,10 +6,7 @@ import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.roots.LanguageLevelProjectExtension; import com.intellij.openapi.util.TextRange; import com.intellij.pom.java.LanguageLevel; -import com.intellij.psi.JavaPsiFacade; -import com.intellij.psi.PsiCodeFragment; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiElementFactory; +import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; @@ -1139,7 +1136,7 @@ public class JavaFormatterTest extends AbstractJavaFormatterTest { } public void testFormatCodeFragment() throws Exception { - final PsiElementFactory factory = JavaPsiFacade.getInstance(getProject()).getElementFactory(); + final JavaCodeFragmentFactory factory = JavaCodeFragmentFactory.getInstance(getProject()); final PsiCodeFragment fragment = factory.createCodeBlockCodeFragment("a=1;int b=2;", null, true); final PsiElement[] result = new PsiElement[1]; diff --git a/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveInCodeFragmentTest.java b/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveInCodeFragmentTest.java index 83feca6dc40b..b934877c48bf 100644 --- a/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveInCodeFragmentTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveInCodeFragmentTest.java @@ -12,7 +12,7 @@ public class ResolveInCodeFragmentTest extends ResolveTestCase { final PsiReference iRef = configure(); PsiElement context = PsiTreeUtil.getParentOfType(iRef.getElement(), PsiCodeBlock.class); - JavaCodeFragment codeFragment = JavaPsiFacade.getInstance(myProject).getElementFactory() + JavaCodeFragment codeFragment = JavaCodeFragmentFactory.getInstance(myProject) .createExpressionCodeFragment(iRef.getElement().getText(), context, null, true); codeFragment.setVisibilityChecker(JavaCodeFragment.VisibilityChecker.EVERYTHING_VISIBLE); @@ -30,7 +30,7 @@ public class ResolveInCodeFragmentTest extends ResolveTestCase { } public void testjavaLangClass() throws Exception { - PsiCodeFragment codeFragment = JavaPsiFacade.getInstance(myProject).getElementFactory().createExpressionCodeFragment( + PsiCodeFragment codeFragment = JavaCodeFragmentFactory.getInstance(myProject).createExpressionCodeFragment( "Boolean.getBoolean(\"true\")", null, null, true); PsiElement[] fileContent = codeFragment.getChildren(); diff --git a/java/openapi/src/com/intellij/psi/JavaCodeFragmentFactory.java b/java/openapi/src/com/intellij/psi/JavaCodeFragmentFactory.java new file mode 100644 index 000000000000..cb7b11b2dc31 --- /dev/null +++ b/java/openapi/src/com/intellij/psi/JavaCodeFragmentFactory.java @@ -0,0 +1,113 @@ +/* + * Copyright 2000-2011 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.psi; + +import com.intellij.openapi.components.ServiceManager; +import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; + +public abstract class JavaCodeFragmentFactory { + public static JavaCodeFragmentFactory getInstance(Project project) { + return ServiceManager.getService(project, JavaCodeFragmentFactory.class); + } + + /** + * Creates a Java expression code fragment from the text of the expression. + * + * @param text the text of the expression to create. + * @param context the context for resolving references from the code fragment. + * @param expectedType expected type of the expression (does not have any effect on creation + * but can be accessed as {@link PsiExpressionCodeFragment#getExpectedType()}). + * @param isPhysical whether the code fragment is created as a physical element + * (see {@link PsiElement#isPhysical()}). + * @return the created code fragment. + */ + @NotNull + public abstract PsiExpressionCodeFragment createExpressionCodeFragment(@NotNull String text, PsiElement context, final PsiType expectedType, boolean isPhysical); + + /** + * Creates a Java code fragment from the text of a Java code block. + * + * @param text the text of the code block to create. + * @param context the context for resolving references from the code fragment. + * @param isPhysical whether the code fragment is created as a physical element + * (see {@link PsiElement#isPhysical()}). + * @return the created code fragment. + */ + @NotNull + public abstract JavaCodeFragment createCodeBlockCodeFragment(@NotNull String text, PsiElement context, boolean isPhysical); + + /** + * Flag for {@linkplain #createTypeCodeFragment(String, PsiElement, boolean, int)} - allows void type. + */ + public static final int ALLOW_VOID = 0x01; + /** + * Flag for {@linkplain #createTypeCodeFragment(String, PsiElement, boolean, int)} - allows type with ellipsis. + */ + public static final int ALLOW_ELLIPSIS = 0x02; + /** + * Flag for {@linkplain #createTypeCodeFragment(String, PsiElement, boolean, int)} - allows disjunctive type. + */ + public static final int ALLOW_DISJUNCTION = 0x04; + + /** + * Creates a Java type code fragment from the text of the name of a Java type (the name + * of a primitive type, array type or class), with void and ellipsis + * not treated as a valid type. + * + * @param text the text of the Java type to create. + * @param context the context for resolving references from the code fragment. + * @param isPhysical whether the code fragment is created as a physical element + * (see {@link PsiElement#isPhysical()}). + * @return the created code fragment. + */ + @NotNull + public abstract PsiTypeCodeFragment createTypeCodeFragment(@NotNull String text, PsiElement context, boolean isPhysical); + + /** + * Creates a Java type code fragment from the text of the name of a Java type (the name + * of a primitive type, array type or class).
+ * {@code void}, ellipsis and disjunctive types are optionally treated as valid ones. + * + * @param text the text of the Java type to create. + * @param context the context for resolving references from the code fragment. + * @param isPhysical whether the code fragment is created as a physical element + * (see {@link PsiElement#isPhysical()}). + * @param flags types allowed to present in text. + * @return the created code fragment. + */ + @NotNull + public abstract PsiTypeCodeFragment createTypeCodeFragment(@NotNull String text, PsiElement context, boolean isPhysical, int flags); + + /** + * Creates a Java reference code fragment from the text of a Java reference to a + * package or class. + * + * @param text the text of the reference to create. + * @param context the context for resolving the reference. + * @param isPhysical whether the code fragment is created as a physical element + * (see {@link PsiElement#isPhysical()}). + * @param isClassesAccepted if true then classes as well as packages are accepted as + * reference target, otherwise only packages are + * @return the created reference fragment. + */ + @NotNull + public abstract PsiJavaCodeReferenceCodeFragment createReferenceCodeFragment(@NotNull String text, + PsiElement context, + boolean isPhysical, + boolean isClassesAccepted); + +} diff --git a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/PsiUtilEx.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/PsiUtilEx.java index 6aeb1c449a9e..8feb277f15d2 100644 --- a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/PsiUtilEx.java +++ b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/PsiUtilEx.java @@ -108,7 +108,7 @@ public class PsiUtilEx { return new DocumentImpl(s); } else { - return JavaReferenceEditorUtil.createTypeDocument(s, PsiManager.getInstance(project)); + return JavaReferenceEditorUtil.createTypeDocument(s, project); } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyCodeFragmentFactory.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyCodeFragmentFactory.java index 29db54845ada..034f109564f3 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyCodeFragmentFactory.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyCodeFragmentFactory.java @@ -141,7 +141,7 @@ public class GroovyCodeFragmentFactory implements CodeFragmentFactory { final String hiddenJavaVars = StringUtil.replace(javaText.toString(), "|", "_$$_$$$_$$$$$$$$$_" + new Random().nextInt(42)); final String finalText = StringUtil.replace(StringUtil.replace(hiddenJavaVars, TEXT, groovyText), IMPORTS, imports); - JavaCodeFragment result = factory.createCodeBlockCodeFragment(finalText, null, true); + JavaCodeFragment result = JavaCodeFragmentFactory.getInstance(project).createCodeBlockCodeFragment(finalText, null, true); if (contextClass != null) { result.setThisType(factory.createType(contextClass)); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureDialog.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureDialog.java index 418650eb49c6..07c99a734ee7 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureDialog.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureDialog.java @@ -137,8 +137,8 @@ public class GrChangeSignatureDialog extends RefactoringDialog { myNameField = new EditorTextField(PsiDocumentManager.getInstance(myProject).getDocument(myNameCodeFragment), myProject, myNameCodeFragment.getFileType()); - final PsiElementFactory elementFactory = JavaPsiFacade.getInstance(myProject).getElementFactory(); - myReturnTypeCodeFragment = elementFactory.createTypeCodeFragment("", myMethod, true, PsiElementFactory.ALLOW_VOID); + final JavaCodeFragmentFactory factory = JavaCodeFragmentFactory.getInstance(myProject); + myReturnTypeCodeFragment = factory.createTypeCodeFragment("", myMethod, true, JavaCodeFragmentFactory.ALLOW_VOID); final Document document = PsiDocumentManager.getInstance(myProject).getDocument(myReturnTypeCodeFragment); myReturnTypeField = new EditorTextField(document, myProject, myReturnTypeCodeFragment.getFileType()); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrTableParameterInfo.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrTableParameterInfo.java index 7ec2f9a99041..953df67c21c1 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrTableParameterInfo.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrTableParameterInfo.java @@ -36,14 +36,14 @@ public class GrTableParameterInfo { final Project project = parameter.getProject(); myName = new GroovyCodeFragment(project, parameter.getName()); final PsiType type = parameter.getDeclaredType(); - final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); + final JavaCodeFragmentFactory factory = JavaCodeFragmentFactory.getInstance(project); if (type != null) { String typeText = type.getCanonicalText(); if (typeText == null) typeText = type.getPresentableText(); - myType = factory.createTypeCodeFragment(typeText, parameter, true, PsiElementFactory.ALLOW_VOID | PsiElementFactory.ALLOW_ELLIPSIS); + myType = factory.createTypeCodeFragment(typeText, parameter, true, JavaCodeFragmentFactory.ALLOW_VOID | JavaCodeFragmentFactory.ALLOW_ELLIPSIS); } else { - myType = factory.createTypeCodeFragment("", parameter, true, PsiElementFactory.ALLOW_VOID | PsiElementFactory.ALLOW_ELLIPSIS); + myType = factory.createTypeCodeFragment("", parameter, true, JavaCodeFragmentFactory.ALLOW_VOID | JavaCodeFragmentFactory.ALLOW_ELLIPSIS); } final GrExpression defaultInitializer = parameter.getDefaultInitializer(); if (defaultInitializer != null) { @@ -59,7 +59,7 @@ public class GrTableParameterInfo { this.myPosition = -1; myName = new GroovyCodeFragment(project, ""); myDefaultValue = new GroovyCodeFragment(project, ""); - myType = JavaPsiFacade.getElementFactory(project).createTypeCodeFragment("", context, true, PsiElementFactory.ALLOW_VOID); + myType = JavaCodeFragmentFactory.getInstance(project).createTypeCodeFragment("", context, true, JavaCodeFragmentFactory.ALLOW_VOID); myDefaultInitializer = new GroovyCodeFragment(project, ""); } @@ -72,7 +72,7 @@ public class GrTableParameterInfo { this.myPosition = -1; myName = new GroovyCodeFragment(project, name); myDefaultValue = new GroovyCodeFragment(project, defaultValue); - myType = JavaPsiFacade.getElementFactory(project).createTypeCodeFragment(type, context, true, PsiElementFactory.ALLOW_VOID); + myType = JavaCodeFragmentFactory.getInstance(project).createTypeCodeFragment(type, context, true, JavaCodeFragmentFactory.ALLOW_VOID); myDefaultInitializer = new GroovyCodeFragment(project, defaultInitializer); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/constant/GrIntroduceConstantDialog.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/constant/GrIntroduceConstantDialog.java index 2019ff4b7fa9..11e21c580762 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/constant/GrIntroduceConstantDialog.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/constant/GrIntroduceConstantDialog.java @@ -157,7 +157,7 @@ public class GrIntroduceConstantDialog extends DialogWrapper } } - }, "", PsiManager.getInstance(myContext.project), true, RECENTS_KEY); + }, "", myContext.project, true, RECENTS_KEY); myTargetClassPanel.setLayout(new BorderLayout()); myTargetClassPanel.add(myTargetClassLabel, BorderLayout.NORTH); myTargetClassPanel.add(myTargetClassEditor, BorderLayout.CENTER); diff --git a/plugins/java-i18n/src/com/intellij/codeInspection/i18n/JavaI18nizeQuickFixDialog.java b/plugins/java-i18n/src/com/intellij/codeInspection/i18n/JavaI18nizeQuickFixDialog.java index c0edee59380d..a26f4d610fcd 100644 --- a/plugins/java-i18n/src/com/intellij/codeInspection/i18n/JavaI18nizeQuickFixDialog.java +++ b/plugins/java-i18n/src/com/intellij/codeInspection/i18n/JavaI18nizeQuickFixDialog.java @@ -106,8 +106,7 @@ public class JavaI18nizeQuickFixDialog extends I18nizeQuickFixDialog { myShowPreview = showPreview; myResourceBundleSuggester.setLayout(new BorderLayout()); - PsiManager psiManager = PsiManager.getInstance(myProject); - PsiElementFactory factory = JavaPsiFacade.getInstance(psiManager.getProject()).getElementFactory(); + PsiElementFactory factory = JavaPsiFacade.getInstance(myProject).getElementFactory(); PsiClass resourceBundle = myResourceBundleManager.getResourceBundle(); myShowJavaCodeInfo = showJavaCodeInfo && myResourceBundleManager.canShowJavaCodeInfo(); @@ -116,8 +115,9 @@ public class JavaI18nizeQuickFixDialog extends I18nizeQuickFixDialog { LOG.assertTrue(resourceBundle != null); myResourceBundleType = factory.createType(resourceBundle); @NonNls String defaultVarName = "resourceBundle"; + final JavaCodeFragmentFactory codeFragmentFactory = JavaCodeFragmentFactory.getInstance(project); PsiExpressionCodeFragment expressionCodeFragment = - factory.createExpressionCodeFragment(defaultVarName, myLiteralExpression, myResourceBundleType, true); + codeFragmentFactory.createExpressionCodeFragment(defaultVarName, myLiteralExpression, myResourceBundleType, true); Document document = PsiDocumentManager.getInstance(myProject).getDocument(expressionCodeFragment); myRBEditorTextField = new EditorComboBox(document, myProject, StdFileTypes.JAVA); myResourceBundleSuggester.add(myRBEditorTextField, BorderLayout.CENTER); diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/clientProperties/ClassNameInputDialog.java b/plugins/ui-designer/src/com/intellij/uiDesigner/clientProperties/ClassNameInputDialog.java index edbd68881d37..e226b7f0b3d6 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/clientProperties/ClassNameInputDialog.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/clientProperties/ClassNameInputDialog.java @@ -44,11 +44,10 @@ public class ClassNameInputDialog extends DialogWrapper { private void createUIComponents() { myEditorTextField1 = new EditorTextField("", myProject, StdFileTypes.JAVA); - final PsiManager manager = PsiManager.getInstance(myProject); - final PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory(); - PsiPackage defaultPackage = JavaPsiFacade.getInstance(manager.getProject()).findPackage(""); + final JavaCodeFragmentFactory factory = JavaCodeFragmentFactory.getInstance(myProject); + PsiPackage defaultPackage = JavaPsiFacade.getInstance(myProject).findPackage(""); final PsiCodeFragment fragment = factory.createReferenceCodeFragment("", defaultPackage, true, true); - myEditorTextField1.setDocument(PsiDocumentManager.getInstance(manager.getProject()).getDocument(fragment)); + myEditorTextField1.setDocument(PsiDocumentManager.getInstance(myProject).getDocument(fragment)); } @Override diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/palette/ComponentItemDialog.java b/plugins/ui-designer/src/com/intellij/uiDesigner/palette/ComponentItemDialog.java index 1a35202550b9..cb1a4bd49f36 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/palette/ComponentItemDialog.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/palette/ComponentItemDialog.java @@ -197,11 +197,10 @@ public final class ComponentItemDialog extends DialogWrapper { } private void setEditorText(final String className) { - final PsiManager manager = PsiManager.getInstance(myProject); - final PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory(); - PsiPackage defaultPackage = JavaPsiFacade.getInstance(manager.getProject()).findPackage(""); + final JavaCodeFragmentFactory factory = JavaCodeFragmentFactory.getInstance(myProject); + PsiPackage defaultPackage = JavaPsiFacade.getInstance(myProject).findPackage(""); final PsiCodeFragment fragment = factory.createReferenceCodeFragment(className, defaultPackage, true, true); - myDocument = PsiDocumentManager.getInstance(manager.getProject()).getDocument(fragment); + myDocument = PsiDocumentManager.getInstance(myProject).getDocument(fragment); myEditorTextField.setDocument(myDocument); updateOKAction(); } diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/properties/ClassToBindProperty.java b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/properties/ClassToBindProperty.java index 46bcaa7bf5f8..d670980fb472 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/properties/ClassToBindProperty.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/properties/ClassToBindProperty.java @@ -130,11 +130,10 @@ public final class ClassToBindProperty extends Property + +