• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007-2010 Júlio Vilmar Gesser.
3  * Copyright (C) 2011, 2013-2018 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 package com.github.javaparser.ast;
22 
23 import com.github.javaparser.TokenRange;
24 import com.github.javaparser.ast.observer.ObservableProperty;
25 import com.github.javaparser.ast.visitor.CloneVisitor;
26 import com.github.javaparser.ast.visitor.GenericVisitor;
27 import com.github.javaparser.ast.visitor.VoidVisitor;
28 import com.github.javaparser.metamodel.JavaParserMetaModel;
29 import com.github.javaparser.metamodel.ModifierMetaModel;
30 import java.util.Arrays;
31 import static com.github.javaparser.ast.NodeList.toNodeList;
32 import static com.github.javaparser.utils.Utils.assertNotNull;
33 import com.github.javaparser.ast.Node;
34 import com.github.javaparser.ast.Generated;
35 
36 /**
37  * A modifier, like private, public, or volatile.
38  */
39 public class Modifier extends Node {
40 
publicModifier()41     public static Modifier publicModifier() {
42         return new Modifier(Keyword.PUBLIC);
43     }
44 
protectedModifier()45     public static Modifier protectedModifier() {
46         return new Modifier(Keyword.PROTECTED);
47     }
48 
privateModifier()49     public static Modifier privateModifier() {
50         return new Modifier(Keyword.PRIVATE);
51     }
52 
abstractModifier()53     public static Modifier abstractModifier() {
54         return new Modifier(Keyword.ABSTRACT);
55     }
56 
staticModifier()57     public static Modifier staticModifier() {
58         return new Modifier(Keyword.STATIC);
59     }
60 
finalModifier()61     public static Modifier finalModifier() {
62         return new Modifier(Keyword.FINAL);
63     }
64 
transientModifier()65     public static Modifier transientModifier() {
66         return new Modifier(Keyword.TRANSIENT);
67     }
68 
volatileModifier()69     public static Modifier volatileModifier() {
70         return new Modifier(Keyword.VOLATILE);
71     }
72 
synchronizedModifier()73     public static Modifier synchronizedModifier() {
74         return new Modifier(Keyword.SYNCHRONIZED);
75     }
76 
nativeModifier()77     public static Modifier nativeModifier() {
78         return new Modifier(Keyword.NATIVE);
79     }
80 
strictfpModifier()81     public static Modifier strictfpModifier() {
82         return new Modifier(Keyword.STRICTFP);
83     }
84 
transitiveModifier()85     public static Modifier transitiveModifier() {
86         return new Modifier(Keyword.TRANSITIVE);
87     }
88 
89     /**
90      * The Java modifier keywords.
91      */
92     public enum Keyword {
93 
94         DEFAULT("default"),
95         PUBLIC("public"),
96         PROTECTED("protected"),
97         PRIVATE("private"),
98         ABSTRACT("abstract"),
99         STATIC("static"),
100         FINAL("final"),
101         TRANSIENT("transient"),
102         VOLATILE("volatile"),
103         SYNCHRONIZED("synchronized"),
104         NATIVE("native"),
105         STRICTFP("strictfp"),
106         TRANSITIVE("transitive");
107 
108         private final String codeRepresentation;
109 
Keyword(String codeRepresentation)110         Keyword(String codeRepresentation) {
111             this.codeRepresentation = codeRepresentation;
112         }
113 
114         /**
115          * @return the Java keyword represented by this enum constant.
116          */
asString()117         public String asString() {
118             return codeRepresentation;
119         }
120     }
121 
122     private Keyword keyword;
123 
Modifier()124     public Modifier() {
125         this(Keyword.PUBLIC);
126     }
127 
128     @AllFieldsConstructor
Modifier(Keyword keyword)129     public Modifier(Keyword keyword) {
130         this(null, keyword);
131     }
132 
133     /**
134      * This constructor is used by the parser and is considered private.
135      */
136     @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
Modifier(TokenRange tokenRange, Keyword keyword)137     public Modifier(TokenRange tokenRange, Keyword keyword) {
138         super(tokenRange);
139         setKeyword(keyword);
140         customInitialization();
141     }
142 
143     @Override
144     @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
accept(final GenericVisitor<R, A> v, final A arg)145     public <R, A> R accept(final GenericVisitor<R, A> v, final A arg) {
146         return v.visit(this, arg);
147     }
148 
149     @Override
150     @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
accept(final VoidVisitor<A> v, final A arg)151     public <A> void accept(final VoidVisitor<A> v, final A arg) {
152         v.visit(this, arg);
153     }
154 
155     @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
getKeyword()156     public Keyword getKeyword() {
157         return keyword;
158     }
159 
160     @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
setKeyword(final Keyword keyword)161     public Modifier setKeyword(final Keyword keyword) {
162         assertNotNull(keyword);
163         if (keyword == this.keyword) {
164             return (Modifier) this;
165         }
166         notifyPropertyChange(ObservableProperty.KEYWORD, this.keyword, keyword);
167         this.keyword = keyword;
168         return this;
169     }
170 
171     /**
172      * Utility method that instantiaties "Modifier"s for the keywords,
173      * and puts them in a NodeList.
174      */
createModifierList(Modifier.Keyword... modifiers)175     public static NodeList<Modifier> createModifierList(Modifier.Keyword... modifiers) {
176         return Arrays.stream(modifiers).map(Modifier::new).collect(toNodeList());
177     }
178 
179     @Override
180     @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
remove(Node node)181     public boolean remove(Node node) {
182         if (node == null)
183             return false;
184         return super.remove(node);
185     }
186 
187     @Override
188     @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
replace(Node node, Node replacementNode)189     public boolean replace(Node node, Node replacementNode) {
190         if (node == null)
191             return false;
192         return super.replace(node, replacementNode);
193     }
194 
195     @Override
196     @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
clone()197     public Modifier clone() {
198         return (Modifier) accept(new CloneVisitor(), null);
199     }
200 
201     @Override
202     @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
getMetaModel()203     public ModifierMetaModel getMetaModel() {
204         return JavaParserMetaModel.modifierMetaModel;
205     }
206 }
207