class ModuleExportsDirective extends ModuleDirective implements NodeWithName<ModuleExportsDirective> {

    private Name name;

    private NodeList<Name> moduleNames;

    public ModuleExportsDirective() {
        this(null, new Name(), new NodeList<>());
    }

    @AllFieldsConstructor
    public ModuleExportsDirective(Name name, NodeList<Name> moduleNames) {
        this(null, name, moduleNames);
    }

    /**
     * This constructor is used by the parser and is considered private.
     */
    @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
    public ModuleExportsDirective(TokenRange tokenRange, Name name, NodeList<Name> moduleNames) {
        super(tokenRange);
        setName(name);
        setModuleNames(moduleNames);
        customInitialization();
    }

    @Override
    @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
    public <R, A> R accept(final GenericVisitor<R, A> v, final A arg) {
        return v.visit(this, arg);
    }

    @Override
    @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
    public <A> void accept(final VoidVisitor<A> v, final A arg) {
        v.visit(this, arg);
    }

    @Override
    @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
    public boolean remove(Node node) {
        if (node == null) {
            return false;
        }
        for (int i = 0; i < moduleNames.size(); i++) {
            if (moduleNames.get(i) == node) {
                moduleNames.remove(i);
                return true;
            }
        }
        return super.remove(node);
    }

    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
    public Name getName() {
        return name;
    }

    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
    public ModuleExportsDirective setName(final Name name) {<FILL_FUNCTION_BODY>}

    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
    public NodeList<Name> getModuleNames() {
        return moduleNames;
    }

    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
    public ModuleExportsDirective setModuleNames(final NodeList<Name> moduleNames) {
        assertNotNull(moduleNames);
        if (moduleNames == this.moduleNames) {
            return this;
        }
        notifyPropertyChange(ObservableProperty.MODULE_NAMES, this.moduleNames, moduleNames);
        if (this.moduleNames != null)
            this.moduleNames.setParentNode(null);
        this.moduleNames = moduleNames;
        setAsParentNodeOf(moduleNames);
        return this;
    }

    @Override
    @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
    public ModuleExportsDirective clone() {
        return (ModuleExportsDirective) accept(new CloneVisitor(), null);
    }

    @Override
    @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
    public boolean replace(Node node, Node replacementNode) {
        if (node == null) {
            return false;
        }
        for (int i = 0; i < moduleNames.size(); i++) {
            if (moduleNames.get(i) == node) {
                moduleNames.set(i, (Name) replacementNode);
                return true;
            }
        }
        if (node == name) {
            setName((Name) replacementNode);
            return true;
        }
        return super.replace(node, replacementNode);
    }

    @Override
    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    public boolean isModuleExportsStmt() {
        return true;
    }

    @Override
    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    public ModuleExportsDirective asModuleExportsStmt() {
        return this;
    }

    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    public void ifModuleExportsStmt(Consumer<ModuleExportsDirective> action) {
        action.accept(this);
    }

    @Override
    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    public Optional<ModuleExportsDirective> toModuleExportsStmt() {
        return Optional.of(this);
    }

    public ModuleExportsDirective addModuleName(String name) {
        moduleNames.add(parseName(name));
        return this;
    }

    @Override
    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    public boolean isModuleExportsDirective() {
        return true;
    }

    @Override
    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    public ModuleExportsDirective asModuleExportsDirective() {
        return this;
    }

    @Override
    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    public Optional<ModuleExportsDirective> toModuleExportsDirective() {
        return Optional.of(this);
    }

    @Override
    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    public void ifModuleExportsDirective(Consumer<ModuleExportsDirective> action) {
        action.accept(this);
    }

    @Override
    @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
    public ModuleExportsDirectiveMetaModel getMetaModel() {
        return JavaParserMetaModel.moduleExportsDirectiveMetaModel;
    }
}

        assertNotNull(name);
        if (name == this.name) {
            return this;
        }
        notifyPropertyChange(ObservableProperty.NAME, this.name, name);
        if (this.name != null)
            this.name.setParentNode(null);
        this.name = name;
        setAsParentNodeOf(name);
        return this;
    
