| /* |
| * Copyright 2000-2009 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.openapi.util.Pair; |
| import com.intellij.util.ArrayFactory; |
| import com.intellij.util.IncorrectOperationException; |
| import com.intellij.pom.PomRenameableTarget; |
| import org.jetbrains.annotations.NonNls; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| import java.util.Collection; |
| import java.util.List; |
| |
| /** |
| * Represents a Java class or interface. |
| * |
| * @see PsiJavaFile#getClasses() |
| */ |
| public interface PsiClass |
| extends PsiNameIdentifierOwner, PsiModifierListOwner, PsiDocCommentOwner, PsiTypeParameterListOwner, PsiTarget, PomRenameableTarget<PsiElement> { |
| /** |
| * The empty array of PSI classes which can be reused to avoid unnecessary allocations. |
| */ |
| @NotNull PsiClass[] EMPTY_ARRAY = new PsiClass[0]; |
| |
| ArrayFactory<PsiClass> ARRAY_FACTORY = new ArrayFactory<PsiClass>() { |
| @NotNull |
| @Override |
| public PsiClass[] create(final int count) { |
| return count == 0 ? EMPTY_ARRAY : new PsiClass[count]; |
| } |
| }; |
| |
| /** |
| * Returns the fully qualified name of the class. |
| * |
| * @return the qualified name of the class, or null for anonymous and local classes, and for type parameters |
| */ |
| @Nullable @NonNls |
| String getQualifiedName(); |
| |
| /** |
| * Checks if the class is an interface. |
| * |
| * @return true if the class is an interface, false otherwise. |
| */ |
| boolean isInterface(); |
| |
| /** |
| * Checks if the class is an annotation type. |
| * |
| * @return true if the class is an annotation type, false otherwise |
| */ |
| boolean isAnnotationType(); |
| |
| /** |
| * Checks if the class is an enumeration. |
| * |
| * @return true if the class is an enumeration, false otherwise. |
| */ |
| boolean isEnum(); |
| |
| /** |
| * Returns the list of classes that this class or interface extends. |
| * |
| * @return the extends list, or null for anonymous classes, enums and annotation types |
| */ |
| @Nullable |
| PsiReferenceList getExtendsList(); |
| |
| /** |
| * Returns the list of interfaces that this class implements. |
| * |
| * @return the implements list, or null for anonymous classes |
| */ |
| @Nullable |
| PsiReferenceList getImplementsList(); |
| |
| /** |
| * Returns the list of class types for the classes that this class or interface extends. |
| * |
| * @return the list of extended class types, or an empty list for anonymous classes, |
| * enums and annotation types |
| */ |
| @NotNull |
| PsiClassType[] getExtendsListTypes(); |
| |
| /** |
| * Returns the list of class types for the interfaces that this class implements. |
| * |
| * @return the list of extended class types, or an empty list for anonymous classes, |
| * enums and annotation types |
| */ |
| @NotNull |
| PsiClassType[] getImplementsListTypes(); |
| |
| /** |
| * Returns the base class of this class. |
| * |
| * @return the base class. May return null when jdk is not configured, so no java.lang.Object is found, |
| * or for java.lang.Object itself |
| */ |
| @Nullable |
| PsiClass getSuperClass(); |
| |
| /** |
| * Returns the list of interfaces implemented by the class, or extended by the interface. |
| * |
| * @return the list of interfaces. |
| */ |
| PsiClass[] getInterfaces(); |
| |
| /** |
| * Returns the list of classes and interfaces extended or implemented by the class. |
| * |
| * @return the list of classes or interfaces. May return zero elements when jdk is |
| * not configured, so no java.lang.Object is found |
| */ |
| @NotNull PsiClass[] getSupers(); |
| |
| /** |
| * Returns the list of class types for the classes and interfaces extended or |
| * implemented by the class. |
| * |
| * @return the list of class types for the classes or interfaces. |
| * For the class with no explicit extends list, the returned list always contains at least one element for the java.lang.Object type. |
| * If psiClass is java.lang.Object, returned list is empty. |
| */ |
| @NotNull PsiClassType[] getSuperTypes(); |
| |
| /** |
| * Returns the list of fields in the class. |
| * |
| * @return the list of fields. |
| */ |
| @NotNull |
| PsiField[] getFields(); |
| |
| /** |
| * Returns the list of methods in the class. |
| * |
| * @return the list of methods. |
| */ |
| @NotNull |
| PsiMethod[] getMethods(); |
| |
| /** |
| * Returns the list of constructors for the class. |
| * |
| * @return the list of constructors, |
| */ |
| @NotNull |
| PsiMethod[] getConstructors(); |
| |
| /** |
| * Returns the list of inner classes for the class. |
| * |
| * @return the list of inner classes. |
| */ |
| @NotNull PsiClass[] getInnerClasses(); |
| |
| /** |
| * Returns the list of class initializers for the class. |
| * |
| * @return the list of class initializers. |
| */ |
| @NotNull PsiClassInitializer[] getInitializers(); |
| |
| /** |
| * Returns the list of fields in the class and all its superclasses. |
| * |
| * @return the list of fields. |
| */ |
| @NotNull PsiField[] getAllFields(); |
| |
| /** |
| * Returns the list of methods in the class and all its superclasses. |
| * |
| * @return the list of methods. |
| */ |
| @NotNull PsiMethod[] getAllMethods(); |
| |
| /** |
| * Returns the list of inner classes for the class and all its superclasses.. |
| * |
| * @return the list of inner classes. |
| */ |
| @NotNull PsiClass[] getAllInnerClasses(); |
| |
| /** |
| * Searches the class (and optionally its superclasses) for the field with the specified name. |
| * |
| * @param name the name of the field to find. |
| * @param checkBases if true, the field is also searched in the base classes of the class. |
| * @return the field instance, or null if the field cannot be found. |
| */ |
| @Nullable |
| PsiField findFieldByName(@NonNls String name, boolean checkBases); |
| |
| /** |
| * Searches the class (and optionally its superclasses) for the method with |
| * the signature matching the signature of the specified method. |
| * |
| * @param patternMethod the method used as a pattern for the search. |
| * @param checkBases if true, the method is also searched in the base classes of the class. |
| * @return the method instance, or null if the method cannot be found. |
| */ |
| @Nullable |
| PsiMethod findMethodBySignature(PsiMethod patternMethod, boolean checkBases); |
| |
| /** |
| * Searches the class (and optionally its superclasses) for the methods with the signature |
| * matching the signature of the specified method. If the superclasses are not searched, |
| * the method returns multiple results only in case of a syntax error (duplicate method). |
| * |
| * @param patternMethod the method used as a pattern for the search. |
| * @param checkBases if true, the method is also searched in the base classes of the class. |
| * @return the found methods, or an empty array if no methods are found. |
| */ |
| @NotNull |
| PsiMethod[] findMethodsBySignature(PsiMethod patternMethod, boolean checkBases); |
| |
| /** |
| * Searches the class (and optionally its superclasses) for the methods with the specified name. |
| * |
| * @param name the name of the methods to find. |
| * @param checkBases if true, the methods are also searched in the base classes of the class. |
| * @return the found methods, or an empty array if no methods are found. |
| */ |
| @NotNull |
| PsiMethod[] findMethodsByName(@NonNls String name, boolean checkBases); |
| |
| /** |
| * Searches the class (and optionally its superclasses) for the methods with the specified name |
| * and returns the methods along with their substitutors. |
| * |
| * @param name the name of the methods to find. |
| * @param checkBases if true, the methods are also searched in the base classes of the class. |
| * @return the found methods and their substitutors, or an empty list if no methods are found. |
| */ |
| @NotNull |
| List<Pair<PsiMethod, PsiSubstitutor>> findMethodsAndTheirSubstitutorsByName(@NonNls String name, boolean checkBases); |
| |
| /** |
| * Returns the list of methods in the class and all its superclasses, along with their |
| * substitutors. |
| * |
| * @return the list of methods and their substitutors |
| */ |
| @NotNull |
| List<Pair<PsiMethod, PsiSubstitutor>> getAllMethodsAndTheirSubstitutors(); |
| |
| /** |
| * Searches the class (and optionally its superclasses) for the inner class with the specified name. |
| * |
| * @param name the name of the inner class to find. |
| * @param checkBases if true, the inner class is also searched in the base classes of the class. |
| * @return the inner class instance, or null if the inner class cannot be found. |
| */ |
| @Nullable |
| PsiClass findInnerClassByName(@NonNls String name, boolean checkBases); |
| |
| /** |
| * Returns the token representing the opening curly brace of the class. |
| * |
| * @return the token instance, or null if the token is missing in the source code file. |
| */ |
| @Nullable |
| PsiElement getLBrace(); |
| |
| /** |
| * Returns the token representing the closing curly brace of the class. |
| * |
| * @return the token instance, or null if the token is missing in the source code file. |
| */ |
| @Nullable |
| PsiElement getRBrace(); |
| |
| /** |
| * Returns the name identifier of the class. |
| * |
| * @return the name identifier, or null if the class is anonymous or synthetic jsp class |
| */ |
| @Override |
| @Nullable |
| PsiIdentifier getNameIdentifier(); |
| |
| /** |
| * Returns the PSI member in which the class has been declared (for example, |
| * the method containing the anonymous inner class, or the file containing a regular |
| * class, or the class owning a type parameter). |
| * |
| * @return the member in which the class has been declared. |
| */ |
| PsiElement getScope(); |
| |
| /** |
| * Checks if this class is an inheritor of the specified base class. |
| * Only java inheritance rules are considered. |
| * Note that {@link com.intellij.psi.search.searches.ClassInheritorsSearch} |
| * may return classes that are inheritors in broader, e.g. in ejb sense, but not in java sense. |
| * |
| * @param baseClass the base class to check the inheritance. |
| * @param checkDeep if false, only direct inheritance is checked; if true, the base class is |
| * searched in the entire inheritance chain |
| * @return true if the class is an inheritor, false otherwise |
| */ |
| boolean isInheritor(@NotNull PsiClass baseClass, boolean checkDeep); |
| |
| /** |
| * Checks if this class is a deep inheritor of the specified base class possibly bypassing a class |
| * when checking inheritance chain. |
| * Only java inheritance rules are considered. |
| * Note that {@link com.intellij.psi.search.searches.ClassInheritorsSearch} |
| * may return classes that are inheritors in broader, e.g. in ejb sense, but not in java sense. |
| * |
| * @param baseClass the base class to check the inheritance. |
| * searched in the entire inheritance chain |
| * @param classToByPass class to bypass the inheratance check for |
| * @return true if the class is an inheritor, false otherwise |
| */ |
| boolean isInheritorDeep(PsiClass baseClass, @Nullable PsiClass classToByPass); |
| |
| /** |
| * For an inner class, returns its containing class. |
| * |
| * @return the containing class, or null if the class is not an inner class. |
| */ |
| @Override |
| @Nullable |
| PsiClass getContainingClass(); |
| |
| /** |
| * Returns the hierarchical signatures for all methods in the specified class and |
| * its superclasses and superinterfaces. |
| * |
| * @return the collection of signatures. |
| * @since 5.1 |
| */ |
| @NotNull |
| Collection<HierarchicalMethodSignature> getVisibleSignatures(); |
| |
| @Override |
| PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException; |
| } |