split PsiMember and JvmMember, link them via PsiJvmMember interface
[idea/community.git] / java / java-psi-api / src / com / intellij / psi / PsiModifierListOwner.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.JvmModifier;
5 import org.jetbrains.annotations.NonNls;
6 import org.jetbrains.annotations.NotNull;
7 import org.jetbrains.annotations.Nullable;
8
9 import static com.intellij.psi.PsiJvmConversionHelper.hasListModifier;
10
11 /**
12  * Represents a PSI element which has a list of modifiers (public/private/protected/etc.)
13  * and annotations.
14  */
15 public interface PsiModifierListOwner extends PsiElement {
16
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   default PsiAnnotation[] getAnnotations() {
37     return PsiJvmConversionHelper.getListAnnotations(this);
38   }
39
40   @Nullable
41   default PsiAnnotation getAnnotation(@NotNull String fqn) {
42     return PsiJvmConversionHelper.getListAnnotation(this, fqn);
43   }
44
45   default boolean hasAnnotation(@NotNull String fqn) {
46     return PsiJvmConversionHelper.hasListAnnotation(this, fqn);
47   }
48
49   default boolean hasModifier(@NotNull JvmModifier modifier) {
50     return hasListModifier(this, modifier);
51   }
52 }