<methods>public void <init>() ,public void <init>(com.github.javaparser.TokenRange) ,public com.github.javaparser.ast.modules.ModuleExportsDirective asModuleExportsDirective() ,public com.github.javaparser.ast.modules.ModuleExportsDirective asModuleExportsStmt() ,public com.github.javaparser.ast.modules.ModuleOpensDirective asModuleOpensDirective() ,public com.github.javaparser.ast.modules.ModuleOpensDirective asModuleOpensStmt() ,public com.github.javaparser.ast.modules.ModuleProvidesDirective asModuleProvidesDirective() ,public com.github.javaparser.ast.modules.ModuleProvidesDirective asModuleProvidesStmt() ,public com.github.javaparser.ast.modules.ModuleRequiresDirective asModuleRequiresDirective() ,public com.github.javaparser.ast.modules.ModuleRequiresDirective asModuleRequiresStmt() ,public com.github.javaparser.ast.modules.ModuleUsesDirective asModuleUsesDirective() ,public com.github.javaparser.ast.modules.ModuleUsesDirective asModuleUsesStmt() ,public com.github.javaparser.ast.modules.ModuleDirective clone() ,public com.github.javaparser.metamodel.ModuleDirectiveMetaModel getMetaModel() ,public void ifModuleExportsDirective(Consumer<com.github.javaparser.ast.modules.ModuleExportsDirective>) ,public void ifModuleExportsStmt(Consumer<com.github.javaparser.ast.modules.ModuleExportsDirective>) ,public void ifModuleOpensDirective(Consumer<com.github.javaparser.ast.modules.ModuleOpensDirective>) ,public void ifModuleOpensStmt(Consumer<com.github.javaparser.ast.modules.ModuleOpensDirective>) ,public void ifModuleProvidesDirective(Consumer<com.github.javaparser.ast.modules.ModuleProvidesDirective>) ,public void ifModuleProvidesStmt(Consumer<com.github.javaparser.ast.modules.ModuleProvidesDirective>) ,public void ifModuleRequiresDirective(Consumer<com.github.javaparser.ast.modules.ModuleRequiresDirective>) ,public void ifModuleRequiresStmt(Consumer<com.github.javaparser.ast.modules.ModuleRequiresDirective>) ,public void ifModuleUsesDirective(Consumer<com.github.javaparser.ast.modules.ModuleUsesDirective>) ,public void ifModuleUsesStmt(Consumer<com.github.javaparser.ast.modules.ModuleUsesDirective>) ,public boolean isModuleExportsDirective() ,public boolean isModuleExportsStmt() ,public boolean isModuleOpensDirective() ,public boolean isModuleOpensStmt() ,public boolean isModuleProvidesDirective() ,public boolean isModuleProvidesStmt() ,public boolean isModuleRequiresDirective() ,public boolean isModuleRequiresStmt() ,public boolean isModuleUsesDirective() ,public boolean isModuleUsesStmt() ,public Optional<com.github.javaparser.ast.modules.ModuleExportsDirective> toModuleExportsDirective() ,public Optional<com.github.javaparser.ast.modules.ModuleExportsDirective> toModuleExportsStmt() ,public Optional<com.github.javaparser.ast.modules.ModuleOpensDirective> toModuleOpensDirective() ,public Optional<com.github.javaparser.ast.modules.ModuleOpensDirective> toModuleOpensStmt() ,public Optional<com.github.javaparser.ast.modules.ModuleProvidesDirective> toModuleProvidesDirective() ,public Optional<com.github.javaparser.ast.modules.ModuleProvidesDirective> toModuleProvidesStmt() ,public Optional<com.github.javaparser.ast.modules.ModuleRequiresDirective> toModuleRequiresDirective() ,public Optional<com.github.javaparser.ast.modules.ModuleRequiresDirective> toModuleRequiresStmt() ,public Optional<com.github.javaparser.ast.modules.ModuleUsesDirective> toModuleUsesDirective() ,public Optional<com.github.javaparser.ast.modules.ModuleUsesDirective> toModuleUsesStmt() <variables>