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