DirectoryNode.java

net.minecraft.util.filefix.virtualfilesystem.DirectoryNode

信息

  • 全限定名:net.minecraft.util.filefix.virtualfilesystem.DirectoryNode
  • 类型:final class
  • 包:net.minecraft.util.filefix.virtualfilesystem
  • 源码路径:src/main/java/net/minecraft/util/filefix/virtualfilesystem/DirectoryNode.java
  • 起始行号:L12
  • 继承:Node
  • 职责:

    TODO

字段/常量

  • childNodes
    • 类型: Map<String,Node>
    • 修饰符: private final
    • 源码定位: L13
    • 说明:

      TODO

内部类/嵌套类型

构造器

DirectoryNode(CopyOnWriteFSPath path) @ L15

  • 构造器名:DirectoryNode
  • 源码定位:L15
  • 修饰符:package-private

参数:

  • path: CopyOnWriteFSPath

说明:

TODO

方法

下面的方法块按源码顺序生成。

public Collection<Node> children() @ L19

  • 方法名:children
  • 源码定位:L19
  • 返回类型:Collection
  • 修饰符:public

参数:

说明:

TODO

public void addChild(Node child) @ L23

  • 方法名:addChild
  • 源码定位:L23
  • 返回类型:void
  • 修饰符:public

参数:

  • child: Node

说明:

TODO

void removeChild(String name) @ L29

  • 方法名:removeChild
  • 源码定位:L29
  • 返回类型:void
  • 修饰符:package-private

参数:

  • name: String

说明:

TODO

public Node getChild(String name) @ L33

  • 方法名:getChild
  • 源码定位:L33
  • 返回类型:Node
  • 修饰符:public

参数:

  • name: String

说明:

TODO

public DirectoryNode directoryByPath(CopyOnWriteFSPath path) @ L37

  • 方法名:directoryByPath
  • 源码定位:L37
  • 返回类型:DirectoryNode
  • 修饰符:public

参数:

  • path: CopyOnWriteFSPath

说明:

TODO

public FileNode fileByPath(CopyOnWriteFSPath path) @ L45

  • 方法名:fileByPath
  • 源码定位:L45
  • 返回类型:FileNode
  • 修饰符:public

参数:

  • path: CopyOnWriteFSPath

说明:

TODO

public Node byPath(CopyOnWriteFSPath path) @ L53

  • 方法名:byPath
  • 源码定位:L53
  • 返回类型:Node
  • 修饰符:public

参数:

  • path: CopyOnWriteFSPath

说明:

TODO

public Node byPathOrNull(CopyOnWriteFSPath path) @ L62

  • 方法名:byPathOrNull
  • 源码定位:L62
  • 返回类型:Node
  • 修饰符:public

参数:

  • path: CopyOnWriteFSPath

说明:

TODO

代码

final class DirectoryNode extends Node {
    private final Map<String, Node> childNodes = new HashMap<>();
 
    DirectoryNode(CopyOnWriteFSPath path) {
        super(path);
    }
 
    public Collection<Node> children() {
        return Collections.unmodifiableCollection(this.childNodes.values());
    }
 
    public void addChild(Node child) {
        String name = Objects.requireNonNull(child.name());
        this.childNodes.put(name, child);
        child.setParent(this);
    }
 
    void removeChild(String name) {
        this.childNodes.remove(name);
    }
 
    public @Nullable Node getChild(String name) {
        return this.childNodes.get(name);
    }
 
    public DirectoryNode directoryByPath(CopyOnWriteFSPath path) throws CowFSNoSuchFileException, CowFSNotDirectoryException {
        if (this.byPath(path) instanceof DirectoryNode result) {
            return result;
        } else {
            throw new CowFSNotDirectoryException(path + " was a file, expected directory");
        }
    }
 
    public FileNode fileByPath(CopyOnWriteFSPath path) throws CowFSNoSuchFileException {
        if (this.byPathOrNull(path) instanceof FileNode result) {
            return result;
        } else {
            throw new CowFSNoSuchFileException(path.toString());
        }
    }
 
    public Node byPath(CopyOnWriteFSPath path) throws CowFSNoSuchFileException {
        Node node = this.byPathOrNull(path);
        if (node != null) {
            return node;
        } else {
            throw new CowFSNoSuchFileException(path.toString());
        }
    }
 
    public @Nullable Node byPathOrNull(CopyOnWriteFSPath path) {
        int nameCount = path.getNameCount();
        DirectoryNode directory = this;
 
        for (int i = 0; i < nameCount; i++) {
            String name = path.getName(i).toString();
            if (!name.equals(".")) {
                if (name.equals("..")) {
                    DirectoryNode parent = directory.parent;
                    if (parent != null) {
                        directory = parent;
                    }
                } else {
                    Node nextNode = directory.getChild(name);
                    if (!(nextNode instanceof DirectoryNode nextDirectory)) {
                        return i == nameCount - 1 ? nextNode : null;
                    }
 
                    directory = nextDirectory;
                }
            }
        }
 
        return directory;
    }
}

引用的其他类