split PsiMember and JvmMember, link them via PsiJvmMember interface
[idea/community.git] / java / java-psi-api / src / com / intellij / psi / PsiPackage.java
1 // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.psi;
3
4 import com.intellij.lang.jvm.JvmPackage;
5 import com.intellij.navigation.NavigationItem;
6 import com.intellij.openapi.vfs.VirtualFile;
7 import com.intellij.psi.search.GlobalSearchScope;
8 import org.jetbrains.annotations.NotNull;
9 import org.jetbrains.annotations.Nullable;
10
11 /**
12  * Represents a Java package.
13  */
14 public interface PsiPackage extends PsiCheckedRenameElement, NavigationItem, PsiJvmModifiersOwner,
15                                     PsiDirectoryContainer, PsiQualifiedNamedElement, JvmPackage {
16
17   String PACKAGE_INFO_CLASS = "package-info";
18   String PACKAGE_INFO_FILE = PACKAGE_INFO_CLASS + ".java";
19   String PACKAGE_INFO_CLS_FILE = PACKAGE_INFO_CLASS + ".class";
20
21   PsiPackage[] EMPTY_ARRAY = new PsiPackage[0];
22
23   /**
24    * Returns the full-qualified name of the package.
25    *
26    * @return the full-qualified name, or an empty string for the default package.
27    */
28   @Override
29   @NotNull
30   String getQualifiedName();
31
32   /**
33    * Returns the parent of the package.
34    *
35    * @return the parent package, or null for the default package.
36    */
37   @Override
38   @Nullable
39   PsiPackage getParentPackage();
40
41   /**
42    * Returns the list of subpackages of this package under all source roots of the project.
43    *
44    * @return the array of subpackages.
45    */
46   @NotNull
47   PsiPackage[] getSubPackages();
48
49   /**
50    * Returns the list of subpackages of this package in the specified search scope.
51    *
52    * @param scope the scope in which packages are searched.
53    * @return the array of subpackages.
54    */
55   @NotNull
56   PsiPackage[] getSubPackages(@NotNull GlobalSearchScope scope);
57
58   /**
59    * Returns the list of classes in all directories corresponding to the package.
60    *
61    * @return the array of classes.
62    */
63   @NotNull
64   PsiClass[] getClasses();
65
66   /**
67    * Returns the list of classes in directories corresponding to the package in the specified
68    * search scope.
69    *
70    * @param scope the scope in which directories are searched.
71    * @return the array of classes.
72    */
73   @NotNull
74   PsiClass[] getClasses(@NotNull GlobalSearchScope scope);
75
76   /**
77    * Returns the list of all files in the package, restricted by the specified scope. (This is
78    * normally the list of all files in all directories corresponding to the package, but it can
79    * be modified by custom language plugins which have a different notion of packages.)
80    */
81   @NotNull
82   PsiFile[] getFiles(@NotNull GlobalSearchScope scope);
83
84   /**
85    * Returns the list of package-level annotations for the package.
86    *
87    * @return the list of annotations, or null if the package does not have any package-level annotations.
88    */
89   @Nullable
90   PsiModifierList getAnnotationList();
91
92   /**
93    * This method must be invoked on the package after all directories corresponding
94    * to it have been renamed/moved accordingly to qualified name change.
95    *
96    * @param newQualifiedName the new qualified name of the package.
97    */
98   void handleQualifiedNameChange(@NotNull String newQualifiedName);
99
100   /**
101    * Returns source roots that this package occurs in package prefixes of.
102    *
103    * @return the array of virtual files for the source roots.
104    */
105   @NotNull
106   VirtualFile[] occursInPackagePrefixes();
107
108   @Override
109   @Nullable("default package")
110   String getName();
111
112   boolean containsClassNamed(@NotNull String name);
113
114   @NotNull
115   PsiClass[] findClassByShortName(@NotNull String name, @NotNull GlobalSearchScope scope);
116 }