GP-0: Fix tests. Add "requireCanonical" parameter

This commit is contained in:
Dan 2023-02-16 09:21:28 -05:00
parent c198419b7e
commit ab97c34205
13 changed files with 43 additions and 33 deletions

View file

@ -283,7 +283,7 @@ public class DBTraceObjectBreakpointLocation
return object.getAncestorsRoot(getLifespan(), procMatcher)
.flatMap(proc -> proc.getSource(object)
.querySuccessorsInterface(getLifespan(),
TraceObjectThread.class))
TraceObjectThread.class, true))
.collect(Collectors.toSet());
}
}

View file

@ -226,9 +226,8 @@ public class DBTraceObjectBreakpointSpec
@Override
public Collection<? extends TraceObjectBreakpointLocation> getLocations() {
try (LockHold hold = object.getTrace().lockRead()) {
return object
.querySuccessorsInterface(getLifespan(), TraceObjectBreakpointLocation.class)
.collect(Collectors.toSet());
return object.querySuccessorsInterface(getLifespan(),
TraceObjectBreakpointLocation.class, true).collect(Collectors.toSet());
}
}

View file

@ -242,7 +242,8 @@ public enum DBTraceObjectRegisterSupport {
protected void onSpaceAddedCheckTransferToPlatformRegisters(TracePlatform platform,
TraceObject regContainer, TraceMemorySpace mem) {
for (TraceObjectValPath path : it(
regContainer.querySuccessorsTargetInterface(Lifespan.ALL, TargetRegister.class))) {
regContainer.querySuccessorsTargetInterface(Lifespan.ALL, TargetRegister.class,
true))) {
TraceObject registerObject =
path.getDestination(platform.getTrace().getObjectManager().getRootObject());
onSpaceAddedCheckTransferObjectToPlatformRegister(registerObject, platform, mem);
@ -437,7 +438,7 @@ public enum DBTraceObjectRegisterSupport {
public void onMappingAddedCheckTransferMemoryMapped(TraceObject root,
TraceGuestPlatformMappedRange mapped) {
for (TraceObjectValPath path : it(
root.querySuccessorsTargetInterface(Lifespan.ALL, TargetRegister.class))) {
root.querySuccessorsTargetInterface(Lifespan.ALL, TargetRegister.class, true))) {
TraceObject registerObject = path.getDestination(root);
onMappingAddedCheckTransferRegisterObjectMemoryMapped(registerObject, mapped);
}

View file

@ -240,7 +240,7 @@ public class DBTraceObjectModule implements TraceObjectModule, DBTraceObjectInte
@Override
public Collection<? extends TraceObjectSection> getSections() {
try (LockHold hold = object.getTrace().lockRead()) {
return object.querySuccessorsInterface(getLifespan(), TraceObjectSection.class)
return object.querySuccessorsInterface(getLifespan(), TraceObjectSection.class, true)
.collect(Collectors.toSet());
}
}

View file

@ -93,8 +93,7 @@ public class DBTraceObjectStack implements TraceObjectStack, DBTraceObjectInterf
@Override
public int getDepth() {
try (LockHold hold = object.getTrace().lockRead()) {
return object
.querySuccessorsInterface(computeSpan(), TraceObjectStackFrame.class)
return object.querySuccessorsInterface(computeSpan(), TraceObjectStackFrame.class, true)
.map(f -> f.getLevel())
.reduce(Integer::max)
.map(m -> m + 1)
@ -210,8 +209,7 @@ public class DBTraceObjectStack implements TraceObjectStack, DBTraceObjectInterf
}
protected Stream<TraceObjectStackFrame> doGetFrames(long snap) {
return object
.querySuccessorsInterface(Lifespan.at(snap), TraceObjectStackFrame.class)
return object.querySuccessorsInterface(Lifespan.at(snap), TraceObjectStackFrame.class, true)
.sorted(Comparator.comparing(f -> f.getLevel()));
}

View file

@ -876,16 +876,16 @@ public class DBTraceObject extends DBAnnotatedObject implements TraceObject {
@Override
public Stream<? extends TraceObjectValPath> querySuccessorsTargetInterface(Lifespan span,
Class<? extends TargetObject> targetIf) {
PathMatcher matcher = getTargetSchema().searchFor(targetIf, true);
Class<? extends TargetObject> targetIf, boolean requireCanonical) {
PathMatcher matcher = getTargetSchema().searchFor(targetIf, requireCanonical);
return getSuccessors(span, matcher).filter(p -> isActuallyInterface(p, targetIf));
}
@Override
public <I extends TraceObjectInterface> Stream<I> querySuccessorsInterface(Lifespan span,
Class<I> ifClass) {
return querySuccessorsTargetInterface(span, TraceObjectInterfaceUtils.toTargetIf(ifClass))
.map(p -> p.getDestination(this).queryInterface(ifClass));
Class<I> ifClass, boolean requireCanonical) {
return querySuccessorsTargetInterface(span, TraceObjectInterfaceUtils.toTargetIf(ifClass),
requireCanonical).map(p -> p.getDestination(this).queryInterface(ifClass));
}
protected void doDelete() {

View file

@ -466,10 +466,11 @@ public interface TraceObject extends TraceUniqueObject {
*
* @param span the span which the found paths must intersect
* @param targetIf the target interface class
* @param requireCanonical if the objects must be found within their canonical container
* @return the stream of found paths to values
*/
Stream<? extends TraceObjectValPath> querySuccessorsTargetInterface(Lifespan span,
Class<? extends TargetObject> targetIf);
Class<? extends TargetObject> targetIf, boolean requireCanonical);
/**
* Search for successors providing the given interface and retrieve those interfaces
@ -477,10 +478,11 @@ public interface TraceObject extends TraceUniqueObject {
* @param <I> the interface type
* @param span the span which the found objects must intersect
* @param ifClass the interface class
* @param requireCanonical if the objects must be found within their canonical container
* @return the stream of interfaces
*/
<I extends TraceObjectInterface> Stream<I> querySuccessorsInterface(Lifespan span,
Class<I> ifClass);
Class<I> ifClass, boolean requireCanonical);
/**
* Delete this object along with parent and child value entries referring to it