Home | History | Annotate | Download | only in modules
      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