update copyright
[fedora-idea.git] / java / java-impl / src / com / intellij / refactoring / move / moveClassesOrPackages / MultipleRootsMoveDestination.java
blobce162220a646a1d894b272aaede07d710b4c0958
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.move.moveClassesOrPackages;
18 import com.intellij.openapi.diagnostic.Logger;
19 import com.intellij.openapi.vfs.VirtualFile;
20 import com.intellij.psi.*;
21 import com.intellij.refactoring.PackageWrapper;
22 import com.intellij.refactoring.util.RefactoringUtil;
23 import com.intellij.usageView.UsageInfo;
24 import com.intellij.util.IncorrectOperationException;
25 import com.intellij.util.containers.MultiMap;
26 import org.jetbrains.annotations.Nullable;
28 import java.util.Collection;
30 /**
31 * @author dsl
33 public class MultipleRootsMoveDestination extends AutocreatingMoveDestination {
34 private static final Logger LOG = Logger.getInstance(
35 "#com.intellij.refactoring.move.moveClassesOrPackages.MultipleRootsMoveDestination");
37 public MultipleRootsMoveDestination(PackageWrapper aPackage) {
38 super(aPackage);
41 public PackageWrapper getTargetPackage() {
42 return myPackage;
46 public PsiDirectory getTargetDirectory(PsiDirectory source) throws IncorrectOperationException {
47 if (JavaDirectoryService.getInstance().isSourceRoot(source)) return null;
48 return getOrCreateDirectoryForSource(source.getVirtualFile());
51 public PsiDirectory getTargetDirectory(PsiFile source) throws IncorrectOperationException {
52 return getOrCreateDirectoryForSource(source.getVirtualFile());
55 public PsiDirectory getTargetIfExists(PsiFile source) {
56 return findTargetDirectoryForSource(source.getVirtualFile());
59 public String verify(PsiFile source) {
60 VirtualFile virtualFile = source.getVirtualFile();
61 if (virtualFile.isDirectory()) {
62 virtualFile = virtualFile.getParent();
63 LOG.assertTrue(virtualFile.isDirectory());
66 final VirtualFile sourceRootForFile = myFileIndex.getSourceRootForFile(virtualFile);
67 if (sourceRootForFile == null) {
68 return "";
70 return checkCanCreateInSourceRoot(sourceRootForFile);
73 @Nullable
74 public String verify(PsiDirectory source) {
75 VirtualFile virtualFile = source.getVirtualFile();
76 final VirtualFile sourceRootForFile = myFileIndex.getSourceRootForFile(virtualFile);
77 if (sourceRootForFile == null) {
78 return "";
80 if (virtualFile.equals(sourceRootForFile)) return null;
81 return checkCanCreateInSourceRoot(sourceRootForFile);
84 @Nullable
85 public String verify(PsiPackage source) {
86 PsiDirectory[] directories = source.getDirectories();
87 for (final PsiDirectory directory : directories) {
88 String s = verify(directory);
89 if (s != null) return s;
91 return null;
94 public void analyzeModuleConflicts(final Collection<PsiElement> elements,
95 MultiMap<PsiElement,String> conflicts, final UsageInfo[] usages) {
98 public PsiDirectory getTargetIfExists(PsiDirectory source) {
99 return findTargetDirectoryForSource(source.getVirtualFile());
103 private PsiDirectory findTargetDirectoryForSource(final VirtualFile file) {
104 final VirtualFile sourceRoot = myFileIndex.getSourceRootForFile(file);
105 LOG.assertTrue(sourceRoot != null);
106 return RefactoringUtil.findPackageDirectoryInSourceRoot(myPackage, sourceRoot);
109 private PsiDirectory getOrCreateDirectoryForSource(final VirtualFile file)
110 throws IncorrectOperationException {
111 final VirtualFile sourceRoot = myFileIndex.getSourceRootForFile(file);
112 LOG.assertTrue(sourceRoot != null);
113 return RefactoringUtil.createPackageDirectoryInSourceRoot(myPackage, sourceRoot);