EclipseJDT Source Viewer

Home|eclipse_jdt/src/org/eclipse/jdt/core/dom/GuardedPattern.java
1/*******************************************************************************
2 * Copyright (c) 2021, 2022 IBM Corporation and others.
3 *
4 * This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License 2.0
6 * which accompanies this distribution, and is available at
7 * https://www.eclipse.org/legal/epl-2.0/
8 *
9 * SPDX-License-Identifier: EPL-2.0
10 *
11 * Contributors:
12 *     IBM Corporation - initial API and implementation
13 *******************************************************************************/
14package org.eclipse.jdt.core.dom;
15
16import java.util.ArrayList;
17import java.util.List;
18
19import org.eclipse.jdt.internal.core.dom.util.DOMASTUtil;
20
21/**
22 * GuardedPattern pattern AST node type.
23 *
24 * <pre>
25 * GuardedPattern:
26 *      Pattern && Expression
27 * </pre>
28 *
29 * @since 3.27
30 * @noinstantiate This class is not intended to be instantiated by clients.
31 * @noreference This class is not intended to be referenced by clients.
32 */
33
34@SuppressWarnings("rawtypes")
35public class GuardedPattern extends Pattern{
36
37    GuardedPattern(AST ast) {
38        super(ast);
39        supportedOnlyIn18();
40        unsupportedWithoutPreviewError();
41    }
42
43    /**
44     * The "pattern" structural property of this node type (child type: {@link Pattern}). (added in JEP 406).
45     */
46    public static final ChildPropertyDescriptor PATTERN_PROPERTY  = internalPatternPropertyFactory(GuardedPattern.class);
47
48    /**
49     * The "expression" structural property of this node type (child type: {@link Expression}). (added in JEP 406).
50     */
51    public static final ChildPropertyDescriptor EXPRESSION_PROPERTY  =
52            new ChildPropertyDescriptor(GuardedPattern.class"expression"Expression.classMANDATORY,  CYCLE_RISK); //$NON-NLS-1$);
53
54
55    /**
56     * A list of property descriptors (element type:
57     * {@link StructuralPropertyDescriptor}),
58     * or null if uninitialized.
59     */
60    private static final List PROPERTY_DESCRIPTORS;
61
62    static {
63        List propertyList = new ArrayList(3);
64        createPropertyList(GuardedPattern.classpropertyList);
65        addProperty(PATTERN_PROPERTYpropertyList);
66        addProperty(EXPRESSION_PROPERTYpropertyList);
67        PROPERTY_DESCRIPTORS = reapPropertyList(propertyList);
68    }
69
70    /**
71     * The pattern; <code>null</code> for none
72     */
73    private Pattern pattern = null;
74
75    /**
76     * The expression; <code>null</code> for none; lazily initialized (but
77     * does <b>not</b> default to none).
78     */
79    private Expression conditonalExpression = null;
80
81
82
83    @Override
84    List internalStructuralPropertiesForType(int apiLevel) {
85        return propertyDescriptors(apiLevel);
86    }
87
88    @Override
89    final List internalStructuralPropertiesForType(int apiLevelboolean previewEnabled) {
90        return propertyDescriptors(apiLevelpreviewEnabled);
91    }
92    @Override
93    final ASTNode internalGetSetChildProperty(ChildPropertyDescriptor propertyboolean getASTNode child) {
94        if (property == EXPRESSION_PROPERTY) {
95            if (get) {
96                return getExpression();
97            } else {
98                setExpression((Expressionchild);
99                return null;
100            }
101        } else if (property == PATTERN_PROPERTY) {
102            if (get) {
103                return getPattern();
104            } else {
105                setPattern((Pattern)child);
106                return null;
107            }
108        }
109        // allow default implementation to flag the error
110        return super.internalGetSetChildProperty(propertygetchild);
111    }
112
113    @Override
114    int getNodeType0() {
115        return GUARDED_PATTERN;
116    }
117
118    @Override
119    boolean subtreeMatch0(ASTMatcher matcherObject other) {
120        return matcher.match(this, other);
121    }
122
123    @Override
124    ASTNode clone0(AST target) {
125        GuardedPattern result = new GuardedPattern(target);
126        result.setSourceRange(getStartPosition(), getLength());
127        result.setPattern((PatterngetPattern().clone(target));
128        result.setExpression((ExpressiongetExpression().clone(target));
129        return result;
130    }
131
132    @Override
133    void accept0(ASTVisitor visitor) {
134        boolean visitChildren = visitor.visit(this);
135        if (visitChildren) {
136            // visit children in normal left to right reading order
137            acceptChild(visitorgetPattern());
138            acceptChild(visitorgetExpression());
139        }
140        visitor.endVisit(this);
141
142    }
143
144    @Override
145    int memSize() {
146        return BASE_NODE_SIZE + 2 * 4;
147    }
148
149    @Override
150    int treeSize() {
151        return
152                memSize()
153            + (this.pattern == null ? 0 : getPattern().treeSize())
154            + (this.conditonalExpression == null ? 0 : getExpression().treeSize());
155    }
156
157    @Override
158    public List<SingleVariableDeclarationpatternVariables() {
159        return null;
160    }
161
162    /**
163     * Returns a list of structural property descriptors for this node type.
164     * Clients must not modify the result.
165     *
166     * @param apiLevel the API level; one of the
167     * <code>AST.JLS*</code> constants
168
169     * @return a list of property descriptors (element type:
170     * {@link StructuralPropertyDescriptor})
171     */
172    public static List propertyDescriptors(int apiLevel) {
173        return null;
174    }
175
176    /**
177     * Returns a list of structural property descriptors for this node type.
178     * Clients must not modify the result.
179     *
180     * @param apiLevel the API level; one of the
181     * <code>AST.JLS*</code> constants
182     * @param previewEnabled the previewEnabled flag
183     * @return a list of property descriptors (element type:
184     * {@link StructuralPropertyDescriptor})
185     * @noreference This method is not intended to be referenced by clients.
186     */
187    public static List propertyDescriptors(int apiLevelboolean previewEnabled) {
188        if (DOMASTUtil.isPatternSupported(apiLevelpreviewEnabled)) {
189            return PROPERTY_DESCRIPTORS;
190        }
191        return null;
192    }
193
194    /**
195     * Returns the conditional expression of this pattern, or
196     * <code>null</code> if there is none (the "default:" case).
197     *
198     * @return the expression node, or <code>null</code> if there is none
199     */
200    public Expression getExpression() {
201        supportedOnlyIn18();
202        unsupportedWithoutPreviewError();
203        return this.conditonalExpression;
204    }
205
206    /**
207     * Returns the pattern of this Guarded Pattern, or
208     * <code>empty</code> if there is none.
209     * @return the pattern node
210     *             (element type: {@link Pattern})
211     * @exception UnsupportedOperationException if this operation is used other than JLS18
212     * @exception UnsupportedOperationException if this expression is used with previewEnabled flag as false
213     * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
214     */
215    public Pattern getPattern() {
216        supportedOnlyIn18();
217        unsupportedWithoutPreviewError();
218        return this.pattern;
219    }
220
221    /**
222     * Sets the conditional expression of this pattern, or clears it (turns it into
223     * the  "default:" case).
224     *
225     * @param expression the expression node, or <code>null</code> to
226     *    turn it into the  "default:" case
227     * @exception IllegalArgumentException if:
228     * <ul>
229     * <li>the node belongs to a different AST</li>
230     * <li>the node already has a parent</li>
231     * <li>a cycle in would be created</li>
232     * </ul>
233     */
234    public void setExpression(Expression expression) {
235        supportedOnlyIn18();
236        unsupportedWithoutPreviewError();
237        ASTNode oldChild = this.conditonalExpression;
238        preReplaceChild(oldChildexpressionEXPRESSION_PROPERTY);
239        this.conditonalExpression = expression;
240        postReplaceChild(oldChildexpressionEXPRESSION_PROPERTY);
241    }
242
243    /**
244     * Sets the pattern of this switch case.
245     * @param pattern
246     * @noreference This method is not intended to be referenced by clients.
247     * @exception UnsupportedOperationException if this operation is used not for JLS18
248     * @exception UnsupportedOperationException if this operation is used without previewEnabled
249     */
250    public void setPattern(Pattern pattern) {
251        supportedOnlyIn18();
252        unsupportedWithoutPreviewError();
253        ASTNode oldChild = this.pattern;
254        preReplaceChild(oldChildpatternPATTERN_PROPERTY);
255        this.pattern = pattern;
256        postReplaceChild(oldChildpatternPATTERN_PROPERTY);
257    }
258
259}
260
MembersX
GuardedPattern:conditonalExpression
GuardedPattern:PROPERTY_DESCRIPTORS
GuardedPattern:subtreeMatch0
GuardedPattern:clone0
GuardedPattern:getExpression
GuardedPattern:accept0:Block:visitChildren
GuardedPattern:setPattern
GuardedPattern:internalStructuralPropertiesForType
GuardedPattern:PATTERN_PROPERTY
GuardedPattern:setPattern:Block:oldChild
GuardedPattern:treeSize
GuardedPattern:getNodeType0
GuardedPattern:clone0:Block:result
GuardedPattern:memSize
GuardedPattern:EXPRESSION_PROPERTY
GuardedPattern:accept0
GuardedPattern:GuardedPattern
GuardedPattern:setExpression
GuardedPattern:patternVariables
GuardedPattern:internalGetSetChildProperty
GuardedPattern:pattern
GuardedPattern:Block:propertyList
GuardedPattern:getPattern
GuardedPattern:propertyDescriptors
GuardedPattern:setExpression:Block:oldChild
Members
X