| /* | |
| * $Id: LuaStackTraceElement.java 39 2012-01-04 23:48:16Z andre@naef.com $ | |
| * See LICENSE.txt for license terms. | |
| */ | |
| package com.naef.jnlua; | |
| /** | |
| * Represents an execution point in a Lua stack trace. | |
| */ | |
| public class LuaStackTraceElement { | |
| // -- State | |
| private String functionName; | |
| private String sourceName; | |
| private int lineNumber; | |
| // -- Construction | |
| /** | |
| * Creates a new instance. | |
| * | |
| * @param sourceName | |
| * the source name, or <code>null</code> if unavailable | |
| * @param functionName | |
| * the function name, or <code>null</code> if unavailable | |
| * @param lineNumber | |
| * the line number, or a negative number if unavailable | |
| */ | |
| public LuaStackTraceElement(String functionName, String sourceName, | |
| int lineNumber) { | |
| this.functionName = functionName; | |
| this.sourceName = sourceName; | |
| this.lineNumber = lineNumber; | |
| } | |
| // -- Properties | |
| /** | |
| * Returns the name of the function containing the execution point | |
| * represented by this stack trace element. If there is no function name for | |
| * the execution point, the method returns <code>null</code>. | |
| * | |
| * @return the name of the function containing the execution point | |
| * represented by this stack trace element, or <code>null</code> | |
| */ | |
| public String getFunctionName() { | |
| return functionName; | |
| } | |
| /** | |
| * Returns the name of the source containing the execution point represented | |
| * by this this stack trace element. The source name is passed to the Lua | |
| * state when the Lua source code is loaded. If there is no source name for | |
| * the execution point, the method returns <code>null</code>. | |
| * | |
| * @return the source name, or <code>null</code> | |
| * @see LuaState#load(java.io.InputStream, String, String) | |
| * @see LuaState#load(String, String) | |
| */ | |
| public String getSourceName() { | |
| return sourceName; | |
| } | |
| /** | |
| * Returns the line number in the source containing the execution point | |
| * represented by this stack trace element. If there is no line number for | |
| * the execution point, the method returns a negative number. | |
| * | |
| * @return the line number, or a negative number if there is no line number | |
| */ | |
| public int getLineNumber() { | |
| return lineNumber; | |
| } | |
| // Object methods | |
| @Override | |
| public int hashCode() { | |
| int result = functionName != null ? functionName.hashCode() : 0; | |
| result = result * 65599 + sourceName != null ? sourceName.hashCode() | |
| : 0; | |
| result = result * 65599 + lineNumber; | |
| return result; | |
| } | |
| @Override | |
| public boolean equals(Object obj) { | |
| if (obj == this) { | |
| return true; | |
| } | |
| if (!(obj instanceof LuaStackTraceElement)) { | |
| return false; | |
| } | |
| LuaStackTraceElement other = (LuaStackTraceElement) obj; | |
| return safeEquals(functionName, other.functionName) | |
| && safeEquals(sourceName, other.sourceName) | |
| && lineNumber == other.lineNumber; | |
| } | |
| @Override | |
| public String toString() { | |
| StringBuffer sb = new StringBuffer(); | |
| if (functionName != null) { | |
| sb.append(functionName); | |
| } else { | |
| sb.append("(Unknown Function)"); | |
| } | |
| sb.append(" ("); | |
| if (sourceName != null) { | |
| sb.append(sourceName); | |
| if (lineNumber >= 0) { | |
| sb.append(':'); | |
| sb.append(lineNumber); | |
| } | |
| } else { | |
| sb.append("External Function"); | |
| } | |
| sb.append(')'); | |
| return sb.toString(); | |
| } | |
| // -- Private methods | |
| /** | |
| * Returns whether two objects are equal, handling <code>null</code>. | |
| */ | |
| private boolean safeEquals(Object a, Object b) { | |
| return a == b || a != null && a.equals(b); | |
| } | |
| } |