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.AnnotationExpr; 7 import com.github.javaparser.ast.expr.Name; 8 import com.github.javaparser.ast.nodeTypes.NodeWithAnnotations; 9 import com.github.javaparser.ast.nodeTypes.NodeWithName; 10 import com.github.javaparser.ast.observer.ObservableProperty; 11 import com.github.javaparser.ast.visitor.CloneVisitor; 12 import com.github.javaparser.ast.visitor.GenericVisitor; 13 import com.github.javaparser.ast.visitor.VoidVisitor; 14 import com.github.javaparser.metamodel.JavaParserMetaModel; 15 import com.github.javaparser.metamodel.ModuleDeclarationMetaModel; 16 import java.util.Arrays; 17 import java.util.List; 18 import static com.github.javaparser.utils.Utils.assertNotNull; 19 import javax.annotation.Generated; 20 import com.github.javaparser.TokenRange; 21 22 /** 23 * A Java 9 Jigsaw module declaration. <code>@Foo module com.github.abc { requires a.B; }</code> 24 */ 25 public final class ModuleDeclaration extends Node implements NodeWithName<ModuleDeclaration>, NodeWithAnnotations<ModuleDeclaration> { 26 27 private Name name; 28 29 private NodeList<AnnotationExpr> annotations; 30 31 private boolean isOpen; 32 33 private NodeList<ModuleStmt> moduleStmts; 34 35 public ModuleDeclaration() { 36 this(null, new NodeList<>(), new Name(), false, new NodeList<>()); 37 } 38 39 public ModuleDeclaration(Name name, boolean isOpen) { 40 this(null, new NodeList<>(), name, isOpen, new NodeList<>()); 41 } 42 43 @AllFieldsConstructor 44 public ModuleDeclaration(NodeList<AnnotationExpr> annotations, Name name, boolean isOpen, NodeList<ModuleStmt> moduleStmts) { 45 this(null, annotations, name, isOpen, moduleStmts); 46 } 47 48 /** 49 * This constructor is used by the parser and is considered private. 50 */ 51 @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator") 52 public ModuleDeclaration(TokenRange tokenRange, NodeList<AnnotationExpr> annotations, Name name, boolean isOpen, NodeList<ModuleStmt> moduleStmts) { 53 super(tokenRange); 54 setAnnotations(annotations); 55 setName(name); 56 setOpen(isOpen); 57 setModuleStmts(moduleStmts); 58 customInitialization(); 59 } 60 61 @Override 62 @Generated("com.github.javaparser.generator.core.node.AcceptGenerator") 63 public <R, A> R accept(final GenericVisitor<R, A> v, final A arg) { 64 return v.visit(this, arg); 65 } 66 67 @Override 68 @Generated("com.github.javaparser.generator.core.node.AcceptGenerator") 69 public <A> void accept(final VoidVisitor<A> v, final A arg) { 70 v.visit(this, arg); 71 } 72 73 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 74 public Name getName() { 75 return name; 76 } 77 78 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 79 public ModuleDeclaration setName(final Name name) { 80 assertNotNull(name); 81 if (name == this.name) { 82 return (ModuleDeclaration) this; 83 } 84 notifyPropertyChange(ObservableProperty.NAME, this.name, name); 85 if (this.name != null) 86 this.name.setParentNode(null); 87 this.name = name; 88 setAsParentNodeOf(name); 89 return this; 90 } 91 92 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 93 public NodeList<AnnotationExpr> getAnnotations() { 94 return annotations; 95 } 96 97 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 98 public ModuleDeclaration setAnnotations(final NodeList<AnnotationExpr> annotations) { 99 assertNotNull(annotations); 100 if (annotations == this.annotations) { 101 return (ModuleDeclaration) this; 102 } 103 notifyPropertyChange(ObservableProperty.ANNOTATIONS, this.annotations, annotations); 104 if (this.annotations != null) 105 this.annotations.setParentNode(null); 106 this.annotations = annotations; 107 setAsParentNodeOf(annotations); 108 return this; 109 } 110 111 @Override 112 @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator") 113 public boolean remove(Node node) { 114 if (node == null) 115 return false; 116 for (int i = 0; i < annotations.size(); i++) { 117 if (annotations.get(i) == node) { 118 annotations.remove(i); 119 return true; 120 } 121 } 122 for (int i = 0; i < moduleStmts.size(); i++) { 123 if (moduleStmts.get(i) == node) { 124 moduleStmts.remove(i); 125 return true; 126 } 127 } 128 return super.remove(node); 129 } 130 131 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 132 public boolean isOpen() { 133 return isOpen; 134 } 135 136 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 137 public ModuleDeclaration setOpen(final boolean isOpen) { 138 if (isOpen == this.isOpen) { 139 return (ModuleDeclaration) this; 140 } 141 notifyPropertyChange(ObservableProperty.OPEN, this.isOpen, isOpen); 142 this.isOpen = isOpen; 143 return this; 144 } 145 146 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 147 public NodeList<ModuleStmt> getModuleStmts() { 148 return moduleStmts; 149 } 150 151 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 152 public ModuleDeclaration setModuleStmts(final NodeList<ModuleStmt> moduleStmts) { 153 assertNotNull(moduleStmts); 154 if (moduleStmts == this.moduleStmts) { 155 return (ModuleDeclaration) this; 156 } 157 notifyPropertyChange(ObservableProperty.MODULE_STMTS, this.moduleStmts, moduleStmts); 158 if (this.moduleStmts != null) 159 this.moduleStmts.setParentNode(null); 160 this.moduleStmts = moduleStmts; 161 setAsParentNodeOf(moduleStmts); 162 return this; 163 } 164 165 @Override 166 @Generated("com.github.javaparser.generator.core.node.CloneGenerator") 167 public ModuleDeclaration clone() { 168 return (ModuleDeclaration) accept(new CloneVisitor(), null); 169 } 170 171 @Override 172 @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator") 173 public ModuleDeclarationMetaModel getMetaModel() { 174 return JavaParserMetaModel.moduleDeclarationMetaModel; 175 } 176 177 @Override 178 @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator") 179 public boolean replace(Node node, Node replacementNode) { 180 if (node == null) 181 return false; 182 for (int i = 0; i < annotations.size(); i++) { 183 if (annotations.get(i) == node) { 184 annotations.set(i, (AnnotationExpr) replacementNode); 185 return true; 186 } 187 } 188 for (int i = 0; i < moduleStmts.size(); i++) { 189 if (moduleStmts.get(i) == node) { 190 moduleStmts.set(i, (ModuleStmt) replacementNode); 191 return true; 192 } 193 } 194 if (node == name) { 195 setName((Name) replacementNode); 196 return true; 197 } 198 return super.replace(node, replacementNode); 199 } 200 } 201