/*
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 */

package org.apache.tools.ant;

import java.io.Serializable;
import java.util.Objects;

import org.apache.tools.ant.util.FileUtils;
import org.xml.sax.Locator;

Stores the location of a piece of text within a file (file name, line number and column number). Note that the column number is currently ignored.
/** * Stores the location of a piece of text within a file (file name, * line number and column number). Note that the column number is * currently ignored. * */
public class Location implements Serializable { private static final long serialVersionUID = 1L;
Name of the file.
/** Name of the file. */
private final String fileName;
Line number within the file.
/** Line number within the file. */
private final int lineNumber;
Column number within the file.
/** Column number within the file. */
private final int columnNumber;
Location to use when one is needed but no information is available
/** Location to use when one is needed but no information is available */
public static final Location UNKNOWN_LOCATION = new Location(); private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
Creates an "unknown" location.
/** * Creates an "unknown" location. */
private Location() { this(null, 0, 0); }
Creates a location consisting of a file name but no line number or column number.
Params:
  • fileName – The name of the file. May be null, in which case the location is equivalent to UNKNOWN_LOCATION.
/** * Creates a location consisting of a file name but no line number or * column number. * * @param fileName The name of the file. May be <code>null</code>, * in which case the location is equivalent to * {@link #UNKNOWN_LOCATION UNKNOWN_LOCATION}. */
public Location(String fileName) { this(fileName, 0, 0); }
Creates a location from the SAX locator using the system ID as the filename.
Params:
  • loc – Must not be null.
Since:Ant 1.6
/** * Creates a location from the SAX locator using the system ID as * the filename. * * @param loc Must not be <code>null</code>. * * @since Ant 1.6 */
public Location(Locator loc) { this(loc.getSystemId(), loc.getLineNumber(), loc.getColumnNumber()); }
Creates a location consisting of a file name, line number and column number.
Params:
  • fileName – The name of the file. May be null, in which case the location is equivalent to UNKNOWN_LOCATION.
  • lineNumber – Line number within the file. Use 0 for unknown positions within a file.
  • columnNumber – Column number within the line.
/** * Creates a location consisting of a file name, line number and * column number. * * @param fileName The name of the file. May be <code>null</code>, * in which case the location is equivalent to * {@link #UNKNOWN_LOCATION UNKNOWN_LOCATION}. * * @param lineNumber Line number within the file. Use 0 for unknown * positions within a file. * @param columnNumber Column number within the line. */
public Location(String fileName, int lineNumber, int columnNumber) { if (fileName != null && fileName.startsWith("file:")) { this.fileName = FILE_UTILS.fromURI(fileName); } else { this.fileName = fileName; } this.lineNumber = lineNumber; this.columnNumber = columnNumber; }
Returns:the filename portion of the location
Since:Ant 1.6
/** * @return the filename portion of the location * @since Ant 1.6 */
public String getFileName() { return fileName; }
Returns:the line number
Since:Ant 1.6
/** * @return the line number * @since Ant 1.6 */
public int getLineNumber() { return lineNumber; }
Returns:the column number
Since:Ant 1.7
/** * @return the column number * @since Ant 1.7 */
public int getColumnNumber() { return columnNumber; }
Returns the file name, line number, a colon and a trailing space. An error message can be appended easily. For unknown locations, an empty string is returned.
Returns:a String of the form "fileName:lineNumber: " if both file name and line number are known, "fileName: " if only the file name is known, and the empty string for unknown locations.
/** * Returns the file name, line number, a colon and a trailing space. * An error message can be appended easily. For unknown locations, an * empty string is returned. * * @return a String of the form <code>"fileName:lineNumber: "</code> * if both file name and line number are known, * <code>"fileName: "</code> if only the file name is known, * and the empty string for unknown locations. */
@Override public String toString() { StringBuilder buf = new StringBuilder(); if (fileName != null) { buf.append(fileName); if (lineNumber != 0) { buf.append(":"); buf.append(lineNumber); } buf.append(": "); } return buf.toString(); }
Equality operation.
Params:
  • other – the object to compare to.
Returns:true if the other object contains the same information as this object.
Since:Ant 1.6.3
/** * Equality operation. * @param other the object to compare to. * @return true if the other object contains the same information * as this object. * @since Ant 1.6.3 */
@Override public boolean equals(Object other) { return this == other || other != null && other.getClass() == getClass() && toString().equals(other.toString()); }
Hash operation.
Returns:a hash code value for this location.
Since:Ant 1.6.3
/** * Hash operation. * @return a hash code value for this location. * @since Ant 1.6.3 */
@Override public int hashCode() { return Objects.hash(fileName, lineNumber); } }