| /* |
| * Copyright 2000-2013 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.intellij.psi; |
| |
| import com.intellij.pom.java.LanguageLevel; |
| import com.intellij.psi.javadoc.PsiDocComment; |
| import com.intellij.psi.search.GlobalSearchScope; |
| import com.intellij.util.IncorrectOperationException; |
| import org.jetbrains.annotations.NonNls; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| import java.util.Map; |
| |
| /** |
| * @author Medvedev Max |
| */ |
| public interface JVMElementFactory { |
| /** |
| * Creates an empty class with the specified name. |
| * |
| * @param name the name of the class to create. |
| * @return the created class instance. |
| * @throws com.intellij.util.IncorrectOperationException |
| * if <code>name</code> is not a valid Java identifier. |
| */ |
| @NotNull |
| PsiClass createClass(@NonNls @NotNull String name) throws IncorrectOperationException; |
| |
| /** |
| * Creates an empty interface with the specified name. |
| * |
| * @param name the name of the interface to create. |
| * @return the created interface instance. |
| * @throws IncorrectOperationException if <code>name</code> is not a valid Java identifier. |
| */ |
| @NotNull |
| PsiClass createInterface(@NonNls @NotNull String name) throws IncorrectOperationException; |
| |
| /** |
| * Creates an empty enum with the specified name. |
| * |
| * @param name the name of the enum to create. |
| * @return the created enum instance. |
| * @throws IncorrectOperationException if <code>name</code> is not a valid Java identifier. |
| */ |
| @NotNull |
| PsiClass createEnum(@NotNull @NonNls String name) throws IncorrectOperationException; |
| |
| /** |
| * Creates a field with the specified name and type. |
| * |
| * @param name the name of the field to create. |
| * @param type the type of the field to create. |
| * @return the created field instance. |
| * @throws IncorrectOperationException <code>name</code> is not a valid Java identifier |
| * or <code>type</code> represents an invalid type. |
| */ |
| @NotNull |
| PsiField createField(@NotNull @NonNls String name, @NotNull PsiType type) throws IncorrectOperationException; |
| |
| /** |
| * Creates an empty method with the specified name and return type. |
| * |
| * @param name the name of the method to create. |
| * @param returnType the return type of the method to create. |
| * @return the created method instance. |
| * @throws IncorrectOperationException <code>name</code> is not a valid Java identifier |
| * or <code>type</code> represents an invalid type. |
| */ |
| @NotNull |
| PsiMethod createMethod(@NotNull @NonNls String name, PsiType returnType) throws IncorrectOperationException; |
| |
| /** |
| * Creates an empty constructor. |
| * |
| * @return the created constructor instance. |
| */ |
| @NotNull |
| PsiMethod createConstructor(); |
| |
| /** |
| * Creates an empty class initializer block. |
| * |
| * @return the created initializer block instance. |
| * @throws IncorrectOperationException in case of an internal error. |
| */ |
| @NotNull |
| PsiClassInitializer createClassInitializer() throws IncorrectOperationException; |
| |
| /** |
| * Creates a parameter with the specified name and type. |
| * |
| * @param name the name of the parameter to create. |
| * @param type the type of the parameter to create. |
| * @return the created parameter instance. |
| * @throws IncorrectOperationException <code>name</code> is not a valid Java identifier |
| * or <code>type</code> represents an invalid type. |
| */ |
| @NotNull |
| PsiParameter createParameter(@NotNull @NonNls String name, PsiType type) throws IncorrectOperationException; |
| PsiParameter createParameter(@NotNull @NonNls String name, PsiType type, PsiElement context) throws IncorrectOperationException; |
| |
| /** |
| * Creates a parameter list from the specified parameter names and types. |
| * |
| * @param names the array of names for the parameters to create. |
| * @param types the array of types for the parameters to create. |
| * @return the created parameter list. |
| * @throws IncorrectOperationException if some of the parameter names or types are invalid. |
| */ |
| @NotNull |
| PsiParameterList createParameterList(@NotNull @NonNls String[] names, @NotNull PsiType[] types) throws IncorrectOperationException; |
| |
| @NotNull |
| PsiMethod createMethodFromText(String text, @Nullable PsiElement context); |
| |
| @NotNull |
| PsiAnnotation createAnnotationFromText(@NotNull @NonNls String annotationText, @Nullable PsiElement context) throws IncorrectOperationException; |
| |
| @NotNull |
| PsiElement createExpressionFromText(@NotNull @NonNls String text, @Nullable PsiElement context) throws IncorrectOperationException; |
| |
| /** |
| * Creates new reference element by type |
| * @param type the type for which reference element should be created |
| * @return the reference element |
| */ |
| @NotNull |
| PsiElement createReferenceElementByType(PsiClassType type); |
| |
| /** |
| * Creates empty type parameter list |
| * @return the empty type parameter list |
| */ |
| @NotNull |
| PsiTypeParameterList createTypeParameterList(); |
| |
| /** |
| * Creates new type parameter with the specified name and super types |
| * @param name the name which the type parameter should have |
| * @param superTypes the super types of the type parameter |
| * @return the new type parameter |
| */ |
| @NotNull |
| PsiTypeParameter createTypeParameter(String name, PsiClassType[] superTypes); |
| |
| /** |
| * Creates a class type for the specified class. |
| * |
| * @param aClass the class for which the class type is created. |
| * @return the class type instance. |
| */ |
| @NotNull |
| PsiClassType createType(@NotNull PsiClass aClass); |
| |
| /** |
| * Creates an empty annotation type with the specified name. |
| * |
| * @param name the name of the annotation type to create. |
| * @return the created annotation type instance. |
| * @throws com.intellij.util.IncorrectOperationException if <code>name</code> is not a valid Java identifier. |
| */ |
| @NotNull |
| PsiClass createAnnotationType(@NotNull @NonNls String name) throws IncorrectOperationException; |
| |
| /** |
| * Creates an empty constructor with a given name. |
| * |
| * @param name the name of the constructor to create. |
| * @return the created constructor instance. |
| */ |
| @NotNull |
| PsiMethod createConstructor(@NotNull @NonNls String name); |
| PsiMethod createConstructor(@NotNull @NonNls String name, PsiElement context); |
| |
| /** |
| * Creates a class type for the specified class, using the specified substitutor |
| * to replace generic type parameters on the class. |
| * |
| * @param resolve the class for which the class type is created. |
| * @param substitutor the substitutor to use. |
| * @return the class type instance. |
| */ |
| @NotNull |
| PsiClassType createType(@NotNull PsiClass resolve, @NotNull PsiSubstitutor substitutor); |
| |
| /* |
| additional languageLevel parameter to memorize language level for allowing/prohibiting boxing/unboxing |
| */ |
| @NotNull |
| PsiClassType createType(@NotNull PsiClass resolve, @NotNull PsiSubstitutor substitutor, @NotNull LanguageLevel languageLevel); |
| |
| @NotNull |
| PsiClassType createType(@NotNull PsiClass resolve, |
| @NotNull PsiSubstitutor substitutor, |
| @NotNull LanguageLevel languageLevel, |
| @NotNull PsiAnnotation[] annotations); |
| |
| @NotNull |
| PsiClassType createType(@NotNull PsiClass aClass, PsiType parameters); |
| |
| @NotNull |
| PsiClassType createType(@NotNull PsiClass aClass, PsiType... parameters); |
| |
| /** |
| * Creates a substitutor for the specified class which replaces all type parameters |
| * with their corresponding raw types. |
| * |
| * @param owner the class or method for which the substitutor is created. |
| * @return the substitutor instance. |
| */ |
| @NotNull |
| PsiSubstitutor createRawSubstitutor(@NotNull PsiTypeParameterListOwner owner); |
| |
| /** |
| * Creates a substitutor which uses the specified mapping between type parameters and types. |
| * |
| * @param map the type parameter to type map used by the substitutor. |
| * @return the substitutor instance. |
| */ |
| @NotNull |
| PsiSubstitutor createSubstitutor(@NotNull Map<PsiTypeParameter, PsiType> map); |
| |
| /** |
| * Returns the primitive type instance for the specified type name. |
| * |
| * @param text the name of a Java primitive type (for example, <code>int</code>) |
| * @return the primitive type instance, or null if <code>name</code> is not a valid |
| * primitive type name. |
| */ |
| @Nullable |
| PsiPrimitiveType createPrimitiveType(@NotNull String text); |
| |
| /** |
| * The same as {@link #createTypeByFQClassName(String, com.intellij.psi.search.GlobalSearchScope)} |
| * with {@link com.intellij.psi.search.GlobalSearchScope#allScope(com.intellij.openapi.project.Project)}. |
| * |
| * @param qName the full-qualified name of the class to create the reference to. |
| * @return the class type instance. |
| */ |
| @NotNull |
| PsiClassType createTypeByFQClassName(@NotNull @NonNls String qName); |
| |
| /** |
| * Creates a class type referencing a class with the specified class name in the specified |
| * search scope. |
| * |
| * @param qName the full-qualified name of the class to create the reference to. |
| * @param resolveScope the scope in which the class is searched. |
| * @return the class type instance. |
| */ |
| @NotNull |
| PsiClassType createTypeByFQClassName(@NotNull @NonNls String qName, @NotNull GlobalSearchScope resolveScope); |
| |
| /** |
| * Creates doc comment from text |
| */ |
| @NotNull |
| PsiDocComment createDocCommentFromText(@NotNull String text); |
| |
| /** |
| * Checks whether name is a valid class name in the current language |
| * @param name name to checks |
| * @return true if name is a valid name |
| */ |
| boolean isValidClassName(@NotNull String name); |
| |
| /** |
| * Checks whether name is a valid method name in the current language |
| * @param name name to checks |
| * @return true if name is a valid name |
| */ |
| boolean isValidMethodName(@NotNull String name); |
| |
| /** |
| * Checks whether name is a valid parameter name in the current language |
| * @param name name to checks |
| * @return true if name is a valid name |
| */ |
| boolean isValidParameterName(@NotNull String name); |
| |
| /** |
| * Checks whether name is a valid field name in the current language |
| * @param name name to checks |
| * @return true if name is a valid name |
| */ |
| boolean isValidFieldName(@NotNull String name); |
| |
| /** |
| * Checks whether name is a valid local variable name in the current language |
| * @param name name to checks |
| * @return true if name is a valid name |
| */ |
| boolean isValidLocalVariableName(@NotNull String name); |
| } |
| |