/*
Реализация среды исполнения языка программирования
Объектно-ориентированный продвинутый векторный транслятор
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 }
}