| 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; |
| } |
| } |