/* * Copyright 2000-2012 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.navigation.NavigationItem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.search.GlobalSearchScope; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * Represents a Java package. */ public interface PsiPackage extends PsiCheckedRenameElement, NavigationItem, PsiModifierListOwner, PsiDirectoryContainer, PsiQualifiedNamedElement { @NonNls String PACKAGE_INFO_CLASS = "package-info"; @NonNls String PACKAGE_INFO_FILE = PACKAGE_INFO_CLASS + ".java"; PsiPackage[] EMPTY_ARRAY = new PsiPackage[0]; /** * Returns the full-qualified name of the package. * * @return the full-qualified name, or an empty string for the default package. */ @Override @NotNull String getQualifiedName(); /** * Returns the parent of the package. * * @return the parent package, or null for the default package. */ @Nullable PsiPackage getParentPackage(); /** * Returns the list of subpackages of this package under all source roots of the project. * * @return the array of subpackages. */ @NotNull PsiPackage[] getSubPackages(); /** * Returns the list of subpackages of this package in the specified search scope. * * @param scope the scope in which packages are searched. * @return the array of subpackages. */ @NotNull PsiPackage[] getSubPackages(@NotNull GlobalSearchScope scope); /** * Returns the list of classes in all directories corresponding to the package. * * @return the array of classes. */ @NotNull PsiClass[] getClasses(); /** * Returns the list of classes in directories corresponding to the package in the specified * search scope. * * @param scope the scope in which directories are searched. * @return the array of classes. */ @NotNull PsiClass[] getClasses(@NotNull GlobalSearchScope scope); /** * Returns the list of package-level annotations for the package. * * @return the list of annotations, or null if the package does not have any package-level annotations. * @since 5.1 */ @Nullable PsiModifierList getAnnotationList(); /** * This method must be invoked on the package after all directories corresponding * to it have been renamed/moved accordingly to qualified name change. * * @param newQualifiedName the new qualified name of the package. */ void handleQualifiedNameChange(@NotNull String newQualifiedName); /** * Returns source roots that this package occurs in package prefixes of. * * @return the array of virtual files for the source roots. */ VirtualFile[] occursInPackagePrefixes(); @Override @Nullable("default package") @NonNls String getName(); boolean containsClassNamed(String name); @NotNull PsiClass[] findClassByShortName(@NotNull String name, @NotNull GlobalSearchScope scope); }