JavaParser Source Viewer

Home|JavaParser/com/github/javaparser/resolution/types/ResolvedType.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.types;
23
24import com.github.javaparser.resolution.declarations.ResolvedTypeParameterDeclaration;
25
26import java.util.HashMap;
27import java.util.List;
28import java.util.Map;
29
30/**
31 * A resolved type. It could be a primitive type or a reference type (enum, class, interface). In the later case it
32 * could take type typeParametersValues (other TypeUsages). It could also be a TypeVariable, like in:
33 * <p>
34 * class A&lt;Bgt; { }
35 * <p>
36 * where B is a TypeVariable. It could also be Wildcard Type, possibly with constraints.
37 *
38 * @author Federico Tomassetti
39 */
40public interface ResolvedType {
41
42    ///
43    /// Relation with other types
44    ///
45
46    /**
47     * Does this type represent an array?
48     */
49    default boolean isArray() {
50        return false;
51    }
52
53    default int arrayLevel() {
54        if (isArray()) {
55            return 1 + this.asArrayType().getComponentType().arrayLevel();
56        } else {
57            return 0;
58        }
59    }
60
61    /**
62     * Is this a primitive type?
63     */
64    default boolean isPrimitive() {
65        return false;
66    }
67
68    /**
69     * Is this the null type?
70     */
71    default boolean isNull() {
72        return false;
73    }
74
75    /**
76     * Is this a union type (as the ones used in multi catch clauses)?
77     */
78    default boolean isUnionType() {
79        return false;
80    }
81
82    /**
83     * Is this a non primitive value?
84     */
85    default boolean isReference() {
86        return isReferenceType() || isArray() || isTypeVariable() || isNull() || isWildcard() || isUnionType();
87    }
88
89    /**
90     * Is this a lambda constraint type?
91     */
92    default boolean isConstraint() { return false; }
93
94    /**
95     * Can this be seen as a ReferenceTypeUsage?
96     * In other words: is this a reference to a class, an interface or an enum?
97     */
98    default boolean isReferenceType() {
99        return false;
100    }
101
102    default boolean isVoid() {
103        return false;
104    }
105
106    default boolean isTypeVariable() {
107        return false;
108    }
109
110    default boolean isWildcard() {
111        return false;
112    }
113
114    ///
115    /// Downcasting
116    ///
117
118    default ResolvedArrayType asArrayType() {
119        throw new UnsupportedOperationException(String.format("%s is not an Array", this));
120    }
121
122    default ResolvedReferenceType asReferenceType() {
123        throw new UnsupportedOperationException(String.format("%s is not a Reference Type", this));
124    }
125
126    default ResolvedTypeParameterDeclaration asTypeParameter() {
127        throw new UnsupportedOperationException(String.format("%s is not a Type parameter", this));
128    }
129
130    default ResolvedTypeVariable asTypeVariable() {
131        throw new UnsupportedOperationException(String.format("%s is not a Type variable", this));
132    }
133
134    default ResolvedPrimitiveType asPrimitive() {
135        throw new UnsupportedOperationException(String.format("%s is not a Primitive type", this));
136    }
137
138    default ResolvedWildcard asWildcard() {
139        throw new UnsupportedOperationException(String.format("%s is not a Wildcard", this));
140    }
141
142    default ResolvedLambdaConstraintType asConstraintType() {
143        throw new UnsupportedOperationException(String.format("%s is not a constraint type", this));
144    }
145
146    default ResolvedUnionType asUnionType() {
147        throw new UnsupportedOperationException(String.format("%s is not a union type", this));
148    }
149
150    ///
151    /// Naming
152    ///
153
154    String describe();
155
156    ///
157    /// TypeParameters
158    ///
159
160    /**
161     * Replace all variables referring to the given TypeParameter with the given value.
162     * By replacing these values I could also infer some type equivalence.
163     * Those would be collected in the given map.
164     */
165    default ResolvedType replaceTypeVariables(ResolvedTypeParameterDeclaration tpResolvedType replacedMap<ResolvedTypeParameterDeclarationResolvedTypeinferredTypes) {
166        return this;
167    }
168
169    /**
170     * This is like ({@link #replaceTypeVariables(ResolvedTypeParameterDeclaration, ResolvedType, Map)} but ignores the inferred values.
171     */
172    default ResolvedType replaceTypeVariables(ResolvedTypeParameterDeclaration tpResolvedType replaced) {
173        return replaceTypeVariables(tpreplaced, new HashMap<>());
174    }
175
176    /**
177     * Does this type mention at all, directly or indirectly, the given type parameters?
178     */
179    default boolean mention(List<ResolvedTypeParameterDeclarationtypeParameters) {
180        throw new UnsupportedOperationException(this.getClass().getCanonicalName());
181    }
182
183    ///
184    /// Assignability
185    ///
186
187    /**
188     * This method checks if ThisType t = new OtherType() would compile.
189     */
190    boolean isAssignableBy(ResolvedType other);
191
192}
193
MembersX
ResolvedType:isReferenceType
ResolvedType:asArrayType
ResolvedType:asTypeParameter
ResolvedType:replaceTypeVariables
ResolvedType:asWildcard
ResolvedType:isVoid
ResolvedType:isArray
ResolvedType:isPrimitive
ResolvedType:asTypeVariable
ResolvedType:isWildcard
ResolvedType:arrayLevel
ResolvedType:isConstraint
ResolvedType:isNull
ResolvedType:isTypeVariable
ResolvedType:asReferenceType
ResolvedType:asUnionType
ResolvedType:isAssignableBy
ResolvedType:mention
ResolvedType:isReference
ResolvedType:asPrimitive
ResolvedType:describe
ResolvedType:isUnionType
ResolvedType:asConstraintType
Members
X