Cleanup: NotNull/Nullable
[idea/community.git] / java / java-psi-api / src / com / intellij / patterns / PsiParameterPattern.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.PsiElement;
5 import com.intellij.psi.PsiMethod;
6 import com.intellij.psi.PsiParameter;
7 import com.intellij.util.PairProcessor;
8 import com.intellij.util.ProcessingContext;
9 import org.jetbrains.annotations.NotNull;
10
11 /**
12  * @author Gregory Shrago
13  */
14 public class PsiParameterPattern extends PsiModifierListOwnerPattern<PsiParameter, PsiParameterPattern> {
15
16   protected PsiParameterPattern() {
17     super(PsiParameter.class);
18   }
19
20   public PsiParameterPattern ofMethod(final int index, final ElementPattern pattern) {
21     return with(new PatternConditionPlus<PsiParameter, PsiMethod>("ofMethod", pattern) {
22       @Override
23       public boolean processValues(PsiParameter t,
24                                    ProcessingContext context,
25                                    PairProcessor<PsiMethod, ProcessingContext> processor) {
26         PsiElement scope = t.getDeclarationScope();
27         if (!(scope instanceof PsiMethod)) return true;
28         return processor.process((PsiMethod)scope, context);
29       }
30
31       @Override
32       public boolean accepts(@NotNull final PsiParameter t, final ProcessingContext context) {
33         if (!super.accepts(t, context)) return false;
34         final PsiMethod psiMethod = (PsiMethod)t.getDeclarationScope();
35
36         final PsiParameter[] parameters = psiMethod.getParameterList().getParameters();
37         if (index < 0 || index >= parameters.length || !t.equals(parameters[index])) return false;
38         return true;
39       }
40     });
41   }
42 }