9c25841000c7b1df2234aa173ba454b247a658de
[idea/community.git] / java / java-psi-api / src / com / intellij / psi / PsiModifierListOwner.java
1 /*
2  * Copyright 2000-2017 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.psi;
17
18 import com.intellij.lang.jvm.JvmModifier;
19 import com.intellij.lang.jvm.JvmModifiersOwner;
20 import org.jetbrains.annotations.NonNls;
21 import org.jetbrains.annotations.NotNull;
22 import org.jetbrains.annotations.Nullable;
23
24 import static com.intellij.psi.PsiJvmConversionHelper.getModifiers;
25
26 /**
27  * Represents a PSI element which has a list of modifiers (public/private/protected/etc.)
28  * and annotations.
29  */
30 public interface PsiModifierListOwner extends PsiElement, JvmModifiersOwner {
31   /**
32    * Returns the list of modifiers for the element.
33    *
34    * @return the list of modifiers, or null if the element (for example, an anonymous
35    * inner class) does not have the list of modifiers.
36    */
37   @Nullable
38   PsiModifierList getModifierList();
39
40   /**
41    * Checks if the element has the specified modifier. Possible modifiers are defined
42    * as constants in the {@link PsiModifier} class.
43    *
44    * @param name the name of the modifier to check.
45    * @return true if the element has the modifier, false otherwise
46    */
47   boolean hasModifierProperty(@PsiModifier.ModifierConstant @NonNls @NotNull String name);
48
49   @NotNull
50   @Override
51   default PsiAnnotation[] getAnnotations() {
52     PsiModifierList list = getModifierList();
53     return list == null ? PsiAnnotation.EMPTY_ARRAY : list.getAnnotations();
54   }
55
56   @NotNull
57   @Override
58   default Iterable<JvmModifier> modifiers() {
59     return getModifiers(this);
60   }
61
62   @Nullable
63   @Override
64   default PsiElement getPsiElement() {
65     return this;
66   }
67 }