JavaParser Source Viewer

Home|JavaParser/com/github/javaparser/ast/type/WildcardType.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 */
21package com.github.javaparser.ast.type;
22
23import com.github.javaparser.ast.AllFieldsConstructor;
24import com.github.javaparser.ast.Node;
25import com.github.javaparser.ast.NodeList;
26import com.github.javaparser.ast.expr.AnnotationExpr;
27import com.github.javaparser.ast.nodeTypes.NodeWithAnnotations;
28import com.github.javaparser.ast.observer.ObservableProperty;
29import com.github.javaparser.ast.visitor.CloneVisitor;
30import com.github.javaparser.ast.visitor.GenericVisitor;
31import com.github.javaparser.ast.visitor.VoidVisitor;
32import com.github.javaparser.metamodel.JavaParserMetaModel;
33import com.github.javaparser.metamodel.OptionalProperty;
34import com.github.javaparser.metamodel.WildcardTypeMetaModel;
35import java.util.Optional;
36import com.github.javaparser.TokenRange;
37import com.github.javaparser.resolution.types.ResolvedWildcard;
38import com.github.javaparser.ast.Generated;
39import java.util.function.Consumer;
40
41/**
42 * A wildcard type argument. Examples:
43 * <br>{@code void printCollection(Collection<}<b>{@code ?}</b>{@code > c) { ... }}
44 * <br>{@code boolean addAll(Collection<}<b>{@code ? extends E}</b>{@code > c)}
45 * <br>{@code Reference(T referent, ReferenceQueue<}<b>{@code ? super T}</b>{@code > queue)}
46 *
47 * @author Julio Vilmar Gesser
48 */
49public class WildcardType extends Type implements NodeWithAnnotations<WildcardType> {
50
51    @OptionalProperty
52    private ReferenceType extendedType;
53
54    @OptionalProperty
55    private ReferenceType superType;
56
57    public WildcardType() {
58        this(nullnullnull, new NodeList<>());
59    }
60
61    public WildcardType(final ReferenceType extendedType) {
62        this(nullextendedTypenull, new NodeList<>());
63    }
64
65    @AllFieldsConstructor
66    public WildcardType(final ReferenceType extendedTypefinal ReferenceType superTypefinal NodeList<AnnotationExprannotations) {
67        this(nullextendedTypesuperTypeannotations);
68    }
69
70    /**
71     * This constructor is used by the parser and is considered private.
72     */
73    @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
74    public WildcardType(TokenRange tokenRangeReferenceType extendedTypeReferenceType superTypeNodeList<AnnotationExprannotations) {
75        super(tokenRangeannotations);
76        setExtendedType(extendedType);
77        setSuperType(superType);
78        customInitialization();
79    }
80
81    @Override
82    @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
83    public <RAR accept(final GenericVisitor<RAvfinal A arg) {
84        return v.visit(this, arg);
85    }
86
87    @Override
88    @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
89    public <Avoid accept(final VoidVisitor<Avfinal A arg) {
90        v.visit(this, arg);
91    }
92
93    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
94    public Optional<ReferenceTypegetExtendedType() {
95        return Optional.ofNullable(extendedType);
96    }
97
98    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
99    public Optional<ReferenceTypegetSuperType() {
100        return Optional.ofNullable(superType);
101    }
102
103    /**
104     * Sets the extended type
105     *
106     * @param extendedType the extends, can be null
107     * @return this, the WildcardType
108     */
109    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
110    public WildcardType setExtendedType(final ReferenceType extendedType) {
111        if (extendedType == this.extendedType) {
112            return (WildcardType) this;
113        }
114        notifyPropertyChange(ObservableProperty.EXTENDED_TYPE, this.extendedTypeextendedType);
115        if (this.extendedType != null)
116            this.extendedType.setParentNode(null);
117        this.extendedType = extendedType;
118        setAsParentNodeOf(extendedType);
119        return this;
120    }
121
122    /**
123     * Sets the supertype
124     *
125     * @param superType the super, can be null
126     * @return this, the WildcardType
127     */
128    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
129    public WildcardType setSuperType(final ReferenceType superType) {
130        if (superType == this.superType) {
131            return (WildcardType) this;
132        }
133        notifyPropertyChange(ObservableProperty.SUPER_TYPE, this.superTypesuperType);
134        if (this.superType != null)
135            this.superType.setParentNode(null);
136        this.superType = superType;
137        setAsParentNodeOf(superType);
138        return this;
139    }
140
141    @Override
142    public WildcardType setAnnotations(NodeList<AnnotationExprannotations) {
143        return (WildcardType) super.setAnnotations(annotations);
144    }
145
146    @Override
147    @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
148    public boolean remove(Node node) {
149        if (node == null)
150            return false;
151        if (extendedType != null) {
152            if (node == extendedType) {
153                removeExtendedType();
154                return true;
155            }
156        }
157        if (superType != null) {
158            if (node == superType) {
159                removeSuperType();
160                return true;
161            }
162        }
163        return super.remove(node);
164    }
165
166    @Override
167    public String asString() {
168        StringBuilder str = new StringBuilder("?");
169        getExtendedType().ifPresent(t -> str.append(" extends ").append(t.asString()));
170        getSuperType().ifPresent(t -> str.append(" super ").append(t.asString()));
171        return str.toString();
172    }
173
174    @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
175    public WildcardType removeExtendedType() {
176        return setExtendedType((ReferenceTypenull);
177    }
178
179    @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
180    public WildcardType removeSuperType() {
181        return setSuperType((ReferenceTypenull);
182    }
183
184    @Override
185    @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
186    public WildcardType clone() {
187        return (WildcardTypeaccept(new CloneVisitor(), null);
188    }
189
190    @Override
191    @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
192    public WildcardTypeMetaModel getMetaModel() {
193        return JavaParserMetaModel.wildcardTypeMetaModel;
194    }
195
196    @Override
197    @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
198    public boolean replace(Node nodeNode replacementNode) {
199        if (node == null)
200            return false;
201        if (extendedType != null) {
202            if (node == extendedType) {
203                setExtendedType((ReferenceTypereplacementNode);
204                return true;
205            }
206        }
207        if (superType != null) {
208            if (node == superType) {
209                setSuperType((ReferenceTypereplacementNode);
210                return true;
211            }
212        }
213        return super.replace(nodereplacementNode);
214    }
215
216    /**
217     * This constructor is used by the parser and is considered private.
218     */
219    @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
220    public WildcardType(TokenRange tokenRangeReferenceType extendedTypeReferenceType superType) {
221        super(tokenRange);
222        setExtendedType(extendedType);
223        setSuperType(superType);
224        customInitialization();
225    }
226
227    @Override
228    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
229    public boolean isWildcardType() {
230        return true;
231    }
232
233    @Override
234    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
235    public WildcardType asWildcardType() {
236        return this;
237    }
238
239    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
240    public void ifWildcardType(Consumer<WildcardTypeaction) {
241        action.accept(this);
242    }
243
244    @Override
245    public ResolvedWildcard resolve() {
246        return getSymbolResolver().toResolvedType(this, ResolvedWildcard.class);
247    }
248
249    @Override
250    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
251    public Optional<WildcardTypetoWildcardType() {
252        return Optional.of(this);
253    }
254}
255
MembersX
WildcardType:getSuperType
WildcardType:setExtendedType
WildcardType:setSuperType
WildcardType:asWildcardType
WildcardType:WildcardType
WildcardType:extendedType
WildcardType:ifWildcardType
WildcardType:resolve
WildcardType:toWildcardType
WildcardType:superType
WildcardType:accept
WildcardType:setAnnotations
WildcardType:remove
WildcardType:getMetaModel
WildcardType:asString
WildcardType:getExtendedType
WildcardType:replace
WildcardType:removeExtendedType
WildcardType:removeSuperType
WildcardType:clone
WildcardType:asString:Block:str
WildcardType:isWildcardType
Members
X