Merge branch 'master' into changeSignature
[idea/community.git] / platform / lang-api / src / com / intellij / lang / refactoring / RefactoringSupportProvider.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 package com.intellij.lang.refactoring;
17
18 import com.intellij.psi.PsiElement;
19 import com.intellij.refactoring.RefactoringActionHandler;
20 import com.intellij.refactoring.changeSignature.ChangeSignatureHandler;
21 import org.jetbrains.annotations.Nullable;
22
23 /**
24  * Allows a custom language plugin to control the operation of refactorings for
25  * files in the language.
26  *
27  * @author ven
28  */
29
30 public interface RefactoringSupportProvider {
31   /**
32    * Checks if the Safe Delete refactoring can be applied to the specified element
33    * in the language. The Safe Delete refactoring also requires the plugin to implement
34    * Find Usages functionality.
35    *
36    * @param element the element for which Safe Delete was invoked
37    * @return true if Safe Delete is available, false otherwise.
38    */
39   boolean isSafeDeleteAvailable(PsiElement element);
40
41   /**
42    * @return handler for introducing local variables in this language
43    * @see com.intellij.refactoring.RefactoringActionHandler
44    */
45   @Nullable RefactoringActionHandler getIntroduceVariableHandler();
46
47   /**
48    * @return handler for extracting methods in this language
49    * @see com.intellij.refactoring.RefactoringActionHandler
50    */
51   @Nullable RefactoringActionHandler getExtractMethodHandler();
52
53   /**
54    * @return handler for introducing constants in this language
55    * @see com.intellij.refactoring.RefactoringActionHandler
56    */
57   @Nullable RefactoringActionHandler getIntroduceConstantHandler();
58
59   /**
60    * @return handler for introducing fields in this language
61    * @see com.intellij.refactoring.RefactoringActionHandler
62    */
63   @Nullable RefactoringActionHandler getIntroduceFieldHandler();
64
65   /**
66    * @return  handler for introducing parameters in this language
67    * @see com.intellij.refactoring.RefactoringActionHandler
68    */
69   @Nullable RefactoringActionHandler getIntroduceParameterHandler();
70
71   /**
72    * @return  handler for pulling up members in this language
73    * @see com.intellij.refactoring.RefactoringActionHandler
74    */
75   @Nullable RefactoringActionHandler getPullUpHandler();
76
77   /**
78    * @return  handler for pushing down members in this language
79    * @see com.intellij.refactoring.RefactoringActionHandler
80    */
81   @Nullable RefactoringActionHandler getPushDownHandler();
82
83   /**
84    * @return  handler for extracting members to some module in this language
85    * @see com.intellij.refactoring.RefactoringActionHandler
86    */
87   @Nullable RefactoringActionHandler getExtractModuleHandler();
88
89   /**
90    * @return  handler for extracting super class in this language
91    * @see com.intellij.refactoring.RefactoringActionHandler
92    */
93   @Nullable RefactoringActionHandler getExtractSuperClassHandler();
94
95   /**
96    * @return  handler for changing signature in this language
97    * @see com.intellij.refactoring.RefactoringActionHandler
98    */
99   @Nullable ChangeSignatureHandler getChangeSignatureHandler();
100
101   boolean doInplaceRenameFor(PsiElement element, PsiElement context);
102 }