JavaParser Source Viewer

Home|JavaParser/com/github/javaparser/resolution/declarations/ResolvedMethodLikeDeclaration.java
1/*
2 * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
3 * Copyright (C) 2011, 2013-2020 The JavaParser Team.
4 *
5 * This file is part of JavaParser.
6 *
7 * JavaParser can be used either under the terms of
8 * a) the GNU Lesser General Public License as published by
9 *     the Free Software Foundation, either version 3 of the License, or
10 *     (at your option) any later version.
11 * b) the terms of the Apache License
12 *
13 * You should have received a copy of both licenses in LICENCE.LGPL and
14 * LICENCE.APACHE. Please refer to those files for details.
15 *
16 * JavaParser is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 * GNU Lesser General Public License for more details.
20 */
21
22package com.github.javaparser.resolution.declarations;
23
24import com.github.javaparser.resolution.types.ResolvedType;
25
26import java.util.Collections;
27import java.util.LinkedList;
28import java.util.List;
29import java.util.Optional;
30
31/**
32 * This is a common interface for MethodDeclaration and ConstructorDeclaration.
33 *
34 * @author Federico Tomassetti
35 */
36public interface ResolvedMethodLikeDeclaration extends ResolvedDeclaration,
37        ResolvedTypeParametrizableHasAccessSpecifier {
38    /**
39     * The package name of the declaring type.
40     */
41    default String getPackageName() {
42        return declaringType().getPackageName();
43    }
44
45    /**
46     * The class(es) wrapping the declaring type.
47     */
48    default String getClassName() {
49        return declaringType().getClassName();
50    }
51
52    /**
53     * The qualified name of the method composed by the qualfied name of the declaring type
54     * followed by a dot and the name of the method.
55     */
56    default String getQualifiedName() {
57        return declaringType().getQualifiedName() + "." + this.getName();
58    }
59
60    /**
61     * The signature of the method.
62     */
63    default String getSignature() {
64        StringBuilder sb = new StringBuilder();
65        sb.append(getName());
66        sb.append("(");
67        for (int i = 0i < getNumberOfParams(); i++) {
68            if (i != 0) {
69                sb.append(", ");
70            }
71            sb.append(getParam(i).describeType());
72        }
73        sb.append(")");
74        return sb.toString();
75    }
76
77    /**
78     * The qualified signature of the method. It is composed by the qualified name of the declaring type
79     * followed by the signature of the method.
80     */
81    default String getQualifiedSignature() {
82        return declaringType().getId() + "." + this.getSignature();
83    }
84
85    /**
86     * The type in which the method is declared.
87     */
88    ResolvedReferenceTypeDeclaration declaringType();
89
90    /**
91     * Number of params.
92     */
93    int getNumberOfParams();
94
95    /**
96     * Get the ParameterDeclaration at the corresponding position or throw IllegalArgumentException.
97     */
98    ResolvedParameterDeclaration getParam(int i);
99
100    /**
101     * Utility method to get the last ParameterDeclaration. It throws UnsupportedOperationException if the method
102     * has no parameters.
103     * The last parameter can be variadic and sometimes it needs to be handled in a special way.
104     */
105    default ResolvedParameterDeclaration getLastParam() {
106        if (getNumberOfParams() == 0) {
107            throw new UnsupportedOperationException("This method has no typeParametersValues, therefore it has no a last parameter");
108        }
109        return getParam(getNumberOfParams() - 1);
110    }
111
112    /**
113     * Has the method or construcor a variadic parameter?
114     * Note that when a method has a variadic parameter it should have an array type.
115     */
116    default boolean hasVariadicParameter() {
117        if (getNumberOfParams() == 0) {
118            return false;
119        } else {
120            return getParam(getNumberOfParams() - 1).isVariadic();
121        }
122    }
123
124    @Override
125    default Optional<ResolvedTypeParameterDeclarationfindTypeParameter(String name) {
126        for (ResolvedTypeParameterDeclaration tp : this.getTypeParameters()) {
127            if (tp.getName().equals(name)) {
128                return Optional.of(tp);
129            }
130        }
131        return declaringType().findTypeParameter(name);
132    }
133
134    /**
135     * Number of exceptions listed in the throws clause.
136     */
137    int getNumberOfSpecifiedExceptions();
138
139    /**
140     * Type of the corresponding entry in the throws clause.
141     *
142     * @throws IllegalArgumentException if the index is negative or it is equal or greater than the value returned by
143     *                                  getNumberOfSpecifiedExceptions
144     * @throws UnsupportedOperationException for those types of methods of constructor that do not declare exceptions
145     */
146    ResolvedType getSpecifiedException(int index);
147
148    default List<ResolvedTypegetSpecifiedExceptions() {
149        if (getNumberOfSpecifiedExceptions() == 0) {
150            return Collections.emptyList();
151        } else {
152            List<ResolvedTypeexceptions = new LinkedList<>();
153            for (int i=0;i<getNumberOfSpecifiedExceptions();i++) {
154                exceptions.add(getSpecifiedException(i));
155            }
156            return exceptions;
157        }
158    }
159}
160
MembersX
ResolvedMethodLikeDeclaration:getSignature
ResolvedMethodLikeDeclaration:getNumberOfParams
ResolvedMethodLikeDeclaration:getPackageName
ResolvedMethodLikeDeclaration:getQualifiedName
ResolvedMethodLikeDeclaration:getQualifiedSignature
ResolvedMethodLikeDeclaration:getNumberOfSpecifiedExceptions
ResolvedMethodLikeDeclaration:getClassName
ResolvedMethodLikeDeclaration:getSpecifiedExceptions
ResolvedMethodLikeDeclaration:getParam
ResolvedMethodLikeDeclaration:hasVariadicParameter
ResolvedMethodLikeDeclaration:declaringType
ResolvedMethodLikeDeclaration:findTypeParameter
ResolvedMethodLikeDeclaration:getSpecifiedExceptions:Block:Block:exceptions
ResolvedMethodLikeDeclaration:getLastParam
ResolvedMethodLikeDeclaration:getSignature:Block:sb
ResolvedMethodLikeDeclaration:getSpecifiedException
Members
X