aa04ccae4663c051c8b5f9ead3734fa9c80af072
[idea/community.git] / java / java-psi-api / src / com / intellij / psi / PsiModifierListOwner.java
1 // Copyright 2000-2018 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.JvmModifier;
5 import com.intellij.lang.jvm.JvmModifiersOwner;
6 import org.jetbrains.annotations.NonNls;
7 import org.jetbrains.annotations.NotNull;
8 import org.jetbrains.annotations.Nullable;
9
10 import static com.intellij.psi.PsiJvmConversionHelper.*;
11
12 /**
13  * Represents a PSI element which has a list of modifiers (public/private/protected/etc.)
14  * and annotations.
15  */
16 public interface PsiModifierListOwner extends PsiElement, JvmModifiersOwner {
17   /**
18    * Returns the list of modifiers for the element.
19    *
20    * @return the list of modifiers, or null if the element (for example, an anonymous
21    * inner class) does not have the list of modifiers.
22    */
23   @Nullable
24   PsiModifierList getModifierList();
25
26   /**
27    * Checks if the element has the specified modifier. Possible modifiers are defined
28    * as constants in the {@link PsiModifier} class.
29    *
30    * @param name the name of the modifier to check.
31    * @return true if the element has the modifier, false otherwise
32    */
33   boolean hasModifierProperty(@PsiModifier.ModifierConstant @NonNls @NotNull String name);
34
35   @NotNull
36   @Override
37   default PsiAnnotation[] getAnnotations() {
38     return getListAnnotations(this);
39   }
40
41   @Nullable
42   @Override
43   default PsiAnnotation getAnnotation(@NotNull @NonNls String fqn) {
44     return getListAnnotation(this, fqn);
45   }
46
47   @Override
48   default boolean hasAnnotation(@NotNull @NonNls String fqn) {
49     return hasListAnnotation(this, fqn);
50   }
51
52   @Override
53   default boolean hasModifier(@NotNull JvmModifier modifier) {
54     return hasListModifier(this, modifier);
55   }
56
57   @Nullable
58   @Override
59   default PsiElement getSourceElement() {
60     return this;
61   }
62 }