/******************************************************************************* * Copyright (c) 2013 Ericsson * * All rights reserved. This program and the accompanying materials are made * available under the terms of the Eclipse Public License v1.0 which * accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Bernd Hufmann - Initial API and implementation *******************************************************************************/ package fr.inria.linuxtools.tmf.core.event.lookup; /** * TMF call site information for source code lookup. * * @since 2.0 * @author Bernd Hufmann */ public class TmfCallsite implements ITmfCallsite { // ------------------------------------------------------------------------ // Attributes // ------------------------------------------------------------------------ /** The file name string. */ final private String fFileName; /** The function name. */ final private String fFunctionName; /** The line number. */ final private long fLineNumber; // ------------------------------------------------------------------------ // Constructors // ------------------------------------------------------------------------ /** * Default constructor. * * @param fileName * - a file name * @param functionName * - a function name * @param lineNumber * - a line number */ public TmfCallsite(String fileName, String functionName, long lineNumber) { if (fileName == null) { throw new IllegalArgumentException(); } fFileName = fileName; fFunctionName = functionName; fLineNumber = lineNumber; } /** * Copy Constructor. * * @param other * - An other call site implementation */ public TmfCallsite(ITmfCallsite other) { if ((other == null) || (other.getFileName() == null)) { throw new IllegalArgumentException(); } fFileName = other.getFileName(); fFunctionName = other.getFunctionName(); fLineNumber = other.getLineNumber(); } // ------------------------------------------------------------------------ // Accessors // ------------------------------------------------------------------------ @Override public String getFileName() { return fFileName; } @Override public String getFunctionName() { return fFunctionName; } @Override public long getLineNumber() { return fLineNumber; } // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + fFileName.hashCode(); // fFileName cannot be null result = prime * result + ((fFunctionName == null) ? 0 : fFunctionName.hashCode()); result = prime * result + (int) (fLineNumber ^ (fLineNumber >>> 32)); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } TmfCallsite other = (TmfCallsite) obj; // fFileName cannot be null! if (!fFileName.equals(other.fFileName)) { return false; } if (fFunctionName == null) { if (other.fFunctionName != null) { return false; } } else if (!fFunctionName.equals(other.fFunctionName)) { return false; } if (fLineNumber != other.fLineNumber) { return false; } return true; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append(fFileName).append(':'); builder.append(Long.toString(fLineNumber)); if (fFunctionName != null) { builder.append(' '); builder.append(fFunctionName).append("()"); //$NON-NLS-1$ } return builder.toString(); } }