StackTraceElement.avt

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

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

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

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

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

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

package avt.lang;

public final class StackTraceElement(Object, Cloneable)
{
    private final int fldLineNumber;
    private final Class fldType;
    private final String fldTypeName;
    private final String fldMethodName;
    private final String fldSourceFullFileName;
    private final String fldSourceSimpleFileName;
    private final String fldRepresentation;

    public (Class type, String methodName, String sourceFullFileName, int lineNumber) {
        if(type == null) type = Object.class;
        if(methodName == null) methodName = "";
        if(sourceFullFileName == null) sourceFullFileName = "";
        if(lineNumber < 0) lineNumber = 0;
        String typeName = type.canonicalName;
        StringBuilder representation = new StringBuilder() + typeName + '.' + methodName;
        if(!sourceFullFileName.isEmpty())
        {
            representation + '(' + sourceFullFileName;
            if(lineNumber > 0) representation + ':' + lineNumber;
            representation + ')';
        }
        fldLineNumber = lineNumber;
        fldType = type;
        fldTypeName = typeName;
        fldMethodName = methodName;
        fldSourceFullFileName = sourceFullFileName;
        fldSourceSimpleFileName = sourceFullFileName.substring(sourceFullFileName.lastIndexOf('/') + 1);
        fldRepresentation = representation.toString();
    }

    public boolean equals(Object anot) { return anot == this || anot instanceof StackTraceElement && ((StackTraceElement) anot).fldRepresentation.equals(fldRepresentation); }

    public int hashCode() { return fldRepresentation.hashCode(); }

    public long hashCodeAsLong() { return fldRepresentation.hashCodeAsLong(); }

    public long2 hashCodeAsLong2() { return fldRepresentation.hashCodeAsLong2(); }

    public long4 hashCodeAsLong4() { return new long4 { fldTypeName.hashCodeAsLong(), fldMethodName.hashCodeAsLong(), fldSourceFullFileName.hashCodeAsLong(), fldLineNumber }; }

    public long8 hashCodeAsLong8() { return Long8.create(fldTypeName.hashCodeAsLong2(), fldMethodName.hashCodeAsLong2(), fldSourceFullFileName.hashCodeAsLong2(), fldLineNumber); }

    public String toString() { return fldRepresentation; }

    public StackTraceElement clone() { return new StackTraceElement(fldType, fldMethodName, fldSourceFullFileName, fldLineNumber); }

    public int lineNumber { read = fldLineNumber }

    public Class type { read = fldType }

    public String methodName { read = fldMethodName }

    public String sourceFullFileName { read = fldSourceFullFileName }

    public String sourceSimpleFileName { read = fldSourceSimpleFileName }
}