update copyright
[fedora-idea.git] / java / java-impl / src / com / intellij / codeInsight / daemon / impl / quickfix / MoveClassToSeparateFileFix.java
blobeefa502100d4d17988e4bfe76ac5ad1c17e39426
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.codeInsight.daemon.impl.quickfix;
18 import com.intellij.codeInsight.CodeInsightUtilBase;
19 import com.intellij.codeInsight.daemon.QuickFixBundle;
20 import com.intellij.codeInsight.intention.IntentionAction;
21 import com.intellij.openapi.diagnostic.Logger;
22 import com.intellij.openapi.editor.Editor;
23 import com.intellij.openapi.fileEditor.FileEditorManager;
24 import com.intellij.openapi.fileEditor.OpenFileDescriptor;
25 import com.intellij.openapi.project.Project;
26 import com.intellij.psi.JavaDirectoryService;
27 import com.intellij.psi.PsiClass;
28 import com.intellij.psi.PsiDirectory;
29 import com.intellij.psi.PsiFile;
30 import com.intellij.util.IncorrectOperationException;
31 import org.jetbrains.annotations.NotNull;
33 public class MoveClassToSeparateFileFix implements IntentionAction {
34 private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.daemon.impl.quickfix.MoveClassToSeparateFileFix");
36 private final PsiClass myClass;
38 public MoveClassToSeparateFileFix(PsiClass aClass) {
39 myClass = aClass;
42 @NotNull
43 public String getText() {
44 return QuickFixBundle.message("move.class.to.separate.file.text",
45 myClass.getName());
48 @NotNull
49 public String getFamilyName() {
50 return QuickFixBundle.message("move.class.to.separate.file.family");
53 public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
54 if (!myClass.isValid() || !myClass.getManager().isInProject(myClass)) return false;
55 PsiDirectory dir = file.getContainingDirectory();
56 if (dir == null) return false;
57 try {
58 String name = myClass.getName();
59 if (myClass.isInterface()) {
60 JavaDirectoryService.getInstance().checkCreateInterface(dir, name);
62 else {
63 JavaDirectoryService.getInstance().checkCreateClass(dir, name);
66 catch (IncorrectOperationException e) {
67 return false;
70 return true;
73 public void invoke(@NotNull Project project, Editor editor, PsiFile file) {
74 if (!CodeInsightUtilBase.prepareFileForWrite(myClass.getContainingFile())) return;
76 PsiDirectory dir = file.getContainingDirectory();
77 try{
78 String name = myClass.getName();
79 PsiClass placeHolder = myClass.isInterface() ? JavaDirectoryService.getInstance().createInterface(dir, name) :
80 JavaDirectoryService.getInstance().createClass(dir, name);
81 PsiClass newClass = (PsiClass)placeHolder.replace(myClass);
82 myClass.delete();
84 OpenFileDescriptor descriptor = new OpenFileDescriptor(project, newClass.getContainingFile().getVirtualFile(), newClass.getTextOffset());
85 FileEditorManager.getInstance(project).openTextEditor(descriptor, true);
87 catch(IncorrectOperationException e){
88 LOG.error(e);
92 public boolean startInWriteAction() {
93 return true;