Library.avt

Переключить прокрутку окна
Загрузить этот исходный код

/*
    Компилятор языка программирования
    Объектно-ориентированный продвинутый векторный транслятор

    Copyright © 2021, 2024 Малик Разработчик

    Это свободная программа: вы можете перераспространять ее и/или изменять
    ее на условиях Стандартной общественной лицензии GNU в том виде,
    в каком она была опубликована Фондом свободного программного обеспечения;
    либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.

    Эта программа распространяется в надежде, что она будет полезной,
    но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
    или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Стандартной
    общественной лицензии GNU.

    Вы должны были получить копию Стандартной общественной лицензии GNU
    вместе с этой программой. Если это не так, см.
    <https://www.gnu.org/licenses/>.
*/

package ru.malik.elaborarer.avtoo.lang;

import avt.lang.array.*;
import platform.independent.filesystem.*;

public class Library(ProgrammeItem, Cloneable, Measureable, ObjectArray, AVTOOConstants)
{
    private final boolean fldApplication;
    private final ClassTypeArray fldClassesArray;
    private final SourceArray fldSourcesArray;
    private final FileSystem fldFileSystem;
    private final String fldDirectoryPath;

    public (Programme parentProgramme, FileSystem fileSystem, String directoryPath, boolean application): super(parentProgramme, AVTOOService.getObjectName(directoryPath)) {
        fldApplication = application;
        fldClassesArray = new ClassTypeArray();
        fldSourcesArray = new SourceArray();
        fldFileSystem = fileSystem != null ? fileSystem : Platform.instance.localFileSystem;
        fldDirectoryPath = directoryPath == null ? "/" : directoryPath.endsWith("/") ? directoryPath : directoryPath + "/";
    }

    public Source createSource(String relativePath, String type) {
        if(type == null)
        {
            throw new NullPointerException(String.format(avt.lang.package.getResourceString("null-pointer.argument"), new Object[] { "type" }));
        }
        Programme programme = parentProgramme;
        Source result = programme == null ? null : programme.newSource(this, relativePath, type);
        label0: if(result == null)
        {
            if(type.equals(TEXT_SOURCE))
            {
                result = new TextSource(this, relativePath);
                break label0;
            }
            if(type.equals(BINARY_SOURCE))
            {
                result = new BinarySource(this, relativePath);
                break label0;
            }
            throw new IllegalArgumentException(String.format(avt.lang.package.getResourceString("illegal-argument"), new Object[] { "type" }));
        }
        appendSource(result);
        return result;
    }

    public Package createPackage(int visibility, String specialCanonicalName, Source source, int declarationPosition, int documentationPosition) {
        if(source != null && fldSourcesArray.indexOf(source) < 0)
        {
            throw new IllegalArgumentException(package.getResourceString("library.source.not-owned-by"));
        }
        Programme programme = parentProgramme;
        Package result = programme == null ? null : programme.newPackage(this, visibility, specialCanonicalName, source, declarationPosition, documentationPosition);
        if(result == null) result = new Package(this, visibility, specialCanonicalName, source, declarationPosition, documentationPosition);
        appendChildItem(result);
        if(programme != null) programme.appendPackage(result);
        return result;
    }

    public final Package getChildItem(String specialCanonicalName) { return (Package) super.getChildItem(specialCanonicalName); }

    public final Package getChildItem(String specialCanonicalName, boolean ignoreCase) { return (Package) super.getChildItem(specialCanonicalName, ignoreCase); }

    public final Package getChildPackage(String specialCanonicalName) { return (Package) super.getChildItem(specialCanonicalName); }

    public final Package getChildPackage(String specialCanonicalName, boolean ignoreCase) { return (Package) super.getChildItem(specialCanonicalName, ignoreCase); }

    public final boolean application { read = fldApplication }

    public final ClassTypeArray classes { read = fldClassesArray }

    public final SourceArray sources { read = fldSourcesArray }

    public final FileSystem fileSystem { read = fldFileSystem }

    public final String directoryPath { read = fldDirectoryPath }

    public final Package operator [](int index) { return (Package) super.operator [](index); }

    protected void insertChildItem(ProgrammeItem item, int position) {
        if(item != null && !(item instanceof Package))
        {
            throw new IllegalArgumentException(package.getResourceString("adding-item.not-a-package"));
        }
        super.insertChildItem(item, position);
    }

    protected void appendClass(ClassType item) {
        if(item == null)
        {
            throw new NullPointerException(String.format(avt.lang.package.getResourceString("null-pointer.argument"), new Object[] { "item" }));
        }
        fldClassesArray.append(item);
    }

    protected void appendSource(Source item) {
        if(item == null)
        {
            throw new NullPointerException(String.format(avt.lang.package.getResourceString("null-pointer.argument"), new Object[] { "item" }));
        }
        fldSourcesArray.append(item);
    }
}