/****************************************************************************** * Copyright (c) 2002 - 2006 IBM Corporation. * 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: * IBM Corporation - initial API and implementation *****************************************************************************/ package com.ibm.wala.cast.tree.impl; import java.net.URL; import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position; public abstract class AbstractSourcePosition implements Position { @Override public boolean equals(Object o){ if (o instanceof Position) { Position p = (Position)o; return getFirstLine() == p.getFirstLine() && getLastLine() == p.getLastLine() && getFirstCol() == p.getFirstCol() && getLastCol() == p.getLastCol() && getFirstOffset() == p.getFirstOffset() && getLastOffset() == p.getLastOffset() && ( (getURL() != null)? getURL().equals(p.getURL()): p.getURL() == null); } else { return false; } } @Override public int hashCode() { return getFirstLine()*getLastLine()*getFirstCol()*getLastCol(); } @Override public int compareTo(Object o) { if (o instanceof Position) { Position p = (Position)o; if (getFirstLine() != p.getFirstLine()) { return getFirstLine() - p.getFirstLine(); } else if (getFirstCol() != p.getFirstCol()) { return getFirstCol() - p.getFirstCol(); } else if (getLastLine() != p.getLastLine()) { return getLastLine() - p.getLastLine(); } else { return getLastCol() - p.getLastCol(); } } else { return 0; } } @Override public String toString() { URL x = getURL(); String xf = x.toString(); if (xf.indexOf('/') >= 0) { xf = xf.substring(xf.lastIndexOf('/')+1); } String pos; if (getFirstCol() != -1) { pos = "["+getFirstLine()+":"+getFirstCol()+"] -> ["+getLastLine()+":"+getLastCol()+"]"; } else if (getFirstOffset() != -1) { pos = "[" + getFirstOffset() + "->" + getLastOffset() + "] (line " + getFirstLine() +")"; } else { pos = "(line " + getFirstLine() +")"; } return xf + " " + pos; } }