cleanup
[idea/community.git] / plugins / groovy / src / org / jetbrains / plugins / groovy / lang / psi / GroovyPsiElementFactory.java
1 /*
2  * Copyright 2000-2011 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
17 package org.jetbrains.plugins.groovy.lang.psi;
18
19 import com.intellij.openapi.components.ServiceManager;
20 import com.intellij.openapi.project.Project;
21 import com.intellij.psi.*;
22 import com.intellij.util.IncorrectOperationException;
23 import org.jetbrains.annotations.NonNls;
24 import org.jetbrains.annotations.NotNull;
25 import org.jetbrains.annotations.Nullable;
26 import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocComment;
27 import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocMemberReference;
28 import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocReferenceElement;
29 import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocTag;
30 import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.GrLabel;
31 import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.annotation.GrAnnotation;
32 import org.jetbrains.plugins.groovy.lang.psi.api.statements.*;
33 import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgumentList;
34 import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrNamedArgument;
35 import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock;
36 import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrCodeBlock;
37 import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrApplicationStatement;
38 import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression;
39 import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrParenthesizedExpression;
40 import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression;
41 import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrLiteral;
42 import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.path.GrMethodCallExpression;
43 import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter;
44 import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrExtendsClause;
45 import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrImplementsClause;
46 import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition;
47 import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrEnumConstant;
48 import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod;
49 import org.jetbrains.plugins.groovy.lang.psi.api.toplevel.GrTopStatement;
50 import org.jetbrains.plugins.groovy.lang.psi.api.toplevel.imports.GrImportStatement;
51 import org.jetbrains.plugins.groovy.lang.psi.api.types.GrClosureSignature;
52 import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement;
53 import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement;
54
55 /**
56  * @author dimaskin
57  */
58 public abstract class GroovyPsiElementFactory implements JVMElementFactory {
59
60   @NonNls public static final String DUMMY_FILE_NAME = "DUMMY__";
61
62   public abstract GrCodeReferenceElement createCodeReferenceElementFromClass(PsiClass aClass);
63
64   public abstract GrCodeReferenceElement createCodeReferenceElementFromText(String text);
65
66   public static GroovyPsiElementFactory getInstance(Project project) {
67     return ServiceManager.getService(project, GroovyPsiElementFactory.class);
68   }
69
70   /**
71    * Creates an empty class initializer block.
72    *
73    * @return the created initializer block instance.
74    * @throws IncorrectOperationException in case of an internal error.
75    */
76   @NotNull
77   public abstract GrClassInitializer createClassInitializer() throws IncorrectOperationException;
78
79   /**
80    * @param qName
81    * @param isStatic
82    * @param isOnDemand
83    * @param alias
84    * @return import statement for given class
85    */
86   public abstract GrImportStatement createImportStatementFromText(String qName, boolean isStatic, boolean isOnDemand, @Nullable String alias);
87
88   public abstract GrImportStatement createImportStatementFromText(String text);
89
90   public abstract PsiElement createWhiteSpace();
91
92   @NotNull
93   public abstract PsiElement createLineTerminator(int length);
94
95   public abstract GrArgumentList createExpressionArgumentList(GrExpression... expressions);
96
97   public abstract GrNamedArgument createNamedArgument(String name, GrExpression expression);
98
99   public abstract GrStatement createStatementFromText(String text);
100   public abstract GrStatement createStatementFromText(String text, @Nullable PsiElement context);
101
102   public abstract GrBlockStatement createBlockStatement(GrStatement... statements);
103
104   public abstract GrMethodCallExpression createMethodCallByAppCall(GrApplicationStatement callExpr);
105
106   public abstract GrReferenceExpression createReferenceExpressionFromText(String exprText);
107
108   public abstract GrReferenceExpression createReferenceExpressionFromText(String idText, PsiElement context) ;
109
110   public abstract GrReferenceExpression createReferenceElementForClass(PsiClass clazz);
111
112   public GrCodeReferenceElement createReferenceElementFromText(String refName) {
113     return createReferenceElementFromText(refName, null);
114   }
115
116   public abstract GrCodeReferenceElement createReferenceElementFromText(String refName, @Nullable PsiElement context);
117
118   public GrExpression createExpressionFromText(String exprText) {
119     return createExpressionFromText(exprText, null);
120   }
121
122   @NotNull
123   public abstract GrExpression createExpressionFromText(@NotNull String exprText, @Nullable PsiElement context);
124
125   public abstract GrVariableDeclaration createFieldDeclaration(String[] modifiers, String identifier, @Nullable GrExpression initializer, @Nullable PsiType type);
126   public abstract GrVariableDeclaration createFieldDeclarationFromText(String text);
127
128   public abstract GrVariableDeclaration createVariableDeclaration(@Nullable String[] modifiers, @Nullable GrExpression initializer, PsiType type, String... identifiers);
129
130   public abstract GrEnumConstant createEnumConstantFromText(String text);
131
132   @NotNull
133   public abstract PsiElement createReferenceNameFromText(String idText);
134
135   public abstract PsiElement createDocMemberReferenceNameFromText(String idText);
136
137   public abstract GrDocMemberReference createDocMemberReferenceFromText(String className, String text);
138
139   public abstract GrDocReferenceElement createDocReferenceElementFromFQN(String qName);
140
141   public abstract GrTopStatement createTopElementFromText(String text);
142
143   public abstract GrClosableBlock createClosureFromText(String text, @Nullable PsiElement context);
144
145   public GrClosableBlock createClosureFromText(String s) throws IncorrectOperationException {
146     return createClosureFromText(s, null);
147   }
148
149   public GrParameter createParameter(String name, @Nullable String typeText, @Nullable GroovyPsiElement context) throws IncorrectOperationException {
150     return createParameter(name, typeText, null, context);
151   }
152
153   public abstract GrParameter createParameter(String name,
154                                               @Nullable String typeText,
155                                               @Nullable String initializer,
156                                               @Nullable GroovyPsiElement context) throws IncorrectOperationException;
157
158   public abstract GrCodeReferenceElement createTypeOrPackageReference(String qName);
159
160   public abstract GrTypeDefinition createTypeDefinition(String text) throws IncorrectOperationException;
161
162   public abstract GrTypeElement createTypeElement(PsiType type) throws IncorrectOperationException;
163
164   @NotNull
165   public GrTypeElement createTypeElement(String typeText) throws IncorrectOperationException {
166     return createTypeElement(typeText, null);
167   }
168
169   public abstract GrTypeElement createTypeElement(String typeText, @Nullable PsiElement context);
170
171   public abstract GrParenthesizedExpression createParenthesizedExpr(GrExpression newExpr);
172
173   public abstract PsiElement createStringLiteralForReference(String text);
174
175   public abstract PsiElement createModifierFromText(String name);
176
177   public abstract GrCodeBlock createMethodBodyFromText(String text);
178
179   public abstract GrVariableDeclaration createSimpleVariableDeclaration(String name, String typeText);
180
181   public abstract GrReferenceElement createPackageReferenceElementFromText(String newPackageName);
182
183   public abstract PsiElement createDotToken(String newDot);
184
185   @NotNull
186   public abstract GrMethod createMethodFromText(String methodText, @Nullable PsiElement context);
187
188   @NotNull
189   @Override
190   public abstract GrAnnotation createAnnotationFromText(@NotNull @NonNls String annotationText, @Nullable PsiElement context) throws IncorrectOperationException;
191
192   public abstract GrMethod createMethodFromSignature(String name, GrClosureSignature signature);
193
194   public GrMethod createMethodFromText(String methodText) {
195     return createMethodFromText(methodText, null);
196   }
197
198   public abstract GrAnnotation createAnnotationFromText(String annoText);
199
200   public abstract GroovyFile createGroovyFile(String text, boolean isPhysical, @Nullable PsiElement context);
201
202   public abstract GrMethod createMethodFromText(String modifier, String name, String type, String[] paramTypes, @Nullable PsiElement context);
203
204   public abstract GrMethod createConstructorFromText(@NotNull String constructorName,
205                                                      String[] paramTypes,
206                                                      String[] paramNames,
207                                                      String body,
208                                                      @Nullable PsiElement context);
209
210   public GrMethod createConstructorFromText(@NotNull String constructorName, String[] paramTypes, String[] paramNames, String body) {
211     return createConstructorFromText(constructorName, paramTypes, paramNames, body, null);
212   }
213
214   public abstract GrMethod createConstructorFromText(String constructorName, String text, @Nullable PsiElement context);
215
216   public abstract GrLabel createLabel(@NotNull String name);
217
218   public abstract GrDocComment createDocCommentFromText(String text) ;
219
220   public abstract GrDocTag createDocTagFromText(String text) ;
221
222   public abstract GrConstructorInvocation createConstructorInvocation(String text);
223   public abstract GrConstructorInvocation createConstructorInvocation(String text, PsiElement context);
224
225   public abstract PsiReferenceList createThrownList(PsiClassType[] exceptionTypes);
226
227   public abstract GrCatchClause createCatchClause(PsiClassType type, String parameterName);
228
229   public abstract GrArgumentList createArgumentList();
230
231   public abstract GrArgumentList createArgumentListFromText(String argListText);
232
233   public abstract GrExtendsClause createExtendsClause();
234
235   public abstract GrImplementsClause createImplementsClause();
236
237   public abstract GrLiteral createLiteralFromValue(@Nullable Object value);
238
239   @NotNull
240   public abstract GrMethod createMethod(@NotNull @NonNls String name, @Nullable PsiType returnType) throws IncorrectOperationException;
241
242   @NotNull
243   public abstract GrParameter createParameter(@NotNull @NonNls String name, @Nullable PsiType type) throws IncorrectOperationException;
244
245 }