package org.jruby.runtime.backtrace;

import org.jruby.lexer.yacc.ISourcePosition;

public final class BacktraceElement implements Cloneable {

    public static final BacktraceElement[] EMPTY_ARRAY = new BacktraceElement[0];

    public BacktraceElement() {
    }

    public BacktraceElement(String method, String filename, int line) {
        this.method = method;
        this.filename = filename;
        this.line = line;
    }

    @Override
    public String toString() {
        return method + " at " + filename + ':' + line;
    }

    @Override
    public BacktraceElement clone() {
        return new BacktraceElement(method, filename, line);
    }

    @Deprecated
    public static void update(BacktraceElement backtrace, String method, ISourcePosition position) {
        backtrace.method = method;
        backtrace.filename = position.getFile();
        backtrace.line = position.getLine();
    }

    public static void update(BacktraceElement backtrace, String method, String file, int line) {
        backtrace.method = method;
        backtrace.filename = file;
        backtrace.line = line;
    }

    public String getFilename() {
        return filename;
    }

    public void setFilename(String filename) {
        this.filename = filename;
    }

    public int getLine() {
        return line;
    }

    public void setLine(int line) {
        this.line = line;
    }

    public String getMethod() {
        return method;
    }

    public void setMethod(String method) {
        this.method = method;
    }
    public String method;
    public String filename;
    public int line;
}