split PsiMember and JvmMember, link them via PsiJvmMember interface
[idea/community.git] / java / java-psi-api / src / com / intellij / psi / PsiJvmModifiersOwner.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 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 /**
11  * Not all PsiModifierListOwner inheritors are JvmModifiersOwners, e.g. {@link PsiLocalVariable} or {@link PsiRequiresStatement}.
12  * This is a bridge interface between them.
13  * <p>
14  * Known PsiModifierListOwners which are also JvmModifiersOwners:
15  * {@link PsiJvmMember} inheritors, {@link PsiParameter} and {@link PsiPackage}.
16  */
17 public interface PsiJvmModifiersOwner extends PsiModifierListOwner, JvmModifiersOwner {
18
19   @NotNull
20   @Override
21   default PsiAnnotation[] getAnnotations() {
22     return PsiModifierListOwner.super.getAnnotations();
23   }
24
25   @Nullable
26   @Override
27   default PsiAnnotation getAnnotation(@NotNull @NonNls String fqn) {
28     return PsiModifierListOwner.super.getAnnotation(fqn);
29   }
30
31   @Override
32   default boolean hasAnnotation(@NotNull @NonNls String fqn) {
33     return PsiModifierListOwner.super.hasAnnotation(fqn);
34   }
35
36   @Override
37   default boolean hasModifier(@NotNull JvmModifier modifier) {
38     return PsiModifierListOwner.super.hasModifier(modifier);
39   }
40
41   @Nullable
42   @Override
43   default PsiElement getSourceElement() {
44     return this;
45   }
46 }