StackTraceElement.avt

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

/*
    Исходный код среды исполнения ПВТ-ОО.

    Этот исходный код является частью проекта ПВТ-ОО.

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

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

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

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

package avt.lang;

public final class StackTraceElement(Object, Cloneable)
{
    private final int fldLineNumber;
    private final String fldSourceName;
    private final String fldMethodName;
    private final String fldTypeName;
    private final Class fldTypeRef;
    private final String fldRepresentation;

    public (Class typeRef, String methodName, String sourceName, int lineNumber) {
        if(typeRef == null) typeRef = Object.class;
        if(methodName == null) methodName = "";
        if(sourceName == null) sourceName = "";
        if(lineNumber < 0) lineNumber = 0;
        String typeName = typeRef.canonicalName;
        StringBuilder representation = new StringBuilder() + typeName + '.' + methodName;
        if(!sourceName.isEmpty())
        {
            representation + '(' + sourceName;
            if(lineNumber > 0) representation + ':' + lineNumber;
            representation + ')';
        }
        fldLineNumber = lineNumber;
        fldSourceName = sourceName;
        fldMethodName = methodName;
        fldTypeName = typeName;
        fldTypeRef = typeRef;
        fldRepresentation = representation.toString();
    }

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

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

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

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

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

    public String toString() { return fldRepresentation; }

    public StackTraceElement clone() { return new StackTraceElement(fldTypeRef, fldMethodName, fldSourceName, fldLineNumber); }

    public int lineNumber { read = fldLineNumber }

    public String sourceName { read = fldSourceName }

    public String methodName { read = fldMethodName }

    public Class typeRef { read = fldTypeRef }
}