@Nullable protected AbstractTraceRegion findParentByURI(@Nullable AbstractTraceRegion region, URI uri) { while(region != null && !isAssociatedWith(region, uri)) { region = region.getParent(); } return region; }
public void writeTraceRegionTo(AbstractTraceRegion region, OutputStream stream) throws IOException { if (region != null && region.getParent() != null) throw new IllegalArgumentException("region must be the root"); doWriteTo(new IdentityStrategy(), region, stream); }
/** * Returns the hash code value for this region. The hash code * of a trace region <code>r</code> is defined to be: <pre> * r.getMyOffset() * ^ r.getMyLength() * ^ r.getAssociatedOffset() * ^ r.getAssociatedLength() * ^ (r.getParent() == null ? 0 : r.getParent().hashCode()) * </pre> * This ensures that <tt>r1.equals(r2)</tt> implies that * <tt>r1.hashCode()==r2.hashCode()</tt> for any two {@link AbstractTraceRegion} * <tt>r1</tt> and <tt>r2</tt>, as required by the general * contract of <tt>Object.hashCode</tt>. * * @return the hash code value for this trace region * @see Object#hashCode() * @see Object#equals(Object) * @see #equals(Object) */ @Override public int hashCode() { AbstractTraceRegion parent = getParent(); return getMyOffset() ^ getMyLength() ^ getAssociatedLocations().hashCode() ^ (parent == null ? 0 : parent.hashCode()); }
protected boolean isConsistentWithParent() { AbstractTraceRegion parent = getParent(); if (parent == null) return true; if (parent.getMyOffset() > getMyOffset()) return false; if (parent.getMyOffset() + parent.getMyLength() < getMyOffset() + getMyLength()) return false; if (parent.getMyLineNumber() > getMyLineNumber()) return false; if (parent.getMyEndLineNumber() < getMyEndLineNumber()) return false; List<AbstractTraceRegion> siblings = parent.getNestedRegions(); if (siblings.size() >= 2 && siblings.get(siblings.size() - 1) == this) { AbstractTraceRegion prev = siblings.get(siblings.size() - 2); if (prev.getMyEndLineNumber() > getMyLineNumber()) { return false; } } return true; }
return getMergedLocationInResource(right); } else { AbstractTraceRegion parent = left.getParent(); AbstractTraceRegion leftChild = left; while(parent != null) { parent = parent.getParent(); while(!parent.equals(rightChild.getParent())) { rightChild = rightChild.getParent(); if (rightChild == null) { return getMergedLocationInResource(leftChild);