• 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.StaticJavaParser.parseName;
13 import static com.github.javaparser.utils.Utils.assertNotNull;
14 import com.github.javaparser.TokenRange;
15 import java.util.function.Consumer;
16 import java.util.Optional;
17 import com.github.javaparser.metamodel.ModuleExportsDirectiveMetaModel;
18 import com.github.javaparser.metamodel.JavaParserMetaModel;
19 import com.github.javaparser.ast.Generated;
20 
21 /**
22  * An exports directive in module-info.java. <code>exports R.S to T1.U1, T2.U2;</code>
23  */
24 public class ModuleExportsDirective extends ModuleDirective implements NodeWithName<ModuleExportsDirective> {
25 
26     private Name name;
27 
28     private NodeList<Name> moduleNames;
29 
ModuleExportsDirective()30     public ModuleExportsDirective() {
31         this(null, new Name(), new NodeList<>());
32     }
33 
34     @AllFieldsConstructor
ModuleExportsDirective(Name name, NodeList<Name> moduleNames)35     public ModuleExportsDirective(Name name, NodeList<Name> moduleNames) {
36         this(null, name, moduleNames);
37     }
38 
39     /**
40      * This constructor is used by the parser and is considered private.
41      */
42     @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
ModuleExportsDirective(TokenRange tokenRange, Name name, NodeList<Name> moduleNames)43     public ModuleExportsDirective(TokenRange tokenRange, Name name, NodeList<Name> moduleNames) {
44         super(tokenRange);
45         setName(name);
46         setModuleNames(moduleNames);
47         customInitialization();
48     }
49 
50     @Override
51     @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
accept(final GenericVisitor<R, A> v, final A arg)52     public <R, A> R accept(final GenericVisitor<R, A> v, final A arg) {
53         return v.visit(this, arg);
54     }
55 
56     @Override
57     @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
accept(final VoidVisitor<A> v, final A arg)58     public <A> void accept(final VoidVisitor<A> v, final A arg) {
59         v.visit(this, arg);
60     }
61 
62     @Override
63     @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
remove(Node node)64     public boolean remove(Node node) {
65         if (node == null)
66             return false;
67         for (int i = 0; i < moduleNames.size(); i++) {
68             if (moduleNames.get(i) == node) {
69                 moduleNames.remove(i);
70                 return true;
71             }
72         }
73         return super.remove(node);
74     }
75 
76     @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
getName()77     public Name getName() {
78         return name;
79     }
80 
81     @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
setName(final Name name)82     public ModuleExportsDirective setName(final Name name) {
83         assertNotNull(name);
84         if (name == this.name) {
85             return (ModuleExportsDirective) this;
86         }
87         notifyPropertyChange(ObservableProperty.NAME, this.name, name);
88         if (this.name != null)
89             this.name.setParentNode(null);
90         this.name = name;
91         setAsParentNodeOf(name);
92         return this;
93     }
94 
95     @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
getModuleNames()96     public NodeList<Name> getModuleNames() {
97         return moduleNames;
98     }
99 
100     @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
setModuleNames(final NodeList<Name> moduleNames)101     public ModuleExportsDirective setModuleNames(final NodeList<Name> moduleNames) {
102         assertNotNull(moduleNames);
103         if (moduleNames == this.moduleNames) {
104             return (ModuleExportsDirective) this;
105         }
106         notifyPropertyChange(ObservableProperty.MODULE_NAMES, this.moduleNames, moduleNames);
107         if (this.moduleNames != null)
108             this.moduleNames.setParentNode(null);
109         this.moduleNames = moduleNames;
110         setAsParentNodeOf(moduleNames);
111         return this;
112     }
113 
114     @Override
115     @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
clone()116     public ModuleExportsDirective clone() {
117         return (ModuleExportsDirective) accept(new CloneVisitor(), null);
118     }
119 
120     @Override
121     @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
replace(Node node, Node replacementNode)122     public boolean replace(Node node, Node replacementNode) {
123         if (node == null)
124             return false;
125         for (int i = 0; i < moduleNames.size(); i++) {
126             if (moduleNames.get(i) == node) {
127                 moduleNames.set(i, (Name) replacementNode);
128                 return true;
129             }
130         }
131         if (node == name) {
132             setName((Name) replacementNode);
133             return true;
134         }
135         return super.replace(node, replacementNode);
136     }
137 
138     @Override
139     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
isModuleExportsStmt()140     public boolean isModuleExportsStmt() {
141         return true;
142     }
143 
144     @Override
145     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
asModuleExportsStmt()146     public ModuleExportsDirective asModuleExportsStmt() {
147         return this;
148     }
149 
150     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
ifModuleExportsStmt(Consumer<ModuleExportsDirective> action)151     public void ifModuleExportsStmt(Consumer<ModuleExportsDirective> action) {
152         action.accept(this);
153     }
154 
155     @Override
156     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
toModuleExportsStmt()157     public Optional<ModuleExportsDirective> toModuleExportsStmt() {
158         return Optional.of(this);
159     }
160 
addModuleName(String name)161     public ModuleExportsDirective addModuleName(String name) {
162         moduleNames.add(parseName(name));
163         return this;
164     }
165 
166     @Override
167     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
isModuleExportsDirective()168     public boolean isModuleExportsDirective() {
169         return true;
170     }
171 
172     @Override
173     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
asModuleExportsDirective()174     public ModuleExportsDirective asModuleExportsDirective() {
175         return this;
176     }
177 
178     @Override
179     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
toModuleExportsDirective()180     public Optional<ModuleExportsDirective> toModuleExportsDirective() {
181         return Optional.of(this);
182     }
183 
184     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
ifModuleExportsDirective(Consumer<ModuleExportsDirective> action)185     public void ifModuleExportsDirective(Consumer<ModuleExportsDirective> action) {
186         action.accept(this);
187     }
188 
189     @Override
190     @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
getMetaModel()191     public ModuleExportsDirectiveMetaModel getMetaModel() {
192         return JavaParserMetaModel.moduleExportsDirectiveMetaModel;
193     }
194 }
195