import com.intellij.psi.impl.file.PsiPackageImpl;
import com.intellij.psi.impl.file.impl.JavaFileManager;
import com.intellij.psi.impl.file.impl.JavaFileManagerImpl;
-import com.intellij.psi.impl.migration.PsiMigrationImpl;
+import com.intellij.psi.impl.migration.PsiMigrationManager;
import com.intellij.psi.impl.source.DummyHolderFactory;
import com.intellij.psi.impl.source.JavaDummyHolder;
import com.intellij.psi.impl.source.JavaDummyHolderFactory;
public class JavaPsiFacadeImpl extends JavaPsiFacadeEx implements Disposable {
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.JavaPsiFacadeImpl");
- private PsiMigrationImpl myCurrentMigration;
private final PsiElementFinder[] myElementFinders;
private final PsiResolveHelper myResolveHelper;
private final PsiNameHelper myNameHelper;
return null;
}
-
- public PsiMigrationImpl getCurrentMigration() {
- return myCurrentMigration;
- }
-
@NotNull
public PsiJavaParserFacade getParserFacade() {
return getElementFactory(); // TODO: lighter implementation which doesn't mark all the elements as generated.
return myResolveHelper;
}
- @NotNull
- public PsiMigration startMigration() {
- LOG.assertTrue(myCurrentMigration == null);
- myCurrentMigration = new PsiMigrationImpl(this, (PsiManagerImpl)PsiManager.getInstance(myProject));
- return myCurrentMigration;
- }
-
@NotNull
public PsiNameHelper getNameHelper() {
return myNameHelper;
@Nullable
private PsiPackage findPackageDefault(String qualifiedName) {
final PsiPackage aPackage = myFileManager.findPackage(qualifiedName);
- if (aPackage == null && myCurrentMigration != null) {
- final PsiPackage migrationPackage = myCurrentMigration.getMigrationPackage(qualifiedName);
+ if (aPackage == null && PsiMigrationManager.getInstance(myProject).getCurrentMigration() != null) {
+ final PsiPackage migrationPackage = PsiMigrationManager.getInstance(myProject).getCurrentMigration().getMigrationPackage(qualifiedName);
if (migrationPackage != null) return migrationPackage;
}
public PsiClass findClass(@NotNull String qualifiedName, @NotNull GlobalSearchScope scope) {
PsiClass psiClass = myFileManager.findClass(qualifiedName, scope);
- if (psiClass == null && myCurrentMigration != null) {
- psiClass = myCurrentMigration.getMigrationClass(qualifiedName);
+ if (psiClass == null && PsiMigrationManager.getInstance(myProject).getCurrentMigration() != null) {
+ psiClass = PsiMigrationManager.getInstance(myProject).getCurrentMigration().getMigrationClass(qualifiedName);
}
return psiClass;
@NotNull
public PsiClass[] findClasses(@NotNull String qualifiedName, @NotNull GlobalSearchScope scope) {
final PsiClass[] classes = myFileManager.findClasses(qualifiedName, scope);
- if (classes.length == 0 && myCurrentMigration != null) {
- final PsiClass migrationClass = myCurrentMigration.getMigrationClass(qualifiedName);
+ if (classes.length == 0 && PsiMigrationManager.getInstance(myProject).getCurrentMigration() != null) {
+ final PsiClass migrationClass = PsiMigrationManager.getInstance(myProject).getCurrentMigration().getMigrationClass(qualifiedName);
if (migrationClass != null) {
return new PsiClass[]{migrationClass};
}
}
}
- public void migrationModified(boolean terminated) {
- if (terminated) {
- myCurrentMigration = null;
- }
-
- ((PsiManagerEx)PsiManager.getInstance(myProject)).beforeChange(true);
- }
-
public boolean isPartOfPackagePrefix(String packageName) {
final Collection<String> packagePrefixes = myFileManager.getNonTrivialPackagePrefixes();
import com.intellij.psi.impl.PackagePrefixElementFinder;
import com.intellij.psi.impl.PsiManagerEx;
import com.intellij.psi.impl.migration.PsiMigrationImpl;
+import com.intellij.psi.impl.migration.PsiMigrationManager;
import com.intellij.psi.impl.source.tree.java.PsiCompositeModifierList;
import com.intellij.psi.scope.ElementClassHint;
import com.intellij.psi.scope.NameHint;
ElementClassHint classHint = processor.getHint(ElementClassHint.KEY);
final JavaPsiFacadeImpl facade = getFacade();
- final PsiMigrationImpl migration = facade.getCurrentMigration();
+ final PsiMigrationImpl migration = PsiMigrationManager.getInstance(getProject()).getCurrentMigration();
final Condition<String> prefixMatcher = processor.getHint(JavaCompletionHints.NAME_FILTER);
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiMigration;
import com.intellij.psi.PsiPackage;
-import com.intellij.psi.impl.JavaPsiFacadeImpl;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.util.containers.HashMap;
*/
public class PsiMigrationImpl implements PsiMigration {
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.migration.PsiMigrationImpl");
- private final JavaPsiFacadeImpl myFacade;
+ private final PsiMigrationManager myMigrationManager;
+ private final JavaPsiFacade myFacade;
private final PsiManagerImpl myManager;
private final Map<String, MigrationClassImpl> myQNameToClassMap = new HashMap<String, MigrationClassImpl>();
private final Map<String, List<PsiClass>> myPackageToClassesMap = new HashMap<String, List<PsiClass>>();
private final Map<String, List<PsiPackage>> myPackageToSubpackagesMap = new HashMap<String, List<PsiPackage>>();
private boolean myIsValid = true;
- public PsiMigrationImpl(JavaPsiFacadeImpl facade, PsiManagerImpl manager) {
+ public PsiMigrationImpl(PsiMigrationManager migrationManager, JavaPsiFacade facade, PsiManagerImpl manager) {
+ myMigrationManager = migrationManager;
myFacade = facade;
myManager = manager;
}
}
List<PsiClass> psiClasses = getClassesList(packageName);
psiClasses.add(migrationClass);
- myFacade.migrationModified(false);
+ myMigrationManager.migrationModified(false);
return migrationClass;
}
}
List<PsiPackage> psiPackages = getSubpackagesList(parentName);
psiPackages.add(migrationPackage);
- myFacade.migrationModified(false);
+ myMigrationManager.migrationModified(false);
return migrationPackage;
}
myPackageToClassesMap.clear();
myPackageToSubpackagesMap.clear();
myIsValid = false;
- myFacade.migrationModified(true);
+ myMigrationManager.migrationModified(true);
}
private void assertValid() {
--- /dev/null
+/*
+ * 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.migration;
+
+import com.intellij.openapi.components.ServiceManager;
+import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.JavaPsiFacade;
+import com.intellij.psi.PsiManager;
+import com.intellij.psi.PsiMigration;
+import com.intellij.psi.impl.PsiManagerEx;
+import com.intellij.psi.impl.PsiManagerImpl;
+import org.jetbrains.annotations.NotNull;
+
+public class PsiMigrationManager {
+ private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.migration.PsiMigrationManager");
+
+ public static PsiMigrationManager getInstance(Project project) {
+ return ServiceManager.getService(project, PsiMigrationManager.class);
+ }
+
+ private final Project myProject;
+ private PsiMigrationImpl myCurrentMigration;
+
+ public PsiMigrationManager(Project project) {
+ myProject = project;
+ }
+
+ public PsiMigrationImpl getCurrentMigration() {
+ return myCurrentMigration;
+ }
+
+ /**
+ * Initiates a migrate refactoring. The refactoring is finished when
+ * {@link com.intellij.psi.PsiMigration#finish()} is called.
+ *
+ * @return the migrate operation object.
+ */
+ @NotNull
+ public PsiMigration startMigration() {
+ LOG.assertTrue(myCurrentMigration == null);
+ myCurrentMigration = new PsiMigrationImpl(this, JavaPsiFacade.getInstance(myProject),
+ (PsiManagerImpl)PsiManager.getInstance(myProject));
+ return myCurrentMigration;
+ }
+
+ public void migrationModified(boolean terminated) {
+ if (terminated) {
+ myCurrentMigration = null;
+ }
+
+ ((PsiManagerEx)PsiManager.getInstance(myProject)).beforeChange(true);
+ }
+}
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.Ref;
-import com.intellij.psi.JavaPsiFacade;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiMigration;
+import com.intellij.psi.impl.migration.PsiMigrationManager;
import com.intellij.refactoring.BaseRefactoringProcessor;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.RefactoringHelper;
public MigrationProcessor(Project project, MigrationMap migrationMap) {
super(project);
myMigrationMap = migrationMap;
- myPsiMigration = startMigration(PsiManager.getInstance(project));
+ myPsiMigration = startMigration(project);
}
protected UsageViewDescriptor createUsageViewDescriptor(UsageInfo[] usages) {
return new MigrationUsagesViewDescriptor(myMigrationMap, false);
}
- private PsiMigration startMigration(final PsiManager psiManager) {
- final PsiMigration migration = JavaPsiFacade.getInstance(psiManager.getProject()).startMigration();
- findOrCreateEntries(psiManager, migration);
+ private PsiMigration startMigration(Project project) {
+ final PsiMigration migration = PsiMigrationManager.getInstance(project).startMigration();
+ findOrCreateEntries(project, migration);
return migration;
}
- private void findOrCreateEntries(final PsiManager psiManager, final PsiMigration migration) {
+ private void findOrCreateEntries(Project project, final PsiMigration migration) {
for (int i = 0; i < myMigrationMap.getEntryCount(); i++) {
MigrationMapEntry entry = myMigrationMap.getEntryAt(i);
if (entry.getType() == MigrationMapEntry.PACKAGE) {
- MigrationUtil.findOrCreatePackage(psiManager, migration, entry.getOldName());
+ MigrationUtil.findOrCreatePackage(project, migration, entry.getOldName());
}
else {
- MigrationUtil.findOrCreateClass(psiManager, migration, entry.getOldName());
+ MigrationUtil.findOrCreateClass(project, migration, entry.getOldName());
}
}
}
@NotNull
protected UsageInfo[] findUsages() {
ArrayList<UsageInfo> usagesVector = new ArrayList<UsageInfo>();
- PsiManager psiManager = PsiManager.getInstance(myProject);
try {
if (myMigrationMap == null) {
return UsageInfo.EMPTY_ARRAY;
MigrationMapEntry entry = myMigrationMap.getEntryAt(i);
UsageInfo[] usages;
if (entry.getType() == MigrationMapEntry.PACKAGE) {
- usages = MigrationUtil.findPackageUsages(psiManager, myPsiMigration, entry.getOldName());
+ usages = MigrationUtil.findPackageUsages(myProject, myPsiMigration, entry.getOldName());
}
else {
- usages = MigrationUtil.findClassUsages(psiManager, myPsiMigration, entry.getOldName());
+ usages = MigrationUtil.findClassUsages(myProject, myPsiMigration, entry.getOldName());
}
for (UsageInfo usage : usages) {
}
protected void performRefactoring(UsageInfo[] usages) {
- PsiManager psiManager = PsiManager.getInstance(myProject);
- final PsiMigration psiMigration = JavaPsiFacade.getInstance(psiManager.getProject()).startMigration();
+ final PsiMigration psiMigration = PsiMigrationManager.getInstance(myProject).startMigration();
LocalHistoryAction a = LocalHistory.getInstance().startAction(getCommandName());
try {
for (int i = 0; i < myMigrationMap.getEntryCount(); i++) {
MigrationMapEntry entry = myMigrationMap.getEntryAt(i);
if (entry.getType() == MigrationMapEntry.PACKAGE) {
- MigrationUtil.doPackageMigration(psiManager, psiMigration, entry.getNewName(), usages);
+ MigrationUtil.doPackageMigration(myProject, psiMigration, entry.getNewName(), usages);
}
if (entry.getType() == MigrationMapEntry.CLASS) {
- MigrationUtil.doClassMigration(psiManager, psiMigration, entry.getNewName(), usages);
+ MigrationUtil.doClassMigration(myProject, psiMigration, entry.getNewName(), usages);
}
}
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
private MigrationUtil() {
}
- public static UsageInfo[] findPackageUsages(PsiManager manager, PsiMigration migration, String qName) {
- PsiPackage aPackage = findOrCreatePackage(manager, migration, qName);
+ public static UsageInfo[] findPackageUsages(Project project, PsiMigration migration, String qName) {
+ PsiPackage aPackage = findOrCreatePackage(project, migration, qName);
- return findRefs(manager, aPackage);
+ return findRefs(project, aPackage);
}
- public static void doPackageMigration(PsiManager manager, PsiMigration migration, String newQName, UsageInfo[] usages) {
+ public static void doPackageMigration(Project project, PsiMigration migration, String newQName, UsageInfo[] usages) {
try {
- PsiPackage aPackage = findOrCreatePackage(manager, migration, newQName);
+ PsiPackage aPackage = findOrCreatePackage(project, migration, newQName);
// rename all references
for (UsageInfo usage : usages) {
}
}
- public static UsageInfo[] findClassUsages(PsiManager manager, PsiMigration migration, String qName) {
- PsiClass aClass = findOrCreateClass(manager, migration, qName);
+ public static UsageInfo[] findClassUsages(Project project, PsiMigration migration, String qName) {
+ PsiClass aClass = findOrCreateClass(project, migration, qName);
- return findRefs(manager, aClass);
+ return findRefs(project, aClass);
}
- private static UsageInfo[] findRefs(final PsiManager manager, final PsiElement aClass) {
+ private static UsageInfo[] findRefs(final Project project, final PsiElement aClass) {
final ArrayList<UsageInfo> results = new ArrayList<UsageInfo>();
- GlobalSearchScope projectScope = GlobalSearchScope.projectScope(manager.getProject());
+ GlobalSearchScope projectScope = GlobalSearchScope.projectScope(project);
for (PsiReference usage : ReferencesSearch.search(aClass, projectScope, false)) {
results.add(new UsageInfo(usage));
}
return results.toArray(new UsageInfo[results.size()]);
}
- public static void doClassMigration(PsiManager manager, PsiMigration migration, String newQName, UsageInfo[] usages) {
+ public static void doClassMigration(Project project, PsiMigration migration, String newQName, UsageInfo[] usages) {
try {
- PsiClass aClass = findOrCreateClass(manager, migration, newQName);
+ PsiClass aClass = findOrCreateClass(project, migration, newQName);
// rename all references
for (UsageInfo usage : usages) {
}
}
- static PsiPackage findOrCreatePackage(PsiManager manager, final PsiMigration migration, final String qName) {
- PsiPackage aPackage = JavaPsiFacade.getInstance(manager.getProject()).findPackage(qName);
+ static PsiPackage findOrCreatePackage(Project project, final PsiMigration migration, final String qName) {
+ PsiPackage aPackage = JavaPsiFacade.getInstance(project).findPackage(qName);
if (aPackage != null) {
return aPackage;
}
}
}
- static PsiClass findOrCreateClass(PsiManager manager, final PsiMigration migration, final String qName) {
- PsiClass aClass = JavaPsiFacade.getInstance(manager.getProject()).findClass(qName, GlobalSearchScope.allScope(manager.getProject()));
+ static PsiClass findOrCreateClass(Project project, final PsiMigration migration, final String qName) {
+ PsiClass aClass = JavaPsiFacade.getInstance(project).findClass(qName, GlobalSearchScope.allScope(project));
if (aClass == null) {
aClass = ApplicationManager.getApplication().runWriteAction(new Computable<PsiClass>() {
public PsiClass compute() {
@NotNull
public abstract PsiResolveHelper getResolveHelper();
- /**
- * Initiates a migrate refactoring. The refactoring is finished when
- * {@link com.intellij.psi.PsiMigration#finish()} is called.
- *
- * @return the migrate operation object.
- */
- @NotNull
- public abstract PsiMigration startMigration();
-
/**
* Returns the name helper for the project, which can be used to validate
* and parse Java identifiers.
serviceImplementation="com.intellij.psi.impl.JavaPsiImplementationHelperImpl"/>
<projectService serviceInterface="com.intellij.psi.codeStyle.JavaCodeStyleSettingsFacade"
serviceImplementation="com.intellij.psi.codeStyle.JavaCodeStyleSettingsFacadeImpl"/>
+ <projectService serviceInterface="com.intellij.psi.impl.migration.PsiMigrationManager"
+ serviceImplementation="com.intellij.psi.impl.migration.PsiMigrationManager"/>
<applicationService serviceInterface="com.intellij.psi.JavaDirectoryService"
serviceImplementation="com.intellij.psi.impl.file.JavaDirectoryServiceImpl"/>