JavaParser Source Viewer

Home|JavaParser/com/github/javaparser/ast/expr/ThisExpr.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.expr;
22
23import com.github.javaparser.ast.AllFieldsConstructor;
24import com.github.javaparser.ast.observer.ObservableProperty;
25import com.github.javaparser.ast.visitor.GenericVisitor;
26import com.github.javaparser.ast.visitor.VoidVisitor;
27import java.util.Optional;
28import com.github.javaparser.ast.Node;
29import com.github.javaparser.ast.visitor.CloneVisitor;
30import com.github.javaparser.metamodel.OptionalProperty;
31import com.github.javaparser.metamodel.ThisExprMetaModel;
32import com.github.javaparser.metamodel.JavaParserMetaModel;
33import com.github.javaparser.TokenRange;
34import com.github.javaparser.resolution.Resolvable;
35import com.github.javaparser.resolution.declarations.ResolvedTypeDeclaration;
36import java.util.function.Consumer;
37import com.github.javaparser.ast.Generated;
38
39/**
40 * An occurrence of the "this" keyword. <br>
41 * {@code World.this.greet()} is a MethodCallExpr of method name greet,
42 * and scope "World.this" which is a ThisExpr with typeName "World". <br>
43 * {@code this.name} is a FieldAccessExpr of field greet, and a ThisExpr as its scope.
44 * This ThisExpr has no typeName.
45 *
46 * @author Julio Vilmar Gesser
47 * @see com.github.javaparser.ast.stmt.ExplicitConstructorInvocationStmt
48 * @see SuperExpr
49 */
50public class ThisExpr extends Expression implements Resolvable<ResolvedTypeDeclaration> {
51
52    @OptionalProperty
53    private Name typeName;
54
55    public ThisExpr() {
56        this(nullnull);
57    }
58
59    @AllFieldsConstructor
60    public ThisExpr(final Name typeName) {
61        this(nulltypeName);
62    }
63
64    /**
65     * This constructor is used by the parser and is considered private.
66     */
67    @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
68    public ThisExpr(TokenRange tokenRangeName typeName) {
69        super(tokenRange);
70        setTypeName(typeName);
71        customInitialization();
72    }
73
74    @Override
75    @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
76    public <RAR accept(final GenericVisitor<RAvfinal A arg) {
77        return v.visit(this, arg);
78    }
79
80    @Override
81    @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
82    public <Avoid accept(final VoidVisitor<Avfinal A arg) {
83        v.visit(this, arg);
84    }
85
86    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
87    public Optional<NamegetTypeName() {
88        return Optional.ofNullable(typeName);
89    }
90
91    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
92    public ThisExpr setTypeName(final Name typeName) {
93        if (typeName == this.typeName) {
94            return (ThisExpr) this;
95        }
96        notifyPropertyChange(ObservableProperty.TYPE_NAME, this.typeNametypeName);
97        if (this.typeName != null)
98            this.typeName.setParentNode(null);
99        this.typeName = typeName;
100        setAsParentNodeOf(typeName);
101        return this;
102    }
103
104    @Override
105    @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
106    public boolean remove(Node node) {
107        if (node == null)
108            return false;
109        if (typeName != null) {
110            if (node == typeName) {
111                removeTypeName();
112                return true;
113            }
114        }
115        return super.remove(node);
116    }
117
118    @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
119    public ThisExpr removeClassName() {
120        return setTypeName((Namenull);
121    }
122
123    @Override
124    @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
125    public ThisExpr clone() {
126        return (ThisExpraccept(new CloneVisitor(), null);
127    }
128
129    @Override
130    @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
131    public ThisExprMetaModel getMetaModel() {
132        return JavaParserMetaModel.thisExprMetaModel;
133    }
134
135    @Override
136    @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
137    public boolean replace(Node nodeNode replacementNode) {
138        if (node == null)
139            return false;
140        if (typeName != null) {
141            if (node == typeName) {
142                setTypeName((NamereplacementNode);
143                return true;
144            }
145        }
146        return super.replace(nodereplacementNode);
147    }
148
149    @Override
150    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
151    public boolean isThisExpr() {
152        return true;
153    }
154
155    @Override
156    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
157    public ThisExpr asThisExpr() {
158        return this;
159    }
160
161    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
162    public void ifThisExpr(Consumer<ThisExpraction) {
163        action.accept(this);
164    }
165
166    @Override
167    public ResolvedTypeDeclaration resolve() {
168        return getSymbolResolver().resolveDeclaration(this, ResolvedTypeDeclaration.class);
169    }
170
171    @Override
172    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
173    public Optional<ThisExprtoThisExpr() {
174        return Optional.of(this);
175    }
176
177    @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
178    public ThisExpr removeTypeName() {
179        return setTypeName((Namenull);
180    }
181}
182
MembersX
ThisExpr:asThisExpr
ThisExpr:typeName
ThisExpr:toThisExpr
ThisExpr:setTypeName
ThisExpr:removeClassName
ThisExpr:accept
ThisExpr:isThisExpr
ThisExpr:remove
ThisExpr:getMetaModel
ThisExpr:clone
ThisExpr:ThisExpr
ThisExpr:getTypeName
ThisExpr:ifThisExpr
ThisExpr:resolve
ThisExpr:replace
ThisExpr:removeTypeName
Members
X