blob: e765d705b5c1d98c744deb4a2100b155b892a19c [file] [log] [blame]
package com.google.dart.engine.internal.index.file;
import com.google.dart.engine.context.AnalysisContext;
import com.google.dart.engine.element.Element;
import com.google.dart.engine.index.Location;
/**
* A container with information about a {@link Location}.
*
* @coverage dart.engine.index
*/
public class LocationData {
final int elementId;
final int offset;
final int length;
public LocationData(ElementCodec elementCodec, Location location) {
Element element = location.getElement();
this.elementId = elementCodec.encode(element, false);
this.offset = location.getOffset();
this.length = location.getLength();
}
public LocationData(int elementId, int offset, int length) {
this.elementId = elementId;
this.offset = offset;
this.length = length;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof LocationData)) {
return false;
}
LocationData other = (LocationData) obj;
return other.elementId == elementId && other.offset == offset && other.length == length;
}
/**
* Returns a {@link Location} that is represented by this {@link LocationData}.
*/
public Location getLocation(AnalysisContext context, ElementCodec elementCodec) {
Element element = elementCodec.decode(context, elementId);
if (element == null) {
return null;
}
return new Location(element, offset, length);
}
@Override
public int hashCode() {
return 31 * (31 * elementId + offset) + length;
}
}