-
Notifications
You must be signed in to change notification settings - Fork 5.2k
/
JavaDirectoryService.java
140 lines (121 loc) · 5.65 KB
/
JavaDirectoryService.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
// Copyright 2000-2020 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.
/*
* @author max
*/
package com.intellij.psi;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Map;
public abstract class JavaDirectoryService {
public static JavaDirectoryService getInstance() {
return ApplicationManager.getApplication().getService(JavaDirectoryService.class);
}
/**
* Returns the package corresponding to the directory.
*
* @return the package instance, or null if the directory does not correspond to any package.
*/
@Nullable
public abstract PsiPackage getPackage(@NotNull PsiDirectory dir);
/**
* Returns the package corresponding to the directory.
*
* @return the package instance, or null if the directory does not correspond to any package or package is under resource roots
*/
@Nullable
public abstract PsiPackage getPackageInSources(@NotNull PsiDirectory dir);
/**
* Returns the list of Java classes contained in the directory.
*
* @return the array of classes.
*/
public abstract PsiClass @NotNull [] getClasses(@NotNull PsiDirectory dir);
/**
* Creates a class with the specified name in the directory.
*
* @param name the name of the class to create (not including the file extension).
* @return the created class instance.
* @throws IncorrectOperationException if the operation failed for some reason.
*/
@NotNull
public abstract PsiClass createClass(@NotNull PsiDirectory dir, @NotNull String name) throws IncorrectOperationException;
/**
* Creates a class with the specified name in the directory.
*
* @param name the name of the class to create (not including the file extension).
* @param templateName custom file template to create class text based on.
* @return the created class instance.
* @throws IncorrectOperationException if the operation failed for some reason.
*/
@NotNull
public abstract PsiClass createClass(@NotNull PsiDirectory dir, @NotNull String name, @NotNull String templateName) throws IncorrectOperationException;
/**
* @param askForUndefinedVariables
* true show dialog asking for undefined variables
* false leave them blank
*/
public abstract PsiClass createClass(@NotNull PsiDirectory dir, @NotNull String name, @NotNull String templateName, boolean askForUndefinedVariables) throws IncorrectOperationException;
/**
* @param additionalProperties additional properties to be substituted in the template
*/
public abstract PsiClass createClass(@NotNull PsiDirectory dir,
@NotNull String name,
@NotNull String templateName,
boolean askForUndefinedVariables,
@NotNull final Map<String, String> additionalProperties) throws IncorrectOperationException;
/**
* Checks if it's possible to create a class with the specified name in the directory,
* and throws an exception if the creation is not possible. Does not actually modify
* anything.
*
* @param name the name of the class to check creation possibility (not including the file extension).
* @throws IncorrectOperationException if the creation is not possible.
*/
public abstract void checkCreateClass(@NotNull PsiDirectory dir, @NotNull String name) throws IncorrectOperationException;
/**
* Creates an interface class with the specified name in the directory.
*
* @param name the name of the interface to create (not including the file extension).
* @return the created interface instance.
* @throws IncorrectOperationException if the operation failed for some reason.
*/
@NotNull
public abstract PsiClass createInterface(@NotNull PsiDirectory dir, @NotNull String name) throws IncorrectOperationException;
/**
* Creates an enumeration class with the specified name in the directory.
*
* @param name the name of the enumeration class to create (not including the file extension).
* @return the created class instance.
* @throws IncorrectOperationException if the operation failed for some reason.
*/
@NotNull
public abstract PsiClass createEnum(@NotNull PsiDirectory dir, @NotNull String name) throws IncorrectOperationException;
/**
* Creates a record class with the specified name in the directory.
*
* @param name the name of the record class to create (not including the file extension).
* @return the created record instance.
* @throws IncorrectOperationException if the operation failed for some reason.
*/
@NotNull
public abstract PsiClass createRecord(@NotNull PsiDirectory dir, @NotNull String name) throws IncorrectOperationException;
/**
* Creates an annotation class with the specified name in the directory.
*
* @param name the name of the annotation class to create (not including the file extension).
* @return the created class instance.
* @throws IncorrectOperationException if the operation failed for some reason.
*/
@NotNull
public abstract PsiClass createAnnotationType(@NotNull PsiDirectory dir, @NotNull String name) throws IncorrectOperationException;
/**
* Checks if the directory is a source root for the project to which it belongs.
*
* @return true if the directory is a source root, false otherwise
*/
public abstract boolean isSourceRoot(@NotNull PsiDirectory dir);
public abstract LanguageLevel getLanguageLevel(@NotNull PsiDirectory dir);
}