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
;
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
,
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
) {
57 String qName
= element
.getQualifiedName();
58 int index
= qName
.lastIndexOf('.');
59 return index
< 0 ? newName
: qName
.substring(0, index
+ 1) + newName
;
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
);
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() {
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
);
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
;