class ModuleOpensDirective extends ModuleDirective implements NodeWithName<ModuleOpensDirective> {

    private Name name;

    private NodeList<Name> moduleNames;

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

    @AllFieldsConstructor
    public ModuleOpensDirective(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 ModuleOpensDirective(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 ModuleOpensDirective 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 ModuleOpensDirective 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 ModuleOpensDirective clone() {
        return (ModuleOpensDirective) 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 isModuleOpensStmt() {
        return true;
    }

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

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

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

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

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

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

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

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

        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>