Cleanup: NotNull/Nullable
[idea/community.git] / java / java-psi-api / src / com / intellij / patterns / PsiAnnotationPattern.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.patterns;
3
4 import com.intellij.psi.PsiAnnotation;
5 import com.intellij.psi.PsiArrayInitializerMemberValue;
6 import com.intellij.psi.PsiElement;
7 import com.intellij.util.ProcessingContext;
8 import org.jetbrains.annotations.NonNls;
9 import org.jetbrains.annotations.NotNull;
10
11 import static com.intellij.patterns.PsiJavaPatterns.psiNameValuePair;
12
13 /**
14  * @author peter
15  */
16 public class PsiAnnotationPattern extends PsiElementPattern<PsiAnnotation, PsiAnnotationPattern> {
17   static final PsiAnnotationPattern PSI_ANNOTATION_PATTERN = new PsiAnnotationPattern();
18
19   private PsiAnnotationPattern() {
20     super(PsiAnnotation.class);
21   }
22
23   public PsiAnnotationPattern qName(final ElementPattern<String> pattern) {
24     return with(new PatternCondition<PsiAnnotation>("qName") {
25       @Override
26       public boolean accepts(@NotNull final PsiAnnotation psiAnnotation, final ProcessingContext context) {
27         return pattern.accepts(psiAnnotation.getQualifiedName(), context);
28       }
29     });
30   }
31   public PsiAnnotationPattern qName(@NonNls String qname) {
32     return qName(StandardPatterns.string().equalTo(qname));
33   }
34
35   public PsiAnnotationPattern insideAnnotationAttribute(@NotNull final String attributeName, @NotNull final ElementPattern<? extends PsiAnnotation> parentAnnoPattern) {
36     return with(new PatternCondition<PsiAnnotation>("insideAnnotationAttribute") {
37       final PsiNameValuePairPattern attrPattern = psiNameValuePair().withName(attributeName).withSuperParent(2, parentAnnoPattern);
38
39       @Override
40       public boolean accepts(@NotNull PsiAnnotation annotation, ProcessingContext context) {
41         PsiElement attr = getParent(annotation);
42         if (attr instanceof PsiArrayInitializerMemberValue) attr = getParent(attr);
43         return attrPattern.accepts(attr);
44       }
45     });
46   }
47 }