class ModuleProvidesDirective extends ModuleDirective implements NodeWithName<ModuleProvidesDirective> {

    private Name name;

    private NodeList<Name> with;

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

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

    /**
     * This constructor is used by the parser and is considered private.
     */
    @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
    public ModuleProvidesDirective(TokenRange tokenRange, Name name, NodeList<Name> with) {
        super(tokenRange);
        setName(name);
        setWith(with);
        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 < with.size(); i++) {
            if (with.get(i) == node) {
                with.remove(i);
                return true;
            }
        }
        return super.remove(node);
    }

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

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

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

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

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

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

    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
    public ModuleProvidesDirective setName(final Name name) {
        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;
    }

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

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

    @Override
    @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
    public boolean replace(Node node, Node replacementNode) {<FILL_FUNCTION_BODY>}

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

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

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

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

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

        if (node == null) {
            return false;
        }
        if (node == name) {
            setName((Name) replacementNode);
            return true;
        }
        for (int i = 0; i < with.size(); i++) {
            if (with.get(i) == node) {
                with.set(i, (Name) replacementNode);
                return true;
            }
        }
        return super.replace(node, replacementNode);
    
<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>