• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.github.javaparser.ast.modules;
2 
3 import com.github.javaparser.ast.AllFieldsConstructor;
4 import com.github.javaparser.ast.Node;
5 import com.github.javaparser.ast.NodeList;
6 import com.github.javaparser.ast.expr.Name;
7 import com.github.javaparser.ast.nodeTypes.NodeWithName;
8 import com.github.javaparser.ast.observer.ObservableProperty;
9 import com.github.javaparser.ast.visitor.CloneVisitor;
10 import com.github.javaparser.ast.visitor.GenericVisitor;
11 import com.github.javaparser.ast.visitor.VoidVisitor;
12 import static com.github.javaparser.utils.Utils.assertNotNull;
13 import com.github.javaparser.TokenRange;
14 import java.util.function.Consumer;
15 import java.util.Optional;
16 import com.github.javaparser.metamodel.ModuleProvidesDirectiveMetaModel;
17 import com.github.javaparser.metamodel.JavaParserMetaModel;
18 import com.github.javaparser.ast.Generated;
19 
20 /**
21  * A provides directive in module-info.java. <code>provides X.Y with Z1.Z2, Z3.Z4;</code>
22  */
23 public class ModuleProvidesDirective extends ModuleDirective implements NodeWithName<ModuleProvidesDirective> {
24 
25     private Name name;
26 
27     private NodeList<Name> with;
28 
ModuleProvidesDirective()29     public ModuleProvidesDirective() {
30         this(null, new Name(), new NodeList<>());
31     }
32 
33     @AllFieldsConstructor
ModuleProvidesDirective(Name name, NodeList<Name> with)34     public ModuleProvidesDirective(Name name, NodeList<Name> with) {
35         this(null, name, with);
36     }
37 
38     /**
39      * This constructor is used by the parser and is considered private.
40      */
41     @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
ModuleProvidesDirective(TokenRange tokenRange, Name name, NodeList<Name> with)42     public ModuleProvidesDirective(TokenRange tokenRange, Name name, NodeList<Name> with) {
43         super(tokenRange);
44         setName(name);
45         setWith(with);
46         customInitialization();
47     }
48 
49     @Override
50     @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
accept(final GenericVisitor<R, A> v, final A arg)51     public <R, A> R accept(final GenericVisitor<R, A> v, final A arg) {
52         return v.visit(this, arg);
53     }
54 
55     @Override
56     @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
accept(final VoidVisitor<A> v, final A arg)57     public <A> void accept(final VoidVisitor<A> v, final A arg) {
58         v.visit(this, arg);
59     }
60 
61     @Override
62     @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
remove(Node node)63     public boolean remove(Node node) {
64         if (node == null)
65             return false;
66         for (int i = 0; i < with.size(); i++) {
67             if (with.get(i) == node) {
68                 with.remove(i);
69                 return true;
70             }
71         }
72         return super.remove(node);
73     }
74 
75     @Override
76     @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
clone()77     public ModuleProvidesDirective clone() {
78         return (ModuleProvidesDirective) accept(new CloneVisitor(), null);
79     }
80 
81     @Override
82     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
isModuleProvidesStmt()83     public boolean isModuleProvidesStmt() {
84         return true;
85     }
86 
87     @Override
88     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
asModuleProvidesStmt()89     public ModuleProvidesDirective asModuleProvidesStmt() {
90         return this;
91     }
92 
93     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
ifModuleProvidesStmt(Consumer<ModuleProvidesDirective> action)94     public void ifModuleProvidesStmt(Consumer<ModuleProvidesDirective> action) {
95         action.accept(this);
96     }
97 
98     @Override
99     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
toModuleProvidesStmt()100     public Optional<ModuleProvidesDirective> toModuleProvidesStmt() {
101         return Optional.of(this);
102     }
103 
104     @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
getName()105     public Name getName() {
106         return name;
107     }
108 
109     @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
setName(final Name name)110     public ModuleProvidesDirective setName(final Name name) {
111         assertNotNull(name);
112         if (name == this.name) {
113             return (ModuleProvidesDirective) this;
114         }
115         notifyPropertyChange(ObservableProperty.NAME, this.name, name);
116         if (this.name != null)
117             this.name.setParentNode(null);
118         this.name = name;
119         setAsParentNodeOf(name);
120         return this;
121     }
122 
123     @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
setWith(final NodeList<Name> with)124     public ModuleProvidesDirective setWith(final NodeList<Name> with) {
125         assertNotNull(with);
126         if (with == this.with) {
127             return (ModuleProvidesDirective) this;
128         }
129         notifyPropertyChange(ObservableProperty.WITH, this.with, with);
130         if (this.with != null)
131             this.with.setParentNode(null);
132         this.with = with;
133         setAsParentNodeOf(with);
134         return this;
135     }
136 
137     @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
getWith()138     public NodeList<Name> getWith() {
139         return with;
140     }
141 
142     @Override
143     @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
replace(Node node, Node replacementNode)144     public boolean replace(Node node, Node replacementNode) {
145         if (node == null)
146             return false;
147         if (node == name) {
148             setName((Name) replacementNode);
149             return true;
150         }
151         for (int i = 0; i < with.size(); i++) {
152             if (with.get(i) == node) {
153                 with.set(i, (Name) replacementNode);
154                 return true;
155             }
156         }
157         return super.replace(node, replacementNode);
158     }
159 
160     @Override
161     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
isModuleProvidesDirective()162     public boolean isModuleProvidesDirective() {
163         return true;
164     }
165 
166     @Override
167     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
asModuleProvidesDirective()168     public ModuleProvidesDirective asModuleProvidesDirective() {
169         return this;
170     }
171 
172     @Override
173     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
toModuleProvidesDirective()174     public Optional<ModuleProvidesDirective> toModuleProvidesDirective() {
175         return Optional.of(this);
176     }
177 
178     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
ifModuleProvidesDirective(Consumer<ModuleProvidesDirective> action)179     public void ifModuleProvidesDirective(Consumer<ModuleProvidesDirective> action) {
180         action.accept(this);
181     }
182 
183     @Override
184     @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
getMetaModel()185     public ModuleProvidesDirectiveMetaModel getMetaModel() {
186         return JavaParserMetaModel.moduleProvidesDirectiveMetaModel;
187     }
188 }
189