class ModuleRequiresDirective extends ModuleDirective implements NodeWithStaticModifier<ModuleRequiresDirective>, NodeWithName<ModuleRequiresDirective> {

    private NodeList<Modifier> modifiers;

    private Name name;

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

    @AllFieldsConstructor
    public ModuleRequiresDirective(NodeList<Modifier> modifiers, Name name) {
        this(null, modifiers, name);
    }

    /**
     * This constructor is used by the parser and is considered private.
     */
    @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
    public ModuleRequiresDirective(TokenRange tokenRange, NodeList<Modifier> modifiers, Name name) {
        super(tokenRange);
        setModifiers(modifiers);
        setName(name);
        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);
    }

    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
    public NodeList<Modifier> getModifiers() {
        return modifiers;
    }

    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
    public ModuleRequiresDirective setModifiers(final NodeList<Modifier> modifiers) {
        assertNotNull(modifiers);
        if (modifiers == this.modifiers) {
            return this;
        }
        notifyPropertyChange(ObservableProperty.MODIFIERS, this.modifiers, modifiers);
        if (this.modifiers != null)
            this.modifiers.setParentNode(null);
        this.modifiers = modifiers;
        setAsParentNodeOf(modifiers);
        return this;
    }

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

    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
    public ModuleRequiresDirective 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;
    }

    /*
     * A requires static directive indicates that a module is required at compile time, but is optional at runtime. 
     */
    public boolean isStatic() {
        return hasModifier(STATIC);
    }
    
    /*
     * Requires transitive—implied readability. 
     * To specify a dependency on another module and to ensure that other modules reading your module also read that dependency
     */
    public boolean isTransitive() {
        return hasModifier(TRANSITIVE);
    }

    public ModuleRequiresDirective setTransitive(boolean set) {
        return setModifier(TRANSITIVE, set);
    }

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

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

    @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 isModuleRequiresStmt() {
        return true;
    }

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

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

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

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

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

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

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

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

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