update copyright
[fedora-idea.git] / java / java-impl / src / com / intellij / refactoring / rename / RenamePsiPackageProcessor.java
blob339a1752962f9c33b92f392f52977b4374dc0784
1 /*
2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com.intellij.refactoring.rename;
18 import com.intellij.openapi.diagnostic.Logger;
19 import com.intellij.openapi.project.Project;
20 import com.intellij.psi.*;
21 import com.intellij.psi.search.GlobalSearchScope;
22 import com.intellij.refactoring.HelpID;
23 import com.intellij.refactoring.JavaRefactoringSettings;
24 import com.intellij.refactoring.listeners.RefactoringElementListener;
25 import com.intellij.usageView.UsageInfo;
26 import com.intellij.util.IncorrectOperationException;
27 import com.intellij.util.containers.MultiMap;
28 import org.jetbrains.annotations.NonNls;
29 import org.jetbrains.annotations.Nullable;
31 import java.util.Map;
33 /**
34 * @author yole
36 public class RenamePsiPackageProcessor extends RenamePsiElementProcessor {
37 private final Logger LOG = Logger.getInstance("#com.intellij.refactoring.rename.RenamePsiPackageProcessor");
39 public boolean canProcessElement(final PsiElement element) {
40 return element instanceof PsiPackage;
43 public void renameElement(final PsiElement element,
44 final String newName,
45 final UsageInfo[] usages, final RefactoringElementListener listener) throws IncorrectOperationException {
46 final PsiPackage psiPackage = (PsiPackage)element;
47 psiPackage.handleQualifiedNameChange(RenameUtil.getQualifiedNameAfterRename(psiPackage.getQualifiedName(), newName));
48 RenameUtil.doRenameGenericNamedElement(element, newName, usages, listener);
51 public String getQualifiedNameAfterRename(final PsiElement element, final String newName, final boolean nonJava) {
52 return getPackageQualifiedNameAfterRename((PsiPackage)element, newName, nonJava);
55 public static String getPackageQualifiedNameAfterRename(final PsiPackage element, final String newName, final boolean nonJava) {
56 if (nonJava) {
57 String qName = element.getQualifiedName();
58 int index = qName.lastIndexOf('.');
59 return index < 0 ? newName : qName.substring(0, index + 1) + newName;
61 else {
62 return newName;
66 @Override
67 public void findExistingNameConflicts(PsiElement element, String newName, MultiMap<PsiElement,String> conflicts) {
68 final PsiPackage aPackage = (PsiPackage)element;
69 final Project project = element.getProject();
70 final String qualifiedNameAfterRename = getPackageQualifiedNameAfterRename(aPackage, newName, true);
71 final PsiClass psiClass = JavaPsiFacade.getInstance(project).findClass(qualifiedNameAfterRename, GlobalSearchScope.allScope(project));
72 if (psiClass != null) {
73 conflicts.putValue(psiClass, "Class with qualified name \'" + qualifiedNameAfterRename + "\' already exist");
77 public void prepareRenaming(final PsiElement element, final String newName, final Map<PsiElement, String> allRenames) {
78 preparePackageRenaming((PsiPackage)element, newName, allRenames);
81 public static void preparePackageRenaming(PsiPackage psiPackage, final String newName, Map<PsiElement, String> allRenames) {
82 final PsiDirectory[] directories = psiPackage.getDirectories();
83 for (PsiDirectory directory : directories) {
84 if (!JavaDirectoryService.getInstance().isSourceRoot(directory)) {
85 allRenames.put(directory, newName);
90 @Nullable
91 public Runnable getPostRenameCallback(final PsiElement element, final String newName, final RefactoringElementListener listener) {
92 final Project project = element.getProject();
93 final PsiPackage psiPackage = (PsiPackage)element;
94 final String newQualifiedName = RenameUtil.getQualifiedNameAfterRename(psiPackage.getQualifiedName(), newName);
95 return new Runnable() {
96 public void run() {
97 final PsiPackage aPackage = JavaPsiFacade.getInstance(project).findPackage(newQualifiedName);
98 if (aPackage == null) {
99 LOG.error("Package cannot be found: "+newQualifiedName+"; listener="+listener);
101 listener.elementRenamed(aPackage);
106 @Nullable
107 @NonNls
108 public String getHelpID(final PsiElement element) {
109 return HelpID.RENAME_PACKAGE;
112 public boolean isToSearchInComments(final PsiElement psiElement) {
113 return JavaRefactoringSettings.getInstance().RENAME_SEARCH_IN_COMMENTS_FOR_PACKAGE;
116 public void setToSearchInComments(final PsiElement element, final boolean enabled) {
117 JavaRefactoringSettings.getInstance().RENAME_SEARCH_IN_COMMENTS_FOR_PACKAGE = enabled;
120 public boolean isToSearchForTextOccurrences(final PsiElement element) {
121 return JavaRefactoringSettings.getInstance().RENAME_SEARCH_FOR_TEXT_FOR_PACKAGE;
124 public void setToSearchForTextOccurrences(final PsiElement element, final boolean enabled) {
125 JavaRefactoringSettings.getInstance().RENAME_SEARCH_FOR_TEXT_FOR_PACKAGE = enabled;