127316b02b2c34729d2c26334e6d7a243875fb6a
[idea/community.git] / java / java-psi-api / src / com / intellij / psi / PsiParameter.java
1 /*
2  * Copyright 2000-2017 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.psi;
17
18 import com.intellij.lang.jvm.JvmParameter;
19 import com.intellij.lang.jvm.types.JvmType;
20 import com.intellij.util.ArrayFactory;
21 import org.jetbrains.annotations.NotNull;
22 import org.jetbrains.annotations.Nullable;
23
24 /**
25  * Represents the parameter of a Java method, foreach (enhanced for) statement or catch block.
26  */
27 public interface PsiParameter extends PsiVariable, JvmParameter {
28   /**
29    * The empty array of PSI parameters which can be reused to avoid unnecessary allocations.
30    */
31   PsiParameter[] EMPTY_ARRAY = new PsiParameter[0];
32
33   ArrayFactory<PsiParameter> ARRAY_FACTORY = count -> count == 0 ? EMPTY_ARRAY : new PsiParameter[count];
34
35   /**
36    * Returns the element (method, lambda expression, foreach statement or catch block) in which the
37    * parameter is declared.
38    *
39    * @return the declaration scope for the parameter.
40    */
41   @NotNull
42   PsiElement getDeclarationScope();
43
44   /**
45    * Checks if the parameter accepts a variable number of arguments.
46    *
47    * @return true if the parameter is a vararg, false otherwise
48    */
49   boolean isVarArgs();
50
51   /**
52    * {@inheritDoc}
53    */
54   @Override
55   @Nullable
56   PsiTypeElement getTypeElement();
57
58   @Nullable
59   @Override
60   default PsiElement getPsiElement() {
61     return this;
62   }
63
64   @NotNull
65   @Override
66   default JvmType parameterType() {
67     return PsiJvmConversionHelper.toJvmType(getType());
68   }
69
70   @NotNull
71   @Override
72   default PsiAnnotation[] getAnnotations() {
73     return PsiVariable.super.getAnnotations();
74   }
75 